The Native API provides two pricing endpoints: one for display-only indicative prices, and one that locks a rate and returns a quote ID. Using the quote ID flow guarantees that the rate shown to the user is the rate applied when the ramp is created.
| Endpoint | Purpose | Returns quoteId? |
|---|---|---|
GET /eapi/v0/price | Indicative price for display | No |
GET /eapi/v0/quote | Locked price for ramp creation | Yes |
GET /eapi/v0/price returns a real-time price estimate. Use it to display rates before a user has committed to transact. The rate is not persisted and cannot be passed to ramp creation.
For details on how fiat and crypto amount inputs work with this endpoint, see Pricing & Amount Inputs.
GET /eapi/v0/quote locks a price and returns a quoteId with a 3-minute TTL. Pass the quoteId to POST /eapi/v0/ramps to create a ramp at that exact rate — no re-calculation at execution time.
A quoteId is one-time use — it cannot be reused after a ramp has been created with it.
Without a quote ID, the typical flow re-calculates the rate at ramp creation:
- Call
/price→ rate returned - Show rate to user on a confirmation screen
- User confirms
- Call
/rampswithfiatAmountorcryptoAmount→ rate re-calculated silently at step 4
If the market moves between steps 2 and 4, the ramp is created at a different rate than displayed. The quote ID flow eliminates this: the rate from step 2 is preserved and applied in step 4.
GET /eapi/v0/quoteAll parameters are required. See the Quote API Reference for the full parameter list.
Example response (on-ramp, fiat-locked):
{
"quoteId": "6e9174edd370ffe6331aeda7a6d75592",
"identityReference": "customer-ref-1234",
"source": {
"fiat": {
"id": "AUD",
"method": "payid-bank-transfer"
},
"amount": "24.50"
},
"target": {
"crypto": {
"id": "ETH",
"blockchain": "ETH"
},
"amount": "0.007259"
},
"processingFee": "0.00",
"networkFee": "0.00",
"marketRate": {
"crypto": {
"USD": "2342.218",
"AUD": "3297.79"
},
"forex": {
"reference": "USD",
"AUD": "1.4079800"
}
},
"expiresAt": "2026-04-10 04:50:36"
}| Field | Description |
|---|---|
quoteId | Unique identifier for this locked quote. Pass this to ramp creation. |
identityReference | The customer this quote is bound to. |
source.amount | The locked source amount (fiat for on-ramp, crypto for off-ramp). |
target.amount | The locked target amount (crypto for on-ramp, fiat for off-ramp). |
processingFee | Banxa processing fee in the source fiat currency. |
networkFee | Blockchain network fee in the source fiat currency. |
marketRate | Market rates used to calculate this quote — for display only. |
expiresAt | UTC timestamp after which this quote is no longer valid. |
Pass the quoteId to POST /eapi/v0/ramps. The amounts, payment method, and rate are all inferred from the quote — do not re-specify them.
Request body:
{
"quoteId": "6e9174edd370ffe6331aeda7a6d75592",
"identityReference": "customer-ref-1234",
"walletAddress": "0xc292474673cf1a96a96e8c56ec4f45ecf2e0b448",
"walletAddressMemo": null
}| Field | Required | Description |
|---|---|---|
quoteId | Yes | The quoteId from GET /eapi/v0/quote. |
identityReference | Yes | Must match the identityReference used when fetching the quote. |
walletAddress | Yes | The customer's wallet address for the target asset. |
walletAddressMemo | No | Memo or destination tag, required by some networks (e.g. XRP, XLM, EOS). |
See the Ramps API Reference for the full request schema.
Quotes expire 3 minutes after creation (expiresAt is UTC). If the user does not confirm within the window, fetch a fresh quote before submitting the ramp.
Display the expiry countdown in your confirmation UI — it prevents users from being surprised by a rejected submission.