---
title: "Send the signed quote"
method: POST
path: "/sol/trade/send"
tags: ["Solana swaps"]
---

# Send the signed quote

`POST /sol/trade/send`

## Request

- Base URL: `https://api.getchord.xyz/v1`
- URL: `https://api.getchord.xyz/v1/sol/trade/send`
- Auth: none declared

Relays a transaction Chord quoted in the last three minutes, signed by the wallet it was quoted for — anything else is refused. Chord sends it to several RPC providers and again every 2 seconds until it lands or its blockhash expires; a `jupiter_meta` order goes through Jupiter's execute endpoint instead (Jupiter or the market maker adds its signature). Then poll `/sol/trade/tx/{signature}`.

**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.

## Request body

- object
  - `tx` string, required: `quote.tx` signed by the wallet, base64. Do not change the message.

## Response `200`

- object
  - `ok` boolean
  - `signature` string: Transaction signature, base58.
  - `status` SolTradeTx: A sent swap.
    - `signature` string: Transaction signature, base58.
    - `status` 'pending' | 'confirmed' | 'finalized' | 'failed' | 'expired'
    - `route` 'direct' | 'jupiter' | 'jupiter_meta': `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).
    - `mint` string: Solana address, base58, case-sensitive. Never lower-case it.
    - `side` 'buy' | 'sell'
    - `wallet` string: Solana address, base58, case-sensitive. Never lower-case it.
    - `sentAt` integer: Unix seconds.
    - `sends` integer: How many times Chord sent it (every 2 seconds until it lands or its blockhash expires).
    - `slot` integer, nullable
    - `error` string, nullable
    - `quotedOut` string: Base units as a decimal string (lamports for SOL).
    - `receivedOut` string, nullable: What the wallet really got, read from the landed transaction with the quote's measure.
    - `confirmedAt` integer, nullable: Unix seconds.
  - `error` string
  - `message` string

## Other responses

- `400`: `BAD_TRANSACTION` (not a transaction, or not base64) · `UNKNOWN_TRANSACTION` (not one a quote handed out in the last three minutes, or changed before signing — ask for a new quote) · `NOT_SIGNED` / `BAD_SIGNATURE` (not signed by the quoted wallet).
- `502`: `SEND_FAILED`: no RPC accepted the transaction.
- `503`: `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".

---

[API](https://skmtc.dev/getchord/apis/chord-api.md) · [All operations](https://skmtc.dev/getchord/apis/chord-api/llms.txt) · [OpenAPI document](https://skmtc.dev/getchord/apis/chord-api/revisions/d3bc4640fea0?raw)
