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 the fee, so leave some USDC in the wallet beyond what you plan to spend.
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.