POST /exchange-rate is the single source for pricing any transaction on Yativo. It returns a quote_id valid for 5 minutes — use this ID in the execution step to guarantee the rate and fee shown to your customer.
There are two modes:
Type Definitions
Type Definitions
Generate a Quote
string
required
Source currency (ISO 4217), e.g.
"USD", "EUR".string
required
Target currency (ISO 4217), e.g.
"USD", "CLP", "BRL", "MXN".number
required
Amount in the source currency.
integer
Payment method ID from
GET /payment-methods/payout or GET /payment-methods/payin. Scopes the quote to the exact fees for that rail — required for checkout flows where you will execute at the quoted price.string
"payout" for sends/withdrawals or "payin" for deposits. Required when method_id is provided.string
default:"send"
Payout quotes only. Set to
"receive" to make amount the amount the customer receives, in to_currency. See Pay out by receive amount.Execute the Quote
Use thequote_id in the appropriate execution endpoint:
For payouts
For deposits (payin)
Pay out by receive amount
By default, a payout’samount is what you send from your wallet, and the customer receives that amount converted into the payout currency. To fix what the customer receives instead, for example exactly 5,000 MXN, set amount_type to receive. Yativo works out the send amount and fees, then debits your wallet for both. The customer always gets the full requested amount.
amount_type works on POST /exchange-rate (payout quotes) and POST /wallet/payout.
Option A: quote first (recommended)
A quote fixes the rate and fees for 5 minutes, so you can show the exact debit before you commit.1
Get a receive-mode quote
amount is the send amount in from_currency, receive_amount is what the customer gets, and payout_data.customer_total_amount_due is the total your wallet is debited.2
Create the payout with the quote
amount or amount_type. Any amount_type you send with a quote_id is ignored. The quote’s method_id must be the payout method behind payment_method_id.Option B: pay out directly
Payout response
EveryPOST /wallet/payout response includes these fields, in either mode:
When the debit wallet and payout currency are the same (for example USD to USD), the send amount equals the receive amount. Fees are still added on top.
Limits and errors
- The payout method’s minimum and maximum are checked against the calculated send amount, so a receive amount can be rejected for being above or below a limit. The error shows the limit in your wallet currency.
- If your wallet can’t cover the send amount plus fees, the request fails with
Insufficient wallet balanceand nothing is debited. - An
amount_typeother thansendorreceivereturns422. amount_type: "receive"on a payin quote returns422.
Live market rates
To show live rates to your customers, without fees or a quote, use:string
default:"USD"
The currency rates are quoted against. Must be a supported wallet currency.
base = rate units of that currency. To convert from the base currency, multiply by the rate. To convert back, divide. A rate of null means no rate is available for that currency right now.
- Rates are indicative market rates. They refresh about once a minute and don’t include fees.
- You can call this endpoint once per minute per account. Further calls in the same minute get
429with aRetry-Afterheader. To show several bases, make one request and divide: the rate fromAtoBisrates[B] / rates[A]. - Team members need the Currency Exchange → view permission.
- An unsupported
basereturns422with the allowed values.503means rates are temporarily unavailable.
Get a Locked Quote for Send Money
For sending money specifically (rather than wallet payouts), use the dedicated send money quote endpoint which also returns aquote_id:
Complete Quote Workflow
Fee Breakdown
Thecalculator.fee_breakdown object contains two fee components:
Always display
payout_data.customer_total_amount_due to the customer — this is the exact amount that will be debited from their wallet.
Rate Limits
POST /exchange-rate is limited to 30 requests per minute per API key. Cache quotes client-side for display rather than calling on every user keystroke.
GET /exchange-rates is limited to 1 request per minute per account. Its rates only refresh once a minute.
