Quickstart

1. Get an API key

Beta keys are concierge-minted. Keys look like avk_… and are shown once; send as a Bearer token.

Authorization: Bearer avk_...

2. Compile a rubric

A rubric is your success criteria. Start from a template (see Templates) or write your own. Compilation is idempotent by content hash.

curl -s -X POST $API/v1/rubrics \
  -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d @templates/rag-grounding-check/rubric.json
# -> { "rubric_id": "...", "hash": "..." }

3. Verify a submission

Bounded-sync: wait_ms holds the request open up to 45s and returns the finished verdict when the engine beats the clock. Idempotency-Key makes retries safe.

curl -s -X POST $API/v1/verify \
  -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -H "Idempotency-Key: demo-1" \
  -d '{"rubric_id":"<id>","submission":{"inline":"INV-4821 total $1,250.50"},"options":{"wait_ms":45000}}'
# -> 200 { determination, score, confidence, flagged, criteria: [...], proof_ref }

4. Fetch the signed proof

Every verdict carries an append-only, Ed25519-signed, hash-chained proof. The envelope at payload_uri is the exact signed bytes.

curl -s $API/v1/verifications/$ID/proof -H "Authorization: Bearer $KEY"

5. Re-verify — trust no one, including us

Deterministic re-verification against our published public key, server-side or fully offline with the standalone verifier (tools/verify-proof).

curl -s -X POST $API/v1/verifications/$ID/reverify -H "Authorization: Bearer $KEY"
# -> { ok: true, entries_ok: true, chain_ok: true }

6. Close the loop (optional, improves calibration)

Tell us when a verdict was right or wrong — outcome feedback feeds calibration.

curl -s -X POST $API/v1/verifications/$ID/feedback \
  -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{"outcome":"confirmed_correct"}'