Trading fees
MNX charges a trading fee on each executed fill. The calculation depends on the market type. Each side pays its own fee: the maker uses the market's maker rate and the taker uses the market's taker rate. MNX charges no trading fee on order placement or cancellation — only executed fills are charged — and nothing on deposits. On-chain operations you send yourself pay normal MegaETH gas.
Withdrawals that MNX relays for you (POST /v0/account/withdraw) carry a flat withdrawal fee, currently 0.1 USDM. Read the exact amount from withdrawal_fee_e18_raw in GET /v0/account/withdraw/config. A delayed direct withdrawal from MarginBank has no MNX fee.
Standard fee schedule
One basis point (bp) is 0.01%. Notional is the fill's trade value: price × quantity. Fees apply to executed opening and closing trades.
| Market type | Maker | Taker |
|---|---|---|
| Perpetuals | 0 | 5 bps (0.05%) of notional |
| Numeric / valuation futures | 0 | 20 bps (0.20%) of notional |
| Binary futures | 0 | quantity × 0.02 × price × (1 − price) |
A $10,000 taker fill in a numeric future costs $20. A $10,000 taker fill in a perpetual costs $5. These fees are based on trade value, not the margin posted to support the position.
Binary futures
Binary futures settle to 0 or 1 USDM per contract. Their trading fee uses the fill price p, expressed between 0 and 1, and the market's fee coefficient c:
fee (USDM) = quantity × c × p × (1 − p)
Standard maker coefficient: c = 0
Standard taker coefficient: c = 0.02For example, at a price of $0.10 (10%), the taker fee is 10% × 90% × 2% = 0.18% of the $1 payout per contract. That is $0.0018 per contract, or $1.80 for 1,000 contracts.
The taker fee is largest at a fill price of 0.50: 0.005 USDM per contract, or 5 USDM for 1,000 contracts. A price of 0.90 gives the same fee per contract as 0.10. The fee approaches zero as the price approaches either endpoint. The coefficient 0.02 does not mean a flat 2% fee on trade value.
Read the current per-market parameters
The schedule above describes the standard defaults. Market-specific settings and fee-free periods can differ. Read the current parameters from GET /v0/markets for the environment you trade in. The per-market contract values govern the fees charged. These examples use testnet, like the getting-started guide; use the production base URL listed there to read mainnet fees.
curl "https://api.testnet.mnx.fi/v0/markets?type=future"
# Standard numeric-futures parameters:
# "maker_fee": 0, "maker_fee_e18_raw": "0",
# "taker_fee": 0.002, "taker_fee_e18_raw": "2000000000000000"
curl "https://api.testnet.mnx.fi/v0/markets?type=binary_future"
# Standard binary-futures parameters (coefficients):
# "maker_fee": 0, "maker_fee_e18_raw": "0",
# "taker_fee": 0.02, "taker_fee_e18_raw": "20000000000000000"
# Both parameters are 0 when fees are switched off.Interpret these fields using the market's type: future and perpetual use fractions of notional; binary_future uses coefficients in the formula above. The *_fee_e18_raw fields carry exact integers scaled by 10¹⁸, matching the raw-integer convention. Exact binary fee calculation rounds down after each step: price × (1 − price), multiplication by the coefficient, and multiplication by quantity, each at 18 decimal places.
Maker or taker?
MNX matches orders in frequent batch auctions (see Placing orders), so maker/taker is decided per matched pair inside the batch:
- When a limit order matches a market order, the limit order is the maker.
- When two orders of the same type match, whether two limit orders or two market orders, the earlier-placed order (time priority) is the maker. Placement time is when the order was submitted, so a triggered stop or take-profit counts from its original placement, not from the moment it triggered.
- A forced liquidation order is the taker against any ordinary order, market orders included, so the order it matches is the maker. When two forced liquidation orders match, the earlier one is the maker.
- In a market's opening batch every order is a limit order and every fill is at the one opening price, so the earlier-placed order of each matched pair is the maker. Where makers pay nothing, as under the standard schedule, it trades free.
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. Opening orders reserve margin plus a fee allowance; an opening order that cannot cover both is rejected. On perpetuals and numeric futures, market orders reserve the taker fee and limit orders reserve the maker fee (0 under the standard schedule). A limit order that would cross the book when placed, and every limit order in a market's opening auction, whose book is sealed, must also have free balance for the taker fee, or it is rejected; bulk placement checks each order this way, against the balance left after the orders before it in the request. If a limit order that takes liquidity cannot cover its margin plus the taker fee when its batch is checked, that order is cancelled. Binary orders reserve the taker fee at its maximum, a price of 0.50; the actual fee uses the executed fill price. Closing fees are paid from the close proceeds and capped at the closing position's equity.