cURL
curl --request GET \
--url 'https://api.forecast.example/api/v1/markets?view=matched&source=kalshi&limit=100' \
--header 'Authorization: Bearer YOUR_API_KEY'
const response = await fetch(
'https://api.forecast.example/api/v1/markets?view=matched&source=kalshi&limit=100',
{
headers: {
Authorization: 'Bearer YOUR_API_KEY'
}
}
);
const data = await response.json();
import requests
data = requests.get(
"https://api.forecast.example/api/v1/markets",
params={"view": "matched", "source": "kalshi", "limit": 100},
headers={"Authorization": "Bearer YOUR_API_KEY"},
timeout=30,
).json()
{
"markets": [
{
"canonical_id": "KXBTCD-EXAMPLE",
"confidence": 0.97,
"category": "crypto",
"is_active": true,
"kalshi": {
"title": "Bitcoin above 65000",
"source": "kalshi"
}
}
],
"count": 1,
"total": 1,
"view": "matched",
"generated_at": 1761868800000
}
Realtime Data
List live markets
GET
/
api
/
v1
/
markets
cURL
curl --request GET \
--url 'https://api.forecast.example/api/v1/markets?view=matched&source=kalshi&limit=100' \
--header 'Authorization: Bearer YOUR_API_KEY'
const response = await fetch(
'https://api.forecast.example/api/v1/markets?view=matched&source=kalshi&limit=100',
{
headers: {
Authorization: 'Bearer YOUR_API_KEY'
}
}
);
const data = await response.json();
import requests
data = requests.get(
"https://api.forecast.example/api/v1/markets",
params={"view": "matched", "source": "kalshi", "limit": 100},
headers={"Authorization": "Bearer YOUR_API_KEY"},
timeout=30,
).json()
{
"markets": [
{
"canonical_id": "KXBTCD-EXAMPLE",
"confidence": 0.97,
"category": "crypto",
"is_active": true,
"kalshi": {
"title": "Bitcoin above 65000",
"source": "kalshi"
}
}
],
"count": 1,
"total": 1,
"view": "matched",
"generated_at": 1761868800000
}
cURL
curl --request GET \
--url 'https://api.forecast.example/api/v1/markets?view=matched&source=kalshi&limit=100' \
--header 'Authorization: Bearer YOUR_API_KEY'
const response = await fetch(
'https://api.forecast.example/api/v1/markets?view=matched&source=kalshi&limit=100',
{
headers: {
Authorization: 'Bearer YOUR_API_KEY'
}
}
);
const data = await response.json();
import requests
data = requests.get(
"https://api.forecast.example/api/v1/markets",
params={"view": "matched", "source": "kalshi", "limit": 100},
headers={"Authorization": "Bearer YOUR_API_KEY"},
timeout=30,
).json()
{
"markets": [
{
"canonical_id": "KXBTCD-EXAMPLE",
"confidence": 0.97,
"category": "crypto",
"is_active": true,
"kalshi": {
"title": "Bitcoin above 65000",
"source": "kalshi"
}
}
],
"count": 1,
"total": 1,
"view": "matched",
"generated_at": 1761868800000
}
view=matched.
Common query patterns
- matched
- resolving
- catalog
The best current live surface. It pulls matched markets from the engine and supports filtering by
source, category, and search.A narrower Redis-backed slice of markets that are currently in the resolving flow.
Present in the route shape, but not complete enough to market as a finished product yet.
Query parameters
string
default:"catalog"
Market view to return. The most useful live values today are
matched and resolving.string
Filter markets by venue or source, such as
kalshi.string
Filter markets by normalized category.
string
Text search over titles, display names, and canonical identifiers.
string
Sort field for views that support sorting.
string
default:"desc"
Sort direction.
number
default:200
Maximum number of results to return.
number
default:0
Row offset for pagination.
Response fields
object[]
required
Array of returned market objects for the selected view.
number
required
Number of market objects returned in this response.
number
required
Total number of matching objects before any client-side truncation.
string
required
The effective view used to generate the response.
number
Epoch milliseconds when the response was generated.