The taker pays the fee on each fill. The maker pays nothing on markets with maker_fee_bps = 0.
The schedule
GET /v1/markets reports each market’s schedule as taker_fee_bps
and maker_fee_bps. Read it from there. It is the only source, and the matcher charges exactly what
it says.
On the cNGN futures, taker_fee_bps = 25 and maker_fee_bps = 0. The fee is 25 bps of notional,
so 2.5 USDC a contract at any price. Fees are paid from the account’s USDC.
Who is the taker
The taker is the order created later of the two on a fill. It is not a property of your account
or your strategy.
Resting a quote does not make you the maker. If your order arrives after the one it matches
against, you are the taker on that fill and you pay the taker fee. A bot that requotes often is
usually the later order, so it is usually the taker.
To be sure you are the maker, set post_only.
The worstFee bound
worstFee caps what a fill may charge you. If the fee would exceed it, the contract reverts with
TM_FeeTooHigh and the fill does not happen.
- It is per unit filled, not a total. On spot, the right bound is
feeRate × price, so it
changes with price. On futures, it is per contract, in USDC × 1e18.
- Leave headroom above the schedule. Resting orders were signed under the old schedule and
cannot be re-signed when it changes. Numo’s own clients sign 30 bps against a 25 bps schedule.
- Do not sign
0 on a market with a taker fee. Every fill where you are the taker reverts,
until the order expires.
See Authentication and signing for how to encode it, and
Spot for a worked spot example.