Quote
Get a fixed-rate quote between BRL and any supported asset before committing to an on-ramp or off-ramp.
POST /api/quote
Returns a price + fee breakdown plus a short-lived quoteToken. Pass the token to a downstream endpoint (/api/deposit/asset, /api/withdraw/pix) to lock the displayed rate.
Quotes expire 2 minutes after creation. Always show the user the exact
outputAmountyou receive — this is the number the downstream call will honor.
Request
curl --request POST \
--url https://api.hodle.com.br/api/quote \
--header "Authorization: Bearer $API_KEY" \
--header "Content-Type: application/json" \
--data '{
"inputCurrency": "BRL",
"inputPaymentMethod": "PIX",
"outputCurrency": "USDC",
"outputPaymentMethod": "BASE",
"inputAmount": "100.00"
}'const res = await fetch('https://api.hodle.com.br/api/quote', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.HODLE_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
inputCurrency: 'BRL',
inputPaymentMethod: 'PIX',
outputCurrency: 'USDC',
outputPaymentMethod: 'BASE',
inputAmount: '100.00',
}),
})
const data = await res.json()import os, requests
res = requests.post(
"https://api.hodle.com.br/api/quote",
headers={
"Authorization": f"Bearer {os.environ['HODLE_API_KEY']}",
"Content-Type": "application/json",
},
json={
"inputCurrency": "BRL",
"inputPaymentMethod": "PIX",
"outputCurrency": "USDC",
"outputPaymentMethod": "BASE",
"inputAmount": "100.00",
},
)
data = res.json()Parameters
| Field | Type | Required | Description |
|---|---|---|---|
inputCurrency | string | Yes | BRL, USDT, USDC, USDB, LBTC, BTC. |
inputPaymentMethod | string | Yes | PIX, POLYGON, BASE, TRON, LIQUID, LIGHTNING, SPARK. |
outputCurrency | string | Yes | Same set as inputCurrency. |
outputPaymentMethod | string | Yes | Same set as inputPaymentMethod. |
inputAmount | string | Yes (or outputAmount) | Amount in inputCurrency. Decimal string. |
outputAmount | string | Yes (or inputAmount) | Amount in outputCurrency. Use this for exact-out quotes. |
outputBrCode | string | No | PIX BR Code if the output is going to a known PIX recipient. Locks third-party-pricing rules. |
Pass exactly one of inputAmount or outputAmount.
Response
{
"success": true,
"data": {
"quoteToken": "qt_8f3a4b...",
"pairName": "BRL-USDC",
"basePrice": "0.18634",
"inputCurrency": "BRL",
"outputCurrency": "USDC",
"inputAmount": "100.00",
"outputAmount": "18.41",
"appliedFees": [
{ "type": "MARKUP", "amount": "0.20", "currency": "USDC" },
{ "type": "INPUT_FIXED", "amount": "0.50", "currency": "BRL" },
{ "type": "OUTPUT_FIXED", "amount": "0.05", "currency": "USDC" }
],
"expiresAt": "2026-05-09T22:02:00.000Z"
}
}| Field | Type | Description |
|---|---|---|
data.quoteToken | string | Pass to the next call (/api/deposit/asset or /api/withdraw/pix). |
data.basePrice | string | Mid-market outputCurrency per 1 unit of inputCurrency before fees. |
data.outputAmount | string | What the user actually receives after fees are applied. |
data.appliedFees | array | Itemised — your UI can render each line. |
data.expiresAt | string | ISO timestamp; after this, re-quote. |
Errors
{ "success": false, "error": "No route for BRL-LBTC at this time" }{ "success": false, "error": "inputAmount must be at least 1.00 BRL" }{ "success": false, "error": "Quote expired at 2026-05-09T22:02:00.000Z" }Common quote shapes
| Use case | Input | Output |
|---|---|---|
| BRL → USDC (Base) on-ramp | BRL / PIX | USDC / BASE |
| BRL → USDT (Polygon) on-ramp | BRL / PIX | USDT / POLYGON |
| USDT (Tron) → BRL off-ramp | USDT / TRON | BRL / PIX |
| BRL → BTC (Lightning) on-ramp | BRL / PIX | BTC / LIGHTNING |
| Lightning → BRL off-ramp | BTC / LIGHTNING | BRL / PIX |
| Lightning → USDB (Spark via Flashnet AMM) | BTC / LIGHTNING | USDB / SPARK |