Skip to main content
POST
/
orders
Create Order
curl --request POST \
  --url https://api.limitless.exchange/orders \
  --header 'Content-Type: application/json' \
  --header 'X-API-Key: <api-key>' \
  --data '
{
  "order": {
    "salt": "1778155025318314496",
    "maker": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
    "signer": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
    "tokenId": "19633204485790857949828516737993423758628930235371629943999544859324645414627",
    "makerAmount": 5000000,
    "takerAmount": 10000000,
    "feeRateBps": 0,
    "side": 0,
    "signature": "0x123abc456def789ghi0123abc456def789ghi0123abc456def789ghi0123456789012345678901",
    "signatureType": 2,
    "taker": "0x0000000000000000000000000000000000000000",
    "expiration": "2025-04-30T23:59:59Z",
    "nonce": 42,
    "price": 0.75
  },
  "ownerId": 12345,
  "orderType": "GTC",
  "marketSlug": "biden-vs-trump-2024",
  "postOnly": true,
  "clientOrderId": "client-order-001",
  "onBehalfOf": 12345,
  "timestamp": 1735689600000,
  "recvWindow": 1500
}
'
{
  "order": {
    "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
    "salt": "1778155025318314496",
    "maker": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
    "signer": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
    "tokenId": "19633204485790857949828516737993423758628930235371629943999544859324645414627",
    "makerAmount": "5000000",
    "takerAmount": "10000000",
    "signatureType": 2,
    "signature": "<string>",
    "orderType": "GTC",
    "side": 0,
    "marketId": "<string>",
    "ownerId": 12345,
    "createdAt": "2023-11-07T05:31:56Z",
    "market": {
      "id": 7348,
      "slug": "btc-up-or-down-1-hour",
      "title": "BTC Up or Down - Hourly",
      "yesPositionId": "<string>",
      "noPositionId": "<string>",
      "group": {
        "id": 123,
        "slug": "<string>",
        "title": "<string>"
      }
    },
    "taker": "0x0000000000000000000000000000000000000000",
    "expiration": "2026-04-30T23:59:59Z",
    "nonce": "42",
    "feeRateBps": 0,
    "price": "0.75",
    "updatedAt": "2023-11-07T05:31:56Z",
    "owner": {
      "id": 123,
      "account": "<string>",
      "displayName": "<string>",
      "username": "<string>",
      "imageURI": "<string>"
    }
  },
  "execution": {
    "matched": true,
    "settlementStatus": "MINED",
    "feeRateBps": 25,
    "effectiveFeeBps": 26,
    "totalsRaw": {
      "contractsGross": "1000000",
      "contractsFee": "1000",
      "contractsNet": "999000",
      "usdGross": "500000",
      "usdFee": "500",
      "usdNet": "499500"
    },
    "tradeEventId": "4aa706dd-6c57-4f3c-945a-99818dfd95f1",
    "txHash": "0xabc123",
    "clientOrderId": "client-order-001"
  },
  "makerMatches": [
    {}
  ]
}

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.

Before creating orders:
  1. Fetch market data via Get Market Details to get venue and token IDs
  2. Sign the order using EIP-712 with venue.exchange as verifyingContract
  3. Ensure you have token approvals set up

Optional Fields

FieldTypeDescription
clientOrderIdstringIdempotency key (max 128 chars). If a duplicate is submitted, the server returns 409 Conflict.
onBehalfOfnumberProfile ID of the sub-account to place the order for. Requires a scoped API token with trading scope and a partner relationship with the target profile. The maker and signer in the order must match the sub-account’s wallet address.
postOnlybooleanGTC orders only. When true, the order is rejected if it would immediately match. Guarantees the order rests on the book as a maker order. Default false.
Where does ownerId come from? It is the id field returned by GET /profiles/{address}. For partner sub-accounts, it is the profileId returned by POST /profiles/partner-accounts.
ownerId must match the profile that owns the order (see Programmatic API — EOA flow):
  • Partner EOA + signed order + onBehalfOf: set both onBehalfOf and ownerId to the sub-account’s profileId. order.maker and order.signer must match that sub-account’s wallet. A mismatched ownerId returns 400"Profile ID does not match the order owner".
  • Delegated signing (unsigned order, delegated_signing scope, server wallet sub-account): the server fills in ownerId when it signs — omit the client signature per Delegated Signing below.
  • Trading as yourself (no onBehalfOf): ownerId is your own profile id (the SDK often fills this after fetching your profile).

Delegated Signing

Partners with the delegated_signing scope can omit signature and signatureType from the order object. The server signs the order using a Privy server wallet linked to the target sub-account and sets maker/signer to the server wallet address. See Authentication for details.

Execution Response

The response includes an execution object with settlement details:
FieldTypeDescription
matchedbooleanWhether the order was matched immediately
settlementStatusstringUNMATCHED, MATCHED, MINED, CONFIRMED, RETRYING, or FAILED
tradeEventIdstringTrade event ID (present when matched)
txHashstringOn-chain transaction hash (present when mined)
feeRateBpsnumberFee rate in basis points
effectiveFeeBpsnumberEffective fee rate after rebates
totalsRawobjectRaw execution totals (contractsGross, contractsFee, contractsNet, usdGross, usdFee, usdNet)

Authorizations

X-API-Key
string
header
required

API key for programmatic access. Generate at limitless.exchange -> profile menu -> Api keys.

Body

application/json

Order creation data including signature and order parameters

order
object
required

Order details including signature and amounts

ownerId
number
required

Profile ID of the order owner

Example:

12345

orderType
enum<string>
required

Order type (GTC=Good Till Cancelled, FAK=Fill And Kill, FOK=Fill Or Kill)

Available options:
FAK,
FOK,
GTC
Example:

"GTC"

marketSlug
string
required

Market identifier slug

Example:

"biden-vs-trump-2024"

postOnly
boolean

Reject the order if it would match immediately. Supported only for GTC orders.

Example:

true

clientOrderId
string

Client-provided idempotency key for order placement. If a duplicate is submitted, the server returns 409 Conflict.

Maximum string length: 128
Example:

"client-order-001"

onBehalfOf
number

Profile ID to place order on behalf of (partner flow). Requires an API token with trading scope and a partner relationship with the target profile.

Example:

12345

timestamp
number

Client-stamped order creation time, Unix ms epoch. If omitted, the API stamps Date.now() on receipt. Not part of the EIP-712 signed payload.

Example:

1735689600000

recvWindow
number

Maximum allowed staleness in ms (time between timestamp and server receipt). If omitted, the server default applies (2000 ms). Hard-capped server-side (10000 ms). Sending 0 is rejected — 0 is reserved as the server kill-switch sentinel.

Example:

1500

Response

Order successfully created and matched

order
object
required

Order details including slim market and owner

execution
object
required

Execution and settlement summary

makerMatches
object[]

Maker matches if order was matched immediately