PEAC PROTOCOL
Machine readable policies and receipts
SECTION R.1
AUG 2025
API DOCUMENTATION
PEAC RECEIPTS - MX-PEAC

CONFIRM RECEIPT


[POST]
/v1/receipts/:id/confirm
REQUEST
JSON
HEADERS
PEAC-Receipt: rcpt_01HZY3Z3V7C7 Accept: application/peac-receipt+json Content-Type: application/peac-receipt+json
BODY
{ "jws": "<detached JWS compact serialization>", "kid": "peac_pub_2025_08", "agent_id": "agent_9f3b2", "policy_version": "0.9.10" }
RESPONSE
JSON
STATUS
202 ACCEPTED
DATA
{ "id": "rcpt_01HZY3Z3V7C7", "status": "VALID", "time": "2025-08-30T18:12:03Z", "method": "peac.receipt", "resource": "https://example.com/api/data", "agent_id": "agent_9f3b2", "kid": "peac_pub_2025_08", "sig_alg": "Ed25519", "mx_id": "MX-PEAC_9D328FC8" }

A VALID status means the signature, policy and expiry checks pass. Use the id in subsequent requests as PEAC-Receipt. Non-breaking fields may be added in v1.0.

Media Types:
Receipt JWS (detached): typ: "application/peac-receipt+jws" Receipt JSON: application/peac-receipt+json
Recovery Endpoints:
[POST] /v1/receipts/:id/retry [POST] /v1/receipts/:id/revoke
Example Request:
curl -X POST \ -H "PEAC-Receipt: rcpt_01HZY3Z3V7C7" \ -H "Accept: application/peac-receipt+json" \ -H "Content-Type: application/peac-receipt+json" \ -d '{ "jws": "<detached JWS>", "kid": "peac_pub_2025_08", "agent_id": "agent_9f3b2", "policy_version": "0.9.10" }' \ https://api.example.com/v1/receipts/rcpt_01HZY3Z3V7C7/confirm
Error Codes:
400 INVALID_INPUT malformed payload or fields 401 UNAUTHORIZED missing or invalid auth on caller 403 POLICY_MISMATCH receipt policy does not match current peac.txt 409 REPLAY receipt previously used or nonce replay 410 REVOKED receipt was revoked by issuer 422 SIG_INVALID signature or key reference invalid 429 RATE_LIMITED too many requests 503 BUSY please retry later