Skip to main content
New markets on Limitless launch on new trading venues. On these venues the trading fee is paid in USDC from your wallet, instead of being part of the signed order. Markets created before the switch stay on their original venue and work exactly as before.

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.
Nothing else changes. The exchange and adapter contracts are the same, your existing USDC and Conditional Token approvals stay valid, and the EIP-712 domain is unchanged.

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.
The exact amount is computed once per match, from that match’s raw totals (6 decimals) summed across every maker order it fills:
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.feeModule covers the fee. A max approval is easiest.

Fees in order results

On new venues, the execution 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: cost includes 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’s collateralAmount is its USDC value before the fee. Read the fee from the order’s execution.
  • On-chain, every match emits TakerOrderMatched from the fee module, with taker, notional, shares and takerFeeAmount.

Addresses

On Base. Always prefer the address returned in venue.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 signs feeRateBps as 0 on new-venue markets, including cancel-replace and delegated orders.
The SDKs don’t send the fee module approval for you. Approve it once per signing wallet, as in the checklist. If you build orders with a low-level builder, such as 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.