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_KEYBody
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
inputMint | string | Yes | — | Base58 mint or token symbol (e.g. "SOL", "USDC") |
outputMint | string | Yes | — | Base58 mint or token symbol |
amount | string | Yes | — | Amount in smallest units |
slippageBps | number | No | 100 | Slippage tolerance (1-5000 bps) |
userPublicKey | string | Yes | — | Base58 public key of the signer |
createAtaIfMissing | boolean | No | true | Create 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
| Field | Type | Description |
|---|---|---|
transaction | string | Base64-encoded unsigned VersionedTransaction |
quoteId | string | Quote identifier — required for submission (30s TTL) |
route | object | Selected route details |
estimatedOutput | string | Expected output in smallest units |
minOutput | string | Minimum output after slippage |
feeLamports | string | Venum fee in input token units |
feeBps | number | Fee rate in basis points |
computeUnits | number | Allocated compute units |
Transaction Contents
The unsigned transaction contains:
SetComputeUnitLimit— sized per DEX type (200K-600K CU)- ATA creation (if
createAtaIfMissing: trueand account missing) — idempotentcreateAssociatedTokenAccountfor input/output tokens - 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
| Status | Description |
|---|---|
400 | Invalid request body |
401 | Missing or invalid API key |
404 | No pools found or no valid quote |
429 | Rate limit exceeded |
500 | Failed to build swap instruction |
503 | Blockhash not available (retry in a moment) |
Rate Limit
20 requests per minute per API key.
