General
What chains are supported?
What chains are supported?
Fogo. See Supported Chains for capabilities and supported DEXs.
What tokens are supported?
What tokens are supported?
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
How fresh are quotes?
How fresh are quotes?
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.What's the difference between ExactIn and ExactOut?
What's the difference between ExactIn and ExactOut?
- 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”).
How are fees calculated?
How are fees calculated?
Up to three, each reported separately:
- Pool fees set by the DEX operators. Shown as
feeBpsin the quote response andfeeAmountin the swap/instructions response.feeAmountis in the input token — pool fees are taken on the way in — so never subtract it fromamountOut. - Vulcx’s protocol fee —
platformFeeBps, taken from the output amount and reported asplatformFeeAmount. - Your integrator fee —
integratorFeeBps, set per request and kept by you in full, paid on-chain to yourreferrerwallet.
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
Is devnet supported?
Is devnet supported?
Not currently. The API operates on Fogo mainnet only. Devnet support may be added in the future.
What's the maximum transaction size?
What's the maximum transaction size?
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.What are the rate limits?
What are the rate limits?
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.When should I use /swap vs /instructions?
When should I use /swap vs /instructions?
- Use
POST /api/v1/swapfor the simplest integration. You get a ready-to-sign transaction. - Use
POST /api/v1/instructionswhen you need to compose the swap with other instructions in a single transaction (e.g., creating token accounts, adding memos, closing accounts).
What happens if a multi-hop swap partially fails?
What happens if a multi-hop swap partially fails?
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.How do I monitor API status?
How do I monitor API status?
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.