{"openapi":"3.1.0","info":{"title":"MediaBias News public read API","version":"1.0.0","description":"Public discovery API for published stories, source-reporting scores, coverage distributions, side framing, provenance, and canonical citation URLs. No API key is required for GET requests."},"servers":[{"url":"https://mediabias.news/api/v1"}],"paths":{"/stories":{"get":{"operationId":"listStories","summary":"List published stories","parameters":[{"name":"q","in":"query","schema":{"type":"string"},"description":"Full-text search across published stories. Returns by relevance, so category and offset do not apply."},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}},{"name":"category","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"A compact list of published stories and canonical discovery links."}}}},"/stories/{slug}":{"get":{"operationId":"getStory","summary":"Get one story with coverage analysis and provenance","description":"Returns the article, Trust/Craft/Hype scores, source list, coverage distribution, lifecycle, side framing, outlet factuality profile, explicit fact-check status, and canonical citation instructions. publishedAt is when this site published the analysis; sourceReportedAt is the date carried by the source report.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Full public story record."},"404":{"description":"Story not found."}}}},"/outlets":{"get":{"operationId":"findOutlets","summary":"Find an outlet by name, slug, domain or article URL","description":"Answers \"which outlet is this\" for a caller holding a publisher name, a bare domain, or a whole article URL — the host is extracted before matching. Without q, returns the outlet index. Every result carries the slug to pass to /outlets/{slug}.","parameters":[{"name":"q","in":"query","schema":{"type":"string"},"description":"Name, slug, domain or article URL."},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50,"default":10}}],"responses":{"200":{"description":"Matching outlets, exact slug and domain hits first."}}}},"/outlets/{slug}":{"get":{"operationId":"getOutlet","summary":"Get one outlet: bias and factuality ratings, ownership, our observations","description":"Bias and factuality verdicts as published by AllSides, Ad Fontes Media and Media Bias/Fact Check, each named and returned separately rather than averaged, including where they disagree. None of those verdicts are Media Bias News ratings. The observed block is ours: what we have seen this outlet publish, and average Trust/Craft/Hype across the stories we wrote from its reporting.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Full public outlet record with per-rater attribution and citation instructions."},"404":{"description":"No outlet stored under that slug. Not a statement that it is unrated."}}}},"/sources":{"get":{"operationId":"listSources","summary":"List source outlets and their score history","responses":{"200":{"description":"Per-outlet score history."}}}}}}