Signed input
Decode
receipt.payload_b64 and verify those exact bytes. Do not reserialize JSON before verifying.Craton does not replace your approval workflow. It creates a signed boundary receipt when a covered high-risk action is evaluated, so your team, auditors, and authorized third parties can verify the record later without calling back into Craton.
receipt.payload_b64 and verify those exact bytes. Do not reserialize JSON before verifying.receipt.signature over the decoded payload bytes.receipt.kid selects the public key from the standard JWKS at /protocol/v1/jwks.json.receipt.payload_b64, receipt.signature, and receipt.kid./protocol/v1/jwks.json or use a pinned offline key bundle.kid matches the receipt.payload_b64 bytes, then read the signed payload.Failed signature verification, unknown kid, malformed payload, or unsupported signature algorithm means the evidence is unverified.
GET https://cratonlayer.com/protocol GET https://cratonlayer.com/protocol/v1/spec GET https://cratonlayer.com/protocol/v1/schema GET https://cratonlayer.com/protocol/v1/jwks.json GET https://cratonlayer.com/verify GET https://github.com/cratonlayer/craton-verify
{
"object": "craton.receipt.protocol.v1",
"version": "v1",
"production_write": false,
"stable_resources": {
"human_protocol": "https://cratonlayer.com/protocol",
"machine_spec": "https://cratonlayer.com/protocol/v1/spec",
"json_schema": "https://cratonlayer.com/protocol/v1/schema",
"jwks": "https://cratonlayer.com/protocol/v1/jwks.json",
"interactive_verifier": "https://cratonlayer.com/verify"
},
"compatibility_commitment": "Receipt verification semantics are stable for v1 receipts: decode receipt.payload_b64 and verify receipt.signature over those exact bytes with the Ed25519 public key selected by receipt.kid, then read the signed payload.",
"canonicalization": {
"signed_message": "Decode receipt.payload_b64 with standard base64 and verify the signature over those exact bytes.",
"verifier_must_reserialize_json": false,
"payload_bytes": {
"encoding": "UTF-8",
"producer": "Craton",
"format": "Canonical JSON bytes for the v1 signed payload.",
"determinism": "Craton emits deterministic object serialization for v1 receipts; third-party verifiers should not reconstruct these bytes from parsed JSON."
},
"signature_encoding": "base64",
"payload_encoding": "base64"
},
"stable_receipt_fields": {
"receipt.payload_b64": "Base64-encoded signed receipt payload bytes.",
"receipt.signature": "Base64-encoded Ed25519 signature over receipt.payload_b64 decoded bytes.",
"receipt.kid": "Public key identifier used to select a verification key.",
"receipt.sig_alg": "Expected signature algorithm; v1 uses ed25519.",
"verdict": "Boundary verdict vocabulary: allow, constrain, reject.",
"commitment_id": "Stable signed commitment reference for the boundary snapshot.",
"request_id": "Runtime request reference returned with the boundary check."
},
"canonical_runtime_labels": {
"gate_type": {
"canonical_field": "gate_type",
"raw_context_field": "context.gate_type_raw",
"recommended_values": [
"threshold_gate",
"privileged_access_gate",
"counterparty_release_gate",
"data_export_gate",
"deployment_approval_gate",
"manual_override_gate",
"risk_escalation_gate",
"cross_system_handoff_gate",
"cross_org_handoff_gate"
],
"closed_enum": false
},
"system_scope": {
"canonical_field": "system_scope",
"raw_context_field": "context.system_scope_raw",
"closed_enum": false
},
"decision_type": {
"canonical_field": "decision_type",
"raw_context_field": "context.decision_type_raw",
"recommended_values": [
"threshold_execution_request",
"privileged_access_request",
"counterparty_release_request",
"data_export_request",
"deployment_approval_request",
"manual_override_request",
"risk_score_escalation",
"cross_system_handoff",
"cross_org_handoff"
],
"closed_enum": false
}
},
"offline_verification": {
"public_protocol_page": "/protocol",
"machine_spec_endpoint": "/protocol/v1/spec",
"json_schema_endpoint": "/protocol/v1/schema",
"jwks_endpoint": "/protocol/v1/jwks.json",
"interactive_verifier_page": "/verify",
"offline_key_bundle_endpoint": "/self-service/verify-keys/offline-bundle",
"offline_verifier_repository": "https://github.com/cratonlayer/craton-verify",
"online_keys_endpoint": "/protocol/v1/jwks.json",
"rule": "Stored receipts can be verified with the v1 protocol spec, RFC 7517 JWKS, /verify, or the open-source offline verifier without giving Craton control over the customer host system."
},
"third_party_use": {
"allowed": true,
"required_inputs": [
"receipt.payload_b64",
"receipt.signature",
"receipt.kid",
"RFC 7517 JWKS public key"
],
"no_craton_callback_required": true,
"failure_rule": "Treat signature failure, unknown kid, malformed payload, or unsupported sig_alg as unverified evidence."
}
}