{"service":"tracker.rabbit.direct — official RabbitHole Looking Glass coordinator","version":"1","announce":{"method":"POST","path":"https://tracker.rabbit.direct/api/announce","contentType":"application/json","body":{"descriptor":{"name":"REQUIRED — burrow name as handle@host, e.g. alice@wonderland","publicKey":"REQUIRED — raw Ed25519 public key, 64 hex chars","timestamp":"REQUIRED — unix epoch milliseconds, within 300s of server time","ttl":"optional — seconds between announces, 30–3600, default 120. Marked offline after 2×ttl without a new announce.","slug":"optional — DNS label to claim as <slug>.glass.rabbit.direct; defaults to the host part of name (dots become dashes)","sysop":"optional — operator handle, ≤64 chars","description":"optional — ≤240 chars","plan":"optional — .plan text, ≤2000 chars","listeners":"optional — protocol tokens, e.g. ['quic','ws','telnet'], ≤12","endpoints":"optional — protocol → URI map, e.g. {quic: 'quic://host:4653', ws: 'ws://host:4654'}, ≤8 entries","version":"optional — server software version, ≤32 chars"},"signature":"Ed25519 signature (base64 or 128 hex chars) over the canonical JSON of descriptor"},"canonicalization":"JSON with object keys sorted recursively at every level, no insignificant whitespace, UTF-8 encoded","identity":"slug and name are bound to the announcing key. Entries expire entirely after 7 days without an announce.","reservedSlugs":["www","api","app","admin","mail","smtp","ftp","ns","root","glass","rabbit","direct","rabbithole","status","docs","dev","staging","test","demo","vercel","cdn","assets","static"]},"resolve":{"method":"GET","path":"/api/resolve?slug=<slug> (or ?name=<handle@host>)"},"directory":{"method":"GET","path":"/api/burrows — all active burrows this Looking Glass knows (tracker announces + community-glass publishes)"},"aggregator":"announces are folded into the shared rabbithole.directory index in the same transaction — the two are never out of sync","referenceClient":"https://github.com/kevinelliott/glass.rabbit.direct — examples/announce.mjs"}