Skip to content

POST /v1/swap/build

Build an unsigned swap transaction. You sign it client-side, then submit via POST /v1/swap.

Request

http
POST /v1/swap/build
Content-Type: application/json
X-API-Key: YOUR_API_KEY

Body

FieldTypeRequiredDefaultDescription
inputMintstringYesBase58 mint or token symbol (e.g. "SOL", "USDC")
outputMintstringYesBase58 mint or token symbol
amountstringYesAmount in smallest units
slippageBpsnumberNo100Slippage tolerance (1-5000 bps)
userPublicKeystringYesBase58 public key of the signer
createAtaIfMissingbooleanNotrueCreate input/output token accounts if they don't exist

Example

json
{
  "inputMint": "SOL",
  "outputMint": "USDC",
  "amount": "1000000000",
  "slippageBps": 100,
  "userPublicKey": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU"
}

Full mint addresses also accepted:

json
{
  "inputMint": "So11111111111111111111111111111111111111112",
  "outputMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
  "amount": "1000000000",
  "slippageBps": 100,
  "userPublicKey": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU"
}

Response

200 OK

json
{
  "transaction": "AQAAAA...base64...==",
  "quoteId": "q_42_1712000000000",
  "route": {
    "dex": "orca-whirlpool",
    "poolAddress": "HJPjoWUr...",
    "outputAmount": "134520000"
  },
  "estimatedOutput": "134520000",
  "minOutput": "133174800",
  "feeLamports": "5000000",
  "feeBps": 50,
  "computeUnits": 400000
}

Response Fields

FieldTypeDescription
transactionstringBase64-encoded unsigned VersionedTransaction
quoteIdstringQuote identifier — required for submission (30s TTL)
routeobjectSelected route details
estimatedOutputstringExpected output in smallest units
minOutputstringMinimum output after slippage
feeLamportsstringVenum fee in input token units
feeBpsnumberFee rate in basis points
computeUnitsnumberAllocated compute units

Transaction Contents

The unsigned transaction contains:

  1. SetComputeUnitLimit — sized per DEX type (200K-600K CU)
  2. ATA creation (if createAtaIfMissing: true and account missing) — idempotent createAssociatedTokenAccount for input/output tokens
  3. Swap instruction(s) — DEX-specific swap (may include tick/bin array init)

Set createAtaIfMissing: false if your token accounts are pre-created to skip the RPC check and keep transaction size minimal.

Errors

StatusDescription
400Invalid request body
401Missing or invalid API key
404No pools found or no valid quote
429Rate limit exceeded
500Failed to build swap instruction
503Blockhash not available (retry in a moment)

Rate Limit

20 requests per minute per API key.