Errors
Every non-2xx answer is one envelope. The code set and each code's HTTP status come from the contract registry.
{ "error": { "code", "message", "issues"?, "details"? } }issues is { path, message }[] and appears on validation_failed. details carries the structured fields of a verdict refusal. Match on code, never on message.
| Code | Status | Operations |
|---|---|---|
| unauthorized | 401 | whoami, keys.reputation, sops.list, sops.get, repoDocs.get, symbols.search, ownership.get, technologies.list, ingest, meetings.get, signals.get, pipeline.status, decisions.list, decisions.get, decisions.verdict, conformance.decision, explorations.list, explorations.get, explorations.findings, sessions.open, sessions.list, sessions.get, sessions.say, sessions.context, sessions.tool, sessions.commit, sessions.confirm, sessions.dismiss, jobs.list, jobs.get, jobs.claim, jobs.recap, jobs.release, jobs.pause, jobs.claimLinked, events.ticket, webhooks.list, webhooks.create, webhooks.delete, webhooks.enable, webhooks.deliveries, webhooks.replay |
| forbidden | 403 | ingest, conformance.decision, explorations.findings, sessions.open, sessions.say, sessions.context, sessions.tool, sessions.commit, sessions.confirm, sessions.dismiss |
| not_found | 404 | keys.reputation, sops.get, repoDocs.get, symbols.search, ownership.get, technologies.list, meetings.get, signals.get, decisions.get, decisions.verdict, conformance.decision, explorations.get, explorations.findings, sessions.get, sessions.say, sessions.context, sessions.tool, sessions.commit, sessions.confirm, sessions.dismiss, jobs.get, jobs.claim, jobs.recap, jobs.release, jobs.pause, jobs.claimLinked, events.ticket, webhooks.delete, webhooks.enable, webhooks.deliveries, webhooks.replay |
| validation_failed | 400 | sops.list, repoDocs.get, symbols.search, technologies.list, ingest, decisions.list, decisions.verdict, conformance.decision, explorations.list, explorations.findings, sessions.open, sessions.say, sessions.context, sessions.tool, sessions.commit, jobs.list, jobs.recap, jobs.pause, events.ticket, webhooks.create, webhooks.deliveries, webhooks.replay |
| conflict | 409 | ingest, decisions.verdict, conformance.decision, explorations.findings, sessions.say, sessions.context, sessions.tool, sessions.commit, sessions.confirm, sessions.dismiss, jobs.claim, jobs.recap, jobs.release, jobs.pause, jobs.claimLinked, webhooks.create, webhooks.enable, webhooks.replay |
| rate_limited | 429 | whoami, keys.reputation, sops.list, sops.get, repoDocs.get, symbols.search, ownership.get, technologies.list, ingest, meetings.get, signals.get, pipeline.status, decisions.list, decisions.get, decisions.verdict, conformance.decision, explorations.list, explorations.get, explorations.findings, sessions.open, sessions.list, sessions.get, sessions.say, sessions.context, sessions.tool, sessions.commit, sessions.confirm, sessions.dismiss, jobs.list, jobs.get, jobs.claim, jobs.recap, jobs.release, jobs.pause, jobs.claimLinked, events.ticket, webhooks.list, webhooks.create, webhooks.delete, webhooks.enable, webhooks.deliveries, webhooks.replay |
| internal | 500 | none directly |
| person_not_found | 404 | none directly |
| person_not_verified | 403 | none directly |
| person_mismatch | 403 | none directly |
| key_not_found | 404 | none directly |
| key_lacks_capability | 403 | decisions.verdict, conformance.decision, sessions.confirm, sessions.dismiss, jobs.claim, jobs.recap, jobs.release, jobs.pause, jobs.claimLinked |
| key_cannot_commit_judgment | 403 | decisions.verdict, conformance.decision, sessions.confirm, sessions.dismiss, jobs.claim, jobs.recap, jobs.release, jobs.pause, jobs.claimLinked |
| answerer_not_a_person | 403 | decisions.verdict |
| answerer_unlinked | 403 | decisions.verdict |
| answerer_not_verified | 403 | decisions.verdict |
| answerer_lacks_capability | 403 | decisions.verdict |
| not_a_judge | 403 | decisions.verdict |
| decision_not_found | 404 | decisions.verdict |