Skip to main content

General

Fogo. See Supported Chains for capabilities and supported DEXs.
Any SPL token with liquidity on a supported DEX on Fogo: Valiant or Fluxbeam. If a direct pool doesn’t exist, the routing engine tries multi-hop paths through intermediate tokens like FOGO or USDC.If GET /api/v1/quote returns no route found, the token either has no listed pools or insufficient liquidity for the requested amount.

Quotes and pricing

Quotes reflect real-time pool state at the moment of the request. Prices can change between getting a quote and submitting the transaction. The otherAmountThreshold field enforces a minimum output (ExactIn) or maximum input (ExactOut) on-chain.Quotes do have an explicit TTL. A quoteId dies 3 seconds after it is minted (validForMs), and the firm window is 400 ms (firmForMs). Both are measured from when the quote was created, not from when you send it, so redeeming late returns 410 QUOTE_EXPIRED.The practical consequence: do not hold a quote across a user interaction. A wallet popup will outlive it. Either build on the same tick you quote, re-quote when the user clicks, refresh every ~2 s while a price is on screen, or drop quoteId entirely and let the server re-quote at build time under your slippageBps — you lose price pinning, not correctness. The 400 ms firm window is only reachable from machine flows: session-key signing, bots, keepers.Separately, the transaction built from POST /api/v1/swap expires at lastValidBlockHeight (roughly 60 seconds). That is a different clock from the quote’s, and the longer of the two.Each quote also carries contextSlot and dataAgeMs — the slot its pool state was current to, and how long ago market data last arrived. A dataAgeMs materially above a second or two means the price is being served off stale state; treat it as a reason to distrust the quote.
  • ExactIn: You specify the exact input amount. The API estimates the output. Use when selling a specific amount (“sell exactly 1 FOGO”).
  • ExactOut: You specify the exact output amount. The API estimates the input needed. Use when buying a specific amount (“buy exactly 100 USDC”).
Both modes enforce slippage protection on-chain.
Up to three, each reported separately:
  1. Pool fees set by the DEX operators. Shown as feeBps in the quote response and feeAmount in the swap/instructions response. feeAmount is in the input token — pool fees are taken on the way in — so never subtract it from amountOut.
  2. Vulcx’s protocol fee — platformFeeBps, taken from the output amount and reported as platformFeeAmount.
  3. Your integrator fee — integratorFeeBps, set per request and kept by you in full, paid on-chain to your referrer wallet.
Rates 2 and 3 are independent and add; yours is not a share of ours. Their sum is capped at 100 bps. See Fees.amountIn and amountOut are net of pool fees. Vulcx’s fee and yours are deducted from amountOut on-chain, so what the user receives is amountOut - platformFeeAmount - integratorFeeAmount.

Technical

Not currently. The API operates on Fogo mainnet only. Devnet support may be added in the future.
Transactions have a 1232-byte limit. For multi-hop routes with many accounts, the API uses Address Lookup Tables (ALTs) to compress the transaction. If you use POST /api/v1/instructions, include the addressLookupTableAddresses when building a v0 transaction.
Your plan sets a per-account budget shared by all your keys: 20 cost units/second (burst 40) on Free, rising to 120 on Builder and 2,000 on Pro. Requests are debited by weight — a quote costs 1, a transaction build costs 5 — so Builder’s 120 units is 120 quotes/second or 24 builds/second. The WebSocket stream is included from Starter up, with a per-plan connection limit. Without a key you get 2 units/second, burst 20. If you hit a 429, use exponential backoff (1s, 2s, 4s). See Rate limits.
  • Use POST /api/v1/swap for the simplest integration. You get a ready-to-sign transaction.
  • Use POST /api/v1/instructions when you need to compose the swap with other instructions in a single transaction (e.g., creating token accounts, adding memos, closing accounts).
Both use the same routing engine and produce the same on-chain result.
Nothing. All swap instructions execute atomically on-chain. If any hop fails (insufficient liquidity, slippage exceeded, etc.), the entire transaction reverts — no half-executed route, no stuck intermediate tokens.Do not read that as “the amounts always match your request”. A route can be sized down at quote time when it cannot source the full amount, and the quote reports the smaller amountIn/amountOut. That reduced trade then executes atomically. Compare the returned amounts against what you sent — see partial fills.
Call GET https://api.vulcx.xyz/health. It returns {"status": "ok"} when the service is running. For production integrations, poll this endpoint periodically and alert if it returns a non-200 status.For a human-readable view — API health plus a live quote, and a log of past incidents — see vulcx.xyz/status. Those checks run in your browser, so treat /health as the source of truth for automation.
Last modified on September 15, 2026