{"components":{"schemas":{"AccountStatus":{"properties":{"attribution":{"type":"string"},"hard_cap":{"description":"Whether this key stops at its quota instead of billing overage.","type":"boolean"},"history_days":{"type":["integer","null"]},"metered_billing":{"type":"boolean"},"period_start":{"type":"integer"},"plan":{"type":"string"},"quota":{"description":"Included monthly requests; 0 = unlimited.","type":"integer"},"quota_remaining":{"type":["integer","null"]},"rate_per_min":{"type":"integer"},"tenant":{"type":"string"},"usage_this_period":{"type":"integer"}},"type":"object"},"Article":{"description":"Article metadata. The body is never returned.","properties":{"authors":{"items":{"type":"string"},"type":"array"},"collected_at":{"type":["string","null"]},"countries":{"items":{"type":"string"},"type":"array"},"id":{"type":"string"},"image":{"type":["string","null"]},"language":{"type":["string","null"]},"locations":{"items":{"type":"string"},"type":"array"},"organizations":{"items":{"type":"string"},"type":"array"},"persons":{"items":{"type":"string"},"type":"array"},"published_at":{"description":"14-digit YYYYMMDDHHMMSS.","type":["string","null"]},"publisher_country":{"type":["string","null"]},"signals":{"$ref":"#/components/schemas/Signals"},"source":{"type":["string","null"]},"source_type":{"type":["string","null"]},"story_id":{"description":"Pass back as the `story_id` filter to expand this story.","type":["string","null"]},"title":{"type":["string","null"]},"tone":{"type":["number","null"]},"topics":{"items":{"type":"string"},"type":"array"},"url":{"type":["string","null"]},"word_count":{"type":["integer","null"]}},"type":"object"},"ArticleDetail":{"allOf":[{"$ref":"#/components/schemas/Article"},{"description":"Returned only by /doc/{id}, so search responses stay bounded when an article carries many quotes or media URLs.","properties":{"amounts":{"items":{"type":"object"},"type":"array"},"amp_url":{"type":["string","null"]},"date_mentions":{"items":{"type":"object"},"type":"array"},"links":{"items":{"type":"string"},"type":"array"},"location_details":{"items":{"type":"object"},"type":"array"},"mobile_url":{"type":["string","null"]},"names":{"items":{"type":"string"},"type":"array"},"quotes":{"items":{"type":"object"},"type":"array"},"related_images":{"items":{"type":"string"},"type":"array"},"social_videos":{"items":{"type":"string"},"type":"array"}},"type":"object"}]},"Facet":{"properties":{"approximate":{"type":"boolean"},"doc_count_error_upper_bound":{"type":"integer"},"sum_other_doc_count":{"type":"integer"},"values":{"items":{"properties":{"count":{"type":"integer"},"value":{"type":"string"}},"type":"object"},"type":"array"}},"type":"object"},"SearchResponse":{"properties":{"attribution":{"type":"string"},"facets":{"additionalProperties":{"$ref":"#/components/schemas/Facet"},"type":"object"},"from_clamped":{"description":"Whether a `from` you supplied was moved forward to that boundary. Distinguishes a plan limit from a corpus with no coverage.","type":"boolean"},"has_more":{"type":"boolean"},"history_days":{"description":"How far back the caller's plan may query; null = the full archive.","type":["integer","null"]},"limit":{"type":"integer"},"mode":{"type":"string"},"offset":{"type":"integer"},"results":{"items":{"$ref":"#/components/schemas/Article"},"type":"array"},"total":{"type":"integer"},"total_relation":{"description":"`exact` for keyword and metadata queries; `approximate` for ANN-derived modes, which rank a bounded candidate set.","enum":["exact","approximate"],"type":"string"}},"type":"object"},"Signals":{"description":"Versioned industry, business-context and risk-context intensities.","properties":{"business_context":{"additionalProperties":{"type":"number"},"type":"object"},"industries":{"additionalProperties":{"type":"number"},"type":"object"},"risk_context":{"additionalProperties":{"type":"number"},"type":"object"},"unit":{"type":"string"},"version":{"type":"string"}},"type":"object"},"StoriesResponse":{"properties":{"attribution":{"type":"string"},"from_clamped":{"type":"boolean"},"has_more":{"type":"boolean"},"history_days":{"type":["integer","null"]},"limit":{"type":"integer"},"offset":{"type":"integer"},"stories":{"items":{"$ref":"#/components/schemas/Story"},"type":"array"},"total":{"type":"integer"},"total_relation":{"type":"string"}},"type":"object"},"Story":{"description":"One event, across every outlet that covered it.","properties":{"count":{"description":"Articles in the cluster.","type":"integer"},"outlets":{"description":"Distinct outlets in the cluster.","type":"integer"},"sources":{"items":{"type":"string"},"type":"array"},"story_id":{"type":"string"},"title":{"type":["string","null"]},"url":{"type":["string","null"]}},"type":"object"}},"securitySchemes":{"ApiKeyHeader":{"in":"header","name":"x-api-key","type":"apiKey"},"BearerToken":{"scheme":"bearer","type":"http"}}},"info":{"description":"Search articles from outlets worldwide, or collapse them into stories — one real event, deduplicated across every outlet that covered it, which is the single biggest token saving available when results go into a context window. Results carry topics, entities, locations and versioned industry/business/risk signals.\n\nThe same surface is available over MCP at https://api.unzoi.com/mcp; the tool schemas are at https://api.unzoi.com/mcp/tools.json.\n\nData derived from the GDELT Project (https://www.gdeltproject.org/).","summary":"Keyword, semantic and hybrid search over a global news index, with story clustering.","title":"Unzoi news API","version":"0.1.0"},"openapi":"3.1.0","paths":{"/account":{"get":{"description":"Plan, per-minute rate, monthly quota and month-to-date usage from the durable counters, whether the key hard-caps, and how far back it may query. Equivalent to the `account_status` MCP tool.","operationId":"account","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountStatus"}}},"description":"Success","headers":{"x-plan-history-days":{"description":"How far back this plan may query. Absent means the full archive.","schema":{"type":"integer"}},"x-quota-limit":{"description":"Included requests this calendar month. Absent when unlimited.","schema":{"type":"integer"}},"x-quota-remaining":{"description":"Requests left in the monthly allowance.","schema":{"type":"integer"}},"x-quota-reset":{"description":"Seconds until the quota period resets.","schema":{"type":"integer"}},"x-quota-used":{"description":"Requests used this month, from the durable counters.","schema":{"type":"integer"}},"x-ratelimit-limit":{"description":"Requests per minute allowed by this plan.","schema":{"type":"integer"}},"x-ratelimit-remaining":{"description":"Requests left in the current minute.","schema":{"type":"integer"}},"x-ratelimit-reset":{"description":"Seconds the bucket refills over.","schema":{"type":"integer"}}}},"401":{"description":"Missing or invalid API key"},"402":{"description":"Account suspended (subscription canceled or payment failed)"},"429":{"description":"Rate limit exceeded, or the monthly quota is exhausted on a key that stops at its quota rather than billing overage. `retry-after` says how long to wait.","headers":{"x-plan-history-days":{"description":"How far back this plan may query. Absent means the full archive.","schema":{"type":"integer"}},"x-quota-limit":{"description":"Included requests this calendar month. Absent when unlimited.","schema":{"type":"integer"}},"x-quota-remaining":{"description":"Requests left in the monthly allowance.","schema":{"type":"integer"}},"x-quota-reset":{"description":"Seconds until the quota period resets.","schema":{"type":"integer"}},"x-quota-used":{"description":"Requests used this month, from the durable counters.","schema":{"type":"integer"}},"x-ratelimit-limit":{"description":"Requests per minute allowed by this plan.","schema":{"type":"integer"}},"x-ratelimit-remaining":{"description":"Requests left in the current minute.","schema":{"type":"integer"}},"x-ratelimit-reset":{"description":"Seconds the bucket refills over.","schema":{"type":"integer"}}}}},"summary":"This key's plan and usage."}},"/doc/{id}":{"get":{"description":"Names, structured locations and dates, quotations, amounts, related media, links and alternate URLs. Equivalent to the `get_article` MCP tool.","operationId":"getArticle","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArticleDetail"}}},"description":"Success","headers":{"x-plan-history-days":{"description":"How far back this plan may query. Absent means the full archive.","schema":{"type":"integer"}},"x-quota-limit":{"description":"Included requests this calendar month. Absent when unlimited.","schema":{"type":"integer"}},"x-quota-remaining":{"description":"Requests left in the monthly allowance.","schema":{"type":"integer"}},"x-quota-reset":{"description":"Seconds until the quota period resets.","schema":{"type":"integer"}},"x-quota-used":{"description":"Requests used this month, from the durable counters.","schema":{"type":"integer"}},"x-ratelimit-limit":{"description":"Requests per minute allowed by this plan.","schema":{"type":"integer"}},"x-ratelimit-remaining":{"description":"Requests left in the current minute.","schema":{"type":"integer"}},"x-ratelimit-reset":{"description":"Seconds the bucket refills over.","schema":{"type":"integer"}}}},"401":{"description":"Missing or invalid API key"},"402":{"description":"Account suspended (subscription canceled or payment failed)"},"429":{"description":"Rate limit exceeded, or the monthly quota is exhausted on a key that stops at its quota rather than billing overage. `retry-after` says how long to wait.","headers":{"x-plan-history-days":{"description":"How far back this plan may query. Absent means the full archive.","schema":{"type":"integer"}},"x-quota-limit":{"description":"Included requests this calendar month. Absent when unlimited.","schema":{"type":"integer"}},"x-quota-remaining":{"description":"Requests left in the monthly allowance.","schema":{"type":"integer"}},"x-quota-reset":{"description":"Seconds until the quota period resets.","schema":{"type":"integer"}},"x-quota-used":{"description":"Requests used this month, from the durable counters.","schema":{"type":"integer"}},"x-ratelimit-limit":{"description":"Requests per minute allowed by this plan.","schema":{"type":"integer"}},"x-ratelimit-remaining":{"description":"Requests left in the current minute.","schema":{"type":"integer"}},"x-ratelimit-reset":{"description":"Seconds the bucket refills over.","schema":{"type":"integer"}}}}},"summary":"One article's full metadata."}},"/mcp":{"post":{"description":"JSON-RPC over MCP's Streamable HTTP transport: POST for messages, GET for the event stream, DELETE to end a session. Protocol version is negotiated — offer yours and the server answers with what it picked. The endpoint is stateless, so no session has to be kept alive. Tool schemas are at /mcp/tools.json.","operationId":"mcp","responses":{"200":{"description":"A JSON-RPC response."},"202":{"description":"A notification was accepted. No body, by design."},"401":{"description":"Missing or invalid API key. Suspension and an exhausted quota are NOT reported here — they arrive as tool errors on an open session, because a transport status reads to a client as a server that has gone away."}},"summary":"MCP endpoint (Streamable HTTP)."}},"/search":{"get":{"description":"Ranked articles with topics, entities, locations and signals. Equivalent to the `search_news` MCP tool.","operationId":"search","parameters":[{"description":"Query text. Omit for a recency browse.","in":"query","name":"q","required":false,"schema":{"type":"string"}},{"description":"Ranking mode. `hybrid` is usually right when a model wrote the query, because models paraphrase.","in":"query","name":"mode","required":false,"schema":{"enum":["keyword","semantic","hybrid"],"type":"string"}},{"description":"Source domain, e.g. bbc.co.uk.","in":"query","name":"source","required":false,"schema":{"type":"string"}},{"description":"web | citation | academic_archive | defense_archive | journal_archive | non_textual | other.","in":"query","name":"source_type","required":false,"schema":{"type":"string"}},{"description":"The publisher's canonical two-character country identifier.","in":"query","name":"publisher_country","required":false,"schema":{"type":"string"}},{"description":"Source language, ISO-639-3, e.g. eng, fra, ara, zho.","in":"query","name":"language","required":false,"schema":{"type":"string"}},{"description":"A cluster id from /stories, to expand one story into its articles.","in":"query","name":"story_id","required":false,"schema":{"type":"string"}},{"description":"An exact canonical topic identifier returned by the API.","in":"query","name":"topic","required":false,"schema":{"type":"string"}},{"description":"An exact organization entity.","in":"query","name":"organization","required":false,"schema":{"type":"string"}},{"description":"An exact person entity.","in":"query","name":"person","required":false,"schema":{"type":"string"}},{"description":"A mentioned country's canonical two-character identifier.","in":"query","name":"country","required":false,"schema":{"type":"string"}},{"description":"An exact article author.","in":"query","name":"author","required":false,"schema":{"type":"string"}},{"description":"An exact mentioned location.","in":"query","name":"location","required":false,"schema":{"type":"string"}},{"description":"An exact canonical location identifier.","in":"query","name":"location_id","required":false,"schema":{"type":"string"}},{"description":"An exact mentioned city.","in":"query","name":"city","required":false,"schema":{"type":"string"}},{"description":"An exact mentioned region.","in":"query","name":"region","required":false,"schema":{"type":"string"}},{"description":"An exact proper name.","in":"query","name":"name","required":false,"schema":{"type":"string"}},{"description":"An exact date mentioned in the article text.","in":"query","name":"mentioned_date","required":false,"schema":{"type":"string"}},{"description":"An exact verb introducing a quotation.","in":"query","name":"quote_verb","required":false,"schema":{"type":"string"}},{"description":"An exact object described by a numeric amount.","in":"query","name":"amount_object","required":false,"schema":{"type":"string"}},{"description":"A normalized business signal to range-filter on, e.g. finance, energy, conflict.","in":"query","name":"signal","required":false,"schema":{"type":"string"}},{"description":"Inclusive lower bound for `signal`.","in":"query","name":"signal_min","required":false,"schema":{"type":"number"}},{"description":"Inclusive upper bound for `signal`.","in":"query","name":"signal_max","required":false,"schema":{"type":"number"}},{"description":"Several signal ranges at once, ANDed: `name[:min[:max]]`, comma separated, e.g. `finance:1.5:,energy::2`.","in":"query","name":"signals","required":false,"schema":{"type":"string"}},{"description":"Lower time bound, e.g. 2026-07-09 or 20260709120000. Clamped forward to what the caller's plan may reach; see `history_days` and `from_clamped` in the response.","in":"query","name":"from","required":false,"schema":{"type":"string"}},{"description":"Upper time bound, same formats as `from`.","in":"query","name":"to","required":false,"schema":{"type":"string"}},{"description":"Zero-based result offset, up to 100000.","in":"query","name":"offset","required":false,"schema":{"type":"integer"}},{"description":"Results per page, 1-100 (default 10).","in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"description":"Comma-separated fields to count over the full match set, up to 8.","in":"query","name":"facets","required":false,"schema":{"type":"string"}},{"description":"Values per facet, 1-100 (default 10).","in":"query","name":"facet_limit","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"}}},"description":"Success","headers":{"x-plan-history-days":{"description":"How far back this plan may query. Absent means the full archive.","schema":{"type":"integer"}},"x-quota-limit":{"description":"Included requests this calendar month. Absent when unlimited.","schema":{"type":"integer"}},"x-quota-remaining":{"description":"Requests left in the monthly allowance.","schema":{"type":"integer"}},"x-quota-reset":{"description":"Seconds until the quota period resets.","schema":{"type":"integer"}},"x-quota-used":{"description":"Requests used this month, from the durable counters.","schema":{"type":"integer"}},"x-ratelimit-limit":{"description":"Requests per minute allowed by this plan.","schema":{"type":"integer"}},"x-ratelimit-remaining":{"description":"Requests left in the current minute.","schema":{"type":"integer"}},"x-ratelimit-reset":{"description":"Seconds the bucket refills over.","schema":{"type":"integer"}}}},"401":{"description":"Missing or invalid API key"},"402":{"description":"Account suspended (subscription canceled or payment failed)"},"429":{"description":"Rate limit exceeded, or the monthly quota is exhausted on a key that stops at its quota rather than billing overage. `retry-after` says how long to wait.","headers":{"x-plan-history-days":{"description":"How far back this plan may query. Absent means the full archive.","schema":{"type":"integer"}},"x-quota-limit":{"description":"Included requests this calendar month. Absent when unlimited.","schema":{"type":"integer"}},"x-quota-remaining":{"description":"Requests left in the monthly allowance.","schema":{"type":"integer"}},"x-quota-reset":{"description":"Seconds until the quota period resets.","schema":{"type":"integer"}},"x-quota-used":{"description":"Requests used this month, from the durable counters.","schema":{"type":"integer"}},"x-ratelimit-limit":{"description":"Requests per minute allowed by this plan.","schema":{"type":"integer"}},"x-ratelimit-remaining":{"description":"Requests left in the current minute.","schema":{"type":"integer"}},"x-ratelimit-reset":{"description":"Seconds the bucket refills over.","schema":{"type":"integer"}}}}},"summary":"Search articles."}},"/similar/{id}":{"get":{"description":"More-Like-This over the semantic index, deduplicated across outlets and excluding the seed. Equivalent to the `find_related` MCP tool.","operationId":"findRelated","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Results, 1-100.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"}}},"description":"Success","headers":{"x-plan-history-days":{"description":"How far back this plan may query. Absent means the full archive.","schema":{"type":"integer"}},"x-quota-limit":{"description":"Included requests this calendar month. Absent when unlimited.","schema":{"type":"integer"}},"x-quota-remaining":{"description":"Requests left in the monthly allowance.","schema":{"type":"integer"}},"x-quota-reset":{"description":"Seconds until the quota period resets.","schema":{"type":"integer"}},"x-quota-used":{"description":"Requests used this month, from the durable counters.","schema":{"type":"integer"}},"x-ratelimit-limit":{"description":"Requests per minute allowed by this plan.","schema":{"type":"integer"}},"x-ratelimit-remaining":{"description":"Requests left in the current minute.","schema":{"type":"integer"}},"x-ratelimit-reset":{"description":"Seconds the bucket refills over.","schema":{"type":"integer"}}}},"401":{"description":"Missing or invalid API key"},"402":{"description":"Account suspended (subscription canceled or payment failed)"},"429":{"description":"Rate limit exceeded, or the monthly quota is exhausted on a key that stops at its quota rather than billing overage. `retry-after` says how long to wait.","headers":{"x-plan-history-days":{"description":"How far back this plan may query. Absent means the full archive.","schema":{"type":"integer"}},"x-quota-limit":{"description":"Included requests this calendar month. Absent when unlimited.","schema":{"type":"integer"}},"x-quota-remaining":{"description":"Requests left in the monthly allowance.","schema":{"type":"integer"}},"x-quota-reset":{"description":"Seconds until the quota period resets.","schema":{"type":"integer"}},"x-quota-used":{"description":"Requests used this month, from the durable counters.","schema":{"type":"integer"}},"x-ratelimit-limit":{"description":"Requests per minute allowed by this plan.","schema":{"type":"integer"}},"x-ratelimit-remaining":{"description":"Requests left in the current minute.","schema":{"type":"integer"}},"x-ratelimit-reset":{"description":"Seconds the bucket refills over.","schema":{"type":"integer"}}}}},"summary":"Articles similar to a given one."}},"/stories":{"get":{"description":"One real event across many outlets, with an article count, an outlet count and a representative headline. Use this whenever results go into a context window. Equivalent to the `list_stories` MCP tool.","operationId":"stories","parameters":[{"description":"Query text. Omit for a recency browse.","in":"query","name":"q","required":false,"schema":{"type":"string"}},{"description":"Ranking mode. `hybrid` is usually right when a model wrote the query, because models paraphrase.","in":"query","name":"mode","required":false,"schema":{"enum":["keyword","semantic","hybrid"],"type":"string"}},{"description":"Source domain, e.g. bbc.co.uk.","in":"query","name":"source","required":false,"schema":{"type":"string"}},{"description":"web | citation | academic_archive | defense_archive | journal_archive | non_textual | other.","in":"query","name":"source_type","required":false,"schema":{"type":"string"}},{"description":"The publisher's canonical two-character country identifier.","in":"query","name":"publisher_country","required":false,"schema":{"type":"string"}},{"description":"Source language, ISO-639-3, e.g. eng, fra, ara, zho.","in":"query","name":"language","required":false,"schema":{"type":"string"}},{"description":"A cluster id from /stories, to expand one story into its articles.","in":"query","name":"story_id","required":false,"schema":{"type":"string"}},{"description":"An exact canonical topic identifier returned by the API.","in":"query","name":"topic","required":false,"schema":{"type":"string"}},{"description":"An exact organization entity.","in":"query","name":"organization","required":false,"schema":{"type":"string"}},{"description":"An exact person entity.","in":"query","name":"person","required":false,"schema":{"type":"string"}},{"description":"A mentioned country's canonical two-character identifier.","in":"query","name":"country","required":false,"schema":{"type":"string"}},{"description":"An exact article author.","in":"query","name":"author","required":false,"schema":{"type":"string"}},{"description":"An exact mentioned location.","in":"query","name":"location","required":false,"schema":{"type":"string"}},{"description":"An exact canonical location identifier.","in":"query","name":"location_id","required":false,"schema":{"type":"string"}},{"description":"An exact mentioned city.","in":"query","name":"city","required":false,"schema":{"type":"string"}},{"description":"An exact mentioned region.","in":"query","name":"region","required":false,"schema":{"type":"string"}},{"description":"An exact proper name.","in":"query","name":"name","required":false,"schema":{"type":"string"}},{"description":"An exact date mentioned in the article text.","in":"query","name":"mentioned_date","required":false,"schema":{"type":"string"}},{"description":"An exact verb introducing a quotation.","in":"query","name":"quote_verb","required":false,"schema":{"type":"string"}},{"description":"An exact object described by a numeric amount.","in":"query","name":"amount_object","required":false,"schema":{"type":"string"}},{"description":"A normalized business signal to range-filter on, e.g. finance, energy, conflict.","in":"query","name":"signal","required":false,"schema":{"type":"string"}},{"description":"Inclusive lower bound for `signal`.","in":"query","name":"signal_min","required":false,"schema":{"type":"number"}},{"description":"Inclusive upper bound for `signal`.","in":"query","name":"signal_max","required":false,"schema":{"type":"number"}},{"description":"Several signal ranges at once, ANDed: `name[:min[:max]]`, comma separated, e.g. `finance:1.5:,energy::2`.","in":"query","name":"signals","required":false,"schema":{"type":"string"}},{"description":"Lower time bound, e.g. 2026-07-09 or 20260709120000. Clamped forward to what the caller's plan may reach; see `history_days` and `from_clamped` in the response.","in":"query","name":"from","required":false,"schema":{"type":"string"}},{"description":"Upper time bound, same formats as `from`.","in":"query","name":"to","required":false,"schema":{"type":"string"}},{"description":"Zero-based result offset, up to 100000.","in":"query","name":"offset","required":false,"schema":{"type":"integer"}},{"description":"Results per page, 1-100 (default 10).","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StoriesResponse"}}},"description":"Success","headers":{"x-plan-history-days":{"description":"How far back this plan may query. Absent means the full archive.","schema":{"type":"integer"}},"x-quota-limit":{"description":"Included requests this calendar month. Absent when unlimited.","schema":{"type":"integer"}},"x-quota-remaining":{"description":"Requests left in the monthly allowance.","schema":{"type":"integer"}},"x-quota-reset":{"description":"Seconds until the quota period resets.","schema":{"type":"integer"}},"x-quota-used":{"description":"Requests used this month, from the durable counters.","schema":{"type":"integer"}},"x-ratelimit-limit":{"description":"Requests per minute allowed by this plan.","schema":{"type":"integer"}},"x-ratelimit-remaining":{"description":"Requests left in the current minute.","schema":{"type":"integer"}},"x-ratelimit-reset":{"description":"Seconds the bucket refills over.","schema":{"type":"integer"}}}},"401":{"description":"Missing or invalid API key"},"402":{"description":"Account suspended (subscription canceled or payment failed)"},"429":{"description":"Rate limit exceeded, or the monthly quota is exhausted on a key that stops at its quota rather than billing overage. `retry-after` says how long to wait.","headers":{"x-plan-history-days":{"description":"How far back this plan may query. Absent means the full archive.","schema":{"type":"integer"}},"x-quota-limit":{"description":"Included requests this calendar month. Absent when unlimited.","schema":{"type":"integer"}},"x-quota-remaining":{"description":"Requests left in the monthly allowance.","schema":{"type":"integer"}},"x-quota-reset":{"description":"Seconds until the quota period resets.","schema":{"type":"integer"}},"x-quota-used":{"description":"Requests used this month, from the durable counters.","schema":{"type":"integer"}},"x-ratelimit-limit":{"description":"Requests per minute allowed by this plan.","schema":{"type":"integer"}},"x-ratelimit-remaining":{"description":"Requests left in the current minute.","schema":{"type":"integer"}},"x-ratelimit-reset":{"description":"Seconds the bucket refills over.","schema":{"type":"integer"}}}}},"summary":"Search, collapsed into deduplicated stories."}},"/top-headlines":{"get":{"description":"Recency rather than relevance, optionally narrowed by any filter. Equivalent to the `top_headlines` MCP tool.","operationId":"topHeadlines","parameters":[{"description":"Source domain, e.g. bbc.co.uk.","in":"query","name":"source","required":false,"schema":{"type":"string"}},{"description":"web | citation | academic_archive | defense_archive | journal_archive | non_textual | other.","in":"query","name":"source_type","required":false,"schema":{"type":"string"}},{"description":"The publisher's canonical two-character country identifier.","in":"query","name":"publisher_country","required":false,"schema":{"type":"string"}},{"description":"Source language, ISO-639-3, e.g. eng, fra, ara, zho.","in":"query","name":"language","required":false,"schema":{"type":"string"}},{"description":"A cluster id from /stories, to expand one story into its articles.","in":"query","name":"story_id","required":false,"schema":{"type":"string"}},{"description":"An exact canonical topic identifier returned by the API.","in":"query","name":"topic","required":false,"schema":{"type":"string"}},{"description":"An exact organization entity.","in":"query","name":"organization","required":false,"schema":{"type":"string"}},{"description":"An exact person entity.","in":"query","name":"person","required":false,"schema":{"type":"string"}},{"description":"A mentioned country's canonical two-character identifier.","in":"query","name":"country","required":false,"schema":{"type":"string"}},{"description":"An exact article author.","in":"query","name":"author","required":false,"schema":{"type":"string"}},{"description":"An exact mentioned location.","in":"query","name":"location","required":false,"schema":{"type":"string"}},{"description":"An exact canonical location identifier.","in":"query","name":"location_id","required":false,"schema":{"type":"string"}},{"description":"An exact mentioned city.","in":"query","name":"city","required":false,"schema":{"type":"string"}},{"description":"An exact mentioned region.","in":"query","name":"region","required":false,"schema":{"type":"string"}},{"description":"An exact proper name.","in":"query","name":"name","required":false,"schema":{"type":"string"}},{"description":"An exact date mentioned in the article text.","in":"query","name":"mentioned_date","required":false,"schema":{"type":"string"}},{"description":"An exact verb introducing a quotation.","in":"query","name":"quote_verb","required":false,"schema":{"type":"string"}},{"description":"An exact object described by a numeric amount.","in":"query","name":"amount_object","required":false,"schema":{"type":"string"}},{"description":"A normalized business signal to range-filter on, e.g. finance, energy, conflict.","in":"query","name":"signal","required":false,"schema":{"type":"string"}},{"description":"Inclusive lower bound for `signal`.","in":"query","name":"signal_min","required":false,"schema":{"type":"number"}},{"description":"Inclusive upper bound for `signal`.","in":"query","name":"signal_max","required":false,"schema":{"type":"number"}},{"description":"Several signal ranges at once, ANDed: `name[:min[:max]]`, comma separated, e.g. `finance:1.5:,energy::2`.","in":"query","name":"signals","required":false,"schema":{"type":"string"}},{"description":"Lower time bound, e.g. 2026-07-09 or 20260709120000. Clamped forward to what the caller's plan may reach; see `history_days` and `from_clamped` in the response.","in":"query","name":"from","required":false,"schema":{"type":"string"}},{"description":"Upper time bound, same formats as `from`.","in":"query","name":"to","required":false,"schema":{"type":"string"}},{"description":"Zero-based result offset, up to 100000.","in":"query","name":"offset","required":false,"schema":{"type":"integer"}},{"description":"Results per page, 1-100 (default 10).","in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"description":"Comma-separated fields to count over the full match set, up to 8.","in":"query","name":"facets","required":false,"schema":{"type":"string"}},{"description":"Values per facet, 1-100 (default 10).","in":"query","name":"facet_limit","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"}}},"description":"Success","headers":{"x-plan-history-days":{"description":"How far back this plan may query. Absent means the full archive.","schema":{"type":"integer"}},"x-quota-limit":{"description":"Included requests this calendar month. Absent when unlimited.","schema":{"type":"integer"}},"x-quota-remaining":{"description":"Requests left in the monthly allowance.","schema":{"type":"integer"}},"x-quota-reset":{"description":"Seconds until the quota period resets.","schema":{"type":"integer"}},"x-quota-used":{"description":"Requests used this month, from the durable counters.","schema":{"type":"integer"}},"x-ratelimit-limit":{"description":"Requests per minute allowed by this plan.","schema":{"type":"integer"}},"x-ratelimit-remaining":{"description":"Requests left in the current minute.","schema":{"type":"integer"}},"x-ratelimit-reset":{"description":"Seconds the bucket refills over.","schema":{"type":"integer"}}}},"401":{"description":"Missing or invalid API key"},"402":{"description":"Account suspended (subscription canceled or payment failed)"},"429":{"description":"Rate limit exceeded, or the monthly quota is exhausted on a key that stops at its quota rather than billing overage. `retry-after` says how long to wait.","headers":{"x-plan-history-days":{"description":"How far back this plan may query. Absent means the full archive.","schema":{"type":"integer"}},"x-quota-limit":{"description":"Included requests this calendar month. Absent when unlimited.","schema":{"type":"integer"}},"x-quota-remaining":{"description":"Requests left in the monthly allowance.","schema":{"type":"integer"}},"x-quota-reset":{"description":"Seconds until the quota period resets.","schema":{"type":"integer"}},"x-quota-used":{"description":"Requests used this month, from the durable counters.","schema":{"type":"integer"}},"x-ratelimit-limit":{"description":"Requests per minute allowed by this plan.","schema":{"type":"integer"}},"x-ratelimit-remaining":{"description":"Requests left in the current minute.","schema":{"type":"integer"}},"x-ratelimit-reset":{"description":"Seconds the bucket refills over.","schema":{"type":"integer"}}}}},"summary":"The most recent articles."}}},"security":[{"ApiKeyHeader":[]},{"BearerToken":[]}],"servers":[{"url":"https://api.unzoi.com"}]}