Every API here is available over the APIs.io API and to AI agents over MCP.
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