API reference

Rendered from the frozen contract descriptor at /api/openapi.json.

It is the machine-readable contract this reference is drawn from; you can read or download it directly.

POST /v1/survival-events/bilateral

Append a bilateral survival lifecycle event.

Authenticated engine ingress for a marketplace bilateral verdict lifecycle fact. The caller is tenant-bound by its bearer key; replaying the same source, verdict_ref, and state is idempotent.

Request

application/json

Schema: object

Responses

StatusDescriptionContent typeSchemaExamples
201Bilateral survival event appended or replayed idempotently.
400Invalid bilateral event payload.application/problem+jsonProblem
401Missing or invalid bearer API key.application/problem+jsonProblem
413Request body is too large.application/problem+jsonProblem
500Internal server error.application/problem+jsonProblem

POST /v1/verify

Submit a verification (async/202 default; bounded-sync opt-in).

Submit a rubric_id + a submission. The submission is {inline} | {uri} | the Contract 05 typed roles object. For faithfulness/grounding, send the work as `output` and its source as `context[]` — the judge is told which blob is authoritative and treats un-grounded or contradicted claims as violations.

Parameters

NameInRequiredSchema type
Idempotency-Keyheaderfalsestring

Request

application/json

Schema: VerifyRequest

faithfulness
{
  "rubric_id": "7f8e9d6c-1a2b-4c3d-8e9f-0a1b2c3d4e5f",
  "submission": {
    "output": "Q2 revenue rose 12% to $4.2M and monthly churn fell to 1.8%.",
    "context": [
      {
        "label": "source",
        "value": "Q2 results: revenue grew 12% quarter-over-quarter to $4.2M. Monthly churn improved from 2.4% to 1.8%."
      }
    ]
  },
  "options": {
    "wait_ms": 45000
  }
}
input_and_output
{
  "rubric_id": "7f8e9d6c-1a2b-4c3d-8e9f-0a1b2c3d4e5f",
  "submission": {
    "input": "What is the refund window, and do disputes affect it?",
    "output": "Refunds are accepted within 30 days of delivery; an open dispute pauses that clock until resolution."
  }
}
reference
{
  "rubric_id": "7f8e9d6c-1a2b-4c3d-8e9f-0a1b2c3d4e5f",
  "submission": {
    "output": "The capital of France is Paris.",
    "reference": "Paris"
  }
}
evidence
{
  "rubric_id": "7f8e9d6c-1a2b-4c3d-8e9f-0a1b2c3d4e5f",
  "submission": {
    "output": "The customer was refunded in full on 2026-05-14.",
    "evidence": [
      {
        "label": "support-ticket",
        "value": "Ticket #8821: refund of $42.00 issued 2026-05-14."
      }
    ]
  }
}
values
{
  "rubric_id": "7f8e9d6c-1a2b-4c3d-8e9f-0a1b2c3d4e5f",
  "submission": {
    "output": "{\"invoice_number\":\"INV-48213\",\"total\":1250.5,\"currency\":\"USD\"}",
    "values": {
      "total": 1250.5,
      "currency": "USD"
    }
  }
}
legacy_inline
{
  "rubric_id": "7f8e9d6c-1a2b-4c3d-8e9f-0a1b2c3d4e5f",
  "submission": {
    "inline": "INV-4821 total $1,250.50"
  }
}
legacy_content_alias
{
  "rubric_id": "7f8e9d6c-1a2b-4c3d-8e9f-0a1b2c3d4e5f",
  "submission": {
    "content": "The answer text, submitted via the legacy content field."
  }
}
uri_reference
{
  "rubric_id": "7f8e9d6c-1a2b-4c3d-8e9f-0a1b2c3d4e5f",
  "submission": {
    "uri": "https://example.com/artifacts/answer.txt"
  }
}

Responses

StatusDescriptionContent typeSchemaExamples
200Completed verdict (bounded-sync).application/jsonVerificationObject
202Accepted (async).application/jsonVerifyAccepted
400Invalid request.application/problem+jsonProblem
401Missing, invalid or expired bearer API key.application/problem+jsonProblem
403API key lacks the required scope.application/problem+jsonProblem
409Request conflicts with an existing idempotency key.application/problem+jsonProblem
413Request body is too large.application/problem+jsonProblem
500Internal server error.application/problem+jsonProblem

POST /v1/proofs/verify

Publicly verify a signed proof artifact.

Unauthenticated, read-only proof verification. The request carries a signed proof-envelope document already issued by Acretix; the API re-verifies the Ed25519 signature against the published key and returns only summary credential fields. It never re-signs or returns raw claim/evidence content.

Request

application/json

Schema: object

Responses

StatusDescriptionContent typeSchemaExamples
200Proof validity. Valid proofs include a summary credential and SVG badge.application/json
400Invalid proof payload.application/problem+jsonProblem
403Request source is not trusted.application/problem+jsonProblem
413Request body is too large.application/problem+jsonProblem
429Rate limited.application/problem+jsonProblem
500Internal server error.application/problem+jsonProblem

POST /v1/evidence/source-attested

Ingest source-attested evidence (staging).

Accepts a payload signed by a registered source key distinct from the claimant. Verified Ed25519 signatures ingest as source_attested (T1); bad or unverifiable signatures ingest as claimant (T3).

Request

application/json

Schema: SourceAttestedEvidenceRequest

Responses

StatusDescriptionContent typeSchemaExamples
201Evidence packet recorded with an explicit trust tier.application/jsonSourceAttestedEvidenceResponse
400Invalid request.application/problem+jsonProblem
401Missing, invalid or expired bearer API key.application/problem+jsonProblem
404Source not registered for tenant.application/problem+jsonProblem
413Request body is too large.application/problem+jsonProblem
500Internal server error.application/problem+jsonProblem

GET /v1/verifications

List tenant-scoped verifications for the explorer.

Read-only verification explorer. Tenant is resolved from the API key or the request-threaded identity-contract tenant header; the response echoes tenant_id for a load-bearing caller check.

Parameters

NameInRequiredSchema type
statusqueryfalseVerificationStatus
determinationqueryfalsestring
flaggedqueryfalseboolean
fromqueryfalsestring
toqueryfalsestring
limitqueryfalseinteger
offsetqueryfalseinteger

Responses

StatusDescriptionContent typeSchemaExamples
200Tenant-scoped verification list.application/jsonVerificationList
400Invalid filter.application/problem+jsonProblem
401Missing, invalid or expired bearer API key.application/problem+jsonProblem
403API key lacks the required scope.application/problem+jsonProblem
500Internal server error.application/problem+jsonProblem

GET /v1/verifications/{id}

Get a verification status + verdict.

Responses

StatusDescriptionContent typeSchemaExamples
200Verification object.application/jsonVerificationObject
401Missing, invalid or expired bearer API key.application/problem+jsonProblem
403API key lacks the required scope.application/problem+jsonProblem
404Verification not found.application/problem+jsonProblem
500Internal server error.application/problem+jsonProblem

GET /v1/verifications/{id}/proof

Get the signed proof object.

Responses

StatusDescriptionContent typeSchemaExamples
200Proof object.
401Missing, invalid or expired bearer API key.application/problem+jsonProblem
403Access is forbidden.application/problem+jsonProblem
404Proof not found.application/problem+jsonProblem
500Internal server error.application/problem+jsonProblem

GET /v1/verifications/{id}/determination

Get the latest customer review determination (cockpit→adapter round-trip).

The latest single-party customer review decision for a verification (tenant-scoped). A product adapter polls this to finalize a held check; verify reports the decision + consequence marker only (decide-not-execute).

Responses

StatusDescriptionContent typeSchemaExamples
200The latest review determination.
400Invalid request.application/problem+jsonProblem
401Missing, invalid or expired bearer API key.application/problem+jsonProblem
403Access is forbidden.application/problem+jsonProblem
404No determination recorded for this verification.application/problem+jsonProblem
500Internal server error.application/problem+jsonProblem

GET /v1/verifications/{id}/proof/envelope

Download the signed attestation envelope(s) for third-party verification.

Streams the exact canonical bytes that were hashed and signed, plus the signature, so a holder can re-verify offline against the published JWKS (/.well-known/acretix-verify/keys.json). See /docs/verify-a-proof for the recipe.

Responses

StatusDescriptionContent typeSchemaExamples
200Signed proof-envelope document.
401Missing, invalid or expired bearer API key.application/problem+jsonProblem
403Access is forbidden.application/problem+jsonProblem
404No proof recorded.application/problem+jsonProblem
500Internal server error.application/problem+jsonProblem

POST /v1/verifications/{id}/reverify

Re-verify (new evidence / higher tier / focused criterion).

Responses

StatusDescriptionContent typeSchemaExamples
200Re-verify report.
400Invalid request.application/problem+jsonProblem
401Missing, invalid or expired bearer API key.application/problem+jsonProblem
403API key lacks the required scope.application/problem+jsonProblem
404Verification not found.application/problem+jsonProblem
500Internal server error.application/problem+jsonProblem

POST /v1/verifications/{id}/feedback

Record tenant ground-truth (outcome feedback) on a completed verification.

Append-only outcome label for a terminal verification (succeeded|failed). Feeds calibration; it does not change the signed verdict. The verification must belong to the caller and be terminal.

Request

application/json

Schema: FeedbackRequest

Responses

StatusDescriptionContent typeSchemaExamples
201Feedback recorded.application/jsonFeedbackAccepted
400Invalid outcome/note, or the verification is not terminal yet.application/problem+jsonProblem
401Missing, invalid or expired bearer API key.application/problem+jsonProblem
404Verification not found.application/problem+jsonProblem
500Internal server error.application/problem+jsonProblem

POST /v1/cockpit/determinations

Record a customer cockpit determination.

Contract 11 §E / Contract 14 C.1. Requires identity-contract bearer, request-threaded tenant, x-acretix-auth-subject=account_tenant_mapping, and a tenant-scoped customer_reviewer subject. Records the decision and a product-adapter consequence marker; it is not a training path.

Request

application/json

Schema: CockpitDeterminationRequest

Responses

StatusDescriptionContent typeSchemaExamples
201Customer determination recorded.application/jsonCockpitDeterminationResponse
400Invalid decision body.application/problem+jsonProblem
401Missing, invalid or expired bearer API key.application/problem+jsonProblem
403Subject is not a proven tenant customer_reviewer.application/problem+jsonProblem
404Verification not found for the request-threaded tenant.application/problem+jsonProblem
409Determination already recorded.application/problem+jsonProblem
413Request body is too large.application/problem+jsonProblem
500Internal server error.application/problem+jsonProblem

GET /v1/cockpit/reviewers

Read whether the viewer holds the tenant's customer_reviewer role.

Contract 11 §E5.1. Requires identity-contract bearer, request-threaded tenant, and x-acretix-auth-subject=account_tenant_mapping. Returns the proven viewer role and owner status.

Responses

StatusDescriptionContent typeSchemaExamples
200Viewer reviewer-role status for the request-threaded tenant.application/jsonCockpitReviewerStatus
400Invalid request.application/problem+jsonProblem
401Missing, invalid or expired bearer API key.application/problem+jsonProblem
403Caller is not a proven identity-contract cockpit principal.application/problem+jsonProblem
404Reviewer not found.application/problem+jsonProblem
500Internal server error.application/problem+jsonProblem

POST /v1/cockpit/reviewers

Grant or revoke customer_reviewer for one named person (tenant owner only).

Contract 11 §E5.1. Requires the C11 account mapped to the request-threaded tenant; another tenant cannot be named or modified. This is an explicit human capability grant, never an automatic grant.

Request

application/json

Schema: CockpitReviewerGrantRequest

Responses

StatusDescriptionContent typeSchemaExamples
200Reviewer grant updated.application/jsonCockpitReviewerGrant
400Invalid reviewer grant body.application/problem+jsonProblem
401Missing, invalid or expired bearer API key.application/problem+jsonProblem
403Caller is not the tenant owner, or attempted to name another tenant.application/problem+jsonProblem
404Reviewer grant was not found for revocation.application/problem+jsonProblem
413Request body is too large.application/problem+jsonProblem
500Internal server error.application/problem+jsonProblem

GET /v1/rubrics

List the tenant's rubrics (latest version per name).

Returns a compact summary per rubric name (the latest version), newest first. Tenant-scoped (server-resolved from the API key). Paging: ?limit (1..100, default 50) & ?offset.

Parameters

NameInRequiredSchema type
limitqueryfalseinteger
offsetqueryfalseinteger

Responses

StatusDescriptionContent typeSchemaExamples
200The tenant's rubrics.application/jsonRubricList
401Missing, invalid or expired bearer API key.application/problem+jsonProblem
403Access is forbidden.application/problem+jsonProblem
500Internal server error.application/problem+jsonProblem

POST /v1/rubrics

Compile + version a rubric.

Each criterion runs a CriterionPrimitive (see components.schemas.CriterionPrimitive).

Responses

StatusDescriptionContent typeSchemaExamples
201rubric_id + version + hash.
400Invalid request.application/problem+jsonProblem
401Missing, invalid or expired bearer API key.application/problem+jsonProblem
403API key lacks the required scope.application/problem+jsonProblem
413Request body is too large.application/problem+jsonProblem
500Internal server error.application/problem+jsonProblem

POST /v1/rubrics/from-description

Draft a rubric from a natural-language description.

This route is off unless VERIFY_NL_RUBRIC_FROM_DESCRIPTION is exactly true. The caller's key needs the rubric:write scope. It returns an unregistered draft to review and publish with POST /v1/rubrics. The description is treated as data and never as instructions. The tenant is server-resolved from the bearer.

Request

application/json

Schema: RubricFromDescriptionRequest

Responses

StatusDescriptionContent typeSchemaExamples
200Unregistered description-induced rubric draft and induction report.application/jsonRubricFromDescriptionResult
400Description is too vague or request input is invalid.application/problem+jsonProblem
401Missing, invalid or expired bearer API key.application/problem+jsonProblem
403Access is forbidden.application/problem+jsonProblem
413Request body or description is too large.application/problem+jsonProblem
422Description induction is disabled or could not produce a compilable rubric spec.application/problem+jsonProblem
500Internal server error.application/problem+jsonProblem

POST /v1/rubrics/from-outcomes

Draft + compile a rubric from labeled outcome examples (induction).

Induce an AUTHORED rubric spec from >= 3 labeled outcome examples (the canonical Determination labels). The response is a compiled-but-UNREGISTERED draft (rubric_spec + compile hashes + an induction report); register it with POST /v1/rubrics. Examples are treated as data, never as instructions. Tenant is server-resolved from the API key.

Request

application/json

Schema: RubricFromOutcomesRequest

Responses

StatusDescriptionContent typeSchemaExamples
200Drafted + compiled rubric spec and induction report.application/jsonRubricInductionResult
400Invalid examples/labels (too few, conflicting, or malformed).application/problem+jsonProblem
401Missing, invalid or expired bearer API key.application/problem+jsonProblem
413Too many examples or body too large.application/problem+jsonProblem
422Could not produce a compilable rubric spec.application/problem+jsonProblem
500Internal server error.application/problem+jsonProblem

POST /v1/rubrics/compile

Compile-preview a rubric without registration.

Runs the same rubric compiler as POST /v1/rubrics but does not create or version a registry artifact. The response intentionally excludes rubric_id, version, status, and created.

Responses

StatusDescriptionContent typeSchemaExamples
200Preview hash/source_hash or compiler issues.application/jsonRubricCompilePreview
400Invalid request.application/problem+jsonProblem
401Missing, invalid or expired bearer API key.application/problem+jsonProblem
403API key lacks the required scope.application/problem+jsonProblem
413Request body is too large.application/problem+jsonProblem
500Internal server error.application/problem+jsonProblem

GET /v1/rubrics/templates

List ungated starter rubric templates.

Lists the read-only ungated starter rubric templates. A gated pack is never listed. The answer names the caller tenant; the catalogue is the same for every tenant.

Responses

StatusDescriptionContent typeSchemaExamples
200Ungated starter rubric templates.application/jsonRubricTemplateList
400Invalid request.application/problem+jsonProblem
401Missing, invalid or expired bearer API key.application/problem+jsonProblem
403Access is forbidden.application/problem+jsonProblem
500Internal server error.application/problem+jsonProblem

POST /v1/rubrics/examples

Run marked examples against a draft rubric.

Off unless enabled. Stores the compiled rubric version marked draft, which every normal verify call refuses. Runs at most 5 marked examples for author feedback.

Request

application/json

Schema: RubricExamplesRequest

Responses

StatusDescriptionContent typeSchemaExamples
200Draft rubric and the marked example verification outcomes.application/jsonRubricExamplesResult
400Invalid request or rubric specification.application/problem+jsonProblem
401Missing, invalid or expired bearer API key.application/problem+jsonProblem
403API key lacks the required scope.application/problem+jsonProblem
404This route is not enabled.application/problem+jsonProblem
413Request body or example count is too large.application/problem+jsonProblem
500Internal server error.application/problem+jsonProblem

GET /v1/rubrics/{id}

Fetch a compiled rubric.

Responses

StatusDescriptionContent typeSchemaExamples
200Rubric object.
401Missing, invalid or expired bearer API key.application/problem+jsonProblem
403Access is forbidden.application/problem+jsonProblem
404Rubric not found.application/problem+jsonProblem
500Internal server error.application/problem+jsonProblem

GET /v1/usage

Tenant usage summary.

Parameters

NameInRequiredSchema type
fromqueryfalsestring
toqueryfalsestring

Responses

StatusDescriptionContent typeSchemaExamples
200Usage summary.
400Invalid request.application/problem+jsonProblem
401Missing, invalid or expired bearer API key.application/problem+jsonProblem
403Access is forbidden.application/problem+jsonProblem
500Internal server error.application/problem+jsonProblem

GET /v1/criteria-agreements/{subject_ref}/judgments

List tenant-scoped criteria agreement judgments and their derived agreement.

Parameters

NameInRequiredSchema type
subject_refpathtruestring

Responses

StatusDescriptionContent typeSchemaExamples
200Recorded judgments and the currently derived agreement.application/jsonCriteriaJudgmentsResponse
400Invalid subject reference.application/problem+jsonProblem
401Missing, invalid or expired bearer API key.application/problem+jsonProblem
403Access is forbidden.application/problem+jsonProblem
404No criteria judgments exist for this tenant subject.application/problem+jsonProblem
500Internal server error.application/problem+jsonProblem
503Criteria judgment store is unavailable.application/problem+jsonProblem

POST /v1/criteria-agreements/{subject_ref}/judgments

Append a tenant-scoped criteria proposal or acceptance.

Parameters

NameInRequiredSchema type
subject_refpathtruestring

Request

application/json

Schema: CriteriaJudgmentRequest

Responses

StatusDescriptionContent typeSchemaExamples
201Judgment appended and agreement derived.application/jsonCriteriaJudgmentCreatedResponse
400Invalid judgment input.application/problem+jsonProblem
401Missing, invalid or expired bearer API key.application/problem+jsonProblem
403API key lacks the required scope, or the caller may not act for that party.application/problem+jsonProblem
409Acceptance conflicts with the latest proposal.application/problem+jsonProblem
413Request body is too large.application/problem+jsonProblem
500Internal server error.application/problem+jsonProblem
503Criteria judgment store is unavailable.application/problem+jsonProblem

GET /v1/reviewer-tiers

Reviewer tier record: the current version and every earlier one (read-only).

Responses

StatusDescriptionContent typeSchemaExamples
200Reviewer tier versions, ascending, with current_version.
400Invalid request.application/problem+jsonProblem
401Missing or invalid bearer API key.application/problem+jsonProblem
403Access is forbidden.application/problem+jsonProblem
500Reviewer tier record missing or unreadable.application/problem+jsonProblem

GET /v1/dev-reporting/summary

Developer reporting: the caller's own usage + verdict roll-up (tenant-scoped, read-only).

Responses

StatusDescriptionContent typeSchemaExamples
200Usage + verdict summary.
400Invalid request.application/problem+jsonProblem
401Missing, invalid or expired bearer API key.application/problem+jsonProblem
403Access is forbidden.application/problem+jsonProblem
500Internal server error.application/problem+jsonProblem

GET /v1/dev-reporting/ai-record

Developer reporting: the caller's own feedback-based AI record (tenant-scoped, read-only).

Parameters

NameInRequiredSchema type
fromqueryfalsestring
toqueryfalsestring

Responses

StatusDescriptionContent typeSchemaExamples
200Feedback-based agreement, overturn, abstention, and dispute figures.application/jsonAiRecord
400Invalid date range.application/problem+jsonProblem
401Missing or invalid bearer API key.application/problem+jsonProblem
403API key lacks the verify:read scope.application/problem+jsonProblem
500Internal server error.application/problem+jsonProblem

GET /v1/dev-reporting/health

Developer reporting: own-tenant subscription health aggregate.

Default-off, aggregate-only daily pass/exception-rate read. The tenant is server-resolved from the API key or identity-contract tenant header; a subscription_id not visible to the resolved tenant returns 404.

Parameters

NameInRequiredSchema type
fromqueryfalsestring
toqueryfalsestring
subscription_idqueryfalsestring

Responses

StatusDescriptionContent typeSchemaExamples
200Daily aggregate pass/exception health buckets; no raw verification rows.
400Invalid date range or subscription_id.application/problem+jsonProblem
401Missing, invalid or expired bearer API key.application/problem+jsonProblem
403Access is forbidden.application/problem+jsonProblem
404Health view disabled, or subscription not found for the resolved tenant.application/problem+jsonProblem
500Internal server error.application/problem+jsonProblem

POST /v1/dev-reporting/quickstart/telemetry

Append guided developer quickstart time-to-first-verdict telemetry.

Tenant-scoped, append-only telemetry for the guided /developers quickstart. The server derives key_prefix from the bearer key; the request body contains only a de-identified handle and timestamps.

Request

application/json

Schema: QuickstartTelemetryRequest

Responses

StatusDescriptionContent typeSchemaExamples
201Telemetry appended.application/jsonQuickstartTelemetryEnvelope
400Invalid handle/timing or key/PII-shaped fields supplied.application/problem+jsonProblem
401Missing, invalid or expired bearer API key.application/problem+jsonProblem
409Telemetry for this handle already exists.application/problem+jsonProblem
500Internal server error.application/problem+jsonProblem

GET /v1/dev-reporting/quickstart/telemetry/{handle}

Read guided quickstart telemetry by de-identified handle.

Tenant-scoped read; missing or other-tenant handles return { telemetry: null }.

Parameters

NameInRequiredSchema type
handlepathtruestring

Responses

StatusDescriptionContent typeSchemaExamples
200Own-tenant telemetry or null.application/jsonQuickstartTelemetryEnvelope
400Invalid request.application/problem+jsonProblem
401Missing, invalid or expired bearer API key.application/problem+jsonProblem
403Access is forbidden.application/problem+jsonProblem
409Request conflicts with current telemetry.application/problem+jsonProblem
500Internal server error.application/problem+jsonProblem

POST /v1/dev-reporting/scoped-tags

Scoped bulk-tagging — private customer_gate case-memory only (single-party). Gated by SCOPED_LEARNING_ENABLED (503 when disabled).

Responses

StatusDescriptionContent typeSchemaExamples
201Recorded scoped tags.
400Invalid request.application/problem+jsonProblem
401Missing, invalid or expired bearer API key.application/problem+jsonProblem
403Access is forbidden.application/problem+jsonProblem
500Internal server error.application/problem+jsonProblem
503Scoped bulk-tagging disabled.application/problem+jsonProblem