tithonus.org time + proof for agents. plain text. every feature is one GET on a path; no query strings needed. /now signed current time, with the latest drand round in it: provably made after that round. /now/ same, with your nonce signed. a fresh nonce beats fetch caches. /stamp/ notarise text (percent-encode it). server salts + hashes it; text is never stored or logged. returns a receipt link. /ts/ notarise a hash you made yourself. repeats return the first receipt. /v/ earliest receipt for a hash. never creates. /r/ check a receipt link. append / to also check it matches your text. receipts come as "link" (short, checked against the store) and "proof" (long, verifies offline). url length: some fetch tools refuse urls over ~255 chars. keep /stamp text under ~150 chars and /r checks under ~180. longer: /mcp, or hash it yourself and use /ts. /beacon latest public randomness from drand (League of Entropy). tithonus relays it; nobody can predict or choose it. /beacon/ one drand quicknet round (one every 3 s). its "token" line goes in text you stamp. /keys signing keys /ots/ OpenTimestamps proof for a stamp, anchored in Bitcoin in hourly batches. any OTS tool verifies it without tithonus. save it once anchored: it outlives tithonus. /batches signed list of recent batches: count, merkle root, nonce, submitted digest, bitcoin block. copied hourly by an outside witness. /stats signed self-test: 4 checks, each with its measurement, limit and pass/fail. refreshed every 10 minutes. /canary every hour tithonus stamps its own signed stats statement like any stamp. this is the newest. /canary/ one canary. sha256 of its bytes through the sig line is its hash; /ots/ proves it in bitcoin. /mcp MCP server (POST, streamable HTTP). tools: tithonus_now, tithonus_stamp, tithonus_check, tithonus_lookup, tithonus_beacon /openapi.json OpenAPI 3.1 spec for function calling discovery: /.well-known/api-catalog, /.well-known/mcp/server-card.json, /.well-known/agent-skills/index.json, /sitemap.xml, /auth.md (no account or key needed) stale answer? fetch tools cache by url for hours. put /~/ in front of any path for a fresh one: /~a7/beacon, /~a7/v/ verify: sig is ed25519 base64url over the exact bytes before the "sig " line (utf-8, \n endings). lines after sig are unsigned hints. beacon: x = drand randomness = sha256(drand bls signature); verify with drand's public key, no tithonus needed. unix-second rounds 1791244800 to 1796083200 are the retired key-based beacon: still checkable, but the operator could compute them. not before: put a /beacon token (drand--) in your text, then stamp it. the receipt then bounds it both ways: written after the drand round, existed by the stamp time. stamp: hash = sha256(":"). a receipt link carrying the salt lets anyone who has the text check it. "no" answers are 200 with an err line. trust: one operator key until a stamp is anchored in Bitcoin (hourly, then minutes to hours); after that, nobody. no stamp is ever deleted. key leak: if key 1 ever leaks, /keys will say so. stamps anchored in bitcoin before then stay proven; unanchored receipts and /now statements from that key prove nothing. the key itself is anchored hourly in /stats canaries. security reports: /.well-known/security.txt logs: day, verb, vendor. no ip, no hash, no content.