{"openapi":"3.1.0","info":{"title":"tracstats","version":"0.0.2"},"paths":{"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/network/overview":{"get":{"summary":"Network Overview","operationId":"network_overview_api_v1_network_overview_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/node/status":{"get":{"summary":"Node Status","operationId":"node_status_api_v1_node_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/node/logs":{"get":{"summary":"Node Logs","operationId":"node_logs_api_v1_node_logs_get","parameters":[{"name":"lines","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Lines"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/keys/issue":{"post":{"summary":"Issue Key Endpoint","description":"Admin-only key issuance. Gated by X-Admin-Token header matching ADMIN_TOKEN env.","operationId":"issue_key_endpoint_api_v1_keys_issue_post","parameters":[{"name":"tier","in":"query","required":false,"schema":{"type":"string","default":"starter","title":"Tier"}},{"name":"label","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"}},{"name":"X-Admin-Token","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Admin-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/waitlist":{"post":{"summary":"Waitlist","description":"Collect interest for paid API access. Stored as a row in api_keys with tier='waitlist' (label = contact info).","operationId":"waitlist_api_v1_waitlist_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/keys/me":{"get":{"summary":"Key Info","operationId":"key_info_api_v1_keys_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/validators":{"get":{"summary":"Validators","operationId":"validators_api_v1_validators_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":500,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/market/history":{"get":{"summary":"Market History","description":"Proxy CoinGecko historical price series. Cached 1h per range.","operationId":"market_history_api_v1_market_history_get","parameters":[{"name":"range","in":"query","required":false,"schema":{"type":"string","default":"365d","title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/history/{metric}":{"get":{"summary":"History","operationId":"history_api_v1_history__metric__get","parameters":[{"name":"metric","in":"path","required":true,"schema":{"type":"string","title":"Metric"}},{"name":"window","in":"query","required":false,"schema":{"type":"string","default":"24h","title":"Window"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/validators.csv":{"get":{"summary":"Validators Csv","operationId":"validators_csv_api_v1_validators_csv_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/whitelist.csv":{"get":{"summary":"Whitelist Csv","operationId":"whitelist_csv_api_v1_whitelist_csv_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/whitelist":{"get":{"summary":"Whitelist","operationId":"whitelist_api_v1_whitelist_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":500,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/":{"get":{"summary":"Index","operationId":"index__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/about":{"get":{"summary":"About","operationId":"about_about_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/roadmap":{"get":{"summary":"Roadmap","operationId":"roadmap_roadmap_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api":{"get":{"summary":"Api Page","operationId":"api_page_api_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/changelog":{"get":{"summary":"Changelog","operationId":"changelog_changelog_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/spec":{"get":{"summary":"Spec","operationId":"spec_spec_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/pro":{"get":{"summary":"Pro","operationId":"pro_pro_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/validators":{"get":{"summary":"Validators Page","operationId":"validators_page_validators_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/validators/{pubkey}":{"get":{"summary":"Validator Detail","operationId":"validator_detail_validators__pubkey__get","parameters":[{"name":"pubkey","in":"path","required":true,"schema":{"type":"string","title":"Pubkey"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}