Probdesk API
The terminal's data in your own tools, as JSON: each outcome's price on each market, the gaps, the history and the alerts. Read only, with the Desk plan.
Access key
Create your key from your account, under « API access ». It is shown only once. Send it in the Authorization header of every request:
Authorization: Bearer pd_live_...Never put it in a URL or in public code. If it leaks, replace it from your account: the old one stops working at once.
Rate limit
60 requests per minute per account. The X-RateLimit-Remaining header tells you what is left. Beyond that the response is 429, with a Retry-After header in seconds. Prices are refreshed every 30 seconds: polling faster brings nothing.
GET /api/v1/terminal
Every game we follow, in real time. For each outcome (dom, nul, ext): the price on each market (bid, ask and mid, as a probability from 0 to 1), the gap between markets and the best buy, fees included. Optional parameter: sport (foot, basket, fus, hockey, baseball, tennis, mma, cricket, rugby, volley, handball, esport, tt, autre).
curl -H "Authorization: Bearer $PROBDESK_CLE" "https://www.probdesk.com/api/v1/terminal?sport=basket"Example response
{
"maj": "2026-11-04T09:30:12Z",
"lignes": [
{
"cle": "polymarket:51234",
"sport": "Basketball",
"cat": "basket",
"comp": "nba",
"h": "Boston Celtics",
"a": "New York Knicks",
"ko": "2026-11-05T00:30:00Z",
"direct": false,
"sources": ["bookmakers", "kalshi", "polymarket"],
"liens": {"polymarket": "https://polymarket.com/event/...", "kalshi": "https://kalshi.com/markets/..."},
"valeur": 0.0248,
"issues": [
{
"cle": "dom",
"prix": {
"polymarket": {"bid": 0.61, "ask": 0.62, "mid": 0.615},
"kalshi": {"bid": 0.55, "ask": 0.57, "mid": 0.56},
"bookmakers": {"mid": 0.612, "n": 9}
},
"ecart": 0.055,
"achat": {"source": "kalshi", "ask": 0.57, "cout": 0.5872, "juste": 0.612, "valeur": 0.0248}
}
]
}
]
}GET /api/v1/historique
An outcome's history on each market, as [Unix timestamp, probability] pairs. Parameters: c, the game id (the cle field of the terminal); i, the outcome (dom, nul or ext); d, the range (1j, 7j, max for 30 days, or 90j).
curl -H "Authorization: Bearer $PROBDESK_CLE" "https://www.probdesk.com/api/v1/historique?c=polymarket:51234&i=dom&d=7j"Example response
{
"cle": "polymarket:51234", "issue": "dom", "duree": "1j",
"series": {
"polymarket": [[1762212600, 0.6], [1762212900, 0.605]],
"kalshi": [[1762212660, 0.57], [1762212960, 0.56]]
}
}GET /api/v1/alertes
Games that have not started where one outcome shows at least a minimum gap between two markets, largest first. Optional parameters: seuil, in points from 2 to 20 (defaults to your email alert setting, otherwise 5); sports, a comma-separated list.
curl -H "Authorization: Bearer $PROBDESK_CLE" "https://www.probdesk.com/api/v1/alertes?seuil=4&sports=foot,basket"Example response
{
"maj": "2026-11-04T09:30:12Z", "seuil": 0.05, "sports": [],
"alertes": [
{"cle": "polymarket:51234", "sport": "basket", "competition": "nba", "h": "Boston Celtics", "a": "New York Knicks",
"ko": "2026-11-05T00:30:00Z", "issue": "dom", "ecart": 0.055,
"prix": {"polymarket": 0.615, "kalshi": 0.56, "bookmakers": 0.612},
"achat": {"source": "kalshi", "ask": 0.57, "cout": 0.5872, "juste": 0.612, "valeur": 0.0248}}
]
}Errors
| Status | Code | Meaning |
|---|---|---|
| 401 | cle_absente | No key in the Authorization header. |
| 401 | cle_invalide | Unknown or replaced key. |
| 403 | desk | The Desk subscription is no longer active. |
| 400 | parametre | Missing or invalid parameter. |
| 429 | limite | Too many requests: wait Retry-After seconds. |
Good to know
Probdesk places no orders and holds no funds: the API is for reading. Information, not advice. Questions: contact@probdesk.com.