{"openapi":"3.1.0","info":{"title":"Token Command Center","version":"0.3.0","description":"Free, read-only token data for apps and agents: revenue, net flow to holders after emissions, emissions/supply/unlock history, catalysts, with known data errors marked. Research data, not advice. Fees/revenue/prices partly from DefiLlama; market data from CoinGecko."},"servers":[{"url":"https://token-command-center-gamma.vercel.app"}],"paths":{"/v1/status":{"get":{"summary":"Freshness, coverage and data-quality warnings.","description":"","parameters":[],"responses":{"200":{"description":"JSON. Every data body carries `status` and `generated_at`."},"400":{"description":"Bad input: `{error, code}`."},"404":{"description":"Unknown token or path."}}}},"/v1/resolve":{"get":{"summary":"Symbol, $cashtag, name or slug to token slugs; `ambiguous: true` lists every candidate.","description":"","parameters":[{"name":"q","in":"query","required":true,"description":"What to resolve, e.g. POL.","schema":{"type":"string"}}],"responses":{"200":{"description":"JSON. Every data body carries `status` and `generated_at`."},"400":{"description":"Bad input: `{error, code}`."},"404":{"description":"Unknown token or path."}}}},"/v1/book":{"get":{"summary":"Every token as compact columnar rows (~50 KB).","description":"","parameters":[],"responses":{"200":{"description":"JSON. Every data body carries `status` and `generated_at`."},"400":{"description":"Bad input: `{error, code}`."},"404":{"description":"Unknown token or path."}}}},"/v1/tokens":{"get":{"summary":"Page through tokens.","description":"","parameters":[{"name":"sort","in":"query","required":false,"description":"health, mcap, revenue, net_flow, ps, unlock_30d, alerts, name","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"1-100","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"","schema":{"type":"integer"}},{"name":"query","in":"query","required":false,"description":"substring of slug, symbol or name","schema":{"type":"string"}},{"name":"category","in":"query","required":false,"description":"","schema":{"type":"string"}}],"responses":{"200":{"description":"JSON. Every data body carries `status` and `generated_at`."},"400":{"description":"Bad input: `{error, code}`."},"404":{"description":"Unknown token or path."}}}},"/v1/tokens/{slug}":{"get":{"summary":"One token's bounded detail (~8 KB).","description":"","parameters":[{"name":"slug","in":"path","required":true,"description":"Token slug (use /v1/resolve for a symbol).","schema":{"type":"string","pattern":"^[a-z0-9][a-z0-9._-]{0,79}$"}}],"responses":{"200":{"description":"JSON. Every data body carries `status` and `generated_at`."},"400":{"description":"Bad input: `{error, code}`."},"404":{"description":"Unknown token or path."}}}},"/v1/tokens/{slug}/digest":{"get":{"summary":"One token in ~1 KB.","description":"","parameters":[{"name":"slug","in":"path","required":true,"description":"Token slug (use /v1/resolve for a symbol).","schema":{"type":"string","pattern":"^[a-z0-9][a-z0-9._-]{0,79}$"}}],"responses":{"200":{"description":"JSON. Every data body carries `status` and `generated_at`."},"400":{"description":"Bad input: `{error, code}`."},"404":{"description":"Unknown token or path."}}}},"/v1/tokens/{slug}/sources":{"get":{"summary":"Where each figure comes from, with provenance tier and date.","description":"","parameters":[{"name":"slug","in":"path","required":true,"description":"Token slug (use /v1/resolve for a symbol).","schema":{"type":"string","pattern":"^[a-z0-9][a-z0-9._-]{0,79}$"}}],"responses":{"200":{"description":"JSON. Every data body carries `status` and `generated_at`."},"400":{"description":"Bad input: `{error, code}`."},"404":{"description":"Unknown token or path."}}}},"/v1/tokens/{slug}/series":{"get":{"summary":"History series per metric, `summary` first.","description":"TCC snapshot metrics since 2026-06-09; daily_* and price_llama from DefiLlama, years deep. Frozen price feeds are null with a `masks` entry; weekly/monthly flows are sums with partial buckets flagged. ETag/304.","parameters":[{"name":"slug","in":"path","required":true,"description":"Token slug (use /v1/resolve for a symbol).","schema":{"type":"string","pattern":"^[a-z0-9][a-z0-9._-]{0,79}$"}},{"name":"metrics","in":"query","required":false,"description":"Comma list, up to 6: price, mcap, fdv, ann_fees, ann_revenue, ann_holders_rev, net_flow_usd, ps_ratio, health_score, ann_emissions_usd, circ_supply, total_supply, pct_unlocked, daily_fees, daily_revenue, daily_holders_rev, price_llama","schema":{"type":"string"}},{"name":"range","in":"query","required":false,"description":"","schema":{"type":"string","enum":["30d","90d","1y","all"]}},{"name":"interval","in":"query","required":false,"description":"","schema":{"type":"string","enum":["1d","1w","1m"]}},{"name":"sources","in":"query","required":false,"description":"auto | tcc | llama","schema":{"type":"string"}}],"responses":{"200":{"description":"JSON. Every data body carries `status` and `generated_at`."},"400":{"description":"Bad input: `{error, code}`."},"404":{"description":"Unknown token or path."}}}},"/v1/screen":{"get":{"summary":"Rank and filter the book; missing values never count as zero.","description":"","parameters":[{"name":"sort","in":"query","required":false,"description":"arr, arr_7d, arr_30d, mcap, fdv, ps, holders_rev, net_flow, nf_yield, unlock_30d","schema":{"type":"string"}},{"name":"order","in":"query","required":false,"description":"asc | desc","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"1-50","schema":{"type":"integer"}},{"name":"min_<field>","in":"query","required":false,"description":"e.g. min_mcap=100000000","schema":{"type":"string"}},{"name":"max_<field>","in":"query","required":false,"description":"e.g. max_ps=20","schema":{"type":"string"}}],"responses":{"200":{"description":"JSON. Every data body carries `status` and `generated_at`."},"400":{"description":"Bad input: `{error, code}`."},"404":{"description":"Unknown token or path."}}}},"/v1/compare":{"get":{"summary":"Two to six tokens side by side.","description":"","parameters":[{"name":"slugs","in":"query","required":true,"description":"Comma list","schema":{"type":"string"}}],"responses":{"200":{"description":"JSON. Every data body carries `status` and `generated_at`."},"400":{"description":"Bad input: `{error, code}`."},"404":{"description":"Unknown token or path."}}}},"/v1/brief":{"get":{"summary":"The whole book in ~1.5 KB with a plain-text version.","description":"","parameters":[],"responses":{"200":{"description":"JSON. Every data body carries `status` and `generated_at`."},"400":{"description":"Bad input: `{error, code}`."},"404":{"description":"Unknown token or path."}}}},"/v1/calendar":{"get":{"summary":"Upcoming dated catalysts (unlocks, emission steps, votes).","description":"","parameters":[{"name":"days","in":"query","required":false,"description":"0-180","schema":{"type":"integer"}},{"name":"token","in":"query","required":false,"description":"Optional slug","schema":{"type":"string"}}],"responses":{"200":{"description":"JSON. Every data body carries `status` and `generated_at`."},"400":{"description":"Bad input: `{error, code}`."},"404":{"description":"Unknown token or path."}}}},"/v1/moves":{"get":{"summary":"Biggest movers: 30-day revenue vs price divergence, or 14-day momentum.","description":"","parameters":[{"name":"kind","in":"query","required":false,"description":"","schema":{"type":"string","enum":["movers","momentum"]}}],"responses":{"200":{"description":"JSON. Every data body carries `status` and `generated_at`."},"400":{"description":"Bad input: `{error, code}`."},"404":{"description":"Unknown token or path."}}}},"/v1/ledger":{"get":{"summary":"Prediction-ledger tallies (counts only).","description":"","parameters":[],"responses":{"200":{"description":"JSON. Every data body carries `status` and `generated_at`."},"400":{"description":"Bad input: `{error, code}`."},"404":{"description":"Unknown token or path."}}}},"/v1/prices":{"get":{"summary":"Live quotes over the daily snapshot (≤100).","description":"","parameters":[{"name":"slugs","in":"query","required":false,"description":"Comma list","schema":{"type":"string"}}],"responses":{"200":{"description":"JSON. Every data body carries `status` and `generated_at`."},"400":{"description":"Bad input: `{error, code}`."},"404":{"description":"Unknown token or path."}}}},"/mcp":{"post":{"summary":"MCP (Streamable HTTP, stateless, JSON-RPC). Tools: tc_alerts, tc_brief, tc_calendar, tc_categories, tc_compare, tc_get_report, tc_get_token, tc_get_token_digest, tc_ledger, tc_list_tokens, tc_moves, tc_resolve, tc_screen, tc_search_tokens, tc_series, tc_status","responses":{"200":{"description":"JSON-RPC response"}}}}}}