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 itsaccountIdinto 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.Related
Webhooks
Track payment status changes without polling.
API Reference
Off-ramp quotes, off-ramps, and bank account endpoints.