ProbdeskFR

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

StatusCodeMeaning
401cle_absenteNo key in the Authorization header.
401cle_invalideUnknown or replaced key.
403deskThe Desk subscription is no longer active.
400parametreMissing or invalid parameter.
429limiteToo 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.