Skip to main content
POST
cURL
Creates an off-ramp transaction on behalf of a verified user. This converts crypto to fiat and initiates a withdrawal to the user’s registered bank account.
For staging transaction testing, use the Mock Testing Guide.

Idempotency

Retry safely without creating duplicate transactions: pass an optional Idempotency-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 quoteId OR (fiatCurrency + blockchainSymbol + tokenSymbol). When a quote is used, currency/token fields are inherited from the quote.
  • Provide either fiatAmount or cryptoAmount, not both.
  • Provide either 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.

Bank Account Requirements by Country


Integration Flow

3

Get a quote (optional)

POST /api/partner/v2/quotes — locks the exchange rate
4

Create off-ramp transaction

POST /api/partner/v2/off-ramp (this endpoint) — returns a destinationWalletAddress
5

User sends crypto

The user sends crypto to the destinationWalletAddress from the response.
6

Execute the off-ramp

POST /api/partner/v2/off-ramp/execute — triggers bank payout after crypto is received

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 receiverId to send fiat payouts to receivers on behalf of a user.

Error Codes

Common Errors

Verified User Errors

Endpoint-Specific Errors

Authorizations

partner-api-key
string
header
required

API key for the affiliated partner performing the request.

Headers

Idempotency-Key
string

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.

Required string length: 16 - 128
Example:

"550e8400-e29b-41d4-a716-446655440000"

Body

application/json
userId
string
required

Identifier for the user who's submitting the off-ramp order

Example:

"8374f327-38bd-4b0b-b8a7-2524599eb903"

userBankInformation
object

Inline bank account details for the off-ramp.

quoteId
string

Identifier for the quote to be used for the transaction.

fiatAmount
number

Amount of fiat currency to be received in conversion.

cryptoAmount
number

Amount of crypto currency to be converted to fiat currency.

fiatCurrency
enum<string>

Identifier for the fiat currency which the user will rec. Required when quoteId is not provided.

Available options:
MXN,
DOP,
USD,
EUR
blockchainSymbol
enum<string>

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.

Available options:
POL,
SOL,
ETH,
BSC
tokenSymbol
enum<string>

Identifier for the token from which the conversion will be made. Required when quoteId is not provided.

Available options:
USDC,
USDT
premiumSpread
number

Spread percentage to be applied to the exchange rate

receiverId
string

Identifier for a previously created receiver (via /api/partner/v2/receivers).

Response

Off-ramp transaction created successfully. Returns the transaction details, including its id and current status.

success
boolean
Example:

true

data
object