API Reference

REST API — api.obligationsign.com

Full endpoint reference. All requests require Bearer token authentication except the public log endpoints.

Bearer authJSON:API

Authentication

All endpoints on api.obligationsign.com require a Bearer token:

Authorization: Bearer agts_live_...

Obtain your API key via POST /auto-register (free trial) or from the dashboard. Keys are prefixed agts_live_ (production) or agts_test_ (test mode).

The public log endpoints (log.obligationsign.com/agts/v1/log/*) are unauthenticated — they are public by protocol specification.

Endpoints

MethodPathAuthDescription
ENROLLMENT
POST/auto-registerNoneProvision trial tenant. Returns api_key, tenant_id, node_id, log_url, dashboard URL.
GET/accountBearerTenant info, tier, trial status, leaf count, subscription_id.
POST/api-key/rotateBearerRotate API key. Old key expires after 24h.
GOVERNANCE
POST/governance/evidenceBearerSubmit gate evidence. Assembles proof bundle → validator round → envelope → log admission. Returns leaf_hash, compliance_url.
GET/governance/report/:artifact_hashBearerRetrieve AGTS_COMPLIANCE_REPORT_V1 for a proof bundle. Export (JSON/Markdown) requires L2.
GET/governance/chainBearerPaginated list of proof bundles for tenant. Query params: page, limit, from, to.
GET/governance/statusBearerCurrent clearinghouse state: lifecycle, HCE observables, consecutive_fails, trial_leaves_remaining.
CLOSED LOOP (L2+)
POST/governance/executionBearerSubmit execution trace against an authorization leaf. Triggers variance computation. Returns exec_leaf_hash, variance_leaf_hash.
GET/governance/variance/:auth_leaf_hashBearerRetrieve AGTS_VARIANCE_RECORD_V1 for an authorization leaf.
GET/governance/triple-leaf/:auth_leaf_hashBearerRetrieve all three leaves (auth + exec + variance) for a governed action.
TRANSPARENCY LOG (public)
GET/agts/v1/log/sthNoneCurrent Signed Tree Head. Fields: log_id, tree_size, root_hash, timestamp, log_signature, witness_signatures.
GET/agts/v1/log/leaf?index=NNoneLeaf hash + envelope reference at index N.
GET/agts/v1/log/proof?leaf_hash=HNoneMerkle inclusion proof for leaf hash H.
GET/agts/v1/log/consistency?from=M&to=NNoneConsistency proof between tree sizes M and N.
WEBHOOKS
POST/webhooksBearerRegister webhook endpoint. Body: {url, events[], secret?}.
GET/webhooksBearerList registered webhooks.
DELETE/webhooks/:idBearerRemove webhook.

POST /governance/evidence

The core endpoint. Submit governance evidence for a decision. Returns a canonical leaf hash.

Request body

{ "subject_id": "customer-chatbot:response-policy:v1.2", "gate_results": { "G1": { "result": "PASS", "confidence_interval_lower": 0.80, "confidence_interval_upper": 0.95, "bootstrap_iterations": 10000 }, "G2": { "result": "PASS", "causal_attribution": true, "ablation_delta": 0.031 }, "G3": { "result": "PASS", "protected_metrics": { "toxicity_score": 0.02, "safety_score": 0.96 } }, "G4": { "result": "PASS", "evidence_class": "HOOKED" }, "G5": { "result": "PASS", "operator_id": "alice@example.com" } }, "evidence": { "dataset_provenance_hash": "<sha256-hex>", "evaluation_trace_hash": "<sha256-hex>", "ablation_execution_log_hash": "<sha256-hex>", "capability_certificate_hash": "<sha256-hex>" }, "replay_seed": "<hex-or-uri>", "state_before_hash": "<sha256-hex>", "state_after_hash": "<sha256-hex>" }

Response (201 Created)

{ "leaf_index": 42, "leaf_hash": "8f3a1b...", "artifact_hash": "c7d9e2...", "compliance_url": "https://api.obligationsign.com/governance/report/c7d9e2...", "replay_url": "https://obligationsign.com/replay?leaf=8f3a1b...", "sth": { "tree_size": 43, "root_hash": "...", "timestamp": "2026-03-14T14:30:00Z", "log_signature": "..." } }

Gate failure response (422 Unprocessable Entity)

{ "error": "GATE_FAILURE", "gates_failed": ["G1", "G3"], "details": { "G1": "confidence_interval_lower (0.62) is below the declared threshold (0.70)", "G3": "protected metric toxicity_score (0.15) exceeds declared maximum (0.05)" }, "action": "ACTION_BLOCKED" }

Error codes

HTTP statusError codeMeaningResolution
400INVALID_REQUESTMissing required field or invalid formatCheck request body against schema above
401UNAUTHORIZEDMissing or invalid Bearer tokenCheck api_key; rotate if needed
403TIER_INSUFFICIENTAction requires higher tierSee pricing for tier capabilities
409TRIAL_EXHAUSTEDFree tier: 5-leaf limit or 72h window reachedUpgrade to Pay-as-you-govern
422GATE_FAILUREOne or more gates rejected the evidenceCheck gates_failed and details fields
422PARENT_AUTH_NOT_FOUNDExecution trace references non-existent auth leafVerify parent_auth_leaf_hash corresponds to an admitted leaf
422EVIDENCE_CLASS_INVALIDG4 evidence_class not in {HOOKED, ATTESTED, INSTRUMENTED}Use only the three valid evidence classes
429RATE_LIMITEDToo many requestsFree: 100 leaves/day. Paid tiers: higher limits. Retry-After header is set.
500INTERNAL_ERRORLog worker or validator network errorCheck /log for STH status. Retry with exponential backoff.

Rate limits

TierLeaves/dayAPI requests/min
Trial (L1)100 (hard cap: 5 total)60
Pay-as-you-govern (L2)Depends on credit balance300
Certified (L2+)Unlimited (shared log)1,000
Networked (L4)Unlimited (dedicated log)Custom
Webhook reference → Normative specification → Get your API key →