TheNewsAPI news API

News article retrieval and search

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