curl --request GET \
--url https://api.unitedmarket.ai/marketsconst options = {method: 'GET'};
fetch('https://api.unitedmarket.ai/markets', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.unitedmarket.ai/markets"
response = requests.get(url)
print(response.text){
"data": [
{
"id": "<string>",
"conditionId": "<string>",
"question": "<string>",
"polymarketSlug": "<string>",
"status": "<string>",
"feeRateBps": 100,
"feeRateBpsOverride": null,
"startTimestamp": "2023-11-07T05:31:56Z",
"matchStartTime": "2023-11-07T05:31:56Z",
"matchEndTime": "2023-11-07T05:31:56Z",
"endTimestamp": "2023-11-07T05:31:56Z",
"outcomes": [
{}
]
}
],
"pagination": {
"page": 1,
"pageSize": 60,
"total": 123,
"totalPages": 123,
"hasNext": true,
"hasPrev": true
}
}List markets
Returns public markets with optional filtering and pagination. The envelope is { data, pagination }, not a bare array. Search is search (not q). Prefer page / pageSize; limit / offset are aliases. Production clamps page size (default 60, max 250); non-numeric values fall back to 60. Unknown sortBy values fall back to newest rather than 400.
curl --request GET \
--url https://api.unitedmarket.ai/marketsconst options = {method: 'GET'};
fetch('https://api.unitedmarket.ai/markets', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.unitedmarket.ai/markets"
response = requests.get(url)
print(response.text){
"data": [
{
"id": "<string>",
"conditionId": "<string>",
"question": "<string>",
"polymarketSlug": "<string>",
"status": "<string>",
"feeRateBps": 100,
"feeRateBpsOverride": null,
"startTimestamp": "2023-11-07T05:31:56Z",
"matchStartTime": "2023-11-07T05:31:56Z",
"matchEndTime": "2023-11-07T05:31:56Z",
"endTimestamp": "2023-11-07T05:31:56Z",
"outcomes": [
{}
]
}
],
"pagination": {
"page": 1,
"pageSize": 60,
"total": 123,
"totalPages": 123,
"hasNext": true,
"hasPrev": true
}
}Query Parameters
Search market question, description, ids, polymarket slug, or group title. This is not q.
Filter by category.
Filter markets by tag slug.
Filter by sub-tag slug.
Filter by market group id.
Filter by exact market group slug.
Filter by group slug prefix (for example fifa-2026-top32-).
When true or 1, only markets with no groupId.
true, 1 Filter by sports bet type name (for example moneyline).
Market lifecycle status.
OPEN, CLOSED, RESOLVED, CANCELLED On-chain CLOB registration status.
PENDING, REGISTERED, FAILED Exclude bet types hidden from sports event lists.
true, 1 Include markets missing outcome token ids (admin tooling).
true, 1 Include markets whose tag is ARCHIVED (admin tooling; hidden from public listings by default).
true, 1 Listing order. Defaults to newest. Recurring oracle windows store volume on the CLOB, so volume ranks those windows last.
newest, volume, endingSoon Page number. Used with pageSize. Alternative to offset.
x >= 1Items per page. Alias of limit when page / pageSize are omitted. Production clamps to 250.
1 <= x <= 250Page size. Markets and similar list endpoints clamp instead of 400: default 60, maximum 250, non-numeric values fall back to 60, and values below 1 become 1. Order list endpoints validate strictly and do return 400. The response pagination object uses page / pageSize.
1 <= x <= 250Number of items to skip.
x >= 0