Status of a sent swap
const url = 'https://api.getchord.xyz/v1/sol/trade/tx/example';const options = {method: 'GET'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://api.getchord.xyz/v1/sol/trade/tx/examplepending until the transaction is in a block, then confirmed / finalized with receivedOut, or failed / expired (its blockhash ran out; an RFQ order unseen for two minutes). Only transactions sent through /sol/trade/send.
Open to everyone since 2026-10-15, no key needed (an X-API-Key raises the rate limit). /sol/trade/config says whether the lane is on for the caller; when it is off the other routes answer 503 TRADE_NOT_ENABLED.
A quote is SOL against one token, bought or sold. For every quote Chord builds, for your wallet, the transaction of each route — direct (Chord’s own router: Raydium AMM v4 / CPMM / CLMM, Orca Whirlpool, Meteora DLMM / DAMM v2, Meteora DBC, Raydium LaunchLab, pump.fun, PumpSwap; up to two pools), jupiter (Jupiter’s swap API, no Jupiter fee) and jupiter_meta (Jupiter’s order: Metis, its RFQ market makers, DFlow, OKX; Jupiter’s fee inside the amount) — simulates each on the chain and returns the one that leaves the wallet with the most: tokens for a buy, SOL for a sell, after every fee. Ties go to direct, then jupiter. A route handing back under half of the input’s market value is refused.
Amounts are base units as decimal strings: lamports for SOL, the token’s smallest unit otherwise. Addresses are base58, case-sensitive. Chord takes no fee on Solana today. Nothing is signed by Chord: you sign quote.tx unchanged and send it back.
Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters”Transaction signature, base58.
From /sol/trade/send.
Responses
Section titled “ Responses ”A sent swap.
object
Transaction signature, base58.
direct = Chord’s own route (pump pools or Chord’s router) · jupiter = Jupiter’s swap API · jupiter_meta = Jupiter’s order (RFQ makers, DFlow, OKX).
Solana address, base58, case-sensitive. Never lower-case it.
Solana address, base58, case-sensitive. Never lower-case it.
Unix seconds.
How many times Chord sent it (every 2 seconds until it lands or its blockhash expires).
Base units as a decimal string (lamports for SOL).
What the wallet really got, read from the landed transaction with the quote’s measure.
Unix seconds.
Example
{ "status": "pending", "route": "direct", "side": "buy"}BAD_SIGNATURE.
Every non-2xx body.
object
Stable machine code, e.g. INVALID_PARAMS, NOT_READY, RATE_LIMIT_EXCEEDED.
For humans.
HTTP status, when included.
Example
{ "error": "INVALID_PARAMS", "message": "amount must be an integer string in the token's smallest unit"}TX_NOT_FOUND: not a transaction sent through this API, or done more than 15 minutes ago.
Every non-2xx body.
object
Stable machine code, e.g. INVALID_PARAMS, NOT_READY, RATE_LIMIT_EXCEEDED.
For humans.
HTTP status, when included.
Example
{ "error": "INVALID_PARAMS", "message": "amount must be an integer string in the token's smallest unit"}TRADE_NOT_ENABLED (the lane is off on this deployment, or not open to this caller yet) or TRADE_UNAVAILABLE (the Solana box did not answer). Retry later; do not read it as “no route”.
Every non-2xx body.
object
Stable machine code, e.g. INVALID_PARAMS, NOT_READY, RATE_LIMIT_EXCEEDED.
For humans.
HTTP status, when included.
Example
{ "error": "INVALID_PARAMS", "message": "amount must be an integer string in the token's smallest unit"}