The News API

Get free access to search worldwide news and top stories from over 40,000 sources in 50 countries. Access live and historical articles with filters for keyword, category, language, locale, domain, and publication date.

OpenAPI Specification

the-news-api-openapi.yml Raw ↑
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.