API

Tout ce que le site fait, sur HTTP: énoncez une revendication et la barre qu'il doit effacer, siègez un panel, et sondage jusqu'à ce que l'arbitre ait réglé tous les critères. Même panel, même facturation, mêmes limites de dépenses — pas de navigateur.

Vos clés

Les clés sont créées à partir de votre compte. Connectez-vous ou créez-en un — les nouveaux comptes obtiennent un crédit de départ, ce qui est suffisant pour un vrai match.

Inscription Connexion
Authentification

Envoyer la clé comme un jeton porteur sur chaque requête. C'est un titre de créance qui peut dépenser votre solde, alors traitez-la comme un mot de passe: côté serveur seulement, jamais dans un navigateur, jamais dans un dépôt. Une clé divulguée est révoquée de cette page et cesse de fonctionner immédiatement.

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

URL de base: https://theorem.chat/api/v1/. Les demandes et réponses sont JSON. La version est dans le chemin, donc un changement de rupture est livré comme v2 et votre code continue de fonctionner.

POST /api/v1/matches/

Démarrer un match. Seul le but est requis : laisser le panneau dehors et une ligne par défaut est assise de différents fournisseurs, car les modèles formés sur le chevauchement des données partagent des points aveugles et un panneau qui est d'accord avec lui-même n'est pas une preuve. Le match est en file d'attente immédiatement et travaillé par un serveur, de sorte que la requête retourne dès qu'il est accepté.

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

Champs

  • goal — la revendication, dans vos propres mots.
  • rigor / rigor_preset — La barre que l'arbitre vous tient à, mot à mot ou par nom: standard, publication, formel, prix, décision. Un preset inconnu est refusé plutôt que échangé tranquillement contre le défaut — être jugé contre un standard que vous n'avez pas demandé est pire qu'une erreur.
  • seats — deux à six sièges de débat, chacun un modèle id de GET /api/v1/modèles/ et une position facultative.
  • referee — le modèle qui régit les critères et revérifie les preuves.
  • max_rounds, usd_ceiling — L'atteinte du plafond fait une pause sur le match plutôt que de le dépasser, et une pause sur match reprend exactement là où il s'est arrêté.
  • public — publier le match terminé à la galerie publique.
GET /api/v1/matches/{token}/

Tout le match: statut, critères d'acceptation et comment chacun a été réglé, le grand livre des résultats établis, les preuves derrière chaque décision, et le verdict une fois qu'il y en a un. Un match court pendant des minutes à des heures, donc sondage toutes les quelques secondes pendant la vie — la réponse vous indique quand arrêter.

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

Statuts : en file d'attente, en cours d'exécution, en pause, needs_funds, résolu, épuisé, bloqué, échoué. Les quatre derniers sont terminal; en pause, needs_funds, épuisé et bloqué peut être repris.

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

Donnez un arrêt match tours de plus ou plus de budget. Tout ce que le panel établi est conservé — les résultats sont écrits à un grand livre une fois et jamais re-découvert, et enregistrés des extrémités mortes l'arrêtent en marchant à nouveau dans une approche qui a déjà échoué.

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"}'
Le reste
  • GET /api/v1/ — ce qui existe, donc un client peut trouver son chemin sans cette page.
  • GET /api/v1/models/ — modèles assimilables avec leur niveau, fenêtre contextuelle et des taux par million de jeton. La même liste, comme une page.
  • GET /api/v1/matches/ — votre matches, nouveau premier; filtrez par statut, page avec limite et offset.
  • GET /api/v1/account/ — solde, dépenses à vie et que vous soyez sur un crédit prépayé ou votre propre clé d'inférence.
  • GET /api/v1/keys/, DELETE /api/v1/keys/{prefix}/ — liste et abrogation des clés. La première clé ne peut être frappée ici, dans un navigateur.
Erreurs

Chaque échec a la même forme. Branche sur le code, qui est stable; message est prose et peut être reformulé.

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

401 pour une clé manquante ou révoquée, 402 lorsque le solde est vide, 404 pour un jeton qui n'est pas le vôtre, 409 pour un match qui est déjà en cours, 429 lorsque vous allez trop vite, 400 pour tout ce que la demande elle-même a mal tourné.

Limites de taux

Compte par clé : 240 lis et 30 match commence une minute. Déplacez-vous volontairement — ce qui limite un match c'est qu'il dépense votre solde, et ceux-ci sont ici pour arrêter une boucle de réessayer ou un pollinisateur qui court à plat.

La facturation est identique au site : vous payez par jeton au taux publié par modèle, à partir de crédit prépayé ou de votre propre clé. Comment fonctionne la facturation