Create Off-Ramp
Idempotency
Retry safely without creating duplicate transactions: pass an optionalIdempotency-Key header (UUIDv4). A retry with the same key and body replays the original response. See the Idempotency Guide for the full contract.
Field Relationships
- Provide
quoteIdOR (fiatCurrency+blockchainSymbol+tokenSymbol). When a quote is used, currency/token fields are inherited from the quote. - Provide either
fiatAmountorcryptoAmount, not both. - Provide either
userBankInformation(inline bank details) oruserBankInformationId(reference to a saved bank account). receiverIdis optional — when provided, the off-ramp is processed for that receiver instead of the user directly.
Bank Account Requirements by Country
Integration Flow
Create a user
Complete KYC verification
Get a quote (optional)
Create off-ramp transaction
POST /api/partner/v2/off-ramp (this endpoint) — returns a destinationWalletAddressUser sends crypto
destinationWalletAddress from the response.Execute the off-ramp
Important Notes
- User must be KYC-verified before creating transactions.
- Mexico bank verification: First-time bank accounts trigger a penny test to verify the KYC’d user is the account owner. If verification fails, the transaction is cancelled.
- CLABE validation (Mexico): Must match
^\d{18}$. Consider using clabe-validator. - Amount limits: Fiat and crypto amounts must fall within the min/max thresholds defined in your partner agreement.
- Destination wallet: The response includes a unique
destinationWalletAddress— the user must send crypto to this address.
Use Cases
- User Payout: Convert crypto to fiat and withdraw to a verified bank account.
- B2C Integration: Let individual users off-ramp from within your app.
- Third-Party Payments: Use
receiverIdto send fiat payouts to receivers on behalf of a user.
Error Codes
Common Errors
Verified User Errors
Endpoint-Specific Errors
Authorizations
API key for the affiliated partner performing the request.
Headers
Optional. Unique key (UUIDv4 recommended) to safely retry this request without creating a duplicate transaction. A retry with the same key and body replays the original response. See /docs/idempotency.
16 - 128"550e8400-e29b-41d4-a716-446655440000"
Body
Identifier for the user who's submitting the off-ramp order
"8374f327-38bd-4b0b-b8a7-2524599eb903"
Inline bank account details for the off-ramp.
Identifier for the quote to be used for the transaction.
Amount of fiat currency to be received in conversion.
Amount of crypto currency to be converted to fiat currency.
Identifier for the fiat currency which the user will rec. Required when quoteId is not provided.
MXN, DOP, USD, EUR Identifier for the blockchain to token from which the conversion will be made. Required when quoteId is not provided. BSC is only available for transactions over 50,000 MXN.
POL, SOL, ETH, BSC Identifier for the token from which the conversion will be made. Required when quoteId is not provided.
USDC, USDT Spread percentage to be applied to the exchange rate
Identifier for a previously created receiver (via /api/partner/v2/receivers).