{"openapi":"3.1.0","info":{"title":"PetFood Data Station API","description":"AI-friendly pet regulatory & health data query API. Anti-scraping by design.","version":"1.0.0"},"paths":{"/":{"get":{"summary":"Root","description":"Serve the designed homepage from site/index.html (5KB + style.css).","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/26e383521b4297936eda26c4421cb3c0.txt":{"get":{"summary":"Indexnow Key","description":"Bing IndexNow key verification file (2026-07-19).","operationId":"indexnow_key_26e383521b4297936eda26c4421cb3c0_txt_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/robots.txt":{"get":{"summary":"Robots","description":"Robots: explicit AI crawler rules + allow query endpoints; disallow dump-style.","operationId":"robots_robots_txt_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/llm.txt":{"get":{"summary":"Llm Txt","description":"Single-block LLM summary (~800 tokens). The one-stop summary for AI crawlers.","operationId":"llm_txt_llm_txt_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/llm-context.txt":{"get":{"summary":"Llm Context Txt","description":"Extended LLM context: all topic IDs + categories + 1-line description.","operationId":"llm_context_txt_llm_context_txt_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/llms-full.txt":{"get":{"summary":"Llms Full Txt","description":"Full project context: methodology + sources + citation + contact + recent updates.","operationId":"llms_full_txt_llms_full_txt_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/sitemap.xml":{"get":{"summary":"Sitemap","description":"XML sitemap for Google/Bing + AI crawlers.","operationId":"sitemap_sitemap_xml_get","responses":{"200":{"description":"Successful Response"}}}},"/api/v1/topics":{"get":{"summary":"List Topics","description":"List available RAG topics (whitelist). No dump, only metadata.","operationId":"list_topics_api_v1_topics_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by category (e.g. 'aafco', 'fediaf', 'eu', 'china')","title":"Category"},"description":"Filter by category (e.g. 'aafco', 'fediaf', 'eu', 'china')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"description":"Max topics to return (max 200)","default":50,"title":"Limit"},"description":"Max topics to return (max 200)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Skip first N topics (for paging, use with limit)","default":0,"title":"Offset"},"description":"Skip first N topics (for paging, use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/llm_context":{"get":{"summary":"Llm Context","description":"AI-friendly RAG context endpoint. Returns pre-generated, citation-rich, ~200-500 token text.","operationId":"llm_context_api_v1_llm_context_get","parameters":[{"name":"topic","in":"query","required":true,"schema":{"type":"string","minLength":1,"description":"Topic ID from /api/v1/topics whitelist. No wildcards allowed.","title":"Topic"},"description":"Topic ID from /api/v1/topics whitelist. No wildcards allowed."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/search":{"get":{"summary":"Search Topics","description":"Keyword search over the RAG topic whitelist.\n\nReturns METADATA ONLY (no topic body) so results stay traceable and\ndump-proof: each hit links back to /api/v1/llm_context?topic=<topic_id>.\nAnti-dump by design: parameterized query, no wildcard, per-request limit.","operationId":"search_topics_api_v1_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Free-text query across topic_id, title and category (e.g. 'taurine', 'Korea NIAS', 'rabies'). Tokenized AND across whitespace.","title":"Q"},"description":"Free-text query across topic_id, title and category (e.g. 'taurine', 'Korea NIAS', 'rabies'). Tokenized AND across whitespace."},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional category filter to narrow results (e.g. 'ade', 'evidence', 'aafco', 'vaccine-guidelines')","title":"Category"},"description":"Optional category filter to narrow results (e.g. 'ade', 'evidence', 'aafco', 'vaccine-guidelines')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"description":"Max results to return (max 50, anti-dump cap)","default":20,"title":"Limit"},"description":"Max results to return (max 50, anti-dump cap)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Skip first N results (for paging, use with limit)","default":0,"title":"Offset"},"description":"Skip first N results (for paging, use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/nutrient":{"get":{"summary":"Nutrient","description":"Single-point nutrient query. All 6 params required (anti-dump).","operationId":"nutrient_api_v1_nutrient_get","parameters":[{"name":"standard","in":"query","required":true,"schema":{"type":"string","description":"Standard code: AAFCO, FEDIAF, EU, GB, CFIA, KFDA, MAFF","title":"Standard"},"description":"Standard code: AAFCO, FEDIAF, EU, GB, CFIA, KFDA, MAFF"},{"name":"year","in":"query","required":true,"schema":{"type":"integer","description":"Year of standard edition","title":"Year"},"description":"Year of standard edition"},{"name":"species","in":"query","required":true,"schema":{"type":"string","description":"Species: dog, cat, dog_and_cat, mammals, etc.","title":"Species"},"description":"Species: dog, cat, dog_and_cat, mammals, etc."},{"name":"lifestage","in":"query","required":true,"schema":{"type":"string","description":"Life stage: adult, GR (growth & reproduction), puppy, kitten, all","title":"Lifestage"},"description":"Life stage: adult, GR (growth & reproduction), puppy, kitten, all"},{"name":"nutrient","in":"query","required":true,"schema":{"type":"string","description":"Nutrient: protein, fat, Ca, P, taurine, etc.","title":"Nutrient"},"description":"Nutrient: protein, fat, Ca, P, taurine, etc."},{"name":"basis","in":"query","required":true,"schema":{"type":"string","description":"Basis: DM (dry matter) or cal (per 1000 kcal ME)","title":"Basis"},"description":"Basis: DM (dry matter) or cal (per 1000 kcal ME)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cross_compare":{"get":{"summary":"Cross Compare","description":"Compare the same nutrient across 2-3 standards. Max 3 to prevent dump.","operationId":"cross_compare_api_v1_cross_compare_get","parameters":[{"name":"standards","in":"query","required":true,"schema":{"type":"string","description":"Comma-separated 2-3 standards: CODE_YEAR (e.g. AAFCO_2024,FEDIAF_2025) or bare codes (AAFCO,FEDIAF = latest indexed edition)","title":"Standards"},"description":"Comma-separated 2-3 standards: CODE_YEAR (e.g. AAFCO_2024,FEDIAF_2025) or bare codes (AAFCO,FEDIAF = latest indexed edition)"},{"name":"species","in":"query","required":true,"schema":{"type":"string","description":"Species: dog, cat","title":"Species"},"description":"Species: dog, cat"},{"name":"lifestage","in":"query","required":true,"schema":{"type":"string","description":"Life stage: adult, GR, etc.","title":"Lifestage"},"description":"Life stage: adult, GR, etc."},{"name":"nutrient","in":"query","required":true,"schema":{"type":"string","description":"Nutrient to compare","title":"Nutrient"},"description":"Nutrient to compare"},{"name":"basis","in":"query","required":true,"schema":{"type":"string","description":"Basis: DM or cal","title":"Basis"},"description":"Basis: DM or cal"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/batch_nutrient":{"get":{"summary":"Batch Nutrient","description":"Query up to 10 nutrients in one request. Saves AI agents from hammering /nutrient in a loop.","operationId":"batch_nutrient_api_v1_batch_nutrient_get","parameters":[{"name":"standard","in":"query","required":true,"schema":{"type":"string","description":"Standard code, e.g. AAFCO, FEDIAF","title":"Standard"},"description":"Standard code, e.g. AAFCO, FEDIAF"},{"name":"year","in":"query","required":true,"schema":{"type":"integer","title":"Year"}},{"name":"species","in":"query","required":true,"schema":{"type":"string","title":"Species"}},{"name":"lifestage","in":"query","required":true,"schema":{"type":"string","title":"Lifestage"}},{"name":"nutrients","in":"query","required":true,"schema":{"type":"string","description":"Comma-separated nutrient aliases, max 10","title":"Nutrients"},"description":"Comma-separated nutrient aliases, max 10"},{"name":"basis","in":"query","required":true,"schema":{"type":"string","description":"DM | AF | per1000kcal","title":"Basis"},"description":"DM | AF | per1000kcal"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ingredient_lookup":{"get":{"summary":"Ingredient Lookup","description":"Look up official feed ingredient definitions by name substring (case-insensitive).\nSources: AAFCO OP 2024 Chapter 6 (650 definitions) + EU Feed Catalogue Reg 68/2013 (604 materials).","operationId":"ingredient_lookup_api_v1_ingredient_lookup_get","parameters":[{"name":"name","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Ingredient name or substring, e.g. 'barley', 'chicken meal'","title":"Name"},"description":"Ingredient name or substring, e.g. 'barley', 'chicken meal'"},{"name":"source","in":"query","required":false,"schema":{"type":"string","description":"aafco | eu | all","default":"all","title":"Source"},"description":"aafco | eu | all"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"description":"Max matches to return (max 100)","default":20,"title":"Limit"},"description":"Max matches to return (max 100)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/contaminant_limits":{"get":{"summary":"Contaminant Limits","description":"Look up official pet food contaminant maximum limits by substance name (case-insensitive).\nSource: Japan MAFF Pet Food Safety Act enforcement standards (13 entries: heavy metals, mycotoxins, pesticides, antioxidants, additives).","operationId":"contaminant_limits_api_v1_contaminant_limits_get","parameters":[{"name":"substance","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Substance name or substring, e.g. 'lead', 'aflatoxin', 'BHA'","title":"Substance"},"description":"Substance name or substring, e.g. 'lead', 'aflatoxin', 'BHA'"},{"name":"country","in":"query","required":false,"schema":{"type":"string","description":"Country code of the limit table (currently only JP)","default":"JP","title":"Country"},"description":"Country code of the limit table (currently only JP)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ade":{"get":{"summary":"Ade Lookup","description":"Query FDA Animal & Veterinary adverse-event (ADE) reports by active ingredient.\n\nReturns structured summary stats (total reports, species breakdown, top VEDDRA\nreactions) parsed from C1-verified topics — NOT raw bodies. Each hit links to\n/api/v1/llm_context?topic=<topic_id> for the full citation-rich text.\nAnti-dump by design: parameterized, no wildcard, per-request limit.","operationId":"ade_lookup_api_v1_ade_get","parameters":[{"name":"ingredient","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Active ingredient name or substring, e.g. 'afoxolaner', 'carprofen', 'insulin', 'prednisone'","title":"Ingredient"},"description":"Active ingredient name or substring, e.g. 'afoxolaner', 'carprofen', 'insulin', 'prednisone'"},{"name":"species","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional species filter — restrict to ADE topics reporting this species and return only that species' count (e.g. 'Dog', 'Cat', 'Horse', 'Human')","title":"Species"},"description":"Optional species filter — restrict to ADE topics reporting this species and return only that species' count (e.g. 'Dog', 'Cat', 'Horse', 'Human')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"description":"Max results to return (max 50, anti-dump cap)","default":20,"title":"Limit"},"description":"Max results to return (max 50, anti-dump cap)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Skip first N results (paging)","default":0,"title":"Offset"},"description":"Skip first N results (paging)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/approvals":{"get":{"summary":"Approvals Lookup","description":"Browse the 方向0 regulatory-approval corpus (八国监管批准库) by country, approval type and/or keyword.\n\nReturns metadata only (no body), each hit traceable via topic_id/path to\n/api/v1/llm_context. Anti-dump: parameterized, no wildcard, per-request limit.","operationId":"approvals_lookup_api_v1_approvals_get","parameters":[{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Country filter: us|cn|eu|ca|kr|jp|au|br|mx|intl (or full names like 'United States', 'China')","title":"Country"},"description":"Country filter: us|cn|eu|ca|kr|jp|au|br|mx|intl (or full names like 'United States', 'China')"},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Approval type keyword (substring, case-insensitive), e.g. 'veterinary drug', 'additive', 'feed', 'vaccine', 'pet food'","title":"Type"},"description":"Approval type keyword (substring, case-insensitive), e.g. 'veterinary drug', 'additive', 'feed', 'vaccine', 'pet food'"},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Free-text query across topic_id + title (tokenized AND)","title":"Q"},"description":"Free-text query across topic_id + title (tokenized AND)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"description":"Max results to return (max 50, anti-dump cap)","default":20,"title":"Limit"},"description":"Max results to return (max 50, anti-dump cap)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Skip first N results (paging)","default":0,"title":"Offset"},"description":"Skip first N results (paging)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/travel":{"get":{"summary":"Travel Lookup","description":"Query pet travel / quarantine entry requirements (pet-travel corpus).\n\nReturns structured destination / species / requirement highlights parsed from\nC1-verified topics — NOT raw bodies. Each hit links to /api/v1/llm_context.\nAnti-dump: parameterized, no wildcard, per-request limit.","operationId":"travel_lookup_api_v1_travel_get","parameters":[{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Origin keyword, e.g. 'non-EU', 'USA', 'China' (best-effort substring match on title)","title":"From"},"description":"Origin keyword, e.g. 'non-EU', 'USA', 'China' (best-effort substring match on title)"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Destination keyword, e.g. 'EU', 'GB', 'UK' (e.g. 'EU entry requirements')","title":"To"},"description":"Destination keyword, e.g. 'EU', 'GB', 'UK' (e.g. 'EU entry requirements')"},{"name":"species","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Species filter, e.g. 'dog', 'cat', 'ferret'","title":"Species"},"description":"Species filter, e.g. 'dog', 'cat', 'ferret'"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"description":"Max results (anti-dump cap 50)","default":20,"title":"Limit"},"description":"Max results (anti-dump cap 50)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Paging offset","default":0,"title":"Offset"},"description":"Paging offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/recalls":{"get":{"summary":"Recalls Lookup","description":"Query pet-food recall / enforcement data (RASFF + CN enforcement + FDA index + global landscape).\n\nReturns a short summary excerpt (not full body) plus metadata, each hit\ntraceable via topic_id/path/source_file to /api/v1/llm_context.\nAnti-dump: parameterized, no wildcard, per-request limit.","operationId":"recalls_lookup_api_v1_recalls_get","parameters":[{"name":"brand","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Brand / product / company keyword (substring, case-insensitive), e.g. 'salmonella', 'diamond', 'Hill'","title":"Brand"},"description":"Brand / product / company keyword (substring, case-insensitive), e.g. 'salmonella', 'diamond', 'Hill'"},{"name":"reason","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Hazard / reason keyword, e.g. 'salmonella', 'heavy metal', 'dioxin', 'aflatoxin'","title":"Reason"},"description":"Hazard / reason keyword, e.g. 'salmonella', 'heavy metal', 'dioxin', 'aflatoxin'"},{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"4-digit year filter, e.g. 2025 (topic must mention that year)","title":"Year"},"description":"4-digit year filter, e.g. 2025 (topic must mention that year)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"description":"Max results (anti-dump cap 50)","default":20,"title":"Limit"},"description":"Max results (anti-dump cap 50)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Paging offset","default":0,"title":"Offset"},"description":"Paging offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/banned_breeds":{"get":{"summary":"Banned Breeds Lookup","description":"Query banned / restricted dog-breed directories across jurisdictions.\n\nReturns parsed jurisdiction + breed names + a short summary excerpt (not full\nbody), each hit traceable via topic_id/path/source_file to /api/v1/llm_context.\nAnti-dump: parameterized, no wildcard, per-request limit.","operationId":"banned_breeds_lookup_api_v1_banned_breeds_get","parameters":[{"name":"jurisdiction","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Jurisdiction filter, e.g. 'UK', 'Beijing', 'NSW', 'Singapore', 'Queensland'","title":"Jurisdiction"},"description":"Jurisdiction filter, e.g. 'UK', 'Beijing', 'NSW', 'Singapore', 'Queensland'"},{"name":"breed","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Breed keyword (substring, case-insensitive), e.g. 'pit bull', 'XL Bully', 'mastiff'","title":"Breed"},"description":"Breed keyword (substring, case-insensitive), e.g. 'pit bull', 'XL Bully', 'mastiff'"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"description":"Max results (anti-dump cap 50)","default":20,"title":"Limit"},"description":"Max results (anti-dump cap 50)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Paging offset","default":0,"title":"Offset"},"description":"Paging offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/changes":{"get":{"summary":"Regulation Changes","description":"Regulation change feed — confirmed fingerprint changes from the monthly monitor.\n\nReturns a coverage summary (monitored sources + last run, from monitor_state.json)\nplus change events from monitor_changes.json. Each event carries source_id,\njurisdiction, change_type and is traceable to the official source via url.\nHonest: no recorded change => results=[] (no fabricated history).","operationId":"regulation_changes_api_v1_changes_get","parameters":[{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Only changes detected at/after this point. ISO date (2026-07-01) or relative (30d / 4w / 2m). Empty = all recorded changes.","title":"Since"},"description":"Only changes detected at/after this point. ISO date (2026-07-01) or relative (30d / 4w / 2m). Empty = all recorded changes."},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by source id keyword, e.g. 'aafco', 'eu', 'cn', 'openfda'","title":"Source"},"description":"Filter by source id keyword, e.g. 'aafco', 'eu', 'cn', 'openfda'"},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by change type keyword: 'expanded', 'reduced', 'modified' (heuristic from normalized-length delta)","title":"Type"},"description":"Filter by change type keyword: 'expanded', 'reduced', 'modified' (heuristic from normalized-length delta)"},{"name":"group_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Set 'jurisdiction' to also return a per-jurisdiction breakdown in summary.by_jurisdiction","title":"Group By"},"description":"Set 'jurisdiction' to also return a per-jurisdiction breakdown in summary.by_jurisdiction"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"description":"Max results (anti-dump cap 50)","default":20,"title":"Limit"},"description":"Max results (anti-dump cap 50)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Paging offset","default":0,"title":"Offset"},"description":"Paging offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/all":{"get":{"summary":"Honeypot All","description":"Honeypot: looks like it dumps everything. Returns harmless real data instead of 403.","operationId":"honeypot_all_api_v1_all_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/dump":{"get":{"summary":"Honeypot Dump","description":"Honeypot. Returns harmless real data instead of 403.","operationId":"honeypot_dump_api_v1_dump_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin":{"get":{"summary":"Honeypot Admin","description":"Honeypot: bare /admin path (the real /admin/dashboard is below).","operationId":"honeypot_admin_admin_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin/stats":{"get":{"summary":"Admin Stats","description":"JSON stats: 24h default. Includes time series + top IPs/paths/bots + honeypot.","operationId":"admin_stats_admin_stats_get","security":[{"HTTPBasic":[]}],"parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":8760,"minimum":1,"description":"Time window in hours","default":24,"title":"Hours"},"description":"Time window in hours"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/dashboard":{"get":{"summary":"Admin Dashboard","description":"HTML dashboard. Requires Basic Auth.","operationId":"admin_dashboard_admin_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}},"security":[{"HTTPBasic":[]}]}}},"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"}},"securitySchemes":{"HTTPBasic":{"type":"http","scheme":"basic"}}}}