API Reference

Market Data

Every endpoint on this page is public and needs no authentication. The shapes below are the payload of the response envelope. Endpoints that take a tokenId expect the decimal token ID of one outcome, as listed in the market's tokens array.

Server Time

GET /time returns the server time in Unix seconds as an integer payload. Use it to keep POLY_TIMESTAMP within the 30-second window.

Markets

EndpointReturns
GET /marketsA page of markets, newest first, including closed and resolved markets. Paginated with nextCursor
GET /markets/{conditionId}One market. Returns 404 if no market has that condition ID

A market object:

{
  "conditionId": "0x...",
  "questionId": "0x...",
  "question": "...",
  "description": "...",
  "image": "...",
  "endDateIso": "2026-12-31T00:00:00Z",
  "tokens": [
    { "tokenId": "1234...", "outcome": "YES", "winner": false },
    { "tokenId": "5678...", "outcome": "NO",  "winner": false }
  ],
  "minimumOrderSize": 0.01,
  "minimumTickSize": 0.01,
  "active": true,
  "closed": false,
  "acceptingOrders": true,
  "negRisk": false,
  "makerBaseFee": 0,
  "takerBaseFee": 0
}

active and acceptingOrders are true only while the market is active, and closed is their inverse. The values in the example are illustrative.

Market Parameters

EndpointResponse
GET /tick-size?tokenId={"minimumTickSize":<number>}
GET /neg-risk?tokenId={"negRisk":false}. Starzip markets are not negative-risk markets
GET /fee-rate?tokenId={"baseFee":<bps>}, the market's taker fee rate in basis points. Every order must carry this value in feeRateBps. The rate can change, so read it just before you sign

A tokenId that is not a decimal string returns 400. An unknown token returns 404.

Order Book

EndpointBehavior
GET /book?tokenId=The book for one token
POST /booksBody [{"tokenId":"..."}, ...] with 1 to 500 tokens. Returns an array of books. If any token is unknown, the whole request returns 404. If the requested books hold more than 50,000 price levels in total, it returns 400; ask for fewer tokens
{
  "market": "0x<conditionId>",
  "assetId": "<tokenId>",
  "timestamp": "1760000000000",
  "hash": "<sha1 hex>",
  "bids": [ { "price": "0.48", "size": "120" } ],
  "asks": [ { "price": "0.52", "size": "80" } ],
  "minOrderSize": "1",
  "tickSize": "0.01",
  "negRisk": false,
  "lastTradePrice": "0.5"
}
  • timestamp is in Unix milliseconds.
  • Bids are in ascending price order and asks in descending order, so the best price is the last entry of each list, not the first.
  • The book merges orders on both outcomes of the market. A BUY order for the other outcome at price p appears here as an ask at 1 - p, and a SELL order for the other outcome at p appears as a bid at 1 - p. Sizes at the same price are summed.
  • lastTradePrice is "0.5" until the token has traded.
Book and price endpoints return 503 order books are loading, retry shortly for a short time after the service starts. Retry after a brief wait.

Prices

EndpointResponseNotes
GET /price?tokenId=&side={"price":"0.48"}side=BUY returns the best bid. side=SELL returns the best ask. Returns 404 if that side of the book is empty
GET /midpoint?tokenId={"mid":"0.50"}Needs both a bid and an ask, otherwise 404
GET /spread?tokenId={"spread":"0.04"}Needs both a bid and an ask, otherwise 404
GET /last-trade-price?tokenId={"price":"0.5","side":""}Before the first trade, price is "0.5" and side is empty

Price History

GET /prices-history returns the price series of one outcome token, oldest first, for charts and backtests.

ParameterMeaning
marketRequired. A token ID, not a condition ID
intervalOne of 1h, 6h, 1d, 1w, 1m, max, all, counted back from now
startTs, endTsUnix seconds. Start is inclusive, end is exclusive. Use these or interval, not both
fidelityMinutes per point, default 1
{ "history": [ { "t": 1760000000, "p": 0.48 }, { "t": 1760000060, "p": 0.49 } ] }
  • With no interval and no range, the full history is returned.
  • A request that would return more than 10,000 points is rejected with 400. Raise fidelity or narrow the range.

Indices

PoR markets resolve on published spending indices. These endpoints return the index definitions, release schedule, and monthly values.

EndpointReturns
GET /indicesActive indices ordered by code. Optional filters code and country. Each index carries its source agency, latest and next release, and the last 24 months of values
GET /indices-history?code=Monthly values of one index, oldest first. Optional from and to as YYYY-MM; the default is the 24 months ending this month
{
  "code": "<index code>",
  "history": [
    { "period": "2026-06", "value": "...", "yoy": "...", "release": null }
  ]
}
  • yoy is the year-over-year change in percent as a decimal string, or empty when there is no value a year earlier.
  • A release has a status of SCHEDULED, RELEASED, DELAYED, or INVALID, with scheduledAt and releasedAt.
  • /indices returns an empty array when no index matches. /indices-history returns 404 for an unknown code.