Skip to main content
An off-ramp converts stablecoins, or other supported tokens, to fiat and settles it to one of your user’s destination accounts, such as a bank account. The flow is quote based: you request an off-ramp quote, the user sends the crypto on-chain to fulfill it, and Spritz settles fiat to the destination.

Before you start

  • Authenticate as an integrator. See Authentication.
  • Have a verified user. New users complete identity verification before they can move money (see the Quickstart).
  • Have a destination account to pay out to, for example a bank account added with POST /v1/bank-accounts. You’ll pass its accountId into the quote.
1

Create a quote

Tell Spritz the destination account, the amount, the rail to settle over, and the chain and token the user will pay with.
The quote spells out exactly what the user pays, what the destination receives, and the fees, along with where to send the crypto.
amountMode controls how amount is read. output means the destination receives exactly that amount and fees are added on top. input means the amount is the total the user pays, and the destination receives the remainder after fees.
2

Choose the rail and chain

rail is how fiat settles to the destination. Supported rails include ach_standard, ach_same_day, rtp, wire, eft, sepa, faster_payments, push_to_card, bill_pay, and card_deposit. Pick the one your destination account supports. See What we support for rails and currencies by region.chain is the blockchain the user pays from (ethereum, polygon, base, arbitrum, optimism, avalanche, solana, tron, and more). Off-ramps aren’t limited to stablecoins; any supported token on the chain works. On EVM chains, pass tokenAddress. Different tokens have different fee tiers, and stablecoins like USDC are usually cheapest. If you omit it, the chain’s native token is assumed.
3

Get the on-chain transaction

Exchange the quote for ready-to-sign transaction parameters.
The response carries the parameters to execute the payment on-chain. The exact shape depends on the chain (contract address and calldata for EVM, a serialized transaction for Solana). See the API Reference for the per-chain fields.
4

Execute from the user's wallet

Sign and submit the transaction from the user’s wallet to send the crypto. Quotes are time-bound, so fulfill promptly. If a quote expires, create a new one.
5

Track settlement

Once the on-chain payment confirms, Spritz settles fiat to the destination. Track progress by polling the off-ramp, or react to webhooks.
The payment.* events (payment.created, payment.updated, payment.completed, payment.refunded) fire across all of your users on your existing webhook subscription, so you don’t register anything per off-ramp.

Webhooks

Track payment status changes without polling.

API Reference

Off-ramp quotes, off-ramps, and bank account endpoints.