Stablecoin off-ramps
What it is
Stablecoin off-ramps turn a customer’s stablecoins into local currency in their bank account or on their card, a step also called a crypto-to-fiat cash-out.
Payment platforms, remittance apps and neobanks run them so customers can spend what they hold, and every payout has to tie back to a deposit that really arrived and matches the cash-out request.
Goldsky watches each cash-out address and tells your backend when the stablecoins land, while identity checks, matching the deposit to the request and the fiat payout stay with you and your providers.
Who it’s for
Payment platforms, remittance apps, neobanks and stablecoin payment providers that let customers cash out to a bank account or card.
How a stablecoin off-ramp works
The diagram follows one cash-out from the customer’s request in your app to local currency in their bank account or on their card, and shows who does each step. Your setup may differ.
Take the cash-out request
Every deposit has to be tied to a request that says how much the customer wants and where the money goes.
Your app records the amount, the currency and the bank account or card to pay, under a request ID. Without that record, stablecoins that arrive can’t be matched to a payout, and someone has to sort them out by hand.
Confirm the customer’s identity
Firms that pay out to bank accounts usually have to know who the customer is before any fiat leaves.
Your identity verification provider checks the customer against your onboarding policy before the request goes ahead. If a deposit arrives from someone who hasn’t passed the check, you have to decide what to do with funds you can’t pay out.
Issue a deposit address
The customer needs an address on the chain to send the stablecoins to, and each address tells you whose cash-out a deposit belongs to.
Your off-ramp provider creates the address and ties it to the customer’s bank account or card, so whatever lands there is converted and paid out. The address has to reach your systems as soon as it exists, because that’s the address you watch.
Watch the deposit address
Handled by Goldsky TurboYou only spot deposits to addresses you’re watching, so every new cash-out address has to go on the list.
The list has to update the moment an address is issued, without restarting anything. A customer who pays in seconds can otherwise send funds to an address nobody is watching yet.
With Goldsky, the list of cash-out addresses lives in a Turbo Pipelines dynamic table, which is a Postgres table you insert into. Add an address and the running pipeline starts matching it, with no redeploy.
Learn about dynamic tables (opens in a new tab)Receive the customer’s stablecoins
The customer sends stablecoins from their own wallet or an exchange to the deposit address.
The transfer is recorded in a block on the chain. For a short time the newest blocks can still be rewritten, so a deposit seen once isn’t final yet.
Spot the deposit
Handled by Goldsky TurboYour payout can only start once you know the stablecoins arrived.
Every transfer into a watched address has to be caught with its address, token, amount and transaction. Checking addresses one at a time gets slower as cash-outs grow, and a missed deposit leaves a customer waiting for money they already sent.
A Turbo Pipelines SQL transform keeps only transfers whose
Filter with dynamic_table_check (opens in a new tab)recipientis on the list, usingdynamic_table_check(), and passes each one on with its transaction hash and block.Send the deposit to your backend
Handled by Goldsky TurboYour cash-out service needs a signal it can act on the moment a deposit lands.
Delivery can repeat after a network error or a restart, so each deposit carries a stable ID that your service checks before it records the deposit. Without that check, one deposit can be counted twice.
Goldsky’s webhook sink posts each matching transfer to your endpoint as its own request and retries until your endpoint accepts it. Your endpoint dedupes on the transfer
Set up the webhook sink (opens in a new tab)id.Handle deposits undone by a reorg
Handled by Goldsky TurboSometimes the chain replaces its most recent blocks (a reorg), and a deposit you were told about can disappear.
A webhook fires when the deposit is first seen, not once it’s final, so your service waits until the deposit has enough blocks on top of it, by a rule you set for each chain, before it marks the cash-out funded. A cash-out marked funded against a deposit that later vanishes shows money that never arrived.
When a reorg hits, Turbo Pipelines sends the correction through the pipeline like any other record. Your webhook endpoint receives it and reverses the deposit on its side.
How reorgs reach your sinks (opens in a new tab)Match the deposit to the cash-out
A deposit only becomes a cash-out once you know which request it pays for and whether the amount is right.
Your system looks up the request by deposit address and checks the amount against it. Short payments, overpayments and a second deposit to the same address need a rule before launch, or each one becomes a support ticket.
Pay out the local currency
The cash-out is done when the money reaches the customer’s bank account or card.
Your off-ramp provider converts the stablecoins that land at the address and sends the local currency over the bank or card network. Record each payout against its request, so you can tell the customer where the money is and spot a payout that failed.
Related jobs
Start the cash-out in your app
The user chooses how much to cash out and where to collect it.
Your app opens the cash-out provider’s flow, where the user enters their details and passes the provider’s identity check. Record the provider’s transaction ID with the user’s request, because every later status refers to it.
Get the deposit address and memo
The provider tells your app where to send the stablecoins and how to mark them as this cash-out.
On chains with memos the provider gives one address and a memo for each cash-out; elsewhere it can give an address for each one. Stablecoins sent without the memo can’t be matched to the cash-out automatically.
Send the stablecoins
The user’s wallet sends the amount to the provider’s address, with the memo.
The transfer lands in a block on the chain. Until it’s final, the provider won’t confirm the deposit.
Record each cash-out deposit
Handled by Goldsky TurboYour app needs to know the stablecoins reached the provider before it tells the user to go and collect.
Every transfer to the provider’s deposit address is kept with its amount, transaction and memo. On Stellar the memo sits on the transaction, not on the transfer, so the two are paired on the transaction hash.
Turbo Pipelines can stream Stellar’s
Stream Stellar transfers (opens in a new tab)transfersdataset, filtered to the provider’s account, and thetransactionsdataset that carries each memo into your database, where you pair them. On EVM chains, a dynamic table of cash-out addresses does the same job.Issue the pickup reference
The user collects the cash by quoting a reference at an agent location.
Once the provider has the deposit, it issues a reference number, and the user shows it with their ID at the agent to collect cash. A reference shown before the deposit is confirmed sends the user on a wasted trip.
Close the cash-out
The cash-out is done when the provider reports the cash collected.
Your app reads the provider’s status and marks the cash-out complete against its deposit. A cash-out never collected needs the provider’s refund rule, because the stablecoins have already left the user’s wallet.
What you control
- Your team
- Take the cash-out request
- Match the deposit to the cash-out
- Your providers
- KYC/KYB provider
- Bank or on/off-ramp
Security and deployment
- SOC 2 Type IIIndependently audited security controls.
- Dedicated infrastructureSingle-tenant options for production workloads.
- Data residencyCloud, on-premises or co-located.
More use cases that detect deposits
- Deposit detectionSpot incoming stablecoin transfers to your customers’ wallets and credit them once confirmed.
- Stablecoin wallet top-upsCredit a user’s app balance when a stablecoin transfer to their embedded wallet confirms.
- Stablecoin deposits to business bank accountsDetect stablecoin deposits into business bank and fintech accounts and post them to the account alongside fiat.
- Crypto exchange deposit detectionDetect deposits to each exchange user’s addresses, wait for enough confirmations and credit the user once.
- Accept stablecoin paymentsConfirm stablecoin payments from shoppers and mark the order paid.
- Authorize and capture stablecoin paymentsHold a buyer’s stablecoins in an escrow contract at checkout, capture them to the merchant as orders ship, void what can’t be filled and refund after capture.
- Confirm x402 and agent stablecoin paymentsConfirm stablecoin payments that AI agents make, often per request, and keep each agent within its spending limits.
- Stablecoin subscription paymentsConfirm each scheduled stablecoin charge onchain and mark the subscription paid.
Use cases built the same way
- Stablecoin card programsDetect stablecoin top-ups to the wallets that back a card program so spend limits update.
- Stablecoin settlement for card networksSettle card-network obligations with issuers and acquirers in stablecoins across chains.
- Intercompany settlement in stablecoinsSettle what group entities owe each other in stablecoins, and land each transfer beside the intercompany ledger.
- Post onchain transfers to your ledgerPost each confirmed onchain transfer to the fintech’s own ledger, corrected for reorgs.
Run a stablecoin off-ramp with Goldsky
We’ll map it to your systems and show you what Goldsky runs, so your team builds the product, not the pipelines underneath it.