Surfaces

API reference

The REST API: submit a verification, poll it, read the verdicts.

The engine is a small REST API at https://calma-engine.fly.dev. Authenticate every request with a bearer API key. Verification is async: you submit a repo, get a job id, and poll it.

Submit a verification

curl https://calma-engine.fly.dev/api/verify \
  -H "Authorization: Bearer $CALMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"repo":"owner/repo","deep":true}'

Body fields

FieldTypeDefaultMeaning
repostringowner/name or a GitHub URL
deepboolfalsere-run the code (vs a fast, no-run validity check)
entrystringautoentrypoint override, e.g. run.py
pip_installstring[]autoextra dependencies
artifact_reproboolfalsealso verify committed result files regenerate (see below)

Returns { "id": "…", "tier": "pro", "deep": true }.

Poll a job

curl https://calma-engine.fly.dev/api/jobs/<id> -H "Authorization: Bearer $CALMA_API_KEY"

The job carries status (queuedrunningdone/error), a live progress line, per-claim claims (each with a verdict), and counts. List your recent scans with GET /api/jobs; get the full run log as plain text with GET /api/jobs/<id>/logs.

Endpoints

MethodPathReturns
POST/api/verifysubmit a scan → {id}
GET/api/jobsyour recent scans (newest first)
GET/api/jobs/{id}one scan: claims + verdicts + counts
GET/api/jobs/{id}/logsthe full run log (plain text)
GET/api/usageyour live meter (scans, budget, tier)

Artifact reproduction

For a "reproduce the paper" repo — one that ships a repro script + committed result files (leaderboard.csv, metrics.json) whose numbers come from custom code — set "artifact_repro": true. Calma re-runs the repro entrypoint and diffs the regenerated result files against the committed ones, reporting how many committed numbers reproduce identically (and naming any that don't). It reports reproduced / not-reproduced / incomplete — never a false "reproduced".