Published anchors for decision receipts
A signed receipt proves KYTGate said it. It does not prove KYTGate said it then; the party holding the key can always sign something later. So once a day every receipt written so far is hashed into an RFC 6962 Merkle tree and the root is published here, unchanged for good. Raw JSON at /api/public/attestations; a single receipt at /api/public/attestations/{receiptId}.
| Batch (day published, UTC) | Receipts | Receipts written | Published | External timestamp | Merkle root (SHA-256) |
|---|---|---|---|---|---|
| 2026-11-03 | 3 | 2026-11-02 05:50 UTC | 2026-11-03 04:20 UTC | Bitcoin #974,343 | e130a017a36c4947d403218b22aa0c23b8b13c18c7cdf2bf1b1063e4005a746e |
| 2026-10-27 | 3 | 2026-10-26 05:50 UTC | 2026-10-27 04:20 UTC | Bitcoin #973,343 | 5b25dabc10dfce9628560350641e8dbc2eadd0e70456fa9349440dd5475fb3f8 |
| 2026-10-20 | 3 | 2026-10-19 05:50 UTC | 2026-10-20 04:20 UTC | Bitcoin #972,262 | 5680006cdcd6b6e64f40a4738c6521069a45c6fb0b44472f7ff03a06e3922bb5 |
| 2026-10-13 | 3 | 2026-10-12 05:50 UTC | 2026-10-13 04:20 UTC | Bitcoin #971,191 | 1feb709cdc7eec71ba9946c9c3b1f0190a641b22477594e877b6050c1c56b1fe |
| 2026-09-27 | 1 | 2026-09-26 11:43 UTC | 2026-09-27 04:20 UTC | Bitcoin #968,936 | ba75175574bb5b8637b08d7dcf80b63c5eb62d2f6d60b8efa89c1ff0fdc2090b |
| 2026-09-11 | 54 | 2026-09-02 13:08 UTC → 2026-09-11 15:05 UTC | 2026-09-11 17:36 UTC | Bitcoin #968,936 | a8bd1632695505fac272483ac63c91c5865ca404864d880a6c5510d4dd7ab552 |
Record today’s root somewhere we do not control. That single number is what lets you prove later that we did not rewrite the batch behind it.
External timestamps
A root published only by us is a tamper-evident log, not third-party proof. So every root is also submitted to four independent OpenTimestamps calendar servers, each of which aggregates it with everyone else’s hashes and commits the result to a Bitcoin transaction. The finished proof is a path from our root to a block header: checking it needs Bitcoin’s history and no trust in us, in the calendar, or in any certificate authority.
Submitted is not the same as timestamped, and the table above distinguishes them. A calendar batches submissions, so for an hour or two after publication the proof holds a promise rather than a path, and a row reading “not yet in a block” evidences nothing about time yet. Once the transaction confirms, the row names the Bitcoin block. Each proof is a standard .ots file, downloadable per batch and per calendar, and verified with the reference client against your own node:
KYTGate validates none of this evidence and does not report it as valid. The party being audited should not also be the one declaring its own evidence good. Neither a Bitcoin anchor nor a token from a service that is not an eIDAS-qualified trust provider carries a legal presumption of time under EU law. What they do give you is independent parties confirming that the number existed.
Check a receipt
Paste a receipt into the receipt verifier: it checks the Ed25519 signature and then walks the inclusion proof to the published root. You can run both checks yourself. The verifier only saves you the time.
If you do not have a receipt yet, take ours. It is a real receipt in the real format, signed with a key whose private half we publish alongside it. Anyone can mint one, so holding it proves nothing. It shows the mechanism and is not evidence of any decision.
You can also run it on your own machine, against your own copy of the root, with no web page involved. The verifier is published as an open-source package with no dependencies. The algorithm is in one readable file, so you can reimplement it instead of depending on it:
Source and the full algorithm: npmjs.com/package/kytgate-verify. Pass --offline with a key and proof you captured earlier and it never touches the network.