APITube News API

News search and retrieval — everything, top headlines, trends, companies, journalists, fact-checks and taxonomy suggestion. 26 operations, API key by header or query.

Operations 15

GET /v1/news/everything Search all articles #
POST /v1/news/everything Search all news articles
GET /v1/news/top-headlines Get top headlines #
POST /v1/news/top-headlines Get top headlines
GET /v1/news/trends Get trending topics and entities #
POST /v1/news/trends Get trending topics and entities
POST /v1/news/raw Get raw articles (before parsing & enrichment)
POST /v1/news/local Local news around a point
POST /v1/news/story/{articleId} Get related articles for a story
POST /v1/news/article Get articles by ID
POST /v1/news/category/{taxonomy}/{categoryId} Get articles by category
POST /v1/news/topic/{topicId} Get articles by topic
POST /v1/news/industry/{industryId} Get articles by industry
POST /v1/news/entity/{entityId} Get articles by entity
POST /v1/news/count Count matching articles

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/apitube-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 form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

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

OpenAPI Specification

apitube-news-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Apitube News API
  version: 1.0.0
  x-refined-note:
  - x-logo differs across the merged source definitions and was not carried
  description: 'Operations tagged News across 2 of this provider''s published API definitions: apitube-apex-openapi.json, apitube-api-openapi.json. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.apitube.io
  description: Production API server
security:
- ApiKeyHeader: []
- ApiKeyQuery: []
tags:
- name: News
  description: Endpoints for searching and retrieving news articles
paths:
  /v1/news/everything:
    get:
      summary: Search all articles
      description: Search and filter articles from all sources. Supports keyword search, sentiment analysis, entity filtering, language/country filtering, date ranges, and sorting.
      operationId: getEverything
      tags:
      - News
      parameters:
      - name: api_key
        in: query
        description: Your API key (alternative to X-API-Key header)
        required: false
        schema:
          type: string
      - name: title
        in: query
        description: Search in article titles. Supports keywords and exact phrases (in quotes).
        required: false
        schema:
          type: string
        example: artificial intelligence
      - name: language.code
        in: query
        description: Filter by language (ISO 639-1 code). Up to 3 comma-separated values.
        required: false
        schema:
          type: string
        example: en
      - name: source.country.code
        in: query
        description: Filter by source country (ISO 3166-1 alpha-2). Up to 3 comma-separated values.
        required: false
        schema:
          type: string
        example: us
      - name: source.domain
        in: query
        description: Filter by source domain. Up to 3 comma-separated values.
        required: false
        schema:
          type: string
        example: theguardian.com
      - name: category.id
        in: query
        description: Filter by IPTC category ID. Up to 3 comma-separated values (OR logic).
        required: false
        schema:
          type: string
        example: medtop:15000000
      - name: topic.id
        in: query
        description: Filter by topic ID. Up to 3 comma-separated values (OR logic).
        required: false
        schema:
          type: integer
        example: 1
      - name: industry.id
        in: query
        description: Filter by industry ID. Up to 3 comma-separated values (OR logic).
        required: false
        schema:
          type: string
        example: '400'
      - name: entity.id
        in: query
        description: Filter by named entity ID. Up to 3 comma-separated values (OR logic).
        required: false
        schema:
          type: string
      - name: person.name
        in: query
        description: Filter articles mentioning a specific person. Up to 3 comma-separated values.
        required: false
        schema:
          type: string
        example: Elon Musk
      - name: organization.name
        in: query
        description: Filter articles mentioning a specific organization. Up to 3 comma-separated values.
        required: false
        schema:
          type: string
        example: Google
      - name: brand.name
        in: query
        description: Filter articles mentioning a specific brand. Up to 3 comma-separated values.
        required: false
        schema:
          type: string
        example: Nike
      - name: location.name
        in: query
        description: Filter by geographic location mentioned in the article. Up to 3 comma-separated values.
        required: false
        schema:
          type: string
        example: Tokyo
      - name: sentiment.overall.polarity
        in: query
        description: Filter by sentiment polarity.
        required: false
        schema:
          type: string
          enum:
          - positive
          - negative
          - neutral
      - name: sentiment.overall.score.min
        in: query
        description: Minimum overall sentiment score (-1 to 1).
        required: false
        schema:
          type: number
          format: float
          minimum: -1
          maximum: 1
      - name: sentiment.overall.score.max
        in: query
        description: Maximum overall sentiment score (-1 to 1).
        required: false
        schema:
          type: number
          format: float
          minimum: -1
          maximum: 1
      - name: entity.sentiment.polarity
        in: query
        description: Filter by sentiment polarity toward the entity. Combine with entity.id or *.name; standalone matches any entity with that sentiment.
        required: false
        schema:
          type: string
          enum:
          - positive
          - negative
          - neutral
      - name: entity.sentiment.score.min
        in: query
        description: Minimum sentiment score toward the entity (-1 to 1).
        required: false
        schema:
          type: number
          format: float
          minimum: -1
          maximum: 1
      - name: entity.sentiment.score.max
        in: query
        description: Maximum sentiment score toward the entity (-1 to 1).
        required: false
        schema:
          type: number
          format: float
          minimum: -1
          maximum: 1
      - name: published_at.start
        in: query
        description: Start of publication date range. ISO 8601 (YYYY-MM-DD) or relative (e.g. NOW-7DAYS).
        required: false
        schema:
          type: string
        example: '2024-01-01'
      - name: published_at.end
        in: query
        description: End of publication date range. ISO 8601 (YYYY-MM-DD) or relative (e.g. NOW).
        required: false
        schema:
          type: string
        example: NOW
      - name: sort.by
        in: query
        description: Field to sort results by.
        required: false
        schema:
          type: string
          enum:
          - published_at
          - created_at
          - relevance
          - sentiment.overall.score
          - source.rank.opr
          - read_time
          - engagement
          - quality
          - controversy
          - trust
        example: published_at
      - name: sort.order
        in: query
        description: Sort direction.
        required: false
        schema:
          type: string
          enum:
          - asc
          - desc
          default: desc
      - name: per_page
        in: query
        description: Number of results per page.
        required: false
        schema:
          type: integer
          minimum: 1
          maximum: 100
          default: 10
      - name: page
        in: query
        description: Page number for pagination.
        required: false
        schema:
          type: integer
          minimum: 1
          default: 1
      - name: source.bias
        in: query
        description: Filter by media bias classification. Up to 3 comma-separated values.
        required: false
        schema:
          type: string
          enum:
          - left
          - center
          - right
      - name: has_image
        in: query
        description: Filter articles that have at least one image (1=yes, 0=no).
        required: false
        schema:
          type: integer
          enum:
          - 0
          - 1
      - name: is_breaking
        in: query
        description: Filter for breaking news only (1=yes, 0=no).
        required: false
        schema:
          type: integer
          enum:
          - 0
          - 1
      - name: is_premium_source
        in: query
        description: Filter for premium sources with Open Page Rank >= 6 (1=yes).
        required: false
        schema:
          type: integer
          enum:
          - 0
          - 1
      - name: fl
        in: query
        description: Comma-separated list of fields to return. Supports dot notation for nested fields.
        required: false
        schema:
          type: string
        example: id,title,source.domain,published_at
      responses:
        '200':
          description: Successful response with paginated list of articles
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NewsListResponse'
              example:
                status: ok
                limit: 10
                page: 1
                has_next_pages: true
                next_page: https://api.apitube.io/v1/news/everything?page=2&per_page=10
                has_previous_page: false
                previous_page: ''
                request_id: 550e8400-e29b-41d4-a716-446655440000
                results: []
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    post:
      summary: Search all news articles
      tags:
      - News
      description: Search and filter news articles from thousands of sources worldwide. Supports advanced filtering by title, date, language, source, category, topic, industry, entity, sentiment, readability, media, location, and more. Results can be exported in multiple formats (CSV, TSV, XML, RSS, XLSX, Parquet, JSONL).
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                prompt:
                  type: string
                  minLength: 3
                  maxLength: 500
                  description: 'Plain-language description of the news you want, e.g. "Elon Musk, Tesla, news for the last 10 days". It is translated into the regular filters below before the search runs, and the resulting parameters are returned in meta.prompt. Explicit parameters always win over the prompt. Costs 2 extra points when the wording has not been parsed before (repeats are served from cache). Available on Basic and above — on Free and Starter the request fails with 403 ER0706. Errors: ER0706 (plan), ER0800 (length), ER0801 (translation service unavailable), ER0802 (nothing usable in the prompt).'
                page:
                  type: integer
                  minimum: 1
                  default: 1
                  description: Page number for pagination
                per_page:
                  type: integer
                  minimum: 1
                  maximum: 250
                  default: 100
                  description: Number of results per page (max 250; the Free plan is capped at 10 and Starter at 50)
                sort.by:
                  type: string
                  enum:
                  - published_at
                  - relevance
                  - engagement
                  - quality
                  - controversy
                  - trust
                  - id
                  - new
                  - created_at
                  - source.rank.opr
                  - sentiment.overall.score
                  - sentiment.title.score
                  - sentiment.body.score
                  - read_time
                  - sentences_count
                  - paragraphs_count
                  - characters_count
                  - media.images.count
                  - media.videos.count
                  - media.images.width.min
                  - media.images.width.max
                  - media.images.height.min
                  - media.images.height.max
                  - media_richness
                  - shares.facebook.min
                  - shares.facebook.max
                  - shares.twitter.min
                  - shares.twitter.max
                  - shares.reddit.min
                  - shares.reddit.max
                  default: published_at
                  description: Field to sort results by
                sort.order:
                  type: string
                  enum:
                  - asc
                  - desc
                  default: desc
                  description: Sort order
                article.id:
                  type: string
                  description: Comma-separated article IDs (max 5)
                  example: '12345'
                title:
                  type: string
                  minLength: 2
                  maxLength: 100
                  description: 'Search in article titles. Supports phrase search with proximity: "climate change"~2. Title search is limited to a 31-day published_at window: without published_at.start / published_at.end the last 31 days are searched, a wider explicit range returns ER0110.'
                ignore.title:
                  type: string
                  minLength: 2
                  maxLength: 100
                  description: Exclude articles containing this text in the title
                title_starts_with:
                  type: string
                  minLength: 2
                  maxLength: 100
                  description: Filter articles whose title starts with the given text. Same 31-day window limit as title
                title_ends_with:
                  type: string
                  minLength: 2
                  maxLength: 100
                  description: Filter articles whose title ends with the given text. Same 31-day window limit as title
                title_pattern:
                  type: string
                  minLength: 2
                  maxLength: 200
                  description: Filter articles whose title matches the given pattern. Same 31-day window limit as title
                published_at:
                  type: string
                  description: 'Exact date (creates 24-hour range). Format: YYYY-MM-DD or ISO 8601'
                  example: '2025-01-15'
                published_at.start:
                  type: string
                  description: 'Start of date range. Format: YYYY-MM-DD or ISO 8601. Combined with a title search the range may not exceed 31 days (ER0110)'
                  example: '2025-01-01'
                published_at.end:
                  type: string
                  description: 'End of date range. Format: YYYY-MM-DD or ISO 8601. Combined with a title search the range may not exceed 31 days (ER0110)'
                  example: '2025-01-31'
                language.code:
                  type: string
                  description: Comma-separated ISO 639-1 language codes (max 3)
                  example: en
                ignore.language.code:
                  type: string
                  description: Exclude articles in these languages (comma-separated, max 3)
                  example: zh,ar
                source.country.code:
                  type: string
                  description: Filter by source country ISO 3166-1 alpha-2 codes (comma-separated, max 3)
                  example: us
                ignore.source.country.code:
                  type: string
                  description: Exclude sources from these countries (comma-separated, max 3)
                  example: us
                source.rank.opr.min:
                  type: integer
                  minimum: 0
                  description: Minimum Open PageRank score
                source.rank.opr.max:
                  type: integer
                  minimum: 0
                  description: Maximum Open PageRank score
                source.id:
                  type: string
                  description: Comma-separated source IDs (max 3)
                  example: '100'
                ignore.source.id:
                  type: string
                  description: Exclude these source IDs (comma-separated, max 3)
                source.domain:
                  type: string
                  description: Comma-separated source domains (max 3)
                  example: nytimes.com
                ignore.source.domain:
                  type: string
                  description: Exclude these source domains (comma-separated, max 3)
                source.bias:
                  type: string
                  description: 'Filter by media bias (comma-separated). Values: left, center, right'
                  example: left
                ignore.source.bias:
                  type: string
                  description: 'Exclude sources with this media bias (comma-separated). Values: left, center, right'
                  example: right
                is_premium_source:
                  type: integer
                  enum:
                  - 0
                  - 1
                  description: Filter by premium source status
                is_verified_source:
                  type: integer
                  enum:
                  - 0
                  - 1
                  description: Filter by verified source status
                category.id:
                  type: string
                  description: Comma-separated category IDs (max 3)
                  example: iab-1
                ignore.category.id:
                  type: string
                  description: Exclude these categories (comma-separated, max 3)
                topic.id:
                  type: string
                  description: Comma-separated topic IDs (max 3)
                  example: technology
                ignore.topic.id:
                  type: string
                  description: Exclude these topics (comma-separated, max 3)
                industry.id:
                  type: string
                  description: Comma-separated industry IDs (max 3)
                  example: '1'
                ignore.industry.id:
                  type: string
                  description: Exclude these industries (comma-separated, max 3)
                entity.id:
                  type: string
                  description: Comma-separated entity IDs (max 3)
                  example: '12345'
                ignore.entity.id:
                  type: string
                  description: Exclude these entity IDs (comma-separated, max 3)
                entity.sentiment.polarity:
                  type: string
                  enum:
                  - positive
                  - negative
                  - neutral
                  description: Filter by sentiment polarity toward the entity (combine with entity.id or *.name; standalone = any entity)
                entity.sentiment.score.min:
                  type: number
                  minimum: -1
                  maximum: 1
                  description: Minimum sentiment score toward the entity
                entity.sentiment.score.max:
                  type: number
                  minimum: -1
                  maximum: 1
                  description: Maximum sentiment score toward the entity
                person.name:
                  type: string
                  maxLength: 120
                  description: Filter by person name (comma-separated, max 3)
                  example: Elon Musk
                ignore.person.name:
                  type: string
                  maxLength: 120
                  description: Exclude articles mentioning these persons (comma-separated, max 3)
                organization.name:
                  type: string
                  maxLength: 120
                  description: Filter by organization name (comma-separated, max 3)
                  example: Google
                ignore.organization.name:
                  type: string
                  maxLength: 120
                  description: Exclude articles mentioning these organizations (comma-separated, max 3)
                location.name:
                  type: string
                  maxLength: 120
                  description: Filter by location name (comma-separated, max 3)
                  example: New York
                ignore.location.name:
                  type: string
                  maxLength: 120
                  description: Exclude articles mentioning these locations (comma-separated, max 3)
                brand.name:
                  type: string
                  maxLength: 120
                  description: Filter by brand name (comma-separated, max 3)
                ignore.brand.name:
                  type: string
                  maxLength: 120
                  description: Exclude articles mentioning these brands (comma-separated, max 3)
                disaster.name:
                  type: string
                  maxLength: 120
                  description: Filter by natural disaster name (comma-separated, max 3)
                ignore.disaster.name:
                  type: string
                  maxLength: 120
                  description: Exclude articles mentioning these disasters (comma-separated, max 3)
                disease.name:
                  type: string
                  maxLength: 120
                  description: Filter by disease name (comma-separated, max 3)
                ignore.disease.name:
                  type: string
                  maxLength: 120
                  description: Exclude articles mentioning these diseases (comma-separated, max 3)
                event.name:
                  type: string
                  maxLength: 120
                  description: Filter by event name (comma-separated, max 3)
                ignore.event.name:
                  type: string
                  maxLength: 120
                  description: Exclude articles mentioning these events (comma-separated, max 3)
                sport.name:
                  type: string
                  maxLength: 120
                  description: Filter by sport name (comma-separated, max 3)
                ignore.sport.name:
                  type: string
                  maxLength: 120
                  description: Exclude articles mentioning these sports (comma-separated, max 3)
                event.type:
                  type: string
                  description: 'Comma-separated event types (max 5). Values: merger-acquisition, ipo, layoffs, bankruptcy, product-launch, funding-round, earnings, partnership, executive-change, lawsuit, data-breach, recall, expansion, closure, stock-movement, contract-award, spin-off, regulatory-action, election, protest, crime, terrorism, accident, policy-change, scandal, death, award-ceremony, conflict, diplomacy, health-crisis, migration, human-rights, earthquake, hurricane, flood, wildfire, tornado, tsunami, volcanic-eruption, drought, climate-event, pollution, wildlife-event, avalanche'
                  example: ipo
                event.category:
                  type: string
                  enum:
                  - business
                  - society
                  - environment
                  description: Filter by event category
                ignore.event.type:
                  type: string
                  description: Exclude these event types (comma-separated, max 5)
                sentiment.overall.score:
                  type: number
                  minimum: -1
                  maximum: 1
                  description: Exact overall sentiment score
                sentiment.overall.score.min:
                  type: number
                  minimum: -1
                  maximum: 1
                  description: Minimum overall sentiment score
                sentiment.overall.score.max:
                  type: number
                  minimum: -1
                  maximum: 1
                  description: Maximum overall sentiment score
                sentiment.overall.polarity:
                  type: string
                  enum:
                  - positive
                  - negative
                  - neutral
                  description: Overall sentiment polarity
                sentiment.title.score:
                  type: number
                  minimum: -1
                  maximum: 1
                  description: Exact title sentiment score
                sentiment.title.score.min:
                  type: number
                  minimum: -1
                  maximum: 1
                  description: Minimum title sentiment score
                sentiment.title.score.max:
                  type: number
                  minimum: -1
                  maximum: 1
                  description: Maximum title sentiment score
                sentiment.title.polarity:
                  type: string
                  enum:
                  - positive
                  - negative
                  - neutral
                  description: Title sentiment polarity
                sentiment.body.score:
                  type: number
                  minimum: -1
                  maximum: 1
                  description: Exact body sentiment score
                sentiment.body.score.min:
                  type: number
                  minimum: -1
                  maximum: 1
                  description: Minimum body sentiment score
                sentiment.body.score.max:
                  type: number
                  minimum: -1
                  maximum: 1
                  description: Maximum body sentiment score
                sentiment.body.polarity:
                  type: string
                  enum:
                  - positive
                  - negative
                  - neutral
                  description: Body sentiment polarity
                sentiment.mixed:
                  type: integer
                  enum:
                  - 0
                  - 1
                  description: Filter for mixed sentiment (title polarity != body polarity)
                sentiment.consistent:
                  type: integer
                  enum:
                  - 0
                  - 1
                  description: Filter for consistent sentiment (title polarity == body polarity)
                is_clickbait:
                  type: integer
                  enum:
                  - 0
                  - 1
                  description: Filter by clickbait detection
                sentiment_gap.min:
                  type: number
                  minimum: 0
                  maximum: 2
                  description: Minimum sentiment gap between title and body
                sentiment_gap.max:
                  type: number
                  minimum: 0
                  maximum: 2
                  description: Maximum sentiment gap between title and body
                media.images.count:
                  type: integer
                  minimum: 0
                  description: Exact number of images
                media.images.count.min:
                  type: integer
                  minimum: 0
                  description: Minimum number of images
                media.images.count.max:
                  type: integer
                  minimum: 0
                  description: Maximum number of images
                media.images.width.min:
                  type: integer
                  minimum: 0
                  description: Minimum image width in pixels
                media.images.width.max:
                  type: integer
                  minimum: 0
                  description: Maximum image width in pixels
                media.images.height.min:
                  type: integer
                  minimum: 0
                  description: Minimum image height in pixels
                media.images.height.max:
                  type: integer
                  minimum: 0
                  description: Maximum image height in pixels
                media.videos.count:
                  type: integer
                  minimum: 0
                  description: Exact number of videos
                media.videos.count.min:
                  type: integer
                  minimum: 0
                  description: Minimum number of videos
                media.videos.count.max:
                  type: integer
                  minimum: 0
                  description: Maximum number of videos
                has_image:
                  type: integer
                  enum:
                  - 0
                  - 1
                  description: Filter articles with/without images
                has_video:
                  type: integer
                  enum:
                  - 0
                  - 1
                  description: Filter articles with/without videos
                has_hq_images:
                  type: integer
                  enum:
                  - 0
                  - 1
                  description: Filter articles with high-quality images (>= 1200px width)
                is_media_rich:
                  type: integer
                  enum:
                  - 0
                  - 1
                  description: Filter articles with both images and videos
                is_landscape_media:
                  type: integer
                  enum:
                  - 0
                  - 1
                  description: Filter articles with landscape-oriented media
                is_portrait_media:
                  type: integer
                  enum:
                  - 0
                  - 1
                  description: Filter articles with portrait-oriented media
                has_multiple_images:
                  type: integer
                  enum:
                  - 0
                  - 1
                  description: Filter articles with 2+ images
                has_fullhd_images:
                  type: integer
                  enum:
                  - 0
                  - 1
                  description: Filter articles with Full HD images (>= 1920px width)
                has_4k_images:
                  type: integer
                  enum:
                  - 0
                  - 1
                  description: Filter articles with 4K images (>= 3840px width)
                has_mobile_optimized_images:
                  type: integer
                  enum:
                  - 0
                  - 1
                  description: Filter articles with mobile-optimized images (320-800px width)
                is_instagram_ready:
                  type: integer
                  enum:
                  - 0
                  - 1
                  description: Filter articles with Instagram-ready images (>= 1080px + aspect ratio)
                is_twitter_card_ready:
                  type: integer
                  enum:
                  - 0
                  - 1
                  description: Filter articles with Twitter Card-ready images (>= 800px + landscape)
                has_consistent_image_sizes:
                  type: integer
                  enum:
                  - 0
                  - 1
                  description: Filter articles with consistent image dimensions
                has_thumbnail:
                  type: integer
                  enum:
                  - 0
                  - 1
                  description: Filter articles with thumbnail images (<= 300px width)
                has_social_share_image:
                  type: integer
                  enum:
                  - 0
                  - 1
                  description: Filter articles with social share images (>= 1200x630px)
                has_mixed_media:
                  type: integer
                  enum:
                  - 0
                  - 1
                  description: Filter articles with both image and video media types
                readability.fk_grade:
                  type: number
                  minimum: 0
                  maximum: 30
                  description: Exact Flesch-Kincaid grade level
                readability.fk_grade.min:
                  type: number
                  minimum: 0
                  maximum: 30
                  description: Minimum Flesch-Kincaid grade level
                readability.fk_grade.max:
                  type: number
                  minimum: 0
                  maximum: 30
                  description: Maximum Flesch-Kincaid grade level
                readability.ease:
                  type: number
                  minimum: 0
                  maximum: 100
                  description: Exact Flesch Reading Ease score
                readability.ease.min:
                  type: number
                  minimum: 0
                  maximum: 100
                  description: Minimum Flesch Reading Ease score
                readability.ease.max:
          

# --- truncated at 32 KB (709 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/apitube/refs/heads/main/openapi/apitube-news-api-openapi.yml