{"service":"tcgvibes witness chain","write":{"POST /envelope":"append envelope to chain (Bearer auth)","POST /vibes":"update vibes snapshot, auto-writes immutable history/<date>/vibes.json (Bearer auth)","POST /catalog":"write type=catalog envelope, auto-writes immutable history/<date>/catalog.json (Bearer auth)"},"read":{"GET /chain/latest":"latest envelope","GET /chain/genesis":"genesis envelope","GET /chain/:date":"chain for date (JSONL)","GET /vibes/latest":"latest vibes — full 3MB (CDN cached, 5min)","GET /vibes/summary":"sets + global only — ~10KB (CDN cached, 5min)","GET /vibes/:date":"vibes for date (rolling daily, last-write-wins)","GET /vibes/history/:date":"immutable daily vibes snapshot (first-write-wins)","GET /catalog/latest":"latest type=catalog envelope pointer","GET /catalog/history/:date":"immutable catalog envelope for a rebuild date","GET /sets":"all sets with current vibe","GET /sets/:slug/trajectory?days=30":"α trajectory for set","GET /alerts/recent?limit=20":"recent structural changes","GET /transitions/recent?days=7":"vibe transitions (observation graph nodes)","GET /transitions/:date":"transitions for date (JSONL)","GET /labs_daily/latest":"most recent labs daily one-liner bundle (airgap public output)","GET /labs_daily/:date":"labs daily bundle for a specific date","GET /set_daily/:slug/:date":"per-set daily oneliner bundle (airgap public output)","GET /kickbacks":"TCGPlayer Kickbacks promo status (CDN cached, 5min)","GET /pulse/signals":"pulse monitor signals (Reddit RSS + official pages)","GET /pulse/state":"pulse monitor run state","GET /changelog":"universe rebalancing changelog index","GET /changelog/:key":"individual changelog entry","GET /sets/:slug/cards?top=5":"top cards by signal weight for a set (CDN cached, 5min)","GET /card/:canonical_id":"lean card identity from the R2 prefix shard (atlas/cards/<id[:2]>.json; CDN cached, 1h)","GET /browse-list/:game/:era/:page":"browse era-landing card-list page (browse/<game>/<era>/<n>.json; CDN cached, 1h)","GET /related/:canonical_id?limit=12":"card-graph attribute groups (same artist/set/tag via D1 index queries; CDN cached, 1h)","GET /graph/:canonical_id?limit=50":"card node + computed-edge neighborhood (D1 edges table; empty until rule-edge slice; CDN cached, 1h)","GET /by-artist?name=<artist>&limit=60":"all cards by an artist (D1 idx_cards_artist; powers /artist/<slug> for non-bundled games; CDN cached, 1h)","GET /entity-overlay/entities.jsonl":"entity overlay entities (Phase C C.2; CDN cached, 1h)","GET /entity-overlay/relations.jsonl":"entity overlay relations (Phase C C.2; CDN cached, 1h)","GET /entity-overlay/_index.json":"entity overlay metadata (Phase C C.2; CDN cached, 1h)","GET /data/freshness?prefix=<allowlisted>":"aggregate freshness summary for env.DATA prefixes (count + uploaded envelope + total_size; allowlist enforced; CDN cached, 60s)","GET /health":"service status"},"guards":{"min_cards":50,"min_sets":5,"shrink_threshold":"50%"}}