API Overview
Two hosts: Synpath's hosted data API, and the server you run yourself for market data and trading.
Synpath's REST surface is served from two places, and every page in this reference says which.
| Host | What it serves | Auth |
|---|---|---|
| Hosted by Synpath | Cross-venue matching, and tick-level historical order books and trades | Synpath API key |
| Your own server | Market data at /; order entry, the execution engine, portfolio, risk and keys at /trading | None for market data; an access token for /trading |
Addresses and credentials are on the Authentication page; every request sample in this reference already carries the right one.
Your self-hosted server is synpath serve, one process from pip install synpath. It holds your venue credentials, runs the engine that holds stops, icebergs, TWAPs and orders on a bucket, keeps their journal, and subscribes the venues' streams. Orders never pass through Synpath's servers.
pip install synpath
synpath serve # your self-hosted server: market data at :8000/, trading at :8000/tradingGET /openapi.json (market data) and GET /trading/openapi.json, or offline by synpath schema [--trading], so a TypeScript or Go client is generated rather than written: npx openapi-typescript openapi.json -o synpath.d.ts.Identifiers
A market is named by its Synpath ID, venue:native, in every path and every body: kalshi:KXFEDDECISION-26SEP-C25, polymarket:2252244. Market data routes under /venues/{venue} also accept that venue's bare native id. An order names bucket:<id> the same way to target a bucket. See Synpath IDs.
Timestamps
All timestamps are UTC. Fields named timestamp or ending in _timestamp or _at are integers in milliseconds since epoch, on input and output. Where useful, a sibling ending in _datetime carries the same instant as ISO 8601 (2026-09-17T14:00:00Z).
Prices and sides
Every price is 0 to 1 and is the YES price. An order's side is buy (take YES) or sell (take NO); a book is asked for with ?side=no to see what NO costs. Trading routes carry money as decimal strings so nothing is rounded on the wire.
Lists
Every list is enveloped with its cursor and count; single resources are not.
{ "data": [ ... ], "next_cursor": "eyJjIjoiQ0RJIiwibyI6NX0", "count": 100 }Rate limits
| Host | Limit |
|---|---|
| Your own server | Only the venues' own limits, paced inside the server per venue |
A venue's own limit surfaces as 429 with code rate_limit_exceeded and details.retryable true. See Errors and pagination.

