ref depends on the execution type:
Available as
GET with query parameters or POST with the same two fields in a JSON body.
Prefer POST: a large quoteToken in a query string can exceed header limits and fail with
431.
Request
string
required
The
statusRef or transaction hash for this swap.Response
string
The normalized lifecycle state.
string
The venue handling the swap.
string
The raw, venue-native status string behind the normalized
status, for debugging. Present once a venue has been polled.string
Present as
"unavailable" only when the venue is not yet wired for tracking (status is unknown). Absent otherwise.string
The actual delivered output, in the output token’s smallest unit, when the venue exposes it. Null or absent otherwise, this is best-effort per venue, not every venue reports it.
string
The destination-chain transaction that paid the user out, when the venue names one. Only populated once
status is terminal, not while a swap is still in flight.Status tracking is live for every venue on
/health. Cross-chain and
orderbook venues (CoW, 0x Gasless, Bebop, NEAR Intents, Relay, Across, Mayan, Eco Routes,
Chainflip, THORChain, Layerswap, Rift, Houdini Swap) are resolved against the venue’s own
tracker. Same-chain venues (0x Swap, 0x Solana, Nordstern, Fly Trade, KyberSwap, OKX DEX, Jupiter, Mayan
same-chain) are resolved
against the chain itself, see below.If
quoteToken came from a sandbox quote, this always returns an immediate
synthetic success with the quoted output as deliveredAmount. ref isn’t validated in that
case, so any placeholder string works. Sandbox swaps are never metered and never earn a payout.Settlement
Polling this endpoint is not just for your UI. It is how a swap reachessettled in RAVN’s
ledger, and settled is the only state a fee payout is ever made on (see
Pricing).
RAVN runs a server-side backstop every few minutes, but it can only resolve swaps whose ref
RAVN already knew at /execute time: a NEAR Intents deposit address, a Relay request, a
Chainflip deposit channel, a Rift or Houdini Swap order. For every other venue, your terminal poll is what settles the
swap. That covers every TRANSACTION swap without a statusRef: the origin hash only exists once you broadcast
it, and RAVN only learns it when you report it here. On a same-chain venue (0x Swap, 0x Solana, Nordstern,
Fly Trade, KyberSwap, OKX DEX, Jupiter, Mayan same-chain) that transaction is the settlement, so RAVN
checks the chain, not your word, before marking the swap settled:
- the transaction at
refis mined on the quote’s chain and did not revert; - it moved the quote’s full input amount of the quote’s input token;
- when the quote carried a fee in an ERC-20, that fee actually arrived in a RAVN fee recipient. The on-chain amount is what gets booked, not the quote-time estimate.
TRANSACTION swap after the hash confirms, even if your integration has no other use for the
answer. executeAndTrack in the JS SDK already does this.
Two more rules that follow from the same design:
- One
refsettles exactly one swap. A hash or deposit that already settled another quote is rejected, and arefthat/executealready pinned to a swap (a deposit address, an order id) can’t be swapped for a different one. - A swap belongs to the key that requested the quote. That identity is signed into the
quoteToken, so/executeand/statuscredit it to you even when the process calling them doesn’t hold your key. A second report on an already-terminal swap is a no-op.

