cURL
Cross-Ramp
/api/partner/v2/cross-ramp
POST
cURL
Creates a cross-ramp transaction on behalf of a verified user. This converts one fiat currency to another (e.g., MXN to USD) and initiates the transfer to the target bank account.
For staging transaction testing, use the Mock Testing Guide.
Field Relationships
- Provide either
sourceAmountortargetAmount, not both. - Provide either
targetBankAccount(inline bank details) ortargetBankAccountId(reference to a saved bank account). sourceCurrencyandtargetCurrencymust differ.targetCurrencymust match the currency of the target bank account’s country.receiverIdis optional — when provided, the transaction is processed for that receiver.
Bank Account Requirements by Country
| 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 |
Integration Flow
Create a user and complete KYC
Get a cross-ramp quote (optional)
POST /api/partner/v2/cross-ramp/quotes — locks the exchange rate
Important Notes
- User must be KYC-verified before creating transactions.
- Supported corridors: MX, DO, US, and SEPA countries.
- Amount limits: Fiat amounts must fall within the min/max thresholds defined in your partner agreement.
Use Cases
- International Remittances: Convert MXN to USD and send funds to a US bank account.
- Multi-Currency Payouts: Deliver funds in a different fiat currency from the source deposit.
- Cross-Border B2B Payments: Facilitate business payments across currencies.
Error Codes
Common Errors
| 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.” |
Verified User Errors
| 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.” |
Endpoint-Specific Errors
| HTTP Status | Code | Message |
|---|---|---|
| 400 | INVALID_USER_INPUT_ERROR | ”Invalid User Input” |
| 400 | BAD_REQUEST | ”Either targetBankAccount or targetBankAccountId must be provided” |
| 400 | BAD_REQUEST | ”Unsupported country for cross-ramp: “ |
| 400 | BAD_REQUEST | ”Target currency must match target bank account currency (expected: , actual: )“ |
| 400 | BAD_REQUEST | ”Source and target currencies must differ” |
| 400 | BAD_REQUEST | ”Requested fiat currency is invalid or inactive” |
| 400 | BAD_REQUEST | ”Provided quoteId is not a CROSS_RAMP quote” |
| 400 | BAD_REQUEST | ”Quote currency mismatch (expected: , actual: )“ |
| 400 | QUOTE_EXPIRED | ”Quote has expired” |
| 400 | BAD_REQUEST | ”Cannot create transaction: No supported banks configured for user with id: “ |
| 400 | BAD_REQUEST | ”The receiver user account is not verified” |
| 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.” |
| 404 | RECEIVER_NOT_FOUND | ”Receiver not found.” |
| 404 | USER_BANK_INFO_NOT_FOUND | ”User bank information not found.” |
Headers
Api key for the affiliated partner that is performing the request
Body
application/json
User's identifier
Example:
"12a121ad-cbea-4ec4-9e0a-5c861e528bba"
Source currency symbol
Available options:
MXN, DOP, USD, EUR Example:
"MXN"
Target currency symbol
Available options:
MXN, DOP, USD, EUR Example:
"USD"
User bank info to be saved
Amount of currency from source
Amount of currency that will be delivered
Identifier for the quote to be used for the transaction.
Premium spread percentage