fee = notional × rate. The rate depends on
your fee tier and whether the fill added or removed liquidity. Fees settle in USDC
against the portfolio that owns the fill. Funding is a separate flow and is not a
trading fee — see Positions, leverage, and funding.
Maker vs taker
Every fill has a liquidity role, and the role sets the rate.- A maker fill rests on the book and is matched by someone else’s incoming order. It adds liquidity, so it pays the lower maker rate.
- A taker fill crosses the spread and matches against resting orders. It removes liquidity, so it pays the higher taker rate.
The fee formula
The exchange computes notional and fee in integer units, then charges the fee in USDC.price is a PriceOfAtom (10⁻¹⁶ USDC per atom) and quantity is in atoms; the
1e12 divisor bridges those to CentiCents. For the unit definitions and conversions,
see Markets, assets, and precision.
rate is the decimal fraction from your tier — for example 0.00045 taker means
4.5 bps. A fill of 25,000 USDC notional at that rate costs
25,000 × 0.00045 = 11.25 USDC. The same fill as a maker at 0.00020 costs
25,000 × 0.00020 = 5.00 USDC.
Your current tier and rates
GET /api/v1/account returns your live tier and the rates applied to your fills.
| Field | Type | Meaning |
|---|---|---|
fee_tier | int (0–5) | Your current tier index; 0 is the base tier. |
taker_rate | string | Taker rate as a decimal fraction (e.g. "0.00045"). |
maker_rate | string | Maker rate as a decimal fraction (e.g. "0.00020"). |
volume_14d | string | Your 14-day trailing trading volume in USDC. |
The public fee schedule
GET /api/v1/fees/schedule returns every tier. It takes no authentication; fee
schedules are public.
The response is an array of FeeTierResponse:
The tier index.
0 is the base tier.Minimum 14-day trailing trading volume in USDC to qualify for this tier, as a
decimal string.
Taker rate as a decimal fraction (e.g.
"0.00045" = 4.5 bps).Maker rate as a decimal fraction (e.g.
"0.00020" = 2.0 bps).How tiering works
Tiers are set by your 14-day trailing USDC trading volume. Read your volume fromAccountResponse.volume_14d and compare it against each tier’s min_volume to see
how far you are from the next tier. As your trailing volume rises past a tier’s
min_volume, your fee_tier moves up and your rates drop; as it falls back, the tier
falls back with it. Volume is account-wide, not per portfolio.
Reading the fee on each fill
Every fill records the exact fee charged and which role it filled as. Read fills withGET /api/v1/fills. Each FillResponse carries:
| Field | Type | Meaning |
|---|---|---|
fee | string | The fee paid for this fill, in USDC. |
liquidity | TAKER or MAKER | The liquidity role that set the rate. |
fee field is the source of truth for what you were charged — your computed
notional × rate is an estimate that can differ by sub-cent rounding. For walking an
order through to its fills, see Manage positions.