JWT Fields Reference

All DRS JWTs use the header {"alg":"EdDSA","typ":"JWT"} with keys sorted by Unicode code point (RFC 8785 JCS). The signature covers base64url(header).base64url(payload).

Delegation Receipt payload

FieldTypeRequiredConstraintsDescription
issDID stringYesValid did:key or did:webIssuer — the party granting delegation
subDID stringYesMust match root DR's sub at every hopSubject — the original resource owner; never changes through chain hops
audDID stringYesValid DIDAudience — the party receiving the delegation
drs_vstringYesMust be "4.0"DRS specification version
drs_typestringYesMust be "delegation-receipt"JWT type discriminator
cmdstringYesNon-emptyMCP command path, e.g. /mcp/tools/call
policyobjectYesSee Policy SchemaCapability constraints
nbfintegerYesUnix seconds; ≥ parent's nbf in sub-DRsNot-before — when the delegation becomes valid
expinteger or nullYesUnix seconds; ≤ parent's exp in sub-DRs when both setExpiry — null for standing delegations
iatintegerYesUnix secondsIssued-at time
jtistringYesFormat: dr: + UUID v4Unique identifier for revocation lookup
prev_dr_hashstring or nullYesFormat: sha256:{64 hex chars} or nullHash of previous DR's JWT bytes; null at chain root
drs_consentobjectWhen drs_root_type is "human"See belowHuman consent evidence
drs_root_typestringYes on root DR"human" | "organisation" | "automated-system"Trust anchor type; absent on sub-DRs
drs_regulatoryobjectNoSee belowStorage tier and retention requirements
drs_status_list_indexintegerNoNon-negativePosition in Bitstring Status List; absent if revocation not used

Invocation Receipt payload

FieldTypeRequiredConstraintsDescription
issDID stringYesMust match last DR's audIssuer — the agent making the call
subDID stringYesMust match root DR's subSubject — the original human
drs_vstringYesMust be "4.0"DRS spec version
drs_typestringYesMust be "invocation-receipt"Type discriminator
cmdstringYesMust match all DR cmd fieldsMCP command path
argsobjectYesEvaluated against all DR policiesActual invocation arguments
dr_chainstring[]YesLength = number of DRs; each sha256:{hex}Ordered hashes of every DR in the chain
tool_serverDID stringYesValid DIDDID of the tool server
iatintegerYesUnix secondsIssued-at time
jtistringYesFormat: inv: + UUID v4Unique identifier

ConsentRecord object

FieldTypeRequiredDescription
methodstringYes"explicit-ui-click" | "explicit-ui-checkbox" | "api-delegation" | "operator-policy"
timestampISO 8601 stringYesWhen the user consented
session_idstringYesSession identifier, prefixed sess:
policy_hashstringYessha256:{hex} of the human-readable policy text the user saw
localeIETF language tagYesLanguage of the consent UI (e.g. en-GB, fr-FR)

RegulatoryMetadata object

FieldTypeDescription
frameworksstring[]Regulatory frameworks: "eu-ai-act-art13", "hipaa-164.312b", "sox", "finos-tier3"
risk_levelstring"unacceptable" | "high" | "limited" | "minimal"
retention_daysintegerMinimum retention in days (0 = forever)

DRS Bundle

{
  "bundle_version": "4.0",
  "invocation": "<invocation-receipt-jwt>",
  "receipts": ["<root-dr-jwt>", "<sub-dr-jwt-1>"]
}

Transmitted as X-DRS-Bundle: base64url({bundle_json}) HTTP header.