Skip to content

API Response Structure ​

Use this reference to read API responses and check the meaning and possible values of each field.

General response structure ​

The standard JSON response has this format:

json
{
    "status": "ok",
    "limit": 1,
    "path": "https://api.apitube.io/v1/news/everything?api_key=API_KEY&per_page=1",
    "page": 1,
    "has_next_pages": true,
    "next_page": "https://api.apitube.io/v1/news/everything?api_key=API_KEY&per_page=1&page=2",
    "has_previous_page": false,
    "previous_page": "",
    "export": {
        "json": "https://api.apitube.io/v1/news/everything?api_key=API_KEY&per_page=1&export=json",
        "xlsx": "https://api.apitube.io/v1/news/everything?api_key=API_KEY&per_page=1&export=xlsx",
        "csv": "https://api.apitube.io/v1/news/everything?api_key=API_KEY&per_page=1&export=csv",
        "tsv": "https://api.apitube.io/v1/news/everything?api_key=API_KEY&per_page=1&export=tsv",
        "xml": "https://api.apitube.io/v1/news/everything?api_key=API_KEY&per_page=1&export=xml",
        "rss": "https://api.apitube.io/v1/news/everything?api_key=API_KEY&per_page=1&export=rss",
        "parquet": "https://api.apitube.io/v1/news/everything?api_key=API_KEY&per_page=1&export=parquet",
	    "jsonl": "https://api.apitube.io/v1/news/everything?api_key=API_KEY&per_page=1&export=jsonl"
    },
    "request_id": "1044de7a-a39d-463c-b443-1d9141f7babe",
    "results": [
        // Array of articles
    ]
}

Main response fields ​

FieldTypeDescription
statusstringRequest status. Possible values: "ok" (request successful) or "error" (an error occurred).
limitintegerNumber of results per page.
pathstringFull URL of the current API request, including all request parameters.
pageintegerCurrent page of results.
has_next_pagesbooleantrue if another page of results is available.
next_pagestringFull URL to get the next page of results. Empty string if has_next_pages is false.
has_previous_pagebooleantrue if a previous page of results is available.
previous_pagestringFull URL to get the previous page of results. Empty string if has_previous_page is false.
exportobjectURLs to download results as JSON, JSONL, CSV, TSV, XLSX, XML, RSS or Parquet.
request_idstringRequest ID for tracking and debugging.
metaobjectWarnings or details about a prompt, when available — see The meta object.
resultsarrayArticles returned by the request.

The meta object ​

A successful response may include meta with warnings or details about a prompt. Articles remain in results with the same format.

FieldTypeAppears when
meta.promptobjectThe request used the prompt parameter.
meta.warningsarrayThe API limited the search range. For example, a title search without dates covers the last 31 days (ER0366).

meta.prompt ​

json
{
    "meta": {
        "prompt": {
            "text": "Elon Musk and Tesla news for the last 10 days",
            "applied": {
                "person.name": "Elon Musk",
                "organization.name": "Tesla",
                "published_at.start": "NOW-10DAY"
            },
            "ignored": [
                { "field": "topic.id", "value": "robotaxi", "reason": "not_found" }
            ],
            "cached": false
        }
    }
}
FieldTypeDescription
textstringYour prompt, with spaces removed from the beginning and end.
appliedobjectThe parameters the prompt was translated into. This is the request that actually ran.
ignoredarrayValues that were understood but not used. Each item has field, value and reason.
cachedbooleantrue when the API reused an earlier interpretation of the same prompt, so no translation fee was charged.

meta.prompt is not returned by the SSE stream (/v1/news/stream), which has no JSON response. The WebSocket stream returns the same information in the filters object of its subscribed message. Full reference: Natural Language Search.

meta.warnings ​

json
{
    "meta": {
        "warnings": [
            {
                "code": "ER0366",
                "message": "published_at window defaulted to the last 31 days for title search. Pass published_at.start / published_at.end to pick a different 31-day window.",
                "links": {
                    "about": "https://docs.apitube.io/platform/news-api/http-response-codes"
                }
            }
        ]
    }
}

Warnings arrive with HTTP 200. For exports, the x-query-window-clamped response header reports when the title-search window was limited. See HTTP Response Codes.

Article object fields ​

Each article in the results array has the following structure:

json
{
    "id": "Unique article ID",
    "href": "URL of the original article",
    "published_at": "Publication date and time in ISO 8601 format",
    "title": "Article title",
    "description": "Brief article description",
    "body": "Full article text",
    "body_html": "Full article text with HTML formatting",
    "language": "Article language (ISO 639-1 code)",
    "translations": {
        "en": {
            "title": "Article title translated to English",
            "description": "Article description translated to English"
        }
    },
    "author": {
        "id": "Author ID",
        "name": "Author name"
    },
    "image": "URL of the main article image",
    "categories": [
        {
            "id": "Category ID",
            "name": "Category name",
            "score": "Category relevance score for the article",
            "taxonomy": "Category taxonomy name",
            "links": {
                "self": "URL to get information about the category"
            }
        }
    ],
    "topics": [
        {
            "id": "Topic ID",
            "name": "Topic name",
            "score": "Topic relevance score for the article",
            "links": {
                "self": "URL to get information about the topic"
            }
        }
    ],
    "industries": [
        {
            "id": "Industry ID",
            "name": "Industry name",
            "links": {
                "self": "URL to get information about the industry"
            }
        }
    ],
    "entities": [
        {
            "id": "Entity ID",
            "name": "Entity name",
            "type": "Entity type (person, location, organization, brand, product, natural-disaster, disease, event, sport, unknown)",
            "links": {
                "self": "URL to get information about the entity",
                "wikipedia": "Link to Wikipedia article",
                "wikidata": "Link to entity in Wikidata"
            },
            "frequency": "Frequency of entity mentions in the article",
            "sentiment": {
                "score": "Sentiment score toward this entity (-1 to 1)",
                "polarity": "Sentiment polarity toward this entity (positive, negative, neutral)",
                "mentions": "Per-mention polarity counts (positive, neutral, negative)"
            },
            "title": {
                "pos": "Array of entity mention positions in the title"
            },
            "body": {
                "pos": "Array of entity mention positions in the article body"
            },
            "metadata": "Additional entity information (varies by entity type)"
        }
    ],
    "source": {
        "id": "Source ID",
        "domain": "Source domain",
        "home_page_url": "URL of the source homepage",
        "type": "Source type (news, blog, etc.)",
        "bias": "Source bias",
        "rankings": {
            "opr": "Source ranking"
        },
        "location": {
            "country_name": "Source country name",
            "country_code": "Source country code (ISO 3166-1 alpha-2)"
        },
        "favicon": "Source favicon URL"
    },
    "sentiment": {
        "overall": {
            "score": "Overall article sentiment score",
            "polarity": "Textual representation of sentiment (positive, negative, neutral)"
        },
        "title": {
            "score": "Title sentiment score",
            "polarity": "Textual representation of title sentiment"
        },
        "body": {
            "score": "Article body sentiment score",
            "polarity": "Textual representation of body sentiment"
        }
    },
    "summary": [
        {
            "sentence": "Key sentence from the article",
            "sentiment": {
                "score": "Sentence sentiment score",
                "polarity": "Textual representation of sentiment"
            }
        }
    ],
    "keywords": "Array of article keywords",
    "links": [
        {
            "url": "URL mentioned in the article",
            "type": "Link type (link, etc.)"
        }
    ],
    "media": [
        {
            "url": "Media file URL",
            "type": "Media file type (image, video, etc.)"
        }
    ],
    "locations_mentioned": [
        {
            "name": "Location name",
            "country": "ISO 3166-1 alpha-2 country code",
            "lat": "Latitude (number or null)",
            "lng": "Longitude (number or null)",
            "type": "Location type (unknown if not classified)"
        }
    ],
    "readability": {
        "flesch_kincaid_grade": "Flesch-Kincaid grade level",
        "flesch_reading_ease": "Flesch reading ease score",
        "automated_readability_index": "Automated Readability Index (ARI)",
        "difficulty_level": "Difficulty level (beginner, intermediate, advanced, expert, unknown)",
        "target_audience": "Target audience (children, general, professional, academic, unknown)",
        "reading_age": "Estimated reading age",
        "avg_words_per_sentence": "Average words per sentence",
        "avg_syllables_per_word": "Average syllables per word"
    },
    "story": {
        "id": "Story ID (equal to the article id)",
        "uri": "URL to get information about the story"
    },
    "shares": {
        "total": "Total number of shares across all platforms",
        "facebook": "Number of Facebook shares",
        "twitter": "Number of Twitter/X shares",
        "reddit": "Number of Reddit shares"
    },
    "is_duplicate": "Flag indicating if the article is a duplicate",
    "is_free": "Flag indicating if the article is freely available (not behind paywall)",
    "is_breaking": "Flag indicating if the article is breaking news",
    "read_time": "Estimated reading time in minutes",
    "sentences_count": "Number of sentences in the article",
    "paragraphs_count": "Number of paragraphs in the article",
    "words_count": "Number of words in the article",
    "characters_count": "Number of characters in the article"
}

Article field reference ​

FieldTypeDescription
idintegerUnique article ID.
hrefstringURL of the original article.
published_atstringDate and time of article publication in ISO 8601 format.
titlestringArticle headline.
descriptionstringShort article summary. May be absent.
bodystringFull article text without HTML tags.
body_htmlstringFull article text with HTML formatting. May be absent for some articles.
languagestringArticle language in ISO 639-1 format (two-letter code).
translationsobjectEnglish translations of the title and description in translations.en.title and translations.en.description. The object is always present. Both fields are null for English articles and languages without translation support. The body is not translated.
authorobjectAuthor details. id may be null when unavailable.
imagestringURL of the main article image. May be absent for some articles.
categoriesarrayCategories assigned to the article.
topicsarrayTopics related to the article, with relevance scores.
industriesarrayIndustries related to the article.
entitiesarrayPeople, places, organizations and other entities mentioned in the article.
locations_mentionedarrayGeographic locations mentioned in the article (name, country, lat, lng, type).
sourceobjectPublisher details.
sentimentobjectTone of the article.
summaryarrayKey sentences from the article, each with its sentiment.
readabilityobjectReadability metrics (Flesch-Kincaid grade, reading ease, ARI, difficulty level, target audience, reading age, avg words per sentence, avg syllables per word).
keywordsarrayKeywords found in the article.
linksarrayURLs mentioned in the article, with their link types.
mediaarrayImages and videos associated with the article, with their URLs and types.
storyobjectThe article's story ID (id) and API URL (uri).
sharesobjectShare counts by social media platform.
is_duplicatebooleantrue if the article duplicates another article.
is_freebooleantrue if the article can be read without paying.
is_breakingbooleantrue if the article is breaking news.
read_timeintegerEstimated reading time in minutes.
sentences_countintegerNumber of sentences in the article.
paragraphs_countintegerNumber of paragraphs in the article.
words_countintegerNumber of words in the article.
characters_countintegerNumber of characters in the article.

Nested objects ​

Category object ​

json
{
    "id": 258,
    "name": "exporting",
    "score": 0.6,
    "taxonomy": "iptc_mediatopics",
    "links": {
        "self": "https://api.apitube.io/v1/news/category/iptc_mediatopics/medtop:20000366"
    }
}
FieldTypeDescription
idintegerUnique category ID.
namestringCategory name.
scorefloatCategory relevance score for the article (from 0 to 1).
taxonomystringCategory system this category belongs to.
linksobjectLinks related to the category.

Topic object ​

json
{
    "id": "market_news.commodities.potash",
    "name": "Potash Market News",
    "score": 0.2,
    "links": {
        "self": "https://api.apitube.io/v1/news/topic/market_news.commodities.potash"
    }
}
FieldTypeDescription
idstringUnique topic ID.
namestringTopic name.
scorefloatTopic relevance score for the article (from 0 to 1).
linksobjectLinks related to the topic.

Industry object ​

json
{
    "id": 1067,
    "name": "Sporting event",
    "links": {
        "self": "https://api.apitube.io/v1/news/industry/1067"
    }
}
FieldTypeDescription
idintegerUnique industry ID.
namestringIndustry name.
linksobjectLinks related to the industry.

Entity object ​

json
{
    "id": 1034399,
    "name": "Germany",
    "type": "location",
    "links": {
        "self": "https://api.apitube.io/v1/news/entity/1034399",
        "wikipedia": "https://en.wikipedia.org/wiki/Germany",
        "wikidata": "https://www.wikidata.org/wiki/Q183"
    },
    "frequency": 3,
    "sentiment": {
        "score": -0.42,
        "polarity": "negative",
        "mentions": {
            "positive": 1,
            "neutral": 0,
            "negative": 2
        }
    },
    "title": {
        "pos": [{
            "start": 7,
            "end": 14
        }]
    },
    "body": {
        "pos": [
            {
                "start": 113,
                "end": 120
            },
            {
                "start": 852,
                "end": 859
            }
        ]
    },
    "metadata": {
        "name": "Germany",
        "type": "country",
        "aliases": ["Federal Republic of Germany"],
        "country": {
            "code": "DE",
            "name": "Germany"
        },
        "full_name": "Germany, Germany",
        "is_capital": false,
        "population": 83577140,
        "coordinates": {
            "lat": 51,
            "lng": 10
        },
        "description": "Country in Central Europe"
    }
}
FieldTypeDescription
idintegerUnique entity ID.
namestringEntity name.
typestringEntity type: person, location, organization, brand, product, natural-disaster, disease, event, sport or unknown. Name filters are available for eight types: person.name, location.name, organization.name, brand.name, disaster.name, disease.name, event.name and sport.name. Use entity.id for product or unknown. There is no product.name filter; that parameter is ignored.
linksobjectLinks to API, Wikipedia and Wikidata pages about the entity.
frequencyintegerNumber of times the entity is mentioned in the article.
sentimentobjectTone toward this entity across all its mentions: score (-1 to 1), polarity (positive/negative/neutral), and mentions (counts of positive, neutral and negative mentions).
titleobjectPositions where the entity appears in the article title.
bodyobjectPositions where the entity appears in the article body.
metadataobjectEntity details; available fields depend on the entity type.

The fields in entity metadata depend on type:

  • Person: name, title, gender, aliases, bio_summary, nationality, organization, date_of_birth, social_profiles, is_real_person, is_public_figure, public_profile_url.
  • Location: full_name, country, coordinates, population, is_capital, description.
  • Organization or brand: description, website_url, logo_url, brand_owner, category, subcategory.

A field with no value is null. Handle this in your code.

Source object ​

json
{
    "id": 4232,
    "domain": "newsbytesapp.com",
    "home_page_url": "https://www.newsbytesapp.com",
    "type": "news",
    "bias": "right",
    "rankings": {
        "opr": 5
    },
    "location": {
        "country_name": "India",
        "country_code": "in"
    },
    "favicon": "https://www.google.com/s2/favicons?domain=https://www.newsbytesapp.com"
}
FieldTypeDescription
idintegerUnique source ID.
domainstringSource domain.
home_page_urlstringURL of the source homepage.
typestringSource type (e.g., "news", "blog").
biasstringSource bias (e.g., "left", "right", "center").
rankingsobjectSource ratings and metrics.
locationobjectPublisher location.
faviconstringURL of the source favicon.

Author object ​

json
{
    "id": 5678,
    "name": "John Smith"
}
FieldTypeDescription
idintegerAuthor ID, or null when unavailable.
namestringAuthor name, or an empty string when unavailable.

Sentiment object ​

json
{
    "overall": {
        "score": -0.01,
        "polarity": "neutral"
    },
    "title": {
        "score": -0.09,
        "polarity": "negative"
    },
    "body": {
        "score": 0.07,
        "polarity": "positive"
    }
}
FieldTypeDescription
overallobjectTone of the article as a whole.
titleobjectTone of the article title.
bodyobjectTone of the article body.

Each sentiment object contains:

  • score (float): a number from -1 to 1. Negative numbers mean negative sentiment; positive numbers mean positive sentiment.
  • polarity (string): the sentiment label: "positive", "negative" or "neutral".

Summary object ​

json
{
    "sentence": "an official said, highlighting the importance of this European nation in India",
    "sentiment": {
        "score": 0.17,
        "polarity": "positive"
    }
}
FieldTypeDescription
sentencestringKey sentence extracted from the article.
sentimentobjectTone of this sentence.

Story object ​

json
{
    "id": 3019419820,
    "uri": "https://api.apitube.io/v1/news/story/3019419820"
}
FieldTypeDescription
idintegerCurrently the same as the article's own id. There is no separate ID for the group of related articles.
uristringAPI URL for the story's details, using the article id.

Shares object ​

json
{
    "total": 288,
    "facebook": 149,
    "twitter": 74,
    "reddit": 65
}
FieldTypeDescription
totalintegerTotal number of shares across all platforms.
facebookintegerNumber of Facebook shares.
twitterintegerNumber of Twitter/X shares.
redditintegerNumber of Reddit shares.
json
{
    "url": "https://www.newsbytesapp.com/news/world/belgium",
    "type": "link"
}
FieldTypeDescription
urlstringURL mentioned in the article.
typestringLink type (typically "link").

Media object ​

json
{
    "url": "https://i.cdn.newsbytesapp.com/images/l82720260111162041.jpeg",
    "type": "image"
}
FieldTypeDescription
urlstringMedia file URL.
typestringMedia file type (e.g., "image", "video").

Error response ​

If a request fails, check the HTTP status and the error details. For example, an authentication error returns 401:

json
{
  "status": 401,
  "code": "ER0175",
  "message": "Your API key is invalid or missing.",
  "links": {
      "about": "https://docs.apitube.io/platform/news-api/http-response-codes"
  }
}
FieldTypeDescription
statusintegerHTTP status code of the error.
codestringError identifier for handling errors in your code.
messagestringHuman-readable error message.
linksobjectLinks to documentation about the error.

Error codes ​

CodeHTTP statusDescription
invalid_api_key401Invalid or missing API key.
unauthorized401The API key does not have permission for this request.
quota_exceeded429Request limit exceeded.
invalid_parameter400Invalid parameter value.
missing_parameter400Missing required parameter.
internal_error500Internal server error.

Pagination ​

Results are split into pages. The first request returns page 1. Use page to choose another page and per_page to set its size. The response's limit shows the number of items per page.

Example of pagination request:

text
https://api.apitube.io/v1/news/everything?title=technology&page=2&per_page=20

Response with pagination information:

json
{
  "status": "ok",
  "limit": 20,
  "path": "https://api.apitube.io/v1/news/everything?title=technology&page=2&per_page=20",
  "page": 2,
  "has_next_pages": true,
  "next_page": "https://api.apitube.io/v1/news/everything?title=technology&page=3&per_page=20",
  "has_previous_page": true,
  "previous_page": "https://api.apitube.io/v1/news/everything?title=technology&page=1&per_page=20",
  "results": [
    // Article objects
  ]
}

The /v1/news/trends response groups counts by the fields you request. Its format depends on whether you choose one field or several.

Single field response ​

With one field, trends is an array:

json
{
    "status": "ok",
    "field": "entity.id",
    "per_page": 10,
    "offset": 0,
    "total_count": 1500,
    "total_articles": 45000,
    "sort": "count",
    "order": "desc",
    "mincount": 1,
    "trends": [
        {
            "value": {
                "id": 1034399,
                "name": "Germany",
                "type_id": 2,
                "wikidata_id": "Q183"
            },
            "count": 523,
            "percentage": 1.16,
            "growth_rate": 2.5
        }
    ],
    "request_id": "a1b2c3d4-e5f6-7g8h-9i0j-k1l2m3n4o5p6"
}

Multiple fields response ​

With several comma-separated fields, results are grouped by field name. Each field has its own total_count and total_articles:

json
{
    "status": "ok",
    "fields": ["entity.id", "category.id"],
    "per_page": 10,
    "offset": 0,
    "sort": "count",
    "order": "desc",
    "mincount": 1,
    "trends": {
        "entity.id": {
            "trends": [...],
            "total_count": 1500,
            "total_articles": 45000
        },
        "category.id": {
            "trends": [...],
            "total_count": 200,
            "total_articles": 45000
        }
    },
    "request_id": "a1b2c3d4-e5f6-7g8h-9i0j-k1l2m3n4o5p6"
}
FieldTypeDescription
statusstringRequest status ("ok" or "error").
fieldstringThe requested field (single field mode only).
fieldsarrayRequested fields, present only when you request several fields.
per_pageintegerNumber of trends per page.
offsetintegerNumber of trends to skip.
total_countintegerTotal number of unique values for the field.
total_articlesintegerSum of count for all values of the requested field. Used to calculate percentage. For source.id, each article has one value, so this is also the article count. For category.id, topic.id, industry.id and entity.id, an article is counted once for each value it contains. The total can therefore exceed the number of articles.
sortstringSort field used ("count", "value", "growth_rate"; "change", "trending_score" with compare=true).
orderstringSort order ("asc" or "desc").
mincountintegerMinimum article count required for a trend.
trendsarray/objectWith one field, an array of trends. With several fields, an object keyed by field name.
request_idstringUnique request ID.
percentileintegerPercentile filter applied (optional, 1-100).
time_bucketstringInterval used for grouping counts: hour, day, week or month (optional).
compare_windowstringPeriod used for the comparison (optional, for example "7DAYS").
trending_daysintegerNumber of days used for trending calculation (optional, 7-30).
cachedbooleanWhether the API reused a previously saved response (optional).

Trend object structure ​

Each trend object in the trends array contains:

json
{
    "value": {
        "id": 1034399,
        "name": "Germany",
        "type_id": 2,
        "wikidata_id": "Q183"
    },
    "count": 523,
    "percentage": 1.16,
    "growth_rate": 2.5,
    "previous_count": 400,
    "change_absolute": 123,
    "change_percent": 30.75,
    "trending_score": 1.85,
    "trending_history": {
        "2024-01-01": 10,
        "2024-01-02": 15,
        "2024-01-03": 25
    }
}
FieldTypeDescription
valueobject/mixedThe field value, with details when available. See the table below.
countintegerNumber of articles containing this value.
percentagefloatPercentage of total articles (0-100).
growth_ratefloatNumber of articles per hour (null when unavailable).
previous_countintegerCount in previous period (only with compare=true).
change_absoluteintegerAbsolute change from previous period (only with compare=true).
change_percentfloatPercentage change from previous period (only with compare=true).
trending_scorefloatScore comparing recent article counts with the historical average (only with trending=true).
trending_historyobjectDaily counts for trending period (only with trending=true).

Trend object with time_bucket ​

With time_bucket, each trend includes counts by period. Values are returned as IDs without names or other metadata:

json
{
    "value": 1034399,
    "buckets": {
        "2024-01-15": 100,
        "2024-01-16": 150,
        "2024-01-17": 200
    },
    "total": 450
}
FieldTypeDescription
valuemixedThe raw field value (ID). With time_bucket, names and other details are omitted.
bucketsobjectCount for each time interval. Keys are dates formatted for the selected interval.
totalintegerTotal count across all time intervals.

Date formats used as interval keys:

  • hour: "2024-01-15 14:00"
  • day: "2024-01-15"
  • week: "2024-01-15" (start of week)
  • month: "2024-01"

Value details by field ​

The details returned in value depend on the field you request:

FieldValue format
entity.id{ id, name, type_id, wikidata_id }
category.id{ id, name, taxonomy }
topic.id{ id, name }
industry.id{ id, name }
source.id{ id, name, domain }
ParameterTypeValuesDefault
fieldstringsource.id, category.id, topic.id, industry.id, entity.id (comma-separated, max 5)required
sortstringcount, value, growth_rate (+ change, trending_score with compare=true)count
orderstringasc, descdesc
per_pageinteger1-10010
offsetinteger>= 00
mincountinteger1-100001
time_bucketstringhour, day, week, month (anything else → 400 ER0308)-
comparebooleantrue, falsefalse
compare_windowstring24HOURS, 7DAYS, 1WEEK, 2m, etc.required if compare=true
trendingbooleantrue, falsefalse
trending_daysinteger7-3014
percentileinteger1-100 (outside the range → 400 ER0307)-

Important limitations:

  • Maximum date range for trends: 30 days. If no dates specified, defaults to last 30 days.
  • Maximum 5 fields per request.
http
GET /v1/news/trends?field=entity.id&compare=true&compare_window=7DAYS&trending=true&per_page=5
json
{
    "status": "ok",
    "field": "entity.id",
    "per_page": 5,
    "offset": 0,
    "total_count": 15420,
    "total_articles": 125000,
    "sort": "count",
    "order": "desc",
    "mincount": 1,
    "compare_window": "7DAYS",
    "trending_days": 14,
    "trends": [
        {
            "value": {
                "id": 1034399,
                "name": "Germany",
                "type_id": 2,
                "wikidata_id": "Q183"
            },
            "count": 2341,
            "percentage": 1.87,
            "growth_rate": 4.2,
            "previous_count": 1890,
            "change_absolute": 451,
            "change_percent": 23.86,
            "trending_score": 1.45,
            "trending_history": {
                "2024-01-01": 120,
                "2024-01-02": 145,
                "2024-01-03": 180,
                "2024-01-04": 210,
                "2024-01-05": 195
            }
        }
    ],
    "request_id": "b2c3d4e5-f6g7-8h9i-0j1k-l2m3n4o5p6q7"
}

Reference endpoints response structure ​

Added in 1.0.42

Applies to the People, Companies and Journalists endpoints.

List endpoints (/v1/people, /v1/companies, /v1/journalists) return a page of profiles. Profile endpoints (/v1/{resource}/{id}) return one profile with coverage and recent_articles.

List response format ​

FieldTypeDescription
statusstringok on success.
limitintegerResults per page.
pageintegerCurrent page number.
has_next_pagesbooleanWhether more pages are available.
resultsarrayArray of profile objects (see below).

Person / Company object ​

json
{
  "id": 1316868,
  "name": "Michelle Obama",
  "type": "person",
  "links": {
    "self": "https://api.apitube.io/v1/people/1316868",
    "articles": "https://api.apitube.io/v1/news/entity/1316868",
    "wikipedia": "https://en.wikipedia.org/wiki/Michelle_Obama",
    "wikidata": "https://www.wikidata.org/wiki/Q13133"
  },
  "profile": { "title": "attorney at law", "gender": "female", "nationality": "United States" },
  "coverage": { "...": "see Coverage object" },
  "recent_articles": [ "... Article objects ..." ]
}
FieldTypeDescription
idintegerEntity ID (use with /v1/people/{id} or /v1/companies/{id}).
namestringDisplay name.
typestringEntity type (person, organization, brand, …).
linksobjectself, articles, wikipedia, wikidata.
profileobjectBackground details. People: title, bio_summary, gender, nationality, date_of_birth, social_profiles, aliases. Companies: headquarters, founded, website_url, logo_url, key_people, subsidiaries.
coverageobjectCoverage block (profile responses only). See Coverage object.
recent_articlesarrayLatest articles mentioning the entity (Article object).

Journalist object ​

FieldTypeDescription
idintegerJournalist (author) ID.
namestringJournalist name.
outletsarrayPublishers associated with this name: { id, name, domain }. Bylines with the same name are grouped together.
outlet_countintegerNumber of outlets (list responses only).
linksobjectself, articles.
coverageobjectCoverage block (profile responses only); includes top_entities.
recent_articlesarrayThe journalist's latest articles.

Coverage object ​

json
{
  "article_count": 180,
  "first_seen": "2017-01-06",
  "last_seen": "2026-03-03",
  "sentiment": { "positive": 47, "neutral": 95, "negative": 27 },
  "momentum": { "last_30_days": 12, "previous_30_days": 8, "change_pct": 50 },
  "timeline": [ { "period": "2026-02-01", "count": 13 } ],
  "top_sources": [ { "id": 342, "name": "cbc.ca", "domain": "cbc.ca", "count": 9 } ],
  "top_topics": [ { "id": "politics", "name": "Politics", "count": 70 } ],
  "top_countries": [ { "id": 102, "name": "United States", "code": "us", "count": 55 } ],
  "top_languages": [ { "id": 1, "name": "English", "code": "en", "count": 118 } ],
  "related_entities": [ { "id": 1316867, "name": "Barack Obama", "count": 348 } ]
}
FieldTypeDescription
article_countintegerTotal matching articles.
first_seenstringDate of the earliest matching article (YYYY-MM-DD), or null.
last_seenstringDate of the latest matching article (YYYY-MM-DD), or null.
sentimentobjectArticle counts by overall tone: positive, neutral, negative.
momentumobjectlast_30_days, previous_30_days, and change_pct (percentage change, null if no prior data).
timelinearrayMonthly counts (chronological, up to 24 months): { "period": "YYYY-MM-01", "count" }.
top_sourcesarrayTop sources by article count (people/companies/sources): { id, name, domain, count }.
top_topicsarrayTopics most often found in matching articles: { id, name, count }.
top_countriesarrayCountries represented in the coverage: { id, name, code, count }.
top_languagesarrayLanguages used in matching articles: { id, name, code, count }.
related_entitiesarrayPeople, companies or other entities most often mentioned together with this subject: { id, name, count }.
top_entitiesarrayEntities the journalist covers most (journalists only): { id, name, count }.

API response example ​

json
{
  "status": "ok",
  "limit": 2,
  "path": "https://api.apitube.io/v1/news/everything?language.code=en&per_page=2&page=1",
  "page": 1,
  "has_next_pages": true,
  "next_page": "https://api.apitube.io/v1/news/everything?language.code=en&per_page=2&page=2",
  "has_previous_page": false,
  "previous_page": "",
  "export": {
    "json": "https://api.apitube.io/v1/news/everything?language.code=en&per_page=2&page=1&export=json",
    "xlsx": "https://api.apitube.io/v1/news/everything?language.code=en&per_page=2&page=1&export=xlsx",
    "csv": "https://api.apitube.io/v1/news/everything?language.code=en&per_page=2&page=1&export=csv",
    "tsv": "https://api.apitube.io/v1/news/everything?language.code=en&per_page=2&page=1&export=tsv",
    "xml": "https://api.apitube.io/v1/news/everything?language.code=en&per_page=2&page=1&export=xml",
    "rss": "https://api.apitube.io/v1/news/everything?language.code=en&per_page=2&page=1&export=rss"
  },
  "request_id": "a1b2c3d4-e5f6-7g8h-9i0j-k1l2m3n4o5p6",
  "results": [
    {
      "id": 12345678,
      "href": "https://example.com/tech/new-smartphone-release",
      "published_at": "2023-06-15T10:30:00Z",
      "title": "New XYZ Smartphone Makes Waves in the Market",
      "description": "XYZ Company has introduced a new flagship smartphone that significantly outperforms competitors in performance and camera quality.",
      "body": "Today, XYZ Company introduced its new flagship smartphone. The device is equipped with the latest generation processor and a revolutionary camera that, according to the manufacturer, is capable of taking professional quality photos even in low light conditions. Industry experts have already highly rated the novelty, noting its excellent performance and innovative features.",
      "body_html": "<p>Today, XYZ Company introduced its new flagship smartphone. The device is equipped with the latest generation processor and a revolutionary camera that, according to the manufacturer, is capable of taking professional quality photos even in low light conditions. Industry experts have already highly rated the novelty, noting its excellent performance and innovative features.</p>",
      "language": "en",
      "translations": {
        "en": {
          "title": null,
          "description": null
        }
      },
      "author": {
        "id": 5678,
        "name": "John Smith"
      },
      "image": "https://example.com/images/xyz-smartphone.jpg",
      "categories": [
        {
          "id": 199,
          "name": "economy, business and finance",
          "score": 0.6,
          "taxonomy": "iptc_mediatopics",
          "links": {
            "self": "https://api.apitube.io/v1/news/category/iptc_mediatopics/medtop:04000000"
          }
        }
      ],
      "topics": [
        {
          "id": "industry.financial_news",
          "name": "Finance Industry News",
          "score": 0.1,
          "links": {
            "self": "https://api.apitube.io/v1/news/topic/industry.financial_news"
          }
        }
      ],
      "industries": [
        {
          "id": 456,
          "name": "Consumer Electronics",
          "links": {
            "self": "https://api.apitube.io/v1/news/industry/456"
          }
        }
      ],
      "entities": [
        {
          "id": 789,
          "name": "XYZ Company",
          "type": "organization",
          "links": {
            "self": "https://api.apitube.io/v1/news/entity/789",
            "wikipedia": "https://en.wikipedia.org/wiki/XYZ_Company",
            "wikidata": "https://www.wikidata.org/wiki/Q12345"
          },
          "frequency": 3,
          "title": {
            "pos": [
              {
                "start": 4,
                "end": 15
              }
            ]
          },
          "body": {
            "pos": [
              {
                "start": 6,
                "end": 17
              },
              {
                "start": 122,
                "end": 133
              }
            ]
          },
          "metadata": {
            "name": "XYZ Company",
            "type": "business",
            "country": {
              "code": "US",
              "name": "United States"
            },
            "description": "Technology company"
          }
        }
      ],
      "source": {
        "id": 123,
        "domain": "example.com",
        "home_page_url": "https://example.com",
        "type": "news",
        "bias": "center",
        "rankings": {
          "opr": 8
        },
        "location": {
          "country_name": "United States",
          "country_code": "us"
        },
        "favicon": "https://example.com/favicon.ico"
      },
      "sentiment": {
        "overall": {
          "score": 0.45,
          "polarity": "positive"
        },
        "title": {
          "score": 0.3,
          "polarity": "positive"
        },
        "body": {
          "score": 0.6,
          "polarity": "positive"
        }
      },
      "summary": [
        {
          "sentence": "Today, XYZ Company introduced its new flagship smartphone.",
          "sentiment": {
            "score": 0.2,
            "polarity": "positive"
          }
        },
        {
          "sentence": "Industry experts have already highly rated the novelty, noting its excellent performance and innovative features.",
          "sentiment": {
            "score": 0.8,
            "polarity": "positive"
          }
        }
      ],
      "keywords": ["smartphone", "XYZ", "technology"],
      "links": [
        {
          "url": "https://example.com/related/xyz-previous-model",
          "type": "link"
        }
      ],
      "media": [
        {
          "url": "https://example.com/images/xyz-smartphone.jpg",
          "type": "image"
        },
        {
          "url": "https://example.com/videos/xyz-smartphone-preview.mp4",
          "type": "video"
        }
      ],
      "locations_mentioned": [
        {
          "name": "San Francisco",
          "country": "US",
          "lat": 37.7749,
          "lng": -122.4194,
          "type": "city"
        }
      ],
      "readability": {
        "flesch_kincaid_grade": 9.2,
        "flesch_reading_ease": 58.4,
        "automated_readability_index": 10.1,
        "difficulty_level": "intermediate",
        "target_audience": "general",
        "reading_age": 14,
        "avg_words_per_sentence": 18.3,
        "avg_syllables_per_word": 1.5
      },
      "story": {
        "id": 3019419820,
        "uri": "https://api.apitube.io/v1/news/story/3019419820"
      },
      "shares": {
        "total": 288,
        "facebook": 149,
        "twitter": 74,
        "reddit": 65
      },
      "is_duplicate": false,
      "is_free": true,
      "is_breaking": false,
      "read_time": 2,
      "sentences_count": 3,
      "paragraphs_count": 1,
      "words_count": 60,
      "characters_count": 354
    }
  ]
}

Notes ​

  1. Missing fields: A field may be absent if the article has no value for it or your plan does not include it.

  2. Date format: All dates in the API are returned in ISO 8601 format (e.g., "2023-06-15T10:30:00Z").

  3. Content limitations: Depending on the subscription plan, the body and body_html fields may contain the full text of the article or only a part of it.

  4. Language and country: The language field and the source.location.country_code field use standard ISO codes (ISO 639-1 for languages and ISO 3166-1 alpha-2 for countries).

  5. Sentiment: The score value ranges from -1 to 1, where negative values correspond to negative sentiment, and positive values to positive sentiment.

  6. Translations: translations.en.title and translations.en.description contain English translations. The original fields stay unchanged, and the article body is not translated. Every response includes the block without an extra parameter. For English articles, its fields are null. Translated fields are full on every plan, including Free; only body and body_html are shortened on Free.

  7. Entity metadata: metadata contains extra details about the entity. Available fields depend on its type, such as location, organization or brand.