openapi: 3.0.3
info:
title: The News API
description: >-
The News API provides access to worldwide news articles and top stories from
over 40,000 sources in 50 countries. Search and filter news by keyword,
category, language, country, and date. All endpoints require an API token
obtained by registering at thenewsapi.com.
version: 1.0.0
contact:
url: https://www.thenewsapi.com/
termsOfService: https://www.thenewsapi.com/terms
servers:
- url: https://api.thenewsapi.com/v1
security:
- apiToken: []
paths:
/news/headlines:
get:
operationId: getHeadlines
summary: Get News Headlines
description: >-
Retrieve the latest headlines organized by category. Available on
Standard plan and above. Returns articles grouped by category with
optional similar article suggestions.
tags:
- Headlines
parameters:
- name: api_token
in: query
required: true
description: Your API authentication token.
schema:
type: string
- name: locale
in: query
required: false
description: >-
Comma-separated list of country codes to filter by (e.g., us,ca,gb).
schema:
type: string
- name: language
in: query
required: false
description: >-
Comma-separated list of language codes to filter by (e.g., en,es,fr).
schema:
type: string
- name: categories
in: query
required: false
description: >-
Comma-separated list of categories: general, science, sports,
business, health, entertainment, tech, politics, food, travel.
schema:
type: string
- name: domains
in: query
required: false
description: Comma-separated list of domains to include.
schema:
type: string
- name: exclude_domains
in: query
required: false
description: Comma-separated list of domains to exclude.
schema:
type: string
- name: source_ids
in: query
required: false
description: Comma-separated list of source IDs to include.
schema:
type: string
- name: exclude_source_ids
in: query
required: false
description: Comma-separated list of source IDs to exclude.
schema:
type: string
- name: published_on
in: query
required: false
description: Filter to articles published on a specific date (Y-m-d format).
schema:
type: string
format: date
- name: headlines_per_category
in: query
required: false
description: Number of articles per category (max 10, default 6).
schema:
type: integer
minimum: 1
maximum: 10
default: 6
- name: include_similar
in: query
required: false
description: Include similar articles in the response (default true).
schema:
type: boolean
default: true
responses:
"200":
description: Headlines organized by category.
content:
application/json:
schema:
$ref: "#/components/schemas/HeadlinesResponse"
"400":
$ref: "#/components/responses/BadRequest"
"401":
$ref: "#/components/responses/Unauthorized"
"402":
$ref: "#/components/responses/PaymentRequired"
"403":
$ref: "#/components/responses/Forbidden"
"429":
$ref: "#/components/responses/RateLimited"
/news/top:
get:
operationId: getTopStories
summary: Get Top Stories
description: >-
Retrieve live and historical top stories globally or filtered by
keyword, category, country, language, domain, or date. Supports
advanced boolean search operators.
tags:
- Top Stories
parameters:
- name: api_token
in: query
required: true
description: Your API authentication token.
schema:
type: string
- name: search
in: query
required: false
description: >-
Search query with boolean operators: + (AND), | (OR), - (negation),
" (phrase), * (prefix), () (precedence).
schema:
type: string
- name: search_fields
in: query
required: false
description: >-
Comma-separated fields to search: title, description, keywords,
main_text. Default: title,main_text.
schema:
type: string
- name: locale
in: query
required: false
description: Comma-separated country codes to filter by.
schema:
type: string
- name: categories
in: query
required: false
description: >-
Comma-separated categories: general, science, sports, business,
health, entertainment, tech, politics, food, travel.
schema:
type: string
- name: exclude_categories
in: query
required: false
description: Comma-separated categories to exclude.
schema:
type: string
- name: domains
in: query
required: false
description: Comma-separated domains to include.
schema:
type: string
- name: exclude_domains
in: query
required: false
description: Comma-separated domains to exclude.
schema:
type: string
- name: source_ids
in: query
required: false
description: Comma-separated source IDs to include.
schema:
type: string
- name: exclude_source_ids
in: query
required: false
description: Comma-separated source IDs to exclude.
schema:
type: string
- name: language
in: query
required: false
description: Comma-separated language codes to filter by.
schema:
type: string
- name: published_before
in: query
required: false
description: Filter to articles published before this datetime (Y-m-d\TH:i:s).
schema:
type: string
- name: published_after
in: query
required: false
description: Filter to articles published after this datetime.
schema:
type: string
- name: published_on
in: query
required: false
description: Filter to articles published on this exact date (Y-m-d).
schema:
type: string
format: date
- name: sort
in: query
required: false
description: Sort by published_at (default) or relevance_score.
schema:
type: string
enum:
- published_at
- relevance_score
- name: limit
in: query
required: false
description: Number of results per page (plan-dependent maximum).
schema:
type: integer
minimum: 1
- name: page
in: query
required: false
description: Page number for pagination (default 1, max result set 20,000).
schema:
type: integer
minimum: 1
default: 1
responses:
"200":
description: List of top news articles.
content:
application/json:
schema:
$ref: "#/components/schemas/NewsListResponse"
"400":
$ref: "#/components/responses/BadRequest"
"401":
$ref: "#/components/responses/Unauthorized"
"429":
$ref: "#/components/responses/RateLimited"
/news/all:
get:
operationId: getAllNews
summary: Get All News
description: >-
Access the complete historical and live article database. Same filtering
and search capabilities as the Top Stories endpoint but covers the full
news archive.
tags:
- All News
parameters:
- name: api_token
in: query
required: true
description: Your API authentication token.
schema:
type: string
- name: search
in: query
required: false
description: >-
Search query with boolean operators: + (AND), | (OR), - (negation),
" (phrase), * (prefix), () (precedence).
schema:
type: string
- name: search_fields
in: query
required: false
description: Fields to search (title, description, keywords, main_text).
schema:
type: string
- name: locale
in: query
required: false
description: Comma-separated country codes.
schema:
type: string
- name: categories
in: query
required: false
description: Comma-separated categories to include.
schema:
type: string
- name: exclude_categories
in: query
required: false
description: Comma-separated categories to exclude.
schema:
type: string
- name: domains
in: query
required: false
description: Comma-separated domains to include.
schema:
type: string
- name: exclude_domains
in: query
required: false
description: Comma-separated domains to exclude.
schema:
type: string
- name: source_ids
in: query
required: false
description: Comma-separated source IDs to include.
schema:
type: string
- name: exclude_source_ids
in: query
required: false
description: Comma-separated source IDs to exclude.
schema:
type: string
- name: language
in: query
required: false
description: Comma-separated language codes.
schema:
type: string
- name: published_before
in: query
required: false
description: Filter to articles published before this datetime.
schema:
type: string
- name: published_after
in: query
required: false
description: Filter to articles published after this datetime.
schema:
type: string
- name: published_on
in: query
required: false
description: Filter to articles published on this exact date.
schema:
type: string
format: date
- name: sort
in: query
required: false
description: Sort by published_at or relevance_score.
schema:
type: string
enum:
- published_at
- relevance_score
- name: limit
in: query
required: false
description: Number of results per page.
schema:
type: integer
minimum: 1
- name: page
in: query
required: false
description: Page number for pagination.
schema:
type: integer
minimum: 1
default: 1
responses:
"200":
description: List of news articles from the full archive.
content:
application/json:
schema:
$ref: "#/components/schemas/NewsListResponse"
"400":
$ref: "#/components/responses/BadRequest"
"401":
$ref: "#/components/responses/Unauthorized"
"429":
$ref: "#/components/responses/RateLimited"
/news/similar/{uuid}:
get:
operationId: getSimilarNews
summary: Get Similar News Articles
description: >-
Find articles similar to a specific article identified by its UUID.
Returns articles ranked by relevance_score indicating similarity
strength.
tags:
- Similar News
parameters:
- name: uuid
in: path
required: true
description: UUID of the article to find similar articles for.
schema:
type: string
- name: api_token
in: query
required: true
description: Your API authentication token.
schema:
type: string
- name: language
in: query
required: false
description: Comma-separated language codes to filter by.
schema:
type: string
- name: categories
in: query
required: false
description: Comma-separated categories to filter by.
schema:
type: string
- name: exclude_categories
in: query
required: false
description: Comma-separated categories to exclude.
schema:
type: string
- name: domains
in: query
required: false
description: Comma-separated domains to include.
schema:
type: string
- name: exclude_domains
in: query
required: false
description: Comma-separated domains to exclude.
schema:
type: string
- name: source_ids
in: query
required: false
description: Comma-separated source IDs to include.
schema:
type: string
- name: exclude_source_ids
in: query
required: false
description: Comma-separated source IDs to exclude.
schema:
type: string
- name: published_before
in: query
required: false
description: Filter by publication date upper bound.
schema:
type: string
- name: published_after
in: query
required: false
description: Filter by publication date lower bound.
schema:
type: string
- name: published_on
in: query
required: false
description: Filter to exact publication date.
schema:
type: string
format: date
- name: limit
in: query
required: false
description: Number of similar articles to return.
schema:
type: integer
minimum: 1
- name: page
in: query
required: false
description: Page number for pagination.
schema:
type: integer
minimum: 1
default: 1
responses:
"200":
description: List of similar articles ranked by relevance score.
content:
application/json:
schema:
$ref: "#/components/schemas/NewsListResponse"
"404":
$ref: "#/components/responses/NotFound"
"401":
$ref: "#/components/responses/Unauthorized"
/news/uuid/{uuid}:
get:
operationId: getNewsByUUID
summary: Get News Article By UUID
description: >-
Retrieve a specific news article by its unique UUID identifier.
tags:
- Articles
parameters:
- name: uuid
in: path
required: true
description: UUID of the article to retrieve.
schema:
type: string
- name: api_token
in: query
required: true
description: Your API authentication token.
schema:
type: string
responses:
"200":
description: The requested article.
content:
application/json:
schema:
$ref: "#/components/schemas/Article"
"404":
$ref: "#/components/responses/NotFound"
"401":
$ref: "#/components/responses/Unauthorized"
/news/sources:
get:
operationId: getNewsSources
summary: Get News Sources
description: >-
Retrieve available news sources and their metadata including domain,
language, locale, and categories covered. Returns 50 results per page.
tags:
- Sources
parameters:
- name: api_token
in: query
required: true
description: Your API authentication token.
schema:
type: string
- name: categories
in: query
required: false
description: Comma-separated categories to filter sources by.
schema:
type: string
- name: exclude_categories
in: query
required: false
description: Comma-separated categories to exclude.
schema:
type: string
- name: language
in: query
required: false
description: Comma-separated language codes to filter by.
schema:
type: string
- name: page
in: query
required: false
description: Page number for pagination (50 sources per page).
schema:
type: integer
minimum: 1
default: 1
responses:
"200":
description: List of news sources.
content:
application/json:
schema:
$ref: "#/components/schemas/SourcesResponse"
"401":
$ref: "#/components/responses/Unauthorized"
components:
securitySchemes:
apiToken:
type: apiKey
name: api_token
in: query
schemas:
Article:
type: object
description: A news article.
properties:
uuid:
type: string
description: Unique identifier for the article.
title:
type: string
description: Article headline.
description:
type: string
description: Short description of the article.
keywords:
type: string
description: Comma-separated keywords associated with the article.
snippet:
type: string
description: Short excerpt from the article body.
url:
type: string
format: uri
description: URL to the full article.
image_url:
type: string
format: uri
description: URL to the article's featured image.
language:
type: string
description: Language code of the article (e.g., en, es, fr).
published_at:
type: string
format: date-time
description: Publication datetime in UTC.
source:
type: string
description: Domain of the publishing source.
categories:
type: array
items:
type: string
description: Categories the article belongs to.
locale:
type: string
description: Country/locale code (e.g., us, gb, ca).
relevance_score:
type: number
nullable: true
description: Relevance score for search results or similarity matching.
ArticleWithSimilar:
allOf:
- $ref: "#/components/schemas/Article"
- type: object
properties:
similar:
type: array
items:
$ref: "#/components/schemas/Article"
description: Similar articles related to this article.
Meta:
type: object
description: Pagination metadata.
properties:
found:
type: integer
description: Total number of articles matching the query.
returned:
type: integer
description: Number of articles returned on this page.
limit:
type: integer
description: Maximum results per page.
page:
type: integer
description: Current page number.
NewsListResponse:
type: object
properties:
meta:
$ref: "#/components/schemas/Meta"
data:
type: array
items:
$ref: "#/components/schemas/Article"
description: Array of news articles.
HeadlinesResponse:
type: object
properties:
data:
type: object
description: Articles organized by category.
properties:
general:
type: array
items:
$ref: "#/components/schemas/ArticleWithSimilar"
business:
type: array
items:
$ref: "#/components/schemas/ArticleWithSimilar"
sports:
type: array
items:
$ref: "#/components/schemas/ArticleWithSimilar"
tech:
type: array
items:
$ref: "#/components/schemas/ArticleWithSimilar"
science:
type: array
items:
$ref: "#/components/schemas/ArticleWithSimilar"
health:
type: array
items:
$ref: "#/components/schemas/ArticleWithSimilar"
entertainment:
type: array
items:
$ref: "#/components/schemas/ArticleWithSimilar"
politics:
type: array
items:
$ref: "#/components/schemas/ArticleWithSimilar"
food:
type: array
items:
$ref: "#/components/schemas/ArticleWithSimilar"
travel:
type: array
items:
$ref: "#/components/schemas/ArticleWithSimilar"
Source:
type: object
description: A news source.
properties:
source_id:
type: string
description: Unique identifier for the source.
domain:
type: string
description: Domain name of the source (e.g., cnn.com).
language:
type: string
description: Primary language of the source.
locale:
type: string
description: Country/locale code.
categories:
type: array
items:
type: string
description: Categories covered by this source.
SourcesResponse:
type: object
properties:
meta:
type: object
properties:
found:
type: integer
returned:
type: integer
limit:
type: integer
page:
type: integer
data:
type: array
items:
$ref: "#/components/schemas/Source"
Error:
type: object
properties:
error:
type: object
properties:
code:
type: string
description: Error code.
message:
type: string
description: Human-readable error description.
responses:
BadRequest:
description: Bad request - malformed parameters.
content:
application/json:
schema:
$ref: "#/components/schemas/Error"
Unauthorized:
description: Unauthorized - invalid API token.
content:
application/json:
schema:
$ref: "#/components/schemas/Error"
PaymentRequired:
description: Payment required - usage limit reached.
content:
application/json:
schema:
$ref: "#/components/schemas/Error"
Forbidden:
description: Forbidden - endpoint access restricted on your plan.
content:
application/json:
schema:
$ref: "#/components/schemas/Error"
NotFound:
description: Not found - resource does not exist.
content:
application/json:
schema:
$ref: "#/components/schemas/Error"
RateLimited:
description: Too many requests - rate limit reached (60-second window).
content:
application/json:
schema:
$ref: "#/components/schemas/Error"
tags:
- name: Headlines
description: Latest headlines organized by category.
- name: Top Stories
description: Top stories filtered by keyword, category, and date.
- name: All News
description: Full historical and live article database search.
- name: Similar News
description: Articles similar to a given article.
- name: Articles
description: Retrieve specific articles by UUID.
- name: Sources
description: Available news sources and their metadata.