angbot

Verify a receipt.

Every event Langbot emits carries a hash chained to the one before it from the same line, and each chain head is signed every 30 seconds. Paste an event or its id: the hash is recomputed in your browser, and nothing but the id leaves it.

How receipts work

An event as received from the stream, the API, a webhook or a replay bundle, or its evt_… id.

What a match proves.

Exactly this fact, at exactly this time.

The hash covers the phrase, the speaker, the three clocks, the tickers and the link to the previous event from the same line. Change any of them and the hash changes.

ReceiptVerifies
hash
c199ebef7bd3…
prev
3e1025f485d8…
chain
2,863
signed
every 30 s
key 25fda962

The text is hashed, never shown.

Only the hash of the spoken text enters the receipt, so a redacted event verifies with the same hash and no speech beyond the matched phrase leaves Langbot.

phrase_detected · restricted source
phrase
dividend
source
Citigroup Q3 call, dial-in
clocks
11:15:34.860 · +409 ms · +410 ms
markets
KXEARNINGSMENTIONC-26OCT13-DIVI
raw
withheld, hashed

Anyone can check it offline.

Checkpoints are signed with a published Ed25519 key. A replay file carries every hash, link and signature, and the CLI verifies it with no network.

langbot verify goldman.replay.jsonl
events        50
chain         every hash and link verified
checkpoints   1/1 signatures  key 25fda962
verified: Langbot emitted exactly
these facts at these times.

The same check, from a terminal.

The CLI ships with the Python and TypeScript SDKs. Format and test vector are in the receipts docs.

shell
langbot receipt <evt_id>               # hash, chain position, nearest checkpointlangbot replay <event_id> --books --mine > call.jsonllangbot verify call.jsonl              # every hash, link and signature, offlinelangbot attest <evt_id> --action '{"side":"yes","count":10}'