TheNewsAPI news API

News article retrieval and search

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/thenewsapi-news-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

thenewsapi-news-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: TheNews news API
  description: Global news aggregation REST API providing real-time and historical news articles from thousands of sources with filtering by category, language, country, and search. Indexes over 1 million new articles per week from 40,000+ sources across 50+ countries and 35+ languages.
  version: 1.0.0
  termsOfService: https://www.thenewsapi.com/terms
  contact:
    url: https://www.thenewsapi.com/contact
  license:
    name: Proprietary
    url: https://www.thenewsapi.com/terms
servers:
- url: https://api.thenewsapi.com/v1
  description: Production server
security:
- ApiToken: []
tags:
- name: news
  description: News article retrieval and search
paths:
  /news/all:
    get:
      operationId: getAllNews
      summary: All News
      description: Search and filter the entire article database with comprehensive filtering options including search, categories, language, country, domain, and date range.
      tags:
      - news
      parameters:
      - $ref: '#/components/parameters/search'
      - $ref: '#/components/parameters/search_fields'
      - $ref: '#/components/parameters/locale'
      - $ref: '#/components/parameters/categories'
      - $ref: '#/components/parameters/exclude_categories'
      - $ref: '#/components/parameters/domains'
      - $ref: '#/components/parameters/exclude_domains'
      - $ref: '#/components/parameters/source_ids'
      - $ref: '#/components/parameters/exclude_source_ids'
      - $ref: '#/components/parameters/language'
      - $ref: '#/components/parameters/published_before'
      - $ref: '#/components/parameters/published_after'
      - $ref: '#/components/parameters/published_on'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/page'
      responses:
        '200':
          description: Successful response with paginated article list
          headers:
            X-RateLimit-Limit:
              description: Rate limit ceiling for the current period
              schema:
                type: integer
            X-UsageLimit-Limit:
              description: Usage limit for the current plan
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ArticleListResponse'
              example:
                meta:
                  found: 1250000
                  returned: 3
                  limit: 3
                  page: 1
                data:
                - uuid: b5a9c0d1-e2f3-4a5b-8c6d-7e9f0a1b2c3d
                  title: Global Markets Rally on Positive Economic Data
                  description: Stock markets around the world surged following better-than-expected employment figures.
                  keywords: markets, economy, stocks, employment
                  snippet: Global markets rallied on Friday after key economic indicators surprised analysts...
                  url: https://example.com/article/global-markets-rally
                  image_url: https://example.com/images/markets.jpg
                  language: en
                  published_at: '2026-06-13T09:30:00.000000Z'
                  source: example.com
                  categories:
                  - business
                  - general
                  relevance_score: null
                  locale: us
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/ServerError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
  /news/top:
    get:
      operationId: getTopStories
      summary: Top Stories
      description: Retrieve live and historical top stories with advanced filtering by category, language, country, and full-text search with boolean operators.
      tags:
      - news
      parameters:
      - $ref: '#/components/parameters/search'
      - $ref: '#/components/parameters/search_fields'
      - $ref: '#/components/parameters/locale'
      - $ref: '#/components/parameters/categories'
      - $ref: '#/components/parameters/exclude_categories'
      - $ref: '#/components/parameters/domains'
      - $ref: '#/components/parameters/exclude_domains'
      - $ref: '#/components/parameters/source_ids'
      - $ref: '#/components/parameters/exclude_source_ids'
      - $ref: '#/components/parameters/language'
      - $ref: '#/components/parameters/published_before'
      - $ref: '#/components/parameters/published_after'
      - $ref: '#/components/parameters/published_on'
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/page'
      responses:
        '200':
          description: Successful response with paginated top stories
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ArticleListResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/ServerError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
  /news/headlines:
    get:
      operationId: getHeadlines
      summary: Headlines
      description: Get the latest headlines organized by category with optional similar article grouping. Available on Standard plan and above.
      tags:
      - news
      parameters:
      - $ref: '#/components/parameters/locale'
      - $ref: '#/components/parameters/domains'
      - $ref: '#/components/parameters/exclude_domains'
      - $ref: '#/components/parameters/source_ids'
      - $ref: '#/components/parameters/exclude_source_ids'
      - $ref: '#/components/parameters/language'
      - $ref: '#/components/parameters/published_on'
      - name: headlines_per_category
        in: query
        description: Number of headlines to return per category (1-10, default 6).
        required: false
        schema:
          type: integer
          minimum: 1
          maximum: 10
          default: 6
      - name: include_similar
        in: query
        description: Whether to include similar articles for each headline (default true).
        required: false
        schema:
          type: boolean
          default: true
      responses:
        '200':
          description: Successful response with categorized headlines
          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/TooManyRequests'
        '500':
          $ref: '#/components/responses/ServerError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
  /news/similar/{uuid}:
    get:
      operationId: getSimilarNews
      summary: Similar News
      description: Find articles related to a specific article by UUID with optional category, domain, language, and date filters.
      tags:
      - news
      parameters:
      - name: uuid
        in: path
        description: The unique UUID identifier of the article to find similar articles for.
        required: true
        schema:
          type: string
          format: uuid
      - $ref: '#/components/parameters/categories'
      - $ref: '#/components/parameters/exclude_categories'
      - $ref: '#/components/parameters/domains'
      - $ref: '#/components/parameters/exclude_domains'
      - $ref: '#/components/parameters/source_ids'
      - $ref: '#/components/parameters/exclude_source_ids'
      - $ref: '#/components/parameters/language'
      - $ref: '#/components/parameters/published_before'
      - $ref: '#/components/parameters/published_after'
      - $ref: '#/components/parameters/published_on'
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/page'
      responses:
        '200':
          description: Successful response with similar articles ranked by relevance
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ArticleListResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/ServerError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
  /news/uuid/{uuid}:
    get:
      operationId: getNewsByUuid
      summary: News by UUID
      description: Retrieve a specific article by its unique UUID identifier.
      tags:
      - news
      parameters:
      - name: uuid
        in: path
        description: The unique UUID identifier of the article to retrieve.
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: Successful response with the requested article
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Article'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/ServerError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
components:
  responses:
    Forbidden:
      description: Endpoint access restricted — not available on current plan.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: endpoint_access_restricted
              message: This endpoint is not available on your current plan.
    ServiceUnavailable:
      description: Service temporarily unavailable — maintenance mode.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: maintenance_mode
              message: The service is temporarily unavailable for maintenance.
    TooManyRequests:
      description: Rate limit reached — too many requests within the 60-second window.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: rate_limit_reached
              message: You have exceeded the rate limit. Please wait before retrying.
    ServerError:
      description: Internal server error.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: server_error
              message: An internal server error occurred.
    NotFound:
      description: Resource not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: resource_not_found
              message: The requested article was not found.
    PaymentRequired:
      description: Plan usage limit reached.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: usage_limit_reached
              message: You have reached your plan usage limit.
    Unauthorized:
      description: Invalid or missing API token.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: invalid_api_token
              message: Your API token is invalid.
    BadRequest:
      description: Malformed parameters — invalid parameter formatting.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: malformed_parameters
              message: Invalid parameter formatting.
  parameters:
    published_after:
      name: published_after
      in: query
      description: 'Return articles published after this date/time (UTC). Formats: Y-m-d\TH:i:s, Y-m-d\TH:i, Y-m-d\TH, Y-m-d, Y-m, Y.'
      required: false
      schema:
        type: string
        example: '2026-01-01T00:00:00'
    sort:
      name: sort
      in: query
      description: 'Sort order for results. Options: published_on (chronological), relevance_score (by search relevance).'
      required: false
      schema:
        type: string
        enum:
        - published_on
        - relevance_score
        default: published_on
    language:
      name: language
      in: query
      description: Comma-separated language codes to filter results (e.g., en,es,fr). Supports 35+ languages.
      required: false
      schema:
        type: string
        example: en,es
    locale:
      name: locale
      in: query
      description: Comma-separated country codes to filter articles by locale (e.g., us,ca,gb). Supports 50+ countries.
      required: false
      schema:
        type: string
        example: us,ca
    exclude_domains:
      name: exclude_domains
      in: query
      description: Comma-separated list of source domains to exclude.
      required: false
      schema:
        type: string
    categories:
      name: categories
      in: query
      description: 'Comma-separated list of categories to include. Options: general, science, sports, business, health, entertainment, tech, politics, food, travel.'
      required: false
      schema:
        type: string
        example: tech,business
    search:
      name: search
      in: query
      description: Search query with advanced operators. Supports + (AND), | (OR), - (NOT), "..." (phrase), * (prefix), () (grouping), \ (escape). URL-encode when using special characters.
      required: false
      schema:
        type: string
    exclude_categories:
      name: exclude_categories
      in: query
      description: Comma-separated list of categories to exclude.
      required: false
      schema:
        type: string
    search_fields:
      name: search_fields
      in: query
      description: 'Comma-separated list of fields to search. Options: title, description, keywords, main_text.'
      required: false
      schema:
        type: string
        example: title,description
    exclude_source_ids:
      name: exclude_source_ids
      in: query
      description: Comma-separated list of source IDs to exclude.
      required: false
      schema:
        type: string
    source_ids:
      name: source_ids
      in: query
      description: Comma-separated list of source IDs to include (as returned by the /news/sources endpoint).
      required: false
      schema:
        type: string
    published_on:
      name: published_on
      in: query
      description: 'Return articles published on this exact date (UTC). Format: Y-m-d.'
      required: false
      schema:
        type: string
        format: date
        example: '2026-06-13'
    domains:
      name: domains
      in: query
      description: Comma-separated list of source domains to include (e.g., techcrunch.com,bbc.com).
      required: false
      schema:
        type: string
        example: techcrunch.com,bbc.com
    published_before:
      name: published_before
      in: query
      description: 'Return articles published before this date/time (UTC). Formats: Y-m-d\TH:i:s, Y-m-d\TH:i, Y-m-d\TH, Y-m-d, Y-m, Y.'
      required: false
      schema:
        type: string
        example: '2026-06-13T23:15:37'
    page:
      name: page
      in: query
      description: Page number for pagination. Maximum total of 20,000 results across all pages.
      required: false
      schema:
        type: integer
        minimum: 1
        default: 1
    limit:
      name: limit
      in: query
      description: Maximum number of results to return per page. Upper bound is determined by the current plan.
      required: false
      schema:
        type: integer
        minimum: 1
  schemas:
    PaginationMeta:
      type: object
      description: Pagination metadata for list responses.
      properties:
        found:
          type: integer
          description: Total number of articles matching the query.
        returned:
          type: integer
          description: Number of articles returned in this response.
        limit:
          type: integer
          description: Maximum number of articles per page.
        page:
          type: integer
          description: Current page number.
    ArticleListResponse:
      type: object
      description: Paginated list of news articles.
      properties:
        meta:
          $ref: '#/components/schemas/PaginationMeta'
        data:
          type: array
          items:
            $ref: '#/components/schemas/Article'
    Article:
      type: object
      description: A news article with full metadata.
      properties:
        uuid:
          type: string
          format: uuid
          description: Unique identifier for the article.
        title:
          type: string
          description: Article headline.
        description:
          type: string
          description: Short summary or excerpt of the article.
        keywords:
          type: string
          description: Comma-separated keywords associated with the article.
        snippet:
          type: string
          description: Brief text snippet from the article body.
        url:
          type: string
          format: uri
          description: Full URL to the original article.
        image_url:
          type: string
          format: uri
          nullable: true
          description: URL of the article's primary image, if available.
        language:
          type: string
          description: ISO 639-1 language code of the article (e.g., en, es, fr).
        published_at:
          type: string
          format: date-time
          description: UTC timestamp when the article was published.
        source:
          type: string
          description: Domain of the source publication (e.g., bbc.com).
        categories:
          type: array
          items:
            type: string
            enum:
            - general
            - science
            - sports
            - business
            - health
            - entertainment
            - tech
            - politics
            - food
            - travel
          description: List of categories the article belongs to.
        relevance_score:
          type: number
          format: float
          nullable: true
          description: Relevance score when sorting by relevance_score. Null when not applicable.
        locale:
          type: string
          description: Country code locale of the article (e.g., us, gb, ca).
        similar:
          type: array
          items:
            $ref: '#/components/schemas/Article'
          description: Array of similar articles (only present in headlines response when include_similar=true).
    ErrorResponse:
      type: object
      description: Standard error response.
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              description: Machine-readable error code.
            message:
              type: string
              description: Human-readable error description.
    HeadlinesResponse:
      type: object
      description: Headlines grouped by category.
      properties:
        meta:
          $ref: '#/components/schemas/PaginationMeta'
        data:
          type: array
          items:
            $ref: '#/components/schemas/Article'
  securitySchemes:
    ApiToken:
      type: apiKey
      in: query
      name: api_token
      description: API token obtained after free registration at https://www.thenewsapi.com/register