Source openapi.json · sha256 3712582c3eaafdc0763b6ec345de4a5790cb28c01d06d022ce2f5431bc347c37 · servers https://api.delegus.ai https://api.dev.delegus.ai
Availability. The production API at
api.delegus.ai is serving.
Sign up for a verify key: the sandbox is free with no card, and production starts with a 14-day free trial; the
quickstart walks through your first signed decision. The sandbox on this site runs on a development environment, where nothing is a production identity.
Authentication. Bearer tokens. rpKey is a relying-party key and resolves to the RP DID; principalKey is issued to a company at onboarding; adminToken is Delegus's own. Public routes need none. Errors are { error, message }; a DENY is not an error, it is a signed receipt with HTTP 200.
Verify# The one call a relying party makes (§5).
POST /verify# rpKey
Evaluate a Grant, Proof and Action; returns the signed Receipt
Field Type Description grant required stringGrant compact JWS as received in Delegus-Grant. proof required stringProof compact JWS as received in Delegus-Proof. action required Action
Responses Status Body Meaning 200ReceiptThe Receipt, decision ALLOW or DENY 400ErrorMalformed envelope (strings inside it are the engine's business and yield a DENY receipt) 401ErrorUnknown or non-RP API key 402ErrorProduction checks need a plan for this account (error PLAN_REQUIRED). An access refusal before evaluation, like 401 or 429: no receipt and no DENY reason, and the proof is not spent. Sandbox checks are never refused this way. 413ErrorBody over 64 KB 503ErrorBacking service unavailable before or after evaluation
Principal# Grant lifecycle, agents and keys; authenticated as the issuing Principal.
POST /revoke# principalKey or orgKey
Revoke a Grant (§7); idempotent; success only once visible everywhere
Parameters Name In Type Description principalquery DidWeborg:admin keys: the member Principal to act for (required for them; a Principal key acts only for itself)
Field Type Description grant_id required stringpattern ^urn:delegus:grant:[0-7][0-9A-HJKMNP-TV-Z]{25}$
Responses Status Body Meaning 200RevokeResponseOK 400ErrorBad grant_id 401ErrorNot a Principal key 404ErrorNot this Principal's Grant 503ErrorRevocation recorded but not yet visible; retry
GET /grants# principalKey or orgKey or adminToken
Grants allocated by a Principal (ids, agents, status entries, revocation), newest first
Parameters Name In Type Description principalquery DidWeborg keys: one member Principal (default: all of them); admin: any agentquery DidKeystatequery "active" | "revoked"limitquery integercursorquery stringnext_cursor from the previous page
Responses POST /grants# principalKey
Reserve a Grant id and its Delegus-signed status entry
Field Type Description agent required stringpattern ^did:key:z6Mk
Responses POST /agents# principalKey or orgKey
Register an Agent (inventory; not consulted by /verify)
Parameters Name In Type Description principalquery DidWeborg:admin keys: the member Principal to act for (required for them; a Principal key acts only for itself)
Field Type Description did required stringpattern ^did:key:z6Mk
Responses Status Body Meaning 201AgentRegistered 400ErrorBad DID 401ErrorNot a Principal key 409ErrorAlready registered
POST /agents/{did}/disable # principalKey or orgKey
Kill switch: revoke every Grant naming the Agent
Parameters Name In Type Description did required path stringprincipalquery DidWeborg:admin keys: the member Principal to act for (required for them; a Principal key acts only for itself)
Responses POST /keys/{kid}/compromise # principalKey or orgKey
Mark a Principal key compromised (§11)
Parameters Name In Type Description kid required path stringURL-encoded DID URL principalquery DidWeborg:admin keys: the member Principal to act for (required for them; a Principal key acts only for itself)
Responses POST /keys/{kid}/retire # principalKey or orgKey
Retire a Principal key (§11 rotation): existing Grants stay valid to validUntil; new Grants must use an active key
Parameters Name In Type Description kid required path stringURL-encoded DID URL principalquery DidWeborg:admin keys: the member Principal to act for (required for them; a Principal key acts only for itself)
Responses Status Body Meaning 200KeyRetiredRetired (idempotent; a compromised key stays compromised) 401ErrorNot a Principal key 403ErrorNot this Principal's key 404ErrorUnknown key
GET /principals# rpKey or principalKey or orgKey or adminToken
Principal directory: who is registered and verified, since when, with which keys (any live key or admin)
Parameters Name In Type Description kindquery "managed" | "hosted"statequery "verified" | "unverified"org_idquery OrgIdthat org's keys or admin only limitquery integercursorquery DidWebnext_cursor from the previous page (ascending DID order)
Responses GET /principals/{did} # principalKey or adminToken or orgKey or rpKey
Principal state: the full record with verification instructions for the Principal itself, its org and admin; the directory view for any other live key
Parameters Name In Type Description did required path string
Responses PATCH /principals/{did} # adminToken
Set the public-naming consent flag (admin)
Parameters Name In Type Description did required path string
Field Type Description may_be_named required boolean
Responses POST /principals/{did}/verify # principalKey or adminToken or orgKey
Run domain verification now
Parameters Name In Type Description did required path string
Responses GET /grants/{id}/consumption # principalKey or orgKey or rpKey or adminToken
Consumable Grants (v0.3): balances and consumption log of a Grant
Parameters Name In Type Description id required path GrantIdlimitquery integercursorquery integernext_cursor from the previous page (a log version)
Responses Status Body Meaning 200GrantConsumptionOK 400ErrorBad cursor 401ErrorUnauthorized 404ErrorUnknown Grant, or a key without access (RPs see Grants they have verified)
Decisions# Receipts and Outcome Attestations (§9).
GET /decisions# rpKey or orgKey or adminToken
List decisions, newest first, with filters and cursor pagination: a relying party's own, an org's relying parties, or any (admin)
Ordered by receipt_id descending. Receipt ids are ULIDs: time-ordered to the millisecond, arbitrary within one millisecond. Cursor pagination is stable under concurrent inserts.
Parameters Name In Type Description sincequery string (date-time)evaluated_at ≥ since untilquery string (date-time)evaluated_at < until decisionquery "ALLOW" | "DENY"reasonquery ReasonCodeprincipalquery DidWebgrant_idquery GrantIdlimitquery integercursorquery stringnext_cursor from the previous page rpquery DidWeborg keys: one member relying party (default: all of them); admin: any key_idquery ApiKeyIdonly verifies made with this relying-party API key
Responses GET /decisions/{receipt_id} # rpKey or orgKey or adminToken
A receipt and its outcome ledger
Parameters Name In Type Description receipt_id required path stringrpquery DidWeborg keys: one member relying party (default: all of them); admin: any
Responses Status Body Meaning 200DecisionOK 401ErrorNo RP key, org key or admin token 404ErrorNot this RP's decision
POST /decisions/{receipt_id}/outcomes # rpKey or orgKey
Append an Outcome Attestation (§9) (the RP’s own key, or its org’s org:admin key with ?subject=)
Parameters Name In Type Description receipt_id required path stringsubjectquery DidWeborg:admin keys: the member relying party named in the receipt (required for them). The ledger records that RP as reporter; the audit log records the org key that acted (action outcome.report).
Field Type Description type required enum (7)one of: fulfilled, cancelled, dispute_opened, dispute_resolved, chargeback_received, chargeback_reversed, loss_reported
occurred_at required string (date-time)RFC 3339 UTC evidence_refstringnotestringcorrection_ofstringpattern ^oat_
reporter_signaturestringresolution"agent_at_fault" | "agent_not_at_fault" | "indeterminate"required for dispute_resolved loss_amountintegerrequired for loss_reported; minor units≥ 0
currencystringrequired for loss_reportedpattern ^[A-Z]{3}$
Responses Status Body Meaning 201AttestationRecorded 400ErrorUnknown type or field, missing required field, bad correction_of 401ErrorNot an RP key 403Errororg:read key, or an RP key naming another subject 404ErrorNot this RP's decision
GET /decisions/export # rpKey or orgKey or adminToken
Export decisions with their full receipts and outcome ledgers as NDJSON or CSV (same scope and filters as GET /decisions; up to 5000 rows per page, cursor in X-Delegus-Next-Cursor)
Parameters Name In Type Description sincequery string (date-time)evaluated_at ≥ since untilquery string (date-time)evaluated_at < until decisionquery "ALLOW" | "DENY"reasonquery ReasonCodeprincipalquery DidWebgrant_idquery GrantIdcursorquery stringnext_cursor from the previous page rpquery DidWeborg keys: one member relying party (default: all of them); admin: any key_idquery ApiKeyIdonly verifies made with this relying-party API key formatquery "ndjson" | "csv"limitquery integer
Responses Status Body Meaning 200application/x-ndjsonRows, newest first. Headers X-Delegus-Rows and X-Delegus-Next-Cursor (empty on the last page). 400ErrorBad filter or format 401ErrorNo RP key, org key or admin token
GET /decisions/stats # rpKey or orgKey or adminToken or observerKey
Decisions and outcomes rolled up per Principal over a range (default: last 30 days)
Parameters Name In Type Description sincequery string (date-time)inclusive; default 29 days ago 00:00Z untilquery string (date-time)exclusive; default tomorrow 00:00Z rpquery DidWeborg keys: one member relying party; admin: any principalquery DidWebone Principal
Responses Public# Unauthenticated: evidence by hash (§8), status lists (§7), DID documents.
GET /healthz# No auth
Liveness of every backing service the spec fails closed on
Responses Status Body Meaning 200HealthAll backing services reachable 503HealthA backing service is unreachable
GET /evidence/{hash} # No auth
Exact bytes of an artifact by hash (§8)
Parameters Name In Type Description hash required path stringsha256:<hex> or bare hex
Responses Status Body Meaning 200*/*The bytes, with their original content type and immutable cache headers 404ErrorUnknown hash
GET /status-lists/{path} # No auth
A Bitstring Status List credential (also served at the bare path on status.<domain>)
Parameters Name In Type Description path required path string<principal domain>/<list number>
Responses Status Body Meaning 200application/vc+jwtCompact JWS (vc+jwt), Cache-Control max-age=30 404ErrorUnknown list
GET /.well-known/did.json # No auth
The service DID document (receipt and status-list keys)
Responses GET /org/{slug}/did.json # No auth
A managed Principal's DID document
Parameters Name In Type Description slug required path string
Responses Onboarding# Registry administration.
POST /principals# adminToken or orgKey
Register a managed or customer-hosted Principal
An org:admin key onboards into its own org; admin may pass org_id.
Responses Status Body Meaning 201PrincipalCreatedRegistered; API key shown once 400ErrorBad request 401ErrorBad admin token 409ErrorAlready registered, or a Delegus-managed domain
POST /relying-parties # adminToken or orgKey
Register a relying party; returns its API key once
An org:admin key onboards into its own org; admin may pass org_id.
Field Type Description kind required "managed" | "hosted"slugstringdidstringpattern ^did:web:
namestringproof_window_secondsinteger≥ 1 · ≤ 300 · default 60
verify_rate_limit_per_minuteinteger/verify requests per minute per API key (per node)≥ 1 · ≤ 1000000 · default 600
org_idOrgIdadmin: attach to this org; org:admin keys always onboard into their own org profile"delegus-base-v1" | "delegus-base-v2"default delegus-base-v1
Responses GET /relying-parties/{did} # rpKey or orgKey or adminToken
Relying-party settings
Parameters Name In Type Description did required path string
Responses PATCH /relying-parties/{did} # adminToken or orgKey
Update a relying party's name, Proof window or /verify rate limit
Parameters Name In Type Description did required path DidWeb
Field Type Description namestringmin length 1
proof_window_secondsinteger≥ 1 · ≤ 300
verify_rate_limit_per_minuteinteger≥ 1 · ≤ 1000000
profile"delegus-base-v1" | "delegus-base-v2"default delegus-base-v1
Responses POST /orgs/self-serve # provisionKey
Self-serve signup: provision an org, a managed relying party, its keys and a starter first ALLOW (console)
One call creates the org, a managed relying party (verified at creation), an org:admin key and the customer's first verify key, and mints a starter Grant and Proof so the customer's first /verify returns a signed ALLOW. The console should forward the end customer's IP in x-delegus-client-ip so the per-customer limit applies; the socket address is the console's own.
Parameters Name In Type Description x-delegus-client-ipheader stringThe end customer's IP address, forwarded by the console.
Field Type Description slug required stringLowercase DNS label; becomes the org slug and the managed relying party did:web:<domain>:rp:<slug>. Taken or reserved slugs are 409.pattern ^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$
name required stringmin length 1 · max length 200
admin_email required string (email)max length 200
Responses Status Body Meaning 201SelfServeBundleProvisioned 400ErrorBad slug, name or admin_email 401ErrorMissing or wrong provision key 404ErrorSelf-serve is not enabled on this deployment, or the relying party does not exist 409ErrorSlug taken or reserved 429ErrorRate limited (per provision key, per customer IP, per relying party, or the daily ceiling)
POST /orgs/self-serve/starter # provisionKey
Mint a fresh starter Grant and Proof for a self-serve relying party
Field Type Description rp_did required stringA managed relying party created by POST /orgs/self-serve.
Responses Status Body Meaning 200objectA fresh starter 400Errorrp_did is not a managed relying party DID 401ErrorMissing or wrong provision key 404ErrorSelf-serve is not enabled on this deployment, or the relying party does not exist 429ErrorRate limited (per provision key, per customer IP, per relying party, or the daily ceiling)
POST /orgs/self-serve/first-receipt # provisionKey
Verify a fresh starter as the tenant's relying party and return the signed receipt
The one-click first receipt: runs a fresh starter through the real engine as the tenant's relying party and returns the signed ALLOW receipt, with no dependency on the customer running a command inside the proof window.
Field Type Description rp_did required stringA managed relying party created by POST /orgs/self-serve.
Responses Status Body Meaning 200ReceiptThe signed receipt (ALLOW for a healthy tenant) 400Errorrp_did is not a managed relying party DID 401ErrorMissing or wrong provision key 404ErrorSelf-serve is not enabled on this deployment, or the relying party does not exist 429ErrorRate limited (per provision key, per customer IP, per relying party, or the daily ceiling)
Sandbox# Present only when DELEGUS_DEMO=1 (development). Real receipts against an ephemeral sandbox Principal, Agent and relying party.
GET /demo/info# No auth
Sandbox identities, the fixed Grant limits and lifetime
Responses POST /demo/mint# No auth
Mint a sandbox Grant and a fresh Proof for a fixed purchase
Field Type Description amountintegerminor units; the sandbox Grant allows up to 50000 USD≥ 0 · ≤ 1000000000 · default 42700
Responses POST /demo/verify# No auth
POST /verify as the sandbox relying party (no key in the browser)
Field Type Description grant required stringGrant compact JWS as received in Delegus-Grant. proof required stringProof compact JWS as received in Delegus-Proof. action required Action
Responses POST /demo/revoke# No auth
Revoke a sandbox Grant
Field Type Description grant_id required stringpattern ^urn:delegus:grant:[0-7][0-9A-HJKMNP-TV-Z]{25}$
Responses Api-keys# Rotate and revoke API keys: self-service with any live key of the subject, or by admin with ?subject=<did>. A new key does not invalidate the old one; revoke explicitly.
GET /me# principalKey or rpKey or orgKey
What the caller's API key resolves to (subject, role, settings); the check behind delegus doctor
Responses Status Body Meaning 200MeOK 401ErrorUnknown or revoked key
GET /api-keys# principalKey or rpKey or adminToken or orgKey
List the subject's API keys (ids only, never the keys)
Parameters Name In Type Description subjectquery DidWebAdmin or org keys: act on this Principal or relying party instead of the caller's own subject (org keys: a member of the org; org:admin to issue or revoke).
Responses Status Body Meaning 200ApiKeyListOK 401ErrorNo live key and no admin token 404ErrorAdmin named an unknown subject
POST /api-keys# principalKey or rpKey or adminToken or orgKey
Issue an additional API key for the subject (rotation step 1)
Parameters Name In Type Description subjectquery DidWebAdmin or org keys: act on this Principal or relying party instead of the caller's own subject (org keys: a member of the org; org:admin to issue or revoke).
Field Type Description labelstringmax length 100
Responses Status Body Meaning 201ApiKeyIssuedIssued; the key is shown once 400ErrorBad label 401ErrorNo live key and no admin token 404ErrorAdmin named an unknown subject
POST /api-keys/{key_id}/revoke # principalKey or rpKey or adminToken or orgKey
Revoke one of the subject's keys by id (rotation step 2, or a leaked key)
Parameters Name In Type Description key_id required path stringsubjectquery DidWebAdmin only: act on this Principal or relying party instead of the caller's own subject.
Responses Status Body Meaning 200ApiKeyRevoked (idempotent) 401ErrorNo live key and no admin token 404ErrorNot one of this subject's keys
Audit# Append-only audit of administrative and Principal actions. Verify decisions are receipts, not audit events.
GET /audit# adminToken or principalKey or rpKey or orgKey
Audit events, newest first: everything for admin; own actions for a Principal or relying party key; the org and its members for an org key
Parameters Name In Type Description actorquery stringadmin only: filter by actor DID or org id actionquery stringnoun.verb targetquery stringsincequery string (date-time)untilquery string (date-time)limitquery integercursorquery stringnext_cursor from the previous page
Responses Usage# Verify counts per UTC day, for metering and billing. An RP key sees its own verifies, a Principal key the verifies against its Grants, admin any subject.
GET /usage# rpKey or principalKey or adminToken or orgKey or observerKey
Verifies per UTC day over a range (default: the last 30 days)
Parameters Name In Type Description sincequery string (date-time)inclusive; default 29 days ago at 00:00Z untilquery string (date-time)exclusive; default tomorrow 00:00Z; range ≤ 366 days rpquery DidWebadmin: any; org keys: one member relying party (default: all of them) principalquery DidWebadmin: any; org keys: one member Principal key_idquery ApiKeyIdonly verifies made with this relying-party API key byquery "key"by=key adds a per-key breakdown to each day
Responses Status Body Meaning 200UsageOK 400ErrorBad range 401ErrorNo key and no admin token
Orgs# Organizations: customer accounts owning Principals and relying parties, with org-scoped API keys (roles read and admin) for dashboards. Human identity lives in the console, never here.
POST /orgs# adminToken
Create an organization (admin)
Field Type Description slug required stringlowercase DNS label, unique name required stringmax length 200
Responses GET /orgs/{org_id}# orgKey or adminToken
The org and its members
Parameters Name In Type Description org_id required path string
Responses POST /orgs/{org_id}/members # adminToken
Attach an existing Principal or relying party to the org (admin)
Parameters Name In Type Description org_id required path string
Field Type Description did required DidWebAn existing Principal or relying party not yet in another org
Responses GET /orgs/{org_id}/api-keys # orgKey or adminToken
The org's API keys (ids only)
Parameters Name In Type Description org_id required path string
Responses POST /orgs/{org_id}/api-keys # orgKey or adminToken
Issue an org key with role read or admin (shown once)
Parameters Name In Type Description org_id required path string
Field Type Description role required "read" | "admin"read: every GET about the org and its members; admin: also onboarding, keys, revocation, agents, Principal keys, RP settings labelstringmax length 100
Responses POST /orgs/{org_id}/api-keys/{key_id}/revoke # orgKey or adminToken
Revoke an org key by its public id (immediate, idempotent)
Parameters Name In Type Description org_id required path stringkey_id required path string
Responses Status Body Meaning 200ApiKeyRevoked 401ErrorUnauthorized 403Errororg:read key cannot revoke keys 404ErrorUnknown org or key
GET /orgs/{org_id}/entitlement # provisionKey or adminToken
Read an org's production entitlement and what the gate would decide now (console, admin)
Parameters Name In Type Description org_id required path string
Responses Status Body Meaning 200EntitlementThe stored row (null fields when none is stored) and the effective decision 401ErrorNot the provision key or admin 404ErrorUnknown org
PUT /orgs/{org_id}/entitlement # provisionKey or adminToken
Set an org's production entitlement: allowed or blocked, until when, and a check cap (console, admin)
The console owns plan state and pushes one fact per org on every change. A push whose as_of is older than the stored row's is ignored (applied false), so pushes may arrive out of order. Production /verify calls from an org without a current plan are refused with 402 PLAN_REQUIRED once enforcement is on; sandbox checks and comp tenants are never refused.
Parameters Name In Type Description org_id required path string
Field Type Description production required "allowed" | "blocked"production_until required string | null (date-time)Production checks stop at this instant; null for no end. check_cap required integer | nullAt most this many production checks since cap_since; null for no cap.≥ 0 · ≤ 1000000000
cap_since required string | null (date-time)Start of the capped count; required with check_cap. A new value starts a fresh count. reason required "trial" | "paid" | "past_due_grace" | "canceled" | "comp" | "none"as_of required string (date-time)The console's change time. At most five minutes ahead of the server clock.
Responses Status Body Meaning 200EntitlementStored (applied true) or ignored as older than the stored row (applied false); the row now in effect 400ErrorInvalid body 401ErrorNot the provision key or admin 404ErrorUnknown org
Transparency# Signed daily Merkle roots (RFC 6962, SHA-256) over the receipt ids issued each UTC day, chained day to day and signed with the status key named in the service DID document. Leaf = SHA-256(0x00 ‖ receipt_id); node = SHA-256(0x01 ‖ left ‖ right). Anyone recomputes a root from the published leaf hashes; a receipt holder proves inclusion of their receipt id. Also served on status.<domain>/checkpoints/… .
GET /checkpoints/latest # No auth
The most recent closed day's checkpoint
Responses GET /checkpoints/{day} # No auth
The checkpoint for a UTC day (immutable once published)
Parameters Name In Type Description day required path stringUTC day
Responses GET /checkpoints/{day}/leaves # No auth
The day's leaf hashes, one hex SHA-256 per line in tree order; merkleRoot(leaves) equals the checkpoint root
Parameters Name In Type Description day required path stringUTC day
Responses Status Body Meaning 200text/plaintext/plain; headers X-Delegus-Tree-Size and X-Delegus-Root 404ErrorDay not closed
POST /checkpoints/close # adminToken
Close every ended UTC day now (admin; idempotent; the maintenance loop does this every 5 minutes)
Responses GET /decisions/{receipt_id}/inclusion # No auth
Inclusion proof of a receipt id in its day's checkpoint; 202 while the day is still open
Parameters Name In Type Description receipt_id required path string
Responses Authzen# OpenID AuthZEN Authorization API 1.0 Access Evaluation, shaped over /verify for Policy Enforcement Points such as MCP servers and gateways (COAZ-MCP binding). Same receipts, ledger and limits as /verify; fail closed.
POST /access/v1/evaluation # rpKey
AuthZEN Access Evaluation: subject/action/resource/context → decision, backed by a Delegus receipt
Field Type Description subject required AuthZenEntitytype "agent", id = the Agent's did:key; properties.grant and properties.proof = the compact JWS the Agent presented (context.grant/proof also accepted) action required objectField Type Description name required "commerce:purchase" | "api:call"propertiesobjectthe remaining Delegus Action fields: amount, currency (commerce:purchase) or method (api:call); never type or resource
resource required AuthZenEntityid = the Delegus action.resource (order id or absolute URL) contextobject
Responses Status Body Meaning 200AuthZenResponseDecision (true only for ALLOW); context carries the Delegus reason and the receipt 400ErrorRequest does not map to a verification (no permit) 401ErrorNot a relying-party key 402ErrorProduction checks need a plan for this account (error PLAN_REQUIRED). An access refusal before evaluation, like 401 or 429: no receipt and no DENY reason, and the proof is not spent. Sandbox checks are never refused this way. 429ErrorRate limited (the RP's verify limit)
GET /.well-known/authzen-configuration # No auth
AuthZEN PDP metadata
Responses Metrics# Aggregate service metrics. GET /metrics is public and per-subject-free (HQ finance dashboard, public metrics page). Observer keys read /decisions/stats and /usage service-wide for a staff-only collector without the admin token.
GET /metrics# No auth
Aggregate service metrics (public, no per-subject data)
Parameters Name In Type Description daysquery integerverify-total window
Responses GET /observer-keys# adminToken
List observer keys (admin)
Responses POST /observer-keys# adminToken
Issue an observer key: service-wide read of /decisions/stats and /usage only (admin; shown once)
Field Type Description labelstringmax length 100
Responses POST /observer-keys/{key_id}/revoke # adminToken
Revoke an observer key (admin)
Parameters Name In Type Description key_id required path string
Responses Hosted conformance runner: the published vectors run against an implementer endpoint (wire contract in @delegus/conformance). Reports are pinned to the vector-set hash and unsigned.
POST /conformance/runs # rpKey or principalKey or orgKey or adminToken
Start a hosted conformance run: the published vectors against your endpoint
Runs every published vector (and the htu, jcs and jti sets the endpoint supports) against the submitted endpoint and reports pass or fail per vector. The runner only POSTs JSON to that one URL, through the SSRF-hardened outbound path (public addresses only, no redirects, size cap, per-request timeout), at most 50 requests and 2 minutes per run, one run at a time per account, 10 starts per hour per key. Returns 202 with the run; poll GET /conformance/runs/{run_id}.
Field Type Description endpoint required string (uri)An https endpoint that speaks the conformance wire contract (delegus-conformance-http v1, see @delegus/conformance): one JSON POST per call, op evaluate / describe / normalizeHtu / canonicalize / sha256 / isJti. Never a Delegus host.max length 2048
Responses Status Body Meaning 202ConformanceRunStarted 400ErrorNot an https URL, carries credentials, or is a Delegus host 401ErrorNo valid key 409ErrorA run is already running for this account 429ErrorRate limited
rpKey or principalKey or orgKey or adminToken
Read a hosted conformance run and its report
Parameters Name In Type Description run_id required path string
Responses Schemas# Every object the API accepts or returns. ReasonCode values link to their definition on the DENY reason codes page.
ActiononeOf # The RP's description of the action (§3.3, §5.1). Integers only, no floats.
One of: object | object
Agentobject # Field Type Description did required stringpattern ^did:key:z6Mk
principal required stringpattern ^did:web:
created_at required string (date-time)RFC 3339 UTC
AgentDisabledobject # Field Type Description did required stringpattern ^did:key:z6Mk
disabled_at required string (date-time)RFC 3339 UTC revoked_grants required string[]
AgentRequestobject # Field Type Description did required stringpattern ^did:key:z6Mk
ApiKeyobject # Field Type Description key_id required stringPublic identifier (first 12 hex chars of the key hash); never a secret. role required "principal" | "rp" | "org:read" | "org:admin" | "observer"subject required stringThe Principal or relying-party DID, or the org id for org keys label required string | nullcreated_at required string (date-time)revoked_at required string (date-time) | null
ApiKeyIdstring # Public identifier of an API key (first 12 hex chars of its hash); never a secret.
string · pattern ^[0-9a-f]{12}$
ApiKeyListobject # Field Type Description subject required DidWebkeys required ApiKey[]
ApiKeyRequestobject # Field Type Description labelstringmax length 100
AuditEventobject # Field Type Description event_id required stringpattern ^aud_
occurred_at required string (date-time)actor required objectField Type Description kind required "admin" | "principal" | "rp" | "org" | "system"did required string | nullThe subject DID, or the org id for org keys key_id required string | null
action required stringprincipal.create, principal.verify, relying_party.create, api_key.create, api_key.revoke, agent.register, agent.disable, grant.allocate, grant.revoke, key.compromise, sandbox.create, key.retire, relying_party.update target required string | nullrequest_id required string | nulldetails required object
AuditListobject # Field Type Description events required AuditEvent[]next_cursor required string | null
AuthZenConfigurationobject # Field Type Description policy_decision_point required string (uri)access_evaluation_endpoint required string (uri)delegusobject
AuthZenEntityobject # Field Type Description type required stringid required stringpropertiesobject
AuthZenRequestobject # Field Type Description subject required AuthZenEntitytype "agent", id = the Agent's did:key; properties.grant and properties.proof = the compact JWS the Agent presented (context.grant/proof also accepted) action required objectField Type Description name required "commerce:purchase" | "api:call"propertiesobjectthe remaining Delegus Action fields: amount, currency (commerce:purchase) or method (api:call); never type or resource
resource required AuthZenEntityid = the Delegus action.resource (order id or absolute URL) contextobject
AuthZenResponseobject # Field Type Description decision required booleantrue iff the Delegus receipt says ALLOW context required objectField Type Description reason required ReasonCode | nullreceipt_id required stringevaluated_at required string (date-time)relying_party required DidWebprincipalDidWebagentDidKeyreceipt required stringthe signed receipt JWS receipt_url required stringissuer required DidWeb
Capabilityobject # Field Type Description action required "commerce:purchase" | "api:call"constraints required objectcommerce:purchase: maxAmount (integer, minor units), currency (ISO 4217). api:call: methods (uppercase HTTP methods). Unknown keys deny at P17. resourcesstring[]Globs with * and ** only; absent = ["*"].
CheckOutcomeoneOf # Check outcome: true, false, or "skipped" when a prerequisite did not pass.
One of: boolean | "skipped"
Checkpointobject # Field Type Description day required stringpattern ^\d{4}-\d{2}-\d{2}$
tree_size required integer≥ 0
root required Sha256previous_root required Sha256 | nullThe previous day's root; null for the first checkpoint first_receipt_id required string | nulllast_receipt_id required string | nulltree required "rfc6962-sha256"kid required stringdid:web:<domain>#status-<n>, the signing key checkpoint required stringCompact JWS, typ delegus-checkpoint+jwt, JCS payload {iss, day, tree_size, root, previous_root, first_receipt_id, last_receipt_id, iat, tree} checkpoint_hash required Sha256leaves_url required stringcreated_at required string (date-time)
CheckpointsClosedobject # Field Type Description closed required string[]latest required string | null
Field Type Description run_id required stringcfr_<ULID> status required "running" | "passed" | "failed" | "error"passed: every vector, committed receipt and supplied set passed. failed: the report shows which did not. error: the endpoint was refused by the outbound policy (not public, not https) or the run was interrupted. endpoint required stringcreated_at required string (date-time)finished_at required string (date-time) | nullrequests required integerRequests sent to the endpoint (at most 50 per run). vectors required objectField Type Description sha256 required stringsha256 over the vector set that ran (recompute with vectorSetHash()). conformance_version required string
error required string | nullreport required object | nullsigned required falseReports are unsigned in v1.
Field Type Description endpoint required string (uri)An https endpoint that speaks the conformance wire contract (delegus-conformance-http v1, see @delegus/conformance): one JSON POST per call, op evaluate / describe / normalizeHtu / canonicalize / sha256 / isJti. Never a Delegus host.max length 2048
ConsumptionBalanceobject # Field Type Description key required Sha256sha256 over the RFC 8785 form of the Capability (v0.3 proposal §3) spent_total required integerspent_in_period required integerperiod_start required string (date-time) | nulluses_spent required integerlimits required objectas seen at the last consumeField Type Description totalinteger | nullper_periodinteger | nullusesinteger | null
remaining required objectField Type Description totalinteger | nullper_periodinteger | nullusesinteger | null
updated_at required string (date-time)
ConsumptionEventobject # Field Type Description version required integerkey required Sha256delta_total required integerdelta_period required integerdelta_uses required integerperiod_start required string (date-time) | nullcause required "consume" | "restore" | "restore_reversal"cause_id required stringreceipt id (consume) or attestation id (restore, restore_reversal) receipt_id required stringrecorded_at required string (date-time)
CredentialStatusobject # Field Type Description id required stringtype required "BitstringStatusListEntry"statusPurpose required "revocation"statusListIndex required stringpattern ^(0|[1-9][0-9]*)$
statusListCredential required string (uri)
DecisionExportRowobject # One NDJSON line: the decision summary, the full signed receipt, and its outcome ledger
DecisionSummary & object
DecisionListobject # Field Type Description decisions required DecisionSummary[]next_cursor required string | nullPass as ?cursor= for the next (older) page; null when this was the last page.
DecisionStatsobject # Field Type Description since required string (date-time)until required string (date-time)rpsDidWeb[]totals required objectField Type Description verifies required integerallow required integerdeny required integerallow_with_outcome required integer
principals required PrincipalStats[]
DecisionSummaryobject # Field Type Description receipt_id required stringdecision required "ALLOW" | "DENY"reason required ReasonCode | nullevaluated_at required string (date-time)principal required DidWeb | nullgrant_id required GrantId | nullagent required DidKey | nullrp required DidWebkey_id required ApiKeyId | nullThe relying-party key that made the verify; null before key tracking action_type required "commerce:purchase" | "api:call" | nullThe Action the relying party submitted to /verify, as checked. Null when the action was malformed, for decisions recorded before actions were kept (production: before 2026-09-23 01:57 UTC), and for decisions older than 7 years (the action fields are cleared then; the receipt itself is kept). amount required integer | nullcommerce:purchase: integer minor units of currency (JPY has 0 decimals, USD 2, KWD 3). Null otherwise. currency required string | nullcommerce:purchase: ISO 4217 code. Null otherwise. resource required string | nullThe action resource as submitted (a purchase resource or an api:call URI). method required string | nullapi:call: the HTTP method. Null otherwise.
DemoInfoobject # Field Type Description principal required DidWebagent required DidKeyrp required DidWebauthority required Capabilitygrant_lifetime_seconds required integerrequest required objectField Type Description methodstringurlstring
amount_cap required integerrate_limit_per_minute required integer
DemoMintobject # Field Type Description grant required stringproof required stringaction required Actionrp required stringpattern ^did:web:
grant_id required stringpattern ^urn:delegus:grant:[0-7][0-9A-HJKMNP-TV-Z]{25}$
agent required stringpattern ^did:key:z6Mk
principal required stringpattern ^did:web:
request required objectField Type Description methodstringurlstring
authority required Capabilityvalid_until required string (date-time)grant_lifetime_seconds required integer
DemoMintRequestobject # Field Type Description amountintegerminor units; the sandbox Grant allows up to 50000 USD≥ 0 · ≤ 1000000000 · default 42700
DidDocumentobject # Field Type Description @context required string[]id required stringpattern ^did:web:
verificationMethod required object[]Field Type Description id required stringtype required "Multikey"controller required stringpattern ^did:web:
publicKeyMultibase required string
assertionMethodstring[]
DidKeystring # string · pattern ^did:key:z6Mk
DidWebstring # string · pattern ^did:web:
Entitlementobject # Field Type Description org_id required stringstored required booleanWhether a row exists. With enforcement on, no row means no plan. production"allowed" | "blocked" | nullproduction_untilstring | null (date-time)check_capinteger | nullcap_sincestring | null (date-time)reasonenum (7)one of: trial, paid, past_due_grace, canceled, comp, none, null
as_ofstring | null (date-time)updated_atstring | null (date-time)production_checks_since_capinteger | nullProduction checks counted since cap_since (at most check_cap); null without a cap. comp required booleanA staff, self-test or canary tenant that never needs a plan. effective required "allowed" | "blocked"What the gate would decide for the next production check now. effective_detailstring | nullWhy it would be refused; null when allowed. enforced required booleanWhether this deployment refuses (true) or only logs (false) a blocked production check. appliedbooleanPUT only: whether this push was stored.
EntitlementRequestobject # Field Type Description production required "allowed" | "blocked"production_until required string | null (date-time)Production checks stop at this instant; null for no end. check_cap required integer | nullAt most this many production checks since cap_since; null for no cap.≥ 0 · ≤ 1000000000
cap_since required string | null (date-time)Start of the capped count; required with check_cap. A new value starts a fresh count. reason required "trial" | "paid" | "past_due_grace" | "canceled" | "comp" | "none"as_of required string (date-time)The console's change time. At most five minutes ahead of the server clock.
Errorobject # Field Type Description error required enum (10)one of: INVALID_REQUEST, UNAUTHORIZED, FORBIDDEN, NOT_FOUND, CONFLICT, PAYLOAD_TOO_LARGE, SERVICE_UNAVAILABLE, METHOD_NOT_ALLOWED, INTERNAL, RATE_LIMITED
message required string
GrantAllocationobject # The Principal signs these into the Grant (§3.2 rows 6 and 14).
Field Type Description id required stringpattern ^urn:delegus:grant:[0-7][0-9A-HJKMNP-TV-Z]{25}$
issuer required stringpattern ^did:web:
agent required stringpattern ^did:key:z6Mk
credentialStatus required CredentialStatusallocated_at required string (date-time)RFC 3339 UTC
GrantAllocationRequestobject # Field Type Description agent required stringpattern ^did:key:z6Mk
GrantConsumptionobject # Balances and the append-only consumption log of one Grant (v0.3 consumable Grants, proposal §7–§8). Empty for Grants that were never consumed.
Field Type Description grant_id required GrantIdprincipal required DidWebagent required DidKeyversion required integerlog version; 0 when never consumed as_of required string (date-time)snapshot_hash required Sha256hash of the canonical consumption snapshot as of now (what a v0.3 receipt would pin) capabilities required ConsumptionBalance[]events required ConsumptionEvent[]newest first next_cursor required integer | null
GrantIdstring # string · pattern ^urn:delegus:grant:[0-7][0-9A-HJKMNP-TV-Z]{25}$
GrantListobject # Field Type Description grants required GrantSummary[]next_cursor required string | null
GrantSummaryobject # What Delegus knows about a Grant: its id, Agent and status entry. The Grant itself (authority, validity) is signed by the Principal and reaches Delegus only inside a /verify; see the receipt's authority and expires_at.
Field Type Description id required GrantIdprincipal required DidWebagent required DidKeystatus_list required string (uri)status_list_index required integerallocated_at required string (date-time)revoked_at required string (date-time) | nullstate required "active" | "revoked"
Healthobject # Field Type Description ok required booleanenvstringdidstringpattern ^did:web:
InclusionPendingobject # Field Type Description receipt_id required stringday required stringstatus required string
InclusionProofobject # Field Type Description receipt_id required stringday required stringleaf required stringhex SHA-256(0x00 ‖ receipt_id) leaf_index required integer≥ 0
tree_size required integer≥ 1
root required Sha256audit_path required string[]RFC 6962 §2.1.1 audit path, hex, leaf to root checkpoint required stringThe day's checkpoint JWS kid required string
KeyCompromisedobject # Field Type Description kid required stringstate required "compromised"
KeyRetiredobject # Field Type Description kid required stringstate required "retired" | "compromised"
Meobject # Field Type Description subject required stringDID, or org id for org keys role required "principal" | "rp" | "org:read" | "org:admin" | "observer"key_id required stringkey_labelstring | nullkey_created_atstring (date-time)service_did required DidWebenv required stringnamestringrelying parties proof_window_secondsintegerrelying parties kind"managed" | "hosted"principals verificationVerificationkeysobject[]principals: signing keys known from the DID document and their trust stateField Type Description kidstringstate"active" | "retired" | "compromised"
org_idOrgId | nullPrincipals and relying parties: their org orgOrgorg keys membersOrgMember[]org keys scopestring[]observer keys: the endpoints the key may call
Metricsobject # Aggregate only; no Principal, relying-party or receipt identifiers appear.
Field Type Description as_of required string (date-time)service_did required DidWebenv required stringprincipals required objectField Type Description verified required integerhosted_verified required integerhosted_unverified required integermanaged required integer
relying_parties required integerorganizations required integerreceipts_total required integerverifies required objectField Type Description window_days required integersince required string (date-time)until required string (date-time)verifies required integerallow required integerdeny required integerper_day required object[]Field Type Description day required stringverifies required integerallow required integerdeny required integer
transparency required objectField Type Description latest_daystring | nulllatest_rootSha256latest_tree_sizeintegercheckpointsinteger
named_principals required object[]verified Principals that opted in to public namingField Type Description did required DidWebdomain required stringkind required "managed" | "hosted"
self_test required objectself-test/liveness tenants, excluded from the customer counters above; never a customerField Type Description principals required integerrelying_parties required integerorganizations required integer
Orgobject # Field Type Description org_id required OrgIdslug required stringname required stringcreated_at required string (date-time)
OrgApiKeyListobject # Field Type Description org_id required OrgIdkeys required ApiKey[]
OrgApiKeyRequestobject # Field Type Description role required "read" | "admin"read: every GET about the org and its members; admin: also onboarding, keys, revocation, agents, Principal keys, RP settings labelstringmax length 100
OrgCreateRequestobject # Field Type Description slug required stringlowercase DNS label, unique name required stringmax length 200
OrgIdstring # string · pattern ^org_[0-7][0-9A-HJKMNP-TV-Z]{25}$
OrgMemberobject # Field Type Description did required DidWebkind required "principal" | "relying_party"created_at required string (date-time)principal_kind"managed" | "hosted"principals domainstringprincipals verification_state"verified" | "unverified"principals verificationVerificationprincipals namestringrelying parties proof_window_secondsintegerrelying parties verify_rate_limit_per_minuteintegerrelying parties
OrgMemberAddedobject # Field Type Description org_id required OrgIddid required DidWebkind required "principal" | "relying_party"
OrgMemberRequestobject # Field Type Description did required DidWebAn existing Principal or relying party not yet in another org
OrgWithMembersobject # Org & object
OutcomeEventobject # Unknown fields and unknown types are rejected (§9.3).
Field Type Description type required enum (7)one of: fulfilled, cancelled, dispute_opened, dispute_resolved, chargeback_received, chargeback_reversed, loss_reported
occurred_at required string (date-time)RFC 3339 UTC evidence_refstringnotestringcorrection_ofstringpattern ^oat_
reporter_signaturestringresolution"agent_at_fault" | "agent_not_at_fault" | "indeterminate"required for dispute_resolved loss_amountintegerrequired for loss_reported; minor units≥ 0
currencystringrequired for loss_reportedpattern ^[A-Z]{3}$
Principalobject # Field Type Description did required stringpattern ^did:web:
kind required "managed" | "hosted"domain required stringverification required Verificationcreated_at required string (date-time)RFC 3339 UTC org_idOrgId | nullmay_be_namedbooleanconsent to be named publicly (metrics page); default false, admin-set
PrincipalCreateRequestoneOf # One of: object | object
PrincipalDirectoryobject # PrincipalDirectoryEntryobject # What any relying party may know about a Principal: identity, verification state with dates, key history, DID-document snapshot. Never the verification token or org membership.
Field Type Description did required DidWebkind required "managed" | "hosted"domain required stringverification required objectField Type Description state required "verified" | "unverified"verified_since required string (date-time) | nulllast_checked_at required string (date-time) | nullmethod required "domain" | "delegus-hosted"domain: DNS TXT or .well-known proof, re-checked every 24 h; delegus-hosted: managed Principal, verified by construction
keys required object[]Key history: every verification method ever seen, with its current stateField Type Description kid required stringstate required "active" | "retired" | "compromised"since required string (date-time)
did_document required object | nullregistered_at required string (date-time)may_be_namedbooleanconsent to be named publicly (metrics page); default false, admin-set
PrincipalNamingRequestobject # Field Type Description may_be_named required boolean
PrincipalStatsobject # Field Type Description principal required DidWeb | nullnull groups receipts denied before the Grant was authenticated (P1–P3, T1–T3) verifies required integerallow required integerdeny required integerreasons required objectDENY reason → count outcomes required objectoutcome type → count losses required objectloss_reported sums per currency, minor units allow_with_outcome required integerALLOW receipts with at least one outcome attestation
ProtocolCheckIdstring # P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 P11 P12 P13 P14 P15 P16 P17 P18 P19 P20
Receiptobject # Decision Receipt (spec §6.2). receipt is the canonical non-detached compact JWS over JCS(body minus receipt).
Field Type Description receipt_version required "delegus-receipt-v1"receipt_id required stringpattern ^drc_[0-7][0-9A-HJKMNP-TV-Z]{25}$
decision required "ALLOW" | "DENY"reason required ReasonCode | nullevaluated_at required string (date-time)RFC 3339 UTC relying_party required stringpattern ^did:web:
principalobjectPresent only once P3 passed (§6.4).Field Type Description id required stringpattern ^did:web:
verification required "domain" | "unverified"
agentstringpattern ^did:key:z6Mk
grant_idstringpattern ^urn:delegus:grant:[0-7][0-9A-HJKMNP-TV-Z]{25}$
grant_hash required stringThe one hash encoding: sha256:<64 lowercase hex> over the exact bytes (spec §6.3).pattern ^sha256:[0-9a-f]{64}$
proof_hash required stringThe one hash encoding: sha256:<64 lowercase hex> over the exact bytes (spec §6.3).pattern ^sha256:[0-9a-f]{64}$
request_hashstringThe one hash encoding: sha256:<64 lowercase hex> over the exact bytes (spec §6.3).pattern ^sha256:[0-9a-f]{64}$
authorityCapability | nullThe Capability that authorized the action; null on DENY; absent before P3. expires_atstring (date-time)RFC 3339 UTC evidence required objectField Type Description issuer_resolutionobjectField Type Description did required stringpattern ^did:web:
did_document_hash required stringThe one hash encoding: sha256:<64 lowercase hex> over the exact bytes (spec §6.3).pattern ^sha256:[0-9a-f]{64}$
resolved_at required string (date-time)RFC 3339 UTC
statusobjectField Type Description credential_url required string (uri)credential_hash required stringThe one hash encoding: sha256:<64 lowercase hex> over the exact bytes (spec §6.3).pattern ^sha256:[0-9a-f]{64}$
valid_fromstring (date-time)RFC 3339 UTC checked_at required string (date-time)RFC 3339 UTC status_list_index required string
trust_config_version required stringtrust_config_hash required stringThe one hash encoding: sha256:<64 lowercase hex> over the exact bytes (spec §6.3).pattern ^sha256:[0-9a-f]{64}$
protocol required objectField Type Description result required "PASS" | "FAIL"profile required "delegus-base-v1"profile_hash required stringThe one hash encoding: sha256:<64 lowercase hex> over the exact bytes (spec §6.3).pattern ^sha256:[0-9a-f]{64}$
checks required object
trust required objectField Type Description result required "PASS" | "FAIL"policy_version required "delegus-trust-v1"checks required object
receipt required stringCompact JWS, alg EdDSA, typ delegus-receipt+jwt, kid did:web:<domain>#receipt-<n>.
RelyingPartyobject # Field Type Description did required DidWebname required stringproof_window_seconds required integerverify_rate_limit_per_minute required integercreated_at required string (date-time)org_idOrgId | nullprofile"delegus-base-v1" | "delegus-base-v2"Protocol profile for /verify; v2 enables consumable grants (budget). Default v1.
RelyingPartyCreatedobject # Field Type Description did required stringpattern ^did:web:
name required stringproof_window_seconds required integercreated_at required string (date-time)RFC 3339 UTC api_key required stringShown once. api_key_id required stringverify_rate_limit_per_minute required integer
RelyingPartyCreateRequestobject # Field Type Description kind required "managed" | "hosted"slugstringdidstringpattern ^did:web:
namestringproof_window_secondsinteger≥ 1 · ≤ 300 · default 60
verify_rate_limit_per_minuteinteger/verify requests per minute per API key (per node)≥ 1 · ≤ 1000000 · default 600
org_idOrgIdadmin: attach to this org; org:admin keys always onboard into their own org profile"delegus-base-v1" | "delegus-base-v2"default delegus-base-v1
RelyingPartyUpdateRequestobject # Field Type Description namestringmin length 1
proof_window_secondsinteger≥ 1 · ≤ 300
verify_rate_limit_per_minuteinteger≥ 1 · ≤ 1000000
profile"delegus-base-v1" | "delegus-base-v2"default delegus-base-v1
RevokeRequestobject # Field Type Description grant_id required stringpattern ^urn:delegus:grant:[0-7][0-9A-HJKMNP-TV-Z]{25}$
RevokeResponseobject # Field Type Description grant_id required stringpattern ^urn:delegus:grant:[0-7][0-9A-HJKMNP-TV-Z]{25}$
revoked required truerevoked_at required string (date-time)RFC 3339 UTC
SelfServeBundleobject # Field Type Description org required Orgorg_admin_key required stringorg:admin key for the new org (dk_org_admin_…). Shown once; the console keeps it server-side and never shows it to the customer. relying_party required objectThe tenant's managed relying party. Managed identities are verified at creation; nothing is pending.Field Type Description did required stringname required stringprofile required stringproof_window_seconds required integer
rp_verify_key required stringThe customer's first relying-party verify key (dk_rp_…). Shown once. starter required SelfServeStarter
SelfServeRequestobject # Field Type Description slug required stringLowercase DNS label; becomes the org slug and the managed relying party did:web:<domain>:rp:<slug>. Taken or reserved slugs are 409.pattern ^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$
name required stringmin length 1 · max length 200
admin_email required string (email)max length 200
SelfServeRpRequestobject # Field Type Description rp_did required stringA managed relying party created by POST /orgs/self-serve.
SelfServeStarterobject # A ready-to-verify sample: a Grant issued by the shared sandbox Principal to a one-time agent, and a Proof bound to this relying party. Bounded: a $50 ceiling, resource sandbox/**, a 1-hour Grant. POST grant, proof and action to /verify with the tenant's rp_verify_key for a signed ALLOW.
Field Type Description grant required stringGrant compact JWS (vc+jwt). proof required stringProof compact JWS (delegus-proof+jwt), aud = this relying party. action required objectThe exact Action the Proof is bound to (a $10.00 sandbox purchase). grant_id required stringexpires_at required string (date-time)When the Proof leaves the relying party's 300-second window; call /orgs/self-serve/starter for a fresh one. verify_url required string (uri)verify_curl required stringA ready shell command for /verify; the literal <rp_verify_key> marks where the customer's key goes.
Sha256string # The one hash encoding: sha256:<64 lowercase hex> over the exact bytes (spec §6.3).
string · pattern ^sha256:[0-9a-f]{64}$
TrustCheckIdstring # T1 T2 T3 T5
Usageobject # Field Type Description since required string (date-time)until required string (date-time)rpDidWebprincipalDidWebtotals required objectField Type Description verifies required integerallow required integerdeny required integer
days required UsageDay[]rpsDidWeb[]org keys: the relying parties covered key_idApiKeyId
UsageDayobject # Field Type Description day required stringUTC daypattern ^\d{4}-\d{2}-\d{2}$
verifies required integerallow required integerdeny required integerreasons required objectDENY reason → count keysobjectPresent with by=key: per API key id ("unknown" for receipts recorded before key tracking)
Verificationobject # Field Type Description state required "verified" | "unverified"token required stringdns_txt required objectField Type Description namestringvaluestring
well_known required objectField Type Description urlstringbodyobject
reverified_every_hours required 24did_document_url required string
VerifyRequestobject # Field Type Description grant required stringGrant compact JWS as received in Delegus-Grant. proof required stringProof compact JWS as received in Delegus-Proof. action required Action
Previous ConformanceNext SDK and CLI