| Level | How you get it | What the price means |
|---|---|---|
| Estimate | GET /v1/orchestration/estimate | Indicative. Use for display and browsing. |
| Quote | POST /v1/orchestration/quote | Firm for 2 minutes. Late deposits reprice at the live market rate. |
| Fixed delivery | deliveryMode: "fixed" on a quote | Commitment. The order delivers the quoted estimatedOut. |
Estimates
/estimate is a stateless price preview. It requires no API key, creates no durable order, and allocates no deposit address, so it is safe to call on every input change within its limit of 120 requests per minute per IP. Preview slippage defaults to 100 bps when slippageBps is omitted.
Quotes
/quote is authenticated and idempotent: send X-Idempotency-Key with every request. It persists the quote, allocates a deposit address, and starts a 2 minute expiry (expiresAt). Fund the deposit before expiresAt and the order executes on the quoted terms.
A deposit that arrives after expiry is not refunded. It is repriced at the live market rate at detection time, and execution stays bounded by the quote’s slippageBps. If you need the quoted price, treat expiresAt as a hard deadline for the deposit, not a suggestion.
The recommended workflow:
- Browse with
/estimate. Call it on every amount or route change. - Call
/quoteonly when the user commits to the swap. - Fund the deposit address before
expiresAt.
Fixed delivery
deliveryMode: "fixed" makes estimatedOut a delivery commitment: the order delivers the quoted amount rather than whatever execution produces.
- Exact-in only. Any other
amountModereturns400 unsupported_delivery_mode. - The route must have
fixedEligible: trueonGET /v1/orchestration/routes, and availability additionally depends on per-partner operator configuration. - When fixed delivery does not apply,
/quoteand/estimatereject withfixed_delivery_unavailable(the error message states the reason), while/onrampproceeds as a normal variable onramp. - The response echoes
deliveryMode: "fixed"only when it applies. Treat its absence as a variable quote.
Slippage
slippageBps bounds how far the execution price can move against the quote before the order refunds instead of filling badly. It accepts 0 to 1000 and defaults to 50 (200 for NEAR-ingress sources). On routes that swap through the Flashnet AMM, a runtime floor applies (default 10 bps, operator-tunable); a below-floor value returns 400 invalid_request because it could never fill at real size.
Slippage protects the execution leg, not the quote window. If the pool moves past your tolerance between deposit and execution, the order refunds with slippage_exceeded and no partner action is required. See Order Lifecycle for the refund paths.
/onramp pins slippage to 1000 bps regardless of input: a human pays a Lightning invoice on their own schedule, so the quote must survive minutes of price drift and reprice at settlement.
Price impact
Price impact (how much your own order moves the pool) is capped separately from slippage. A quote that would move the pool past the cap rejects withprice_impact_too_high. Slippage caps market movement between quote and execution; the price impact cap rejects orders too large for the pool at quote time.
Where to go next
- Amounts for how
amountandamountModework - Fees for what gets deducted from the quoted output
- Quotes and Orders for the full field-level reference
- Order Lifecycle for what happens after funding