Skip to main content

Overview

As a builder, you route orders for your end-users using impersonation. Every order endpoint works the same as for regular traders — you just add the X-Builder-Customer-Id header.
Before routing orders, ensure the end-user has been onboarded to the target exchange. See User Management.

Placing an order

POST /api/v1/orders?exchange={exchange}

Parameters

exchange
string
required
Exchange identifier: polymarket or kalshi.
X-API-Key
string
required
Your builder API key.
X-Builder-Customer-Id
string
required
The end-user’s customer_id.
market_id
string
required
Exchange-native market ID.
outcome
string
required
"Yes" or "No" (binary), or outcome name (categorical).
side
string
required
"buy" or "sell".
price
number
required
Limit price (0.01–0.99 for binary).
size
number
required
Number of contracts.
params
object
Optional exchange-specific parameters.
KeyValuesDescription
order_typegtc (default), ioc, fokTime-in-force / execution type
credentials
object
Optional per-request credentials. Skips stored credentials.

Response

id
string
Order identifier.
market_id
string
Market the order was placed on.
outcome
string
The outcome being traded.
side
string
"buy" or "sell".
price
number
Order price.
size
number
Total order size.
filled
number
Amount filled so far.
status
string
pending, open, filled, partially_filled, cancelled, or rejected.
created_at
string
ISO 8601 creation timestamp.
curl -X POST "https://api.parsecapi.com/api/v1/orders?exchange=polymarket" \
  -H "X-API-Key: pk_live_YOUR_BUILDER_KEY" \
  -H "X-Builder-Customer-Id: CUSTOMER_ID" \
  -H "Content-Type: application/json" \
  -d '{
    "market_id": "0x1234abcd",
    "outcome": "Yes",
    "side": "buy",
    "price": 0.55,
    "size": 100
  }'
{
  "id": "order_abc123",
  "market_id": "0x1234abcd",
  "outcome": "Yes",
  "side": "buy",
  "price": 0.55,
  "size": 100,
  "filled": 0,
  "status": "open",
  "created_at": "2026-02-24T15:30:00Z"
}

Placing an order with fee escrow

To collect fees on an order, include the fee_auth object signed by the end-user’s wallet. See Fee Escrow for details.
curl -X POST "https://api.parsecapi.com/api/v1/orders?exchange=polymarket" \
  -H "X-API-Key: pk_live_YOUR_BUILDER_KEY" \
  -H "X-Builder-Customer-Id: CUSTOMER_ID" \
  -H "Content-Type: application/json" \
  -d '{
    "market_id": "0x1234abcd",
    "outcome": "Yes",
    "side": "buy",
    "price": 0.55,
    "size": 100,
    "fee_auth": {
      "order_id": "0xabc123...",
      "payer": "0xUserWalletAddress",
      "fee_amount": "250000",
      "deadline": 1740500000,
      "signature": "0x..."
    },
    "payer_address": "0xUserWalletAddress",
    "signer_address": "0xUserWalletAddress"
  }'

Listing orders

GET /api/v1/orders?exchange={exchange}
curl "https://api.parsecapi.com/api/v1/orders?exchange=polymarket" \
  -H "X-API-Key: pk_live_YOUR_BUILDER_KEY" \
  -H "X-Builder-Customer-Id: CUSTOMER_ID"

Getting an order

GET /api/v1/orders/:order_id?exchange={exchange}
curl "https://api.parsecapi.com/api/v1/orders/ORDER_ID?exchange=polymarket" \
  -H "X-API-Key: pk_live_YOUR_BUILDER_KEY" \
  -H "X-Builder-Customer-Id: CUSTOMER_ID"

Cancelling an order

DELETE /api/v1/orders/:order_id?exchange={exchange} If fee escrow is active on the order, the escrowed fee is automatically refunded to the payer’s wallet on cancellation.
curl -X DELETE "https://api.parsecapi.com/api/v1/orders/ORDER_ID?exchange=polymarket" \
  -H "X-API-Key: pk_live_YOUR_BUILDER_KEY" \
  -H "X-Builder-Customer-Id: CUSTOMER_ID"

Other endpoints

All standard Parsec endpoints work with builder impersonation:
EndpointMethodDescription
/positionsGETList end-user’s positions
/balanceGETGet end-user’s balance
/fillsGETGet end-user’s trade history
/orderbookGETGet orderbook (no impersonation needed)
/marketsGETList markets (no impersonation needed)
/pingGETCheck exchange connectivity
Read-only market data endpoints (/markets, /orderbook, /trades, /price, /events) do not require X-Builder-Customer-Id — they work with just your builder API key.

Order types

TypeBehaviorSupported
gtcGood-til-cancelled (default)All exchanges
iocImmediate-or-cancelPolymarket, Kalshi
fokFill-or-killPolymarket
Set via params.order_type in the create order request body. Unsupported combinations return 501.