Skip to main content

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.

Your business, step 1: Customer starts a cash-outAmount and bank account chosen in your app
Your business, step 2: KYC/KYB providerConfirm KYCOnly verified customers can cash out
Your business, step 3: Bank or on/off-rampIssue a deposit addressConverts what lands there to fiat
Goldsky, step 4: TurboWatch the addressAdded to the watch list, no redeploy
Blockchains, step 5: Customer sends stablecoinsThe transfer lands at the address
Goldsky, step 6: TurboSpot the transferCaught as it lands at a watched address
Your business, step 9: Match it to the cash-outAmount checked against the request
Goldsky, steps 7–8: TurboSend a webhookOne call per transfer
Your business, step 10: Bank or on/off-rampPay out fiatLocal currency reaches their bank or card
  • Goldsky
  • Your provider

How to run a stablecoin off-ramp

A pipeline that Goldsky runs checks every stablecoin transfer against your list of cash-out addresses and sends your backend a webhook for each deposit that lands. Your off-ramp provider issues the addresses and pays out the local currency when stablecoins arrive; your system matches each deposit to its cash-out request.

What you’ll need

  • Goldsky Turbo
  • An identity verification provider
  • An off-ramp provider that issues deposit addresses and pays bank accounts or cards in local currency
  • A database for the list of cash-out addresses
  • A webhook endpoint in your backend
  1. 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.

  2. 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.

  3. 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.

  4. Watch the deposit address

    Handled by Goldsky Turbo

    You 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)
  5. 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.

  6. Spot the deposit

    Handled by Goldsky Turbo

    Your 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 recipient is on the list, using dynamic_table_check(), and passes each one on with its transaction hash and block.

    Filter with dynamic_table_check (opens in a new tab)
  7. Send the deposit to your backend

    Handled by Goldsky Turbo

    Your 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 id.

    Set up the webhook sink (opens in a new tab)
  8. Handle deposits undone by a reorg

    Handled by Goldsky Turbo

    Sometimes 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)
  9. 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.

  10. 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.

Run retail stablecoin cash-outs by streaming deposits to your database

Let a user send stablecoins from a wallet or exchange and collect cash at a money transfer agent, with each deposit tied to its pickup reference.

A pipeline that Goldsky runs records each stablecoin transfer your users send to the cash-out provider, with the memo or address that identifies the cash-out, in your database. The provider runs the identity check, issues the pickup reference and pays the cash.

What you’ll need

  • Goldsky Turbo
  • A cash-out provider with agent locations
  • A wallet or exchange app your users send from
  • A database for cash-out records
  1. 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.

  2. 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.

  3. 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.

  4. Record each cash-out deposit

    Handled by Goldsky Turbo

    Your 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 transfers dataset, filtered to the provider’s account, and the transactions dataset 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.

    Stream Stellar transfers (opens in a new tab)
  5. 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.

  6. 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.

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.

© Endless Sky Inc. All rights reserved.

PrivacyTermsSecurity

System status