API

Alles wat die terrein doen, oor HTTP: staat 'n eis en die balk dit moet duidelike, sitplek 'n paneel en meningspeiling totdat die verwysinge elke maatstaf besleg het. Dieselfde paneel, dieselfde rekening, dieselfde besteding beperk ooit ooit.

Jou sleutels

Keys are created from your account. Sign in, or create one — new accounts get starting credit, which is enough for a real match.

Meld op Meld aan
Verifiëring het gefaal

Stuur die sleutel as 'n draer teken op elke versoek. Dit is' n punt wat kan spandeer jou balans, so behandel dit soos' n wagwoord: bediener-side slegs, nooit in 'n blaaier, nooit in 'n stoorplek.' n leksleutel word teruggetrek van hierdie bladsy en hou dadelik op werk.

curl https://theorem.chat/api/v1/account/ \
  -H "Authorization: Bearer thm_live_xxxxxxxx.xxxxxxxxxxxxxxxx"

Basis URL: https://terem.chat/api/v1/. Versoeke en reaksies is JSON. Die weergawe is in die pad, so 'n breek verandering skepe as v2 en jou kode hou aan werk.

POST /api/v1/matches/

Start a match. Only the goal is required: leave the panel out and a default lineup is seated from different vendors, because models trained on overlapping data share blind spots and a panel that agrees with itself is not evidence. The match is queued immediately and worked by a server, so the request returns as soon as it is accepted.

curl -X POST https://theorem.chat/api/v1/matches/ \
  -H "Authorization: Bearer $THEOREM_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "goal": "Every prime p > 3 satisfies p^2 = 1 (mod 24).",
    "rigor_preset": "formal",
    "seats": [
      {"model": "anthropic/claude-opus-4.5"},
      {"model": "openai/gpt-5", "stance": "Attack the statement."}
    ],
    "max_rounds": 8,
    "usd_ceiling": "2.00",
    "public": false
  }'

Velde

  • goal — eis in jou eie woorde, nodig.
  • rigor / rigor_preset — die balk die verwysinge hou jou aan, werkwoordaim of by name: standaard, publikasie, formele, prys, beslissing. 'n Onbekende voorafskaduwing word geweier eerder as stilletjies uitruil vir die verstek à ̄t word geoordeel teen 'n standaard waarvoor jy nie gevra het nie is erger as 'n fout.
  • seats — twee tot ses debatsitplekke, elke model id van KRY /api/v1/models/ en 'n opsionele houding.
  • referee — die model wat die kriteria bepaal en die bewyse hertoets. Die moeite werd om aan te gee.
  • max_rounds, usd_ceiling — Die match bly eerder stil as om verby te spandeer, en'n gepouse ZQPA gaan voort presies waar dit gestop het.
  • public — publish the finished match to the public gallery.
GET /api/v1/matches/{token}/

The whole match: status, the acceptance criteria and how each was settled, the ledger of established results, the evidence behind every ruling, and the verdict once there is one. A match runs for minutes to hours, so poll every few seconds while live — the response tells you when to stop.

{
  "token": "k3m9x…",
  "status": "solved",
  "round": 5,
  "progress": 100,
  "usd_spent": "0.734120",
  "usd_ceiling": "2.000000",
  "criteria": [
    {"text": "p^2 - 1 is divisible by 8", "status": "met", "settled_round": 2},
    {"text": "p^2 - 1 is divisible by 3", "status": "met", "settled_round": 3}
  ],
  "evidence": [
    {"kind": "computation", "code": "…", "output": "…", "verified": true}
  ],
  "verdict": "…"
}

Statuss: getou, hardloop, stop, behoeftes_funds, opgelos, uitgeput, vasgevang, gehoud, gevaal. Die laaste vier is terminaal; gepouseer, behoeftes_funds, uitgeput en vas gehou kan word.

POST /api/v1/matches/{token}/resume/

Give a stopped match more rounds or more budget. Everything the panel established is kept — results are written to a ledger once and never re-derived, and recorded dead ends stop it walking back into an approach that already failed.

curl -X POST https://theorem.chat/api/v1/matches/$TOKEN/resume/ \
  -H "Authorization: Bearer $THEOREM_KEY" \
  -H "Content-Type: application/json" \
  -d '{"more_rounds": 4, "more_usd": "2.00"}'
Die res
  • GET /api/v1/ — wat bestaan, so 'n kliënt kan vind sy weg sonder hierdie bladsy.
  • GET /api/v1/models/ — sitplek modelle met hul vlak, konteks venster en per-miljoen-totken tempos. Dieselfde lys, as'n bladsy.
  • GET /api/v1/matches/ — your matches, newest first; filter by status, page with limit and offset.
  • GET /api/v1/account/ — balans, lewenslange besteding en of jy vooraf betaalde krediet of jou eie verifensieringsleutel het.
  • GET /api/v1/keys/, DELETE /api/v1/keys/{prefix}/ — lys en herroep sleutels. Die eerste sleutel kan slegs wees gemunt hier, in 'n blaaier.
Foute

Elke mislukking het dieselfde vorm. Tak op kode, wat stabiel is; boodskap is prosa en kan herwoord word.

{"error": {"code": "insufficient_balance",
           "message": "Add credit or connect your own inference key…"}}

401 for a missing or revoked key, 402 when the balance is empty, 404 for a token that is not yours, 409 for a match that is already running, 429 when you are going too fast, 400 for anything the request itself got wrong.

Herhaal beperk

Counted per key: 240 reads and 30 match starts a minute. Loose on purpose — what actually limits a match is that it spends your balance, and these are here to stop a retry loop or a poller running flat out. Over the limit you get 429; poll a running match every few seconds rather than continuously.

Billing is identies aan die tuiste: jy betaal per sein teen die gepubliseerde per-model tempo, van voorafbetaalde krediet of jou eie sleutel. Hoe rekeningery werk