Limitless runs on Base (Coinbase’s L2) and uses a direct EOA wallet model — no Safe or smart wallet wrapping. Orders are EIP-712 signed by your EOA itself.Documentation Index
Fetch the complete documentation index at: https://docs.delphimarkets.com/llms.txt
Use this file to discover all available pages before exploring further.
At a glance
| Chain | Base (chainId 8453) |
| Wallet model | EOA (direct) |
| Quote token | USDC (6 decimals) |
| Signing | Client-side (EIP-712) |
| Auth | Limitless API key + HMAC secret + EOA private key |
Prerequisites
- A Limitless account (limitless.exchange)
- USDC on Base in your EOA
- Your Limitless API key and HMAC secret (from your account settings)
- The EOA private key associated with your Limitless account
- Your Limitless
ownerId— fetch fromGET /profileson the Limitless API
One-time setup: register credentials
Approving USDC
Your EOA must approve the Limitless CTF Exchange contract (0x05c748E2f4DcDe0ec9Fa8DDc40DE6b867f923fa5) to spend USDC on Base. This is a standard ERC-20 approval. Most users do this through the Limitless UI on first deposit. If you’ve never traded on Limitless from this EOA, place a tiny test trade through their UI to trigger the approval.
Build and place an order
Build parameters
| Field | Type | Description |
|---|---|---|
marketSlug | string | Limitless market slug (URL fragment from the market page). |
tokenId | string | Outcome token ID (uint256 decimal string). |
side | 'BUY' | 'SELL' | |
price | number | Price per share in [0.01, 0.99]. |
size | number | USDC amount, human-readable (e.g. 1 for 1 USDC). |
ownerId | number | Your Limitless owner ID. Required. |
feeRateBps | number? | Default 300 (3%). Limitless’s standard fee. |
How to find your ownerId
Hit Limitless’s/profiles endpoint with your account address:
Query and cancel
Common pitfalls
signatureType: 0 means EOA — don't use 2
signatureType: 0 means EOA — don't use 2
Limitless uses direct EOA signing, not Safe wallet wrapping. The SDK sets
signatureType: 0 automatically. If you’re hand-rolling a payload, don’t copy signatureType: 2 from a Polymarket example — the signature verifier will reject it.Order amounts have integer types in JSON
Order amounts have integer types in JSON
Unlike Polymarket and Predict.fun (which use uint256 strings), Limitless’s API uses JavaScript numbers for
salt, makerAmount, takerAmount, etc. The SDK handles this for you. If hand-rolling, don’t quote them as strings.ownerId is wrong → 'profile not found'
ownerId is wrong → 'profile not found'
Limitless ties orders to their internal profile ID, not your wallet address. Fetch your
id from GET /profiles/{address} once and cache it. If you switch wallets, your ownerId changes too.Fee rate confusion
Fee rate confusion
Limitless’s standard fee is 300 bps (3%) — this is taken from the maker side. The SDK defaults to
300 if you don’t specify feeRateBps. Markets may occasionally run at a different rate; check the market metadata.API reference
POST /api/v1/orders— accepts aSignedLimitlessOrderinsigned_orderPOST /api/v1/users/{userID}/credentials— pass_as the path segment

