> ## Documentation Index
> Fetch the complete documentation index at: https://docs.limitless.exchange/llms.txt
> Use this file to discover all available pages before exploring further.

# Migrate to the new trading venues

> What changes for API traders and integrators when markets launch on the new trading venues

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

| You trade through | What to do |
| - | - |
| The Limitless web or mobile app | Nothing. The app handles it. |
| An official SDK | Upgrade to a version listed under [SDK versions](#sdk-versions). |
| Your own code that signs orders | Follow the [checklist](#checklist) below. |
| A server wallet (created and managed by Limitless) | Nothing. Its approvals are set up for you. |

## Checklist

<Steps>
  <Step title="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.

    ```json theme={null}
    {
      "venue": {
        "exchange": "0x05c748E2f4DcDe0ec9Fa8DDc40DE6b867f923fa5",
        "adapter": null,
        "feeModule": "0x7B6ffe5bA8B5ec7afB0AaBaE629D12dA5bC62565",
        "feeModuleType": "COLLATERAL"
      }
    }
    ```
  </Step>

  <Step title="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](#addresses).
  </Step>

  <Step title="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](/developers/eip712-signing#field-reference).
  </Step>

  <Step title="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.
  </Step>
</Steps>

**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](/developers/eip712-signing#eip-712-domain) is unchanged.

```typescript theme={null}
import { erc20Abi, maxUint256 } from 'viem';

const API_URL = 'https://api.limitless.exchange';
const USDC = '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'; // USDC on Base

const { venue } = await (await fetch(`${API_URL}/markets/${slug}`)).json();
const isNewVenue = venue?.feeModuleType === 'COLLATERAL';

if (isNewVenue) {
  // Once per fee module, from the wallet that signs orders
  await walletClient.writeContract({
    address: USDC,
    abi: erc20Abi,
    functionName: 'approve',
    args: [venue.feeModule, maxUint256],
  });
}

// legacyFeeRateBps follows the legacy rules: your effectiveFeeRateBps
// on fee-enabled markets, 0 on fee-disabled markets.
const feeRateBps = isNewVenue ? 0 : legacyFeeRateBps;
```

## Addresses

On Base. Always prefer the address returned in `venue.feeModule`.

| Contract | Address |
| - | - |
| Fee module, simple markets | `0x7B6ffe5bA8B5ec7afB0AaBaE629D12dA5bC62565` |
| Fee module, NegRisk markets | `0x01b7dF643247B377D5c39FcC40b9c28B4A827524` |
| USDC | `0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913` |

The exchange and adapter addresses are unchanged. See [Smart Contracts](/user-guide/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.

| SDK | Minimum version |
| - | - |
| [TypeScript](/developers/sdk/typescript/getting-started) (`@limitless-exchange/sdk`) | 1.2.0 |
| [Python](/developers/sdk/python/getting-started) (`limitless-sdk`) | 1.2.0 |
| [Go](/developers/sdk/go/getting-started) (`limitless-exchange-go-sdk`) | v1.2.0 |
| [Rust](/developers/sdk/rust/getting-started) (`limitless-exchange-rust-sdk`) | 1.2.0 |

```bash theme={null}
npm install @limitless-exchange/sdk@^1.2.0
pip install -U "limitless-sdk>=1.2.0"
go get github.com/limitless-labs-group/limitless-exchange-go-sdk@v1.2.0
cargo add limitless-exchange-rust-sdk@1.2.0
```

The SDKs don't send the fee module approval for you. Approve it once per signing wallet, as in the [checklist](#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

| Error | Cause | Fix |
| - | - | - |
| `Insufficient collateral allowance for the order fee.` | The signing wallet hasn't approved USDC to `venue.feeModule`. | Approve USDC to the fee module, then resubmit. |
| `FEE_RATE_MISMATCH` | The order was signed with a non-zero `feeRateBps` on a new venue. | Sign a new order with `feeRateBps` set to `0`. |

For how venues work in general, see [Venue system](/developers/venue-system#new-trading-venues).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.