1. Pool fees
Each liquidity pool charges its own fee per hop, set by the pool operator (Valiant, Fluxbeam) and deducted automatically as the swap executes.feeBpsonGET /api/v1/quote— the total pool fee across all hops, in basis points.feeAmountonPOST /api/v1/swapandPOST /api/v1/instructions— the same fee as an amount, in the INPUT token’s smallest units, because pool fees are taken on the way in. It is not comparable toplatformFeeAmountorintegratorFeeAmount, which are output-denominated, and it must never be subtracted fromamountOut.
2. Vulcx’s protocol fee
Vulcx takesplatformFeeBps of the output amount, reported alongside it as
platformFeeAmount in the output token’s smallest units.
The rate comes from the protocol config on-chain and is the same for every caller. It is 0
when the protocol fee is disabled on-chain.
3. Your integrator fee
SetintegratorFeeBps on the request to charge your own fee on top. You keep 100% of it.
referrer wallet in the same transaction as the
swap — so there is nothing to invoice, reconcile or settle later. The response reports it back as
integratorFeeBps and integratorFeeAmount.
Set it once on your API key
Instead of sending the fee on every request, set a default fee and fee wallet on the key at portal.vulcx.xyz. A/swap, /instructions or /cpi/route-accounts
request that omits integratorFeeBps uses the key’s default; one that omits referrer pays the
key’s fee wallet. Anything you send on the request still wins, and an explicit "integratorFeeBps": 0
turns the default off for that call. Requests without a key have no defaults.
A key can also carry a ceiling: any request on that key asking for more returns 400
FEE_ABOVE_KEY_MAX. Use it when the key ships inside a client other people can modify.
The portal’s Earnings page shows what your fee wallets were paid, read from settled transactions.
The two rates add — they are not a split
platformFeeBps and integratorFeeBps are independent. Yours is not a share of Vulcx’s, and
neither rate moves the other. Your user pays the sum:
Because your rate is yours alone, it comes straight off the request without authentication — it
cannot be used to take anything from Vulcx’s side.
The sum is capped at 100 bps (1%). A request whose
platformFeeBps + integratorFeeBps
exceeds the cap returns HTTP 400. The cap is enforced on-chain too; the API checks it first so
an over-cap request fails as a validation error rather than as a reverted transaction.Capping each rate separately would let a user be charged twice the ceiling, which is why the
check is on the total.What the numbers mean
amountIn and amountOut are the trade itself. Pool fees are already deducted from them,
because the pools take those as the swap executes.
Vulcx’s fee and yours are not included in amountOut. Both come off it on-chain, in the
output token. What your user actually receives is:
feeAmount — it is denominated in the input token, and on a 1 FOGO → USDC swap it is several
hundred times larger than the entire output.