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
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"}'
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