
Signed agent execution declarations. Free verification; issuance 0.002 USDC via x402 on Base.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Return public keys of this issuer. The operator must establish trust in this issuer independently.
This tool takes no arguments.
Return public keys of this issuer. The operator must establish trust in this issuer independently.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"additionalProperties": false
}Persist a signed execution declaration receipt. Public price: 0.002 USDC via x402 on the advertised network. Preserve event, idempotencyKey and payment authorization on retries. Signed declarations do not independently prove execution.
| Argument | Type | Description |
|---|---|---|
| event* | object | Commitment-only declaration of one execution step. |
| idempotencyKey* | string | Persist this unique key before purchase. Reuse unchanged with the same input and payment authorization after interruption. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"event",
"idempotencyKey"
],
"properties": {
"event": {
"type": "object",
"required": [
"version",
"agentId",
"runId",
"stepId",
"tool",
"outcome",
"startedAt",
"completedAt",
"inputHash",
"outputHash"
],
"properties": {
"tool": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
"description": "Tool or operation identifier declared by the caller."
},
"runId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
"description": "Stable identifier for this execution run."
},
"stepId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
"description": "Stable identifier of the step within the run."
},
"agentId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
"description": "Identifier of the declaring agent, not an independently verified identity."
},
"outcome": {
"enum": [
"success",
"error"
],
"type": "string",
"description": "Outcome declared by the caller; Datoka does not observe execution."
},
"version": {
"type": "string",
"const": "datoka.agent.execution.v1",
"description": "Declaration format version; preserve this literal."
},
"inputHash": {
"type": "object",
"required": [
"algorithm",
"digest"
],
"properties": {
"digest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "64 lowercase hexadecimal characters; SHA-256 of exact bytes."
},
"algorithm": {
"type": "string",
"const": "sha256",
"description": "Hash algorithm."
}
},
"description": "SHA-256 of the exact input bytes, computed locally. Never send raw input.",
"additionalProperties": false
},
"startedAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$",
"description": "Declared start time in UTC, with milliseconds."
},
"outputHash": {
"type": "object",
"required": [
"algorithm",
"digest"
],
"properties": {
"digest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "64 lowercase hexadecimal characters; SHA-256 of exact bytes."
},
"algorithm": {
"type": "string",
"const": "sha256",
"description": "Hash algorithm."
}
},
"description": "SHA-256 of exact output bytes, computed locally. Never send raw output.",
"additionalProperties": false
},
"completedAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$",
"description": "Declared completion in UTC with milliseconds, at or after start."
}
},
"description": "Commitment-only declaration of one execution step.",
"additionalProperties": false
},
"idempotencyKey": {
"type": "string",
"pattern": "^[\\x21-\\x7e]{16,200}$",
"description": "Persist this unique key before purchase. Reuse unchanged with the same input and payment authorization after interruption."
}
},
"additionalProperties": false
}Free validation of a locally built execution declaration before issuance. Hash exact input and output bytes locally; supply identifiers and UTC timestamps with milliseconds. Returns the validated event, commitment and logical chain without creating or purchasing a receipt. Use issue_agent_receipt only if a portable signed declaration is needed.
| Argument | Type | Description |
|---|---|---|
| event* | object | Commitment-only declaration of one execution step. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"event"
],
"properties": {
"event": {
"type": "object",
"required": [
"version",
"agentId",
"runId",
"stepId",
"tool",
"outcome",
"startedAt",
"completedAt",
"inputHash",
"outputHash"
],
"properties": {
"tool": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
"description": "Tool or operation identifier declared by the caller."
},
"runId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
"description": "Stable identifier for this execution run."
},
"stepId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
"description": "Stable identifier of the step within the run."
},
"agentId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
"description": "Identifier of the declaring agent, not an independently verified identity."
},
"outcome": {
"enum": [
"success",
"error"
],
"type": "string",
"description": "Outcome declared by the caller; Datoka does not observe execution."
},
"version": {
"type": "string",
"const": "datoka.agent.execution.v1",
"description": "Declaration format version; preserve this literal."
},
"inputHash": {
"type": "object",
"required": [
"algorithm",
"digest"
],
"properties": {
"digest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "64 lowercase hexadecimal characters; SHA-256 of exact bytes."
},
"algorithm": {
"type": "string",
"const": "sha256",
"description": "Hash algorithm."
}
},
"description": "SHA-256 of the exact input bytes, computed locally. Never send raw input.",
"additionalProperties": false
},
"startedAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$",
"description": "Declared start time in UTC, with milliseconds."
},
"outputHash": {
"type": "object",
"required": [
"algorithm",
"digest"
],
"properties": {
"digest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "64 lowercase hexadecimal characters; SHA-256 of exact bytes."
},
"algorithm": {
"type": "string",
"const": "sha256",
"description": "Hash algorithm."
}
},
"description": "SHA-256 of exact output bytes, computed locally. Never send raw output.",
"additionalProperties": false
},
"completedAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$",
"description": "Declared completion in UTC with milliseconds, at or after start."
}
},
"description": "Commitment-only declaration of one execution step.",
"additionalProperties": false
}
},
"additionalProperties": false
}Free verification of an execution event and its unchanged receipt returned by issue_agent_receipt. Checks signature, scope and event commitment against this issuer. No wallet or new issuance required. Use verify_proof_receipt for the distinct common proof-envelope format. A valid signature does not independently prove execution; compare original bytes locally.
| Argument | Type | Description |
|---|---|---|
| event* | object | Commitment-only declaration of one execution step. |
| receipt* | object | Signed Datoka receipt; verify against independently trusted keys. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"event",
"receipt"
],
"properties": {
"event": {
"type": "object",
"required": [
"version",
"agentId",
"runId",
"stepId",
"tool",
"outcome",
"startedAt",
"completedAt",
"inputHash",
"outputHash"
],
"properties": {
"tool": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
"description": "Tool or operation identifier declared by the caller."
},
"runId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
"description": "Stable identifier for this execution run."
},
"stepId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
"description": "Stable identifier of the step within the run."
},
"agentId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
"description": "Identifier of the declaring agent, not an independently verified identity."
},
"outcome": {
"enum": [
"success",
"error"
],
"type": "string",
"description": "Outcome declared by the caller; Datoka does not observe execution."
},
"version": {
"type": "string",
"const": "datoka.agent.execution.v1",
"description": "Declaration format version; preserve this literal."
},
"inputHash": {
"type": "object",
"required": [
"algorithm",
"digest"
],
"properties": {
"digest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "64 lowercase hexadecimal characters; SHA-256 of exact bytes."
},
"algorithm": {
"type": "string",
"const": "sha256",
"description": "Hash algorithm."
}
},
"description": "SHA-256 of the exact input bytes, computed locally. Never send raw input.",
"additionalProperties": false
},
"startedAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$",
"description": "Declared start time in UTC, with milliseconds."
},
"outputHash": {
"type": "object",
"required": [
"algorithm",
"digest"
],
"properties": {
"digest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "64 lowercase hexadecimal characters; SHA-256 of exact bytes."
},
"algorithm": {
"type": "string",
"const": "sha256",
"description": "Hash algorithm."
}
},
"description": "SHA-256 of exact output bytes, computed locally. Never send raw output.",
"additionalProperties": false
},
"completedAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$",
"description": "Declared completion in UTC with milliseconds, at or after start."
}
},
"description": "Commitment-only declaration of one execution step.",
"additionalProperties": false
},
"receipt": {
"type": "object",
"required": [
"body",
"algorithm",
"signature"
],
"properties": {
"body": {
"type": "object",
"required": [
"version",
"id",
"issuer",
"keyId",
"issuedAt",
"request",
"sequence",
"previous"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"keyId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
},
"issuer": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
},
"request": {
"type": "object",
"required": [
"scope",
"chain",
"eventType",
"subject"
],
"properties": {
"chain": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
},
"scope": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
},
"subject": {
"type": "object",
"required": [
"algorithm",
"encoding",
"digest"
],
"properties": {
"digest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"encoding": {
"enum": [
"jcs",
"bytes"
],
"type": "string"
},
"algorithm": {
"type": "string",
"const": "sha256"
}
},
"additionalProperties": false
},
"eventType": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
}
},
"additionalProperties": false
},
"version": {
"type": "string",
"const": "datoka.receipt.v1"
},
"issuedAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$"
},
"previous": {
"anyOf": [
{
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
{
"type": "null"
}
]
},
"sequence": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
},
"algorithm": {
"type": "string",
"const": "Ed25519"
},
"signature": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{86}$"
}
},
"description": "Signed Datoka receipt; verify against independently trusted keys.",
"additionalProperties": false
}
},
"additionalProperties": false
}Free verification of a common Datoka proof against an independently obtained caller-supplied public trust registry and explicit issuer/scope/chain. Send only the proof, never raw documents. receiptVerified concerns signature, context and dates; status remains incomplete because the artifact is checked locally. No payment, factual accuracy or parent signatures are verified.
| Argument | Type | Description |
|---|---|---|
| chain | string | Optional expected logical chain identifier. Omit only when no chain restriction is required. |
| proof* | object | Unmodified common Datoka proof envelope; do not send its raw artifact. |
| scope* | string | Expected scope authorized by the caller-supplied trust registry. |
| trust* | object | Public trust registry obtained independently from a trusted source, not accepted merely because it accompanies this proof. |
| issuer* | string | Expected trusted issuer identifier; must match the trust registry and proof. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"proof",
"trust",
"issuer",
"scope"
],
"properties": {
"chain": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
"description": "Optional expected logical chain identifier. Omit only when no chain restriction is required."
},
"proof": {
"type": "object",
"required": [
"statement",
"receipt"
],
"properties": {
"receipt": {
"type": "object",
"required": [
"body",
"algorithm",
"signature"
],
"properties": {
"body": {
"type": "object",
"required": [
"version",
"id",
"issuer",
"keyId",
"issuedAt",
"request",
"sequence",
"previous"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"keyId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
},
"issuer": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
},
"request": {
"type": "object",
"required": [
"scope",
"chain",
"eventType",
"subject"
],
"properties": {
"chain": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
},
"scope": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
},
"subject": {
"type": "object",
"required": [
"algorithm",
"encoding",
"digest"
],
"properties": {
"digest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"encoding": {
"enum": [
"jcs",
"bytes"
],
"type": "string"
},
"algorithm": {
"type": "string",
"const": "sha256"
}
},
"additionalProperties": false
},
"eventType": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
}
},
"additionalProperties": false
},
"version": {
"type": "string",
"const": "datoka.receipt.v1"
},
"issuedAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$"
},
"previous": {
"anyOf": [
{
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
{
"type": "null"
}
]
},
"sequence": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
},
"additionalProperties": false
},
"algorithm": {
"type": "string",
"const": "Ed25519"
},
"signature": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{86}$"
}
},
"additionalProperties": false
},
"statement": {
"type": "object",
"required": [
"version",
"createdAt",
"artifact",
"sources",
"transformations",
"parentReceipts",
"attestation",
"independentlyVerified",
"references"
],
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"uri",
"retrievedAt"
],
"properties": {
"uri": {
"type": "string",
"format": "uri",
"maxLength": 2048
},
"snapshot": {
"type": "object",
"required": [
"algorithm",
"encoding",
"digest"
],
"properties": {
"digest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"encoding": {
"enum": [
"bytes",
"jcs"
],
"type": "string"
},
"algorithm": {
"type": "string",
"const": "sha256"
}
},
"additionalProperties": false
},
"description": {
"type": "string",
"maxLength": 512,
"minLength": 1
},
"retrievedAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$"
}
},
"additionalProperties": false
},
"maxItems": 64
},
"version": {
"type": "string",
"const": "datoka.proof.v0.1"
},
"artifact": {
"type": "object",
"required": [
"algorithm",
"encoding",
"digest",
"mediaType"
],
"properties": {
"digest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"encoding": {
"enum": [
"bytes",
"jcs"
],
"type": "string"
},
"algorithm": {
"type": "string",
"const": "sha256"
},
"mediaType": {
"type": "string",
"maxLength": 512,
"minLength": 1
}
},
"additionalProperties": false
},
"createdAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$"
},
"references": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"protocol",
"reference"
],
"properties": {
"kind": {
"enum": [
"payment",
"authorization",
"anchor"
],
"type": "string"
},
"protocol": {
"type": "string",
"maxLength": 512,
"minLength": 1
},
"reference": {
"type": "string",
"maxLength": 512,
"minLength": 1
}
},
"additionalProperties": false
},
"maxItems": 16
},
"validUntil": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$"
},
"attestation": {
"type": "string",
"const": "signed_declaration"
},
"parentReceipts": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"maxItems": 64
},
"transformations": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"maxLength": 512,
"minLength": 1
},
"version": {
"type": "string",
"maxLength": 512,
"minLength": 1
}
},
"additionalProperties": false
},
"maxItems": 32
},
"independentlyVerified": {
"type": "boolean",
"const": false
}
},
"additionalProperties": false
}
},
"description": "Unmodified common Datoka proof envelope; do not send its raw artifact.",
"additionalProperties": false
},
"scope": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
"description": "Expected scope authorized by the caller-supplied trust registry."
},
"trust": {
"type": "object",
"required": [
"version",
"keys"
],
"properties": {
"keys": {
"type": "array",
"items": {
"type": "object",
"required": [
"issuer",
"keyId",
"scopes",
"revoked",
"notBefore",
"notAfter",
"jwk"
],
"properties": {
"jwk": {
"type": "object",
"required": [
"kty",
"crv",
"x"
],
"properties": {
"x": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{43}$"
},
"crv": {
"type": "string",
"const": "Ed25519"
},
"kty": {
"type": "string",
"const": "OKP"
}
},
"additionalProperties": false
},
"keyId": {
"type": "string",
"minLength": 1
},
"issuer": {
"type": "string",
"minLength": 1
},
"scopes": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 1
},
"revoked": {
"type": "boolean"
},
"notAfter": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$"
},
"notBefore": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$"
}
},
"additionalProperties": false
},
"maxItems": 64,
"minItems": 1
},
"version": {
"type": "string",
"const": "datoka.trust.v0.1"
}
},
"description": "Public trust registry obtained independently from a trusted source, not accepted merely because it accompanies this proof.",
"additionalProperties": false
},
"issuer": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
"description": "Expected trusted issuer identifier; must match the trust registry and proof."
}
},
"additionalProperties": false
}