curl --request GET \
--url https://api.polyorderbooks.com/v1/tokens/{token_id}/prices \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.polyorderbooks.com/v1/tokens/{token_id}/prices"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.polyorderbooks.com/v1/tokens/{token_id}/prices', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.polyorderbooks.com/v1/tokens/{token_id}/prices",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.polyorderbooks.com/v1/tokens/{token_id}/prices"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.polyorderbooks.com/v1/tokens/{token_id}/prices")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.polyorderbooks.com/v1/tokens/{token_id}/prices")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"p": 0.71,
"t": "2025-09-05T10:00:00Z"
},
{
"p": 0.73,
"t": "2025-09-05T11:00:00Z"
}
],
"market_id": "618831",
"metadata": {
"count": 2,
"limit": 100
},
"resolution": "1h",
"token_id": "12345",
"token_label": "Yes"
}Polymarket Single Token Price History API — By Token ID
Get the historical price series (probabilities from 0.0 to 1.0) for a single token, addressed by its Polymarket CLOB token id.
Use this when you already know the token id — a persisted outcome id from your own catalog, or the Yes / No token returned by /v1/markets/{id_or_slug}.
When to use the market-scoped route instead: to pull every outcome of a market without knowing any token ids, use /v1/markets/{id_or_slug}/prices.
Pagination limits:
- Default
limit: 100 points per page - Maximum
limit: 200 points per page - Use
cursorfrommetadata.next_cursorto fetch the next page
Aggregation: Prices are averaged when aggregating to higher resolutions.
Format: JSON only. Covers Polymarket crypto and sports markets from the PolyOrderbooks historical archive.
curl --request GET \
--url https://api.polyorderbooks.com/v1/tokens/{token_id}/prices \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.polyorderbooks.com/v1/tokens/{token_id}/prices"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.polyorderbooks.com/v1/tokens/{token_id}/prices', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.polyorderbooks.com/v1/tokens/{token_id}/prices",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.polyorderbooks.com/v1/tokens/{token_id}/prices"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.polyorderbooks.com/v1/tokens/{token_id}/prices")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.polyorderbooks.com/v1/tokens/{token_id}/prices")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"p": 0.71,
"t": "2025-09-05T10:00:00Z"
},
{
"p": 0.73,
"t": "2025-09-05T11:00:00Z"
}
],
"market_id": "618831",
"metadata": {
"count": 2,
"limit": 100
},
"resolution": "1h",
"token_id": "12345",
"token_label": "Yes"
}Authorizations
Path Parameters
Token ID.
1 - 200"12345"
Query Parameters
Inclusive range start. Accepts ISO 8601 timestamp or Unix seconds.
"2025-09-01T00:00:00Z"
"1756684800"
Exclusive range end. Accepts ISO 8601 timestamp or Unix seconds.
"2025-09-05T00:00:00Z"
"1757030400"
Aggregation bucket size.
250ms, 1s, 1m, 5m, 10m, 15m, 1h, 6h, 1d Maximum number of points to return in this page. Default: 100, max: 200.
x >= 1100
Opaque cursor from a previous response metadata.next_cursor.
Restrict results to one category. Omit to search every category this deployment holds.
crypto, sports Response
Historical prices for a single token.
Response for GET /tokens/{token_id}/prices.
Canonical market ID.
"618831"
Requested token ID.
"12345"
Human-readable token label.
"Yes"
Applied resolution.
"1h"
Chronological time series points for the selected token.
Show child attributes
Show child attributes
Pagination metadata for this history page.
Show child attributes
Show child attributes