One receipt per cleared read
RCO — the Record of Cleared Orders — is the record of what an AI agent relied on. When an Allooloo gate clears a read, it writes one receipt to this chain: what was read, in which market, under which rule version, when, and the hash of the answer the agent received. The receipt is signed by Allooloo and chained to the one before it.
- Door: https://mcp.rco-records.ai/mcp — Model Context Protocol (MCP), streamable HTTP, stateless, JSON-RPC 2.0, typed errors.
write_receipt— called by the clearing gate; one bearer token per writer; returns the receipt.verify_receipt— public; by id; returns the receipt and the verification result.- Operator: Allooloo Technologies Corp.. One writer: Allooloo's gates.
Canonical JSON, keys sorted, UTF-8, no whitespace
One receipt per cleared read; writes are idempotent on (writer, subject, subject_type, market, rule_version, cleared_at, answer_hash). Target size under 600 bytes. Fields are only ever added, never renamed or removed; unknown fields are ignored by readers.
| Field | Meaning |
|---|---|
v | 1 |
id | rco: + 20-char base32 of the first 100 bits of hash. Derived, never assigned. |
seq | Monotonic integer across the whole chain. |
writer | The gate that wrote it (allooloo). |
caller | Who asked: a customer key id, or an x402 wallet handle. Stored as sha256 of the value. Empty when unknown. |
subject | What was read: the identifier (ISIN, LEI, …). |
subject_type | isin | lei | gtin | … — open list. Replaces the v0 gtin field. |
market | ISO country or exchange code of the read. |
rule_version | Version of the rule set the gate cleared under. |
cleared_at | RFC 3339 UTC, seconds. |
answer_hash | sha256 of the canonical answer bytes the agent received. |
prev_hash | hash of the previous receipt (seq − 1). |
hash | sha256 over the canonical receipt without hash, sig (and id, which is derived from it). |
sig | Ed25519 over hash, by kid. |
kid | Key id, resolvable at /.well-known/jwks.json. |
verify(receipt, jwks) is a pure function
Recompute id and hash, check sig against kid. A receipt verifies forever without asking Allooloo anything. Reference implementations in TypeScript, Python and Go, and the spec, under the MIT licence: github.com/allooloo/rco-records.
https://rco-records.ai/receipts/{id}— the same answer asverify_receipt, over GET, for any client.- Keyring: /.well-known/jwks.json —
rco-allooloo-2026-10(signing), and the two historical keys the v0 receipts name. - Auditors: how to verify, where the chain tip is, what a statement looks like.
The receipts before 2026-10-29 keep their bytes
Receipts written before 2026-10-29 are version 0: {decision_id, gtin, market, actor_class, rule_version, cleared_at, writer, prev_hash, hash, sig, kid}, hash over the canonical JSON of {actor_class, cleared_at, decision_id, gtin, market, prev_hash, rule_version, writer}. Their bytes and field names are kept forever — the chain hashes over them. Version 1 starts at the first receipt written under Allooloo's key, chained to the last v0 hash: one chain.