curl --request GET \
--url https://api.coinstats.app/v1/prediction/events \
--header 'X-API-KEY: <api-key>'import requests
url = "https://api.coinstats.app/v1/prediction/events"
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.coinstats.app/v1/prediction/events', 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.coinstats.app/v1/prediction/events",
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.coinstats.app/v1/prediction/events"
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.coinstats.app/v1/prediction/events")
.header("X-API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.coinstats.app/v1/prediction/events")
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{
"success": true,
"timestamp": "2025-06-19T12:00:00.000Z",
"data": [
{
"source": "polymarket",
"linkedEvent": "polymarket-us-nba-bos-det-2026-10-20",
"linkedEventCategory": "<string>",
"sourceId": "<string>",
"eventId": 123,
"slug": "us-election-2024",
"title": "2024 US Presidential Election",
"description": "<string>",
"image": "<string>",
"icon": "<string>",
"startDate": "<string>",
"endDate": "<string>",
"volume": 123,
"volume24hr": 123,
"liquidity": 123,
"competitive": 123,
"active": true,
"closed": true,
"archived": true,
"restricted": true,
"marketIds": [
"<string>"
],
"tagIds": [
"<string>"
],
"seriesId": "<string>"
}
],
"meta": {
"total": 1240,
"limit": 50,
"offset": 0,
"hasMore": true
}
}{
"statusCode": 400,
"message": "Bad Request",
"requestId": "11111111-2222-3333-4444-555555555555",
"path": "<requested-endpoint>"
}{
"statusCode": 401,
"message": "Unauthorized",
"requestId": "11111111-2222-3333-4444-555555555555",
"path": "<requested-endpoint>"
}{
"statusCode": 403,
"message": "Forbidden",
"requestId": "11111111-2222-3333-4444-555555555555",
"path": "<requested-endpoint>"
}{
"statusCode": 404,
"message": "Not Found",
"requestId": "11111111-2222-3333-4444-555555555555",
"path": "<requested-endpoint>"
}{
"statusCode": 409,
"message": "Transactions not synced",
"requestId": "11111111-2222-3333-4444-555555555555",
"path": "<requested-endpoint>"
}{
"statusCode": 429,
"message": "Rate limit exceeded",
"requestId": "11111111-2222-3333-4444-555555555555",
"path": "<requested-endpoint>"
}{
"statusCode": 503,
"message": "Service Unavailable. Please Contact Support"
}List Events
List prediction-market events
curl --request GET \
--url https://api.coinstats.app/v1/prediction/events \
--header 'X-API-KEY: <api-key>'import requests
url = "https://api.coinstats.app/v1/prediction/events"
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.coinstats.app/v1/prediction/events', 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.coinstats.app/v1/prediction/events",
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.coinstats.app/v1/prediction/events"
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.coinstats.app/v1/prediction/events")
.header("X-API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.coinstats.app/v1/prediction/events")
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{
"success": true,
"timestamp": "2025-06-19T12:00:00.000Z",
"data": [
{
"source": "polymarket",
"linkedEvent": "polymarket-us-nba-bos-det-2026-10-20",
"linkedEventCategory": "<string>",
"sourceId": "<string>",
"eventId": 123,
"slug": "us-election-2024",
"title": "2024 US Presidential Election",
"description": "<string>",
"image": "<string>",
"icon": "<string>",
"startDate": "<string>",
"endDate": "<string>",
"volume": 123,
"volume24hr": 123,
"liquidity": 123,
"competitive": 123,
"active": true,
"closed": true,
"archived": true,
"restricted": true,
"marketIds": [
"<string>"
],
"tagIds": [
"<string>"
],
"seriesId": "<string>"
}
],
"meta": {
"total": 1240,
"limit": 50,
"offset": 0,
"hasMore": true
}
}{
"statusCode": 400,
"message": "Bad Request",
"requestId": "11111111-2222-3333-4444-555555555555",
"path": "<requested-endpoint>"
}{
"statusCode": 401,
"message": "Unauthorized",
"requestId": "11111111-2222-3333-4444-555555555555",
"path": "<requested-endpoint>"
}{
"statusCode": 403,
"message": "Forbidden",
"requestId": "11111111-2222-3333-4444-555555555555",
"path": "<requested-endpoint>"
}{
"statusCode": 404,
"message": "Not Found",
"requestId": "11111111-2222-3333-4444-555555555555",
"path": "<requested-endpoint>"
}{
"statusCode": 409,
"message": "Transactions not synced",
"requestId": "11111111-2222-3333-4444-555555555555",
"path": "<requested-endpoint>"
}{
"statusCode": 429,
"message": "Rate limit exceeded",
"requestId": "11111111-2222-3333-4444-555555555555",
"path": "<requested-endpoint>"
}{
"statusCode": 503,
"message": "Service Unavailable. Please Contact Support"
}You will get
You will get
- A paginated list of events (groups of related markets) across Polymarket, Kalshi and Polymarket US.
- Filter by
active,closed, andsource(one venue:polymarket,kalshiorpolymarket-us). - Choose the venues with
view:intl(default) Polymarket and Kalshi,usPolymarket US and Kalshi,allevery venue. - Sort by
volume24hr,volume, orendDate.
Authorizations
API key required to access the endpoints. Generate one from your dashboard at https://openapi.coinstats.app and pass it in the X-API-KEY request header. Never expose your key in client-side code.
Query Parameters
true, false true, false One venue only: polymarket (Polymarket, polymarket.com), kalshi (Kalshi) or polymarket-us (Polymarket US, polymarket.us). Without it, the venues of view.
polymarket, kalshi, polymarket-us volume24hr, volume, endDate asc, desc x <= 10050
0
Which venues are listed when source names none: intl (default) Polymarket and Kalshi, as before Polymarket US was added; us Polymarket US and Kalshi; all every venue. In all each event is listed once: a Polymarket US event linked to its Polymarket twin is that twin's row, which names it in linkedEvent. With source set it no longer picks the rows, but still picks which venues' pairs annotate them (pairedEvents, venueCount). Polymarket US publishes no 24h volume (volume24hr is 0): sort its rows by volume.
intl, us, all Was this page helpful?