Delta V2 API
GET /v2/delta/prices
| Symptom | Root cause | Fix |
|---|---|---|
400 No route for a same-chain pair | Token pair has no liquidity, or srcDecimals / destDecimals are wrong | Re-check decimals against the token contract; try mode=ALL on GET /v2/quote to see whether Market can route it |
400 No route for a crosschain pair | destChainId lane not supported by any active bridge for this token | Call GET /v2/delta/prices/bridge-routes to see which lanes + tokens are supported |
route.bridge is null on a crosschain quote | srcToken and destToken happen to be the same address on different chains and the bridge collapsed | Compare route.origin.input.token.chainId vs route.destination.output.token.chainId directly; don’t infer crosschain from bridge !== null alone |
alternatives is empty | Same-chain quotes never return alternatives — only crosschain | Use route directly for same-chain; check alternatives.length > 0 before showing a bridge picker |
partner.feePercent higher than expected | Registered partner fee + partnerFeeBps override compounded | Set partnerFeeBps=0 (or omit) to use the registered fee only; passing both stacks them |
400 Token not supported | One of srcToken / destToken isn’t whitelisted on chainId | Call GET /v2/delta/prices/is-token-supported before quoting |
Updated from support tickets at each release. Last updated: 2026-05-27.
POST /v2/delta/orders/build
| Symptom | Root cause | Fix |
|---|---|---|
400 route validation failed | route object was mutated, re-stringified, or had numeric fields cast to numbers (they’re strings) | Pass route from GET /v2/delta/prices verbatim — don’t normalize, sort, or re-encode amounts |
400 missing deadline | deadline is required on every Delta order; the build call rejects when it’s absent | Pass deadline as unix seconds (e.g. Math.floor(Date.now() / 1000) + 3600); past it the order is unfillable |
400 InvalidTWAPParams / InvalidTWAPBuyParams | TWAP / TWAPBuy without interval, numSlices, and a totals field | Provide all four: interval (seconds, ≥ 60), numSlices (≥ 2), totalSrcAmount (TWAP), or totalDestAmount + maxSrcAmount (TWAPBuy) |
400 InvalidTWAPSrcAmount / InvalidTWAPBuyDestAmount | Slice amount in route.origin doesn’t equal floor(total / numSlices) | Re-quote per slice with amount = floor(total / numSlices) and pass the totals separately; non-divisible remainders are intentional and you can’t ship slice×n |
400 InvalidExternalOrderParams | orderType: ExternalOrder without handler and data | Encode handler-specific bytes into data and pass the on-chain handler address as handler |
400 InvalidProductiveOrderParams | orderType: ProductiveOrder without strategy | Pass the on-chain strategy address as strategy |
slippage results in much worse fills than expected | Slippage is in basis points, not percent: 100 = 1.00%, not 100% | Convert mental percent to bps: 0.5% → 50, 1% → 100, 5% → 500 (max 10_000 = 100%) |
Updated from support tickets at each release. Last updated: 2026-06-09.
POST /v2/delta/orders
| Symptom | Root cause | Fix |
|---|---|---|
400 Invalid signature | Signed payload doesn’t match order byte-for-byte | Sign toSign from POST /v2/delta/orders/build exactly; pass order: toSign.value to submit (not the whole toSign object) |
400 Order expired | Long pause between build and submit; deadline already passed when relayer validated | Rebuild on submit-time, or pass a longer deadline (seconds since epoch) at build |
400 InsufficientAllowance | User approved the wrong spender — usually the Augustus router instead of the Delta contract | Approve route.spender (returned by GET /v2/delta/prices) — the Delta contract, not Augustus |
400 InsufficientBalance | Source-token balance dropped between price and submit | Re-quote and rebuild; show the user a fresh balance before signing |
200 OK then stuck at PENDING | No agent bid the auction (size, pair, or chain) within the window | Poll GET /v2/delta/orders/; cancel via POST /v2/delta/orders/cancel and re-quote if past your SLA |
Order transitions to SUSPENDED | Allowance was revoked or balance moved post-submission | Re-approve and the relayer will pick the order back up |
Updated from support tickets at each release. Last updated: 2026-05-27.
POST /v2/delta/orders/cancel
| Symptom | Root cause | Fix |
|---|---|---|
400 Invalid signature | Cancellation EIP-712 typed data assembled wrong (wrong chainId or wrong domain) | Sign the relayer’s cancel payload — the SDK’s signCancelDeltaOrderRequest handles this for you |
400 Order already settled | One or more orderIds are in a terminal state (COMPLETED, FAILED, EXPIRED, CANCELLED) | Pre-filter orderIds to those with status in PENDING / AWAITING_SIGNATURE / ACTIVE / SUSPENDED |
200 OK but order doesn’t move to CANCELLING | An auction had already started for that order — cancellation queues but won’t kill an in-flight fill | Wait one polling interval; the order moves to CANCELLED once the relayer confirms |
400 orderIds.length > 100 | Tried to batch-cancel too many in one call | Chunk into batches of ≤ 100 |
Updated from support tickets at each release. Last updated: 2026-05-27.
Market API
GET /prices
| Symptom | Root cause | Fix |
|---|---|---|
400 Invalid srcToken or Invalid destToken | Native ETH sent as 0x0 or lowercase 0xeee...e | Use the mixed-case placeholder 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE |
422 Unsupported chain | network not in the supported-chain list for the current API host | Hit GET /chains to confirm the live list; see Chains & contracts |
priceRoute.maxImpactReached: true | Price impact exceeds the configured ceiling for this route | Reduce trade size, split into hops, or pass an explicit higher maxImpact if your product accepts the risk |
Stale priceRoute rejected by POST /transactions/:chainId | More than ~30s elapsed between quote and tx-build, route became invalid | Re-quote and pass the fresh priceRoute verbatim; never cache across user gestures |
| 429 from the gateway | Free-tier rate limit hit, or your Pro plan quota exceeded | See Pro API accounts to lift rate limits, or back off and retry |
Updated from support tickets at each release. Last updated: 2026-05-15.
POST /transactions/:chainId
| Symptom | Root cause | Fix |
|---|---|---|
400 Invalid priceRoute or Stale priceRoute | priceRoute modified between quote and tx-build, or older than ~30s | Pass the priceRoute block from GET /prices verbatim; re-quote if more than ~30s elapsed |
Calldata reverts on-chain with INSUFFICIENT_OUTPUT | Slippage tolerance too tight for current market depth | Increase slippage (in bps) on the rebuild, or surface a higher tolerance to the user before retrying |
Calldata reverts with TransferHelper: TRANSFER_FROM_FAILED | ERC-20 allowance to the v6.2 router insufficient (or pointed at the legacy v5 router) | Approve the Augustus v6.2 router address — see Chains & contracts; migrating off v5 → Augustus v5 → v6.2 |
txData gas estimate fails on the user’s RPC | RPC gas estimation can’t simulate the exact block conditions | Use the gas field returned in the response as a baseline + 15–25% headroom |
| Calldata builds for the wrong chain | network path parameter mismatched against the priceRoute.network | Always derive :network from priceRoute.network, not from a client-side variable |
422 Partner not allowed | Your partner tier doesn’t permit the requested fee/surplus configuration | Drop the disallowed param, or upgrade to a Pro API account |
Updated from support tickets at each release. Last updated: 2026-05-15.