quoteId OR (fiatCurrency + blockchainSymbol + tokenSymbol). When a quote is used, currency/token fields are inherited from the quote.fiatAmount or cryptoAmount, not both.userBankInformation (inline bank details) or userBankInformationId (reference to a saved bank account).receiverId is optional — when provided, the off-ramp is processed for that receiver instead of the user directly.| Country | Required Fields |
|---|---|
| MX | accountIdentifier (18-digit CLABE) |
| DO | accountIdentifier, bankName, accountType, documentIdentifier, documentType |
| US | accountIdentifier, bankName, routingNumber, accountHolder, address |
| SEPA | iban, bic, bankName, accountHolder |
Create a user
Complete KYC verification
Get a quote (optional)
Create off-ramp transaction
POST /api/partner/v2/off-ramp (this endpoint) — returns a destinationWalletAddressExecute the off-ramp
^\d{18}$. Consider using clabe-validator.destinationWalletAddress — the user must send crypto to this address.receiverId to send fiat payouts to receivers on behalf of a user.| HTTP Status | Code | Message |
|---|---|---|
| 401 | UNAUTHORIZED | ”API Key is missing” |
| 401 | UNAUTHORIZED | ”Invalid API Key format” |
| 401 | UNAUTHORIZED | ”Invalid API Key” |
| 403 | INVALID_PARTNER_FLOW | ”The partner has an invalid flow.” |
| HTTP Status | Code | Message |
|---|---|---|
| 400 | REQUIRED_USER_ID_ERROR | ”This endpoint requires a user id to be provided” |
| 403 | USER_NOT_VERIFIED_ERROR | ”User is not allowed to perform the operations because has not completed the KYC verification.” |
| HTTP Status | Code | Message |
|---|---|---|
| 400 | INVALID_USER_INPUT_ERROR | ”Invalid User Input” |
| 400 | BAD_REQUEST | ”Either quoteId or fiatCurrency, blockchainSymbol, tokenSymbol, and at least one of fiatAmount or cryptoAmount must be provided” |
| 400 | BAD_REQUEST | ”Fiat currency is disabled or does not exist” |
| 400 | BAD_REQUEST | ”This blockchain and token combination is disabled or does not exist” |
| 400 | QUOTE_EXPIRED | ”Quote has expired” |
| 400 | BAD_REQUEST | ”Quote is not valid for OFF_RAMP” |
| 400 | INVALID_TOKEN_OPERATION_ERROR | ”Token cannot be operated as OTC, only stable coins are allowed” |
| 400 | BAD_REQUEST | ”Either userBankInformationId or userBankInformation must be provided” |
| 400 | BAD_REQUEST | ”The receiver user account is not verified” |
| 400 | INVALID_FIAT_AMOUNT_ERROR | ”Fiat amount is outside of the allowed range for OFF_RAMP. Should be between and “ |
| 400 | INVALID_TOKEN_AMOUNT_ERROR | ”Token amount is outside of the allowed range for OFF_RAMP. Should be between and “ |
| 403 | RECEIVER_CANNOT_INITIATE_TRANSACTION | ”Receiver accounts cannot initiate transactions directly.” |
| 403 | RECEIVER_USER_MISMATCH | ”The receiver does not belong to the specified user.” |
| 403 | USER_BANK_INFO_ACCESS_DENIED | ”The bank information does not belong to the specified user.” |
| 403 | USER_BANK_INFO_ACCESS_DENIED | ”The bank information belongs to a different partner.” |
| 404 | RECEIVER_NOT_FOUND | ”Receiver not found.” |
| 404 | USER_BANK_INFO_NOT_FOUND | ”User bank information not found.” |
Api key for the affiliated partner that is performing the request
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.
POL, SOL, BASE, ARB, BSC, OP, WLD, STK, ETH, MTN, CORE Identifier for the token from which the conversion will be made. Required when quoteId is not provided.
USDC, USDT, MXNe, SOL, ETH, wBTC, cbBTC, PYSUD, POL, BNB, WLD, STK, USDY, CORE, USDC.e, wUSDL, CoreBTC, MATIC, USDbC Spread percentage to be applied to the exchange rate
Identifier for a previously created receiver (via /api/partner/v2/receivers).