Trading fees

MNX charges a per-fill trading fee proportional to the fill's notional value. Each side of a fill pays its own rate: the maker pays the market's maker rate and the taker pays the market's taker rate. MNX itself charges nothing on deposits, withdrawals, order placement, or cancellation — only executed fills are charged (on-chain operations still pay normal MegaETH gas).

Fee schedule

RoleLaunch rateCharged on
Maker0 bps (0%)Fill notional (price × quantity)
Taker5 bps (0.05%)Fill notional (price × quantity)

Fees can be switched off exchange-wide (for example during testnet phases or promotions), in which case every market's rates read 0. The authoritative current rates are always the per-market fields returned by GET /v0/markets — clients should read them from there rather than hard-coding the schedule above.

curl "https://api.testnet.mnx.fi/v0/markets?limit=1"
# each market object includes:
#   "maker_fee": 0,            "maker_fee_e18_raw": "0",
#   "taker_fee": 0.0005,       "taker_fee_e18_raw": "500000000000000"
# (0 in both fields when fees are switched off)

Rates are decimal fractions of notional: 0.0005 means 5 basis points, so a $10,000 fill pays $5. The *_fee_e18_raw fields carry the same rate as an exact integer scaled by 10¹⁸, matching the raw-integer convention used across the API.

Maker or taker?

MNX matches orders in frequent batch auctions (see Placing orders), so maker/taker is decided per matched pair inside the batch:

Where paid fees appear

Every fill records the fee actually charged to your side in its fee field (with the exact integer in fee_e18_raw). The field is present on all fill-returning endpoints — GET /v0/orders/{order_id}/fills, GET /v0/fills/by-user/{user_id}, and GET /v0/fills/by-market/{market_id}. When fees are switched off, fee is 0.

Fees are settled from your margin balance together with the fill, and the pre-trade margin check is fee-inclusive: an order that could not cover its own fee on top of the required margin is rejected rather than partially charged.