Who needs to do what
Checklist
1
Detect the venue
GET /markets/{slug} returns a venue object. A market is on a new venue when venue.feeModuleType is "COLLATERAL"; the venue then also has a feeModule address. Legacy venues don’t have either field.2
Approve USDC to the fee module
From the wallet that signs your orders, approve USDC to
venue.feeModule. A max approval is easiest, and you need it only once per fee module. Every order except postOnly needs it, both BUY and SELL.Simple and NegRisk (grouped) markets use different fee modules, so read the address from the market rather than hardcoding it. See addresses.3
Sign feeRateBps as 0
On new-venue markets, sign every order with
feeRateBps set to 0, whatever the market’s metadata.fee flag or your profile’s rate. Orders on legacy venues keep the existing fee rate rules.4
Keep a little extra USDC
On new venues a buy needs the order amount plus a fee reserve of 5% of it at the standard rate, whatever the limit price. The fee actually charged is lower; see how the fee is calculated. A sell needs no USDC.
How the fee is calculated
On new venues only the taker pays a fee, always in USDC, and only on fee-enabled markets (metadata.fee: true). The standard rate is 5% (500 bps); a lower rate applies only where Limitless has set a per-profile fee cap. The rate is fixed when the order is accepted.
The fee is the rate × (1 − price) of the trade’s USDC value, with the same formula for buys and sells. At the standard rate:
- Buy: the fee is paid on top of the order cost. Buying 100 shares at $0.40 costs $40.00 plus a $1.20 fee.
- Sell: the fee comes out of the proceeds. Selling 100 shares at $0.40 pays $40.00 minus a $1.20 fee, so you receive $38.80. The fee module collects it after the proceeds arrive, in the same transaction, so a sell doesn’t need a USDC balance.
N is the USDC the taker pays (buy) or receives (sell) before the fee, and S is the shares traded, so N / S is the taker’s average price for the match. The result is rounded half-up to the nearest 10 raw units (0.00001 USDC). There is no minimum fee.
Balance and approval checks
When you place an order on a new venue, the API checks:- Buy: your available USDC covers the order amount plus a fee reserve of your rate × the order amount (5% at the standard rate). The reserve is the most the fee can reach, because a buy can fill at better prices than its limit. The fee charged is the amount above.
- Sell: no USDC balance is needed.
- Both: your USDC approval to
venue.feeModulecovers the fee. A max approval is easiest.
Fees in order results
On new venues, theexecution object in the Create Order and order status responses reports the taker’s fee as follows:
Makers pay no fee, so a maker’s fill reports a fee of
0.
Elsewhere:
GET /portfolio/positions:costincludes the fee. A buy adds it to the cost basis and a sell subtracts it from the proceeds, so PnL is net of fees.GET /portfolio/history: a trade’scollateralAmountis its USDC value before the fee. Read the fee from the order’s execution.- On-chain, every match emits
TakerOrderMatchedfrom the fee module, withtaker,notional,sharesandtakerFeeAmount.
Addresses
On Base. Always prefer the address returned invenue.feeModule.
The exchange and adapter addresses are unchanged. See Smart Contracts for the full list.
SDK versions
Version 1.2.0 of every official SDK detects the venue and signsfeeRateBps as 0 on new-venue markets, including cancel-replace and delegated orders.
OrderBuilder, instead of the order client, set feeRateBps to 0 yourself on new venues. Builders don’t look up the market’s venue.
Errors
For how venues work in general, see Venue system.