D'API

All d'Aktivitéiten, déi d'Websäit iwwer HTTP mécht: eng Demande stellen an d'Bar, déi se muss läschen, e Panel installéieren an offroen, bis de Referee all Kritèren erfëllt huet.

Är Schlëssel

Schlëssel ginn aus Ärem Kont erstallt. Melden Si sech un oder erstellen en neien - nei Konten kréien e Startkredit, deen fir eng richteg Kombinatioun genuch ass.

Anmelden Anmeldung
Authentifizéierung

Den Schlëssel als Bearer-Token bei all Ufro schécken. Et ass eng Identitéitsinformatioun, déi Äre Saldo ka verschwenden, also behandelt et wéi e Passwuert: nëmmen op der Serversäit, ni an engem Browser, ni an engem Repository. E geläscht Schlëssel gëtt vun dëser Säit ofgeruff an funktionnéiert net méi.

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

Basis-URL: https://theorem.chat/api/v1/. Ufroen a Reaktiounen sinn JSON. D'Versioun ass am Plang, sou datt eng Ännerung als v2 verschéckt gëtt an Äre Code weider funktionnéiert.

POST /api/v1/matches/

Eng Kombinatioun starten. Just d'Zil ass néideg: d'Panel erausloossen an eng Standard-Kombinatioun vun verschiddene Verkeefer ass installéiert, well Modeller déi op iwwerlappende Daten trainéiert sinn, hunn déi selwecht blind Spots an eng Kombinatioun déi mat sech selwer iwwereenstemt ass net Beweis. D'Kombinatioun gëtt soufort an d'Warteschlange gesat an vun engem Server beschafft, sou datt d'Ufro zréckkënnt soubal se akzeptéiert gëtt.

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

Felder

  • goal — D'Ufro, mat Ären eegene Wierder. Erfuerderlech.
  • rigor / rigor_preset — D'Bar, déi de Referee Iech ophält, wortwörtlech oder nom Numm: Standard, Publikatioun, Formal, Präis, Entscheedung. Eng onbekannt Vireinstellung gëtt ofgeleent an net fir d'Standard ersat - géint e Standard geriicht ze ginn, deen Dir net gefrot hutt, ass méi schlecht wéi e Feeler.
  • seats — D'Serie besteet aus 20 Episoden, déi all 10 Minutten erëmgespillt ginn, an déi 1. an 2.
  • referee — D'Modell, dat d'Kritèren regéiert an d'Beweiser eriwwerpréift. Et ass derwäert, dofir ze bezuelen.
  • max_rounds, usd_ceiling — Hard Limits. Wann d'Limits erreecht sinn, gëtt d'Spill ënnerbrach an net weidergefouert. Eng ënnerbrach Partie gëtt genau do weidergefouert, wou se gestoppt gouf.
  • public — Verëffentlecht d'fertiggestellte Match an der öffentlichen Galerie.
GET /api/v1/matches/{token}/

D'Gesetz gëtt an zwou Phasen ausgeschafft: d'Gesetz gëtt an der Chamber gestëmmt, an d'Gesetz gëtt an der Chamber an der Chamber gestëmmt, an d'Gesetz gëtt an der Chamber an der Chamber gestëmmt, an d'Gesetz gëtt an der Chamber an der Chamber gestëmmt.

{
  "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": "…"
}

Status: in queue, running, paused, needs_funds, solved, exhausted, stuck, failed. Déi lescht véier sinn Terminaler; paused, needs_funds, exhausted an stuck kënnen weidergefouert ginn.

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

Enger gestoppter Partie méi Ronne oder méi Budget ginn. All d' Informatiounen, déi am Panel festgeluecht goufen, bleiwen dobäi - d' Resultater ginn eemol an e Buch geschriwen an ni méi erofgezunn, an opgezielt Sackgassen verhënneren, datt et zréck an eng Approche geet, déi scho verluer gaangen ass.

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"}'
Rest
  • GET /api/v1/ — wat existéiert, sou datt e Client seng Weeër ouni dës Säit fanne kann.
  • GET /api/v1/models/ — D'Spill ass mat engem 100-Meter-Spillfeld, engem 100-Meter-Spillfeld an engem 100-Meter-Spillfeld ausgestatt. Et ass eng Säiten- oder eng Säiten- a Säiten-Aart.
  • GET /api/v1/matches/ — Äert Match, neist eréischt; Filter no Status, Säit mat Limit an Offset.
  • GET /api/v1/account/ — D'Resultat ass eng präzis,
  • GET /api/v1/keys/, DELETE /api/v1/keys/{prefix}/ — Schlëssel opzielen an zréckzéien. Den éischte Schlëssel kann nëmmen hei, an engem Browser, geprägt ginn.
Fehler

All Feeler huet déi selwecht Form. Branch op Code, deen stabil ass; Message ass Prosa a kann ëmgeschriwwe ginn.

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

D'Zuel vun de Memberen ass 400, an d'Zuel vun de Memberen, déi net an der Partei sinn, ass 401. d'Zuel vun de Memberen, déi an der Partei sinn, ass 402. d'Zuel vun de Memberen, déi net an der Partei sinn, ass 403.

Rate Limits

Gezu pro Schlëssel: 240 Liesungen a 30 Matchen pro Minutt. Loose on purpose — wat eng Matche wierklech limitéiert ass datt et Äre Balance verléiert, an dës sinn do fir eng Retry Loop oder e Poller ze stoppen deen ausläuft. Iwwer d'Limit kritt Dir 429; frot eng laufende Match all puer Sekonnen un an net kontinuéierlech.

D'Bezuelen ass op d'mannst an der Form vun engem Kreditt, deen op d'mannst e puer Mol bezuelt gëtt. Wéi funktionéiert d'Billing