Raw Articles
The /v1/news/raw endpoint returns articles as they are discovered, before HTML parsing and NLP enrichment. Use it when you want the earliest possible access to incoming articles, or when you plan to run your own parsing and analysis.
Because this is the discovery stage, enrichment fields are not available: there is no language detection, no categories, topics, entities, industries, or sentiment. Each article carries only what the source feed provided (title, link, raw body, author, categories) plus resolved source (publisher) details.
To use the API, you'll require an API key. You can obtain an API key by signing up for an account on the APITube website.
Only the last ~24 hours are available
This is a fast-churning staging feed. Rows are continuously consumed by the pipeline and expire within ~1 day, so only articles discovered in roughly the last 24 hours are retrievable here. For the full historical archive use /v1/news/everything.
Endpoint
GET /v1/news/raw
POST /v1/news/rawBoth methods are equivalent: filters can be passed as query parameters (GET) or as a JSON body (POST).
Query Parameters
This endpoint supports a small, fixed set of parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
page | integer | No | Page number for pagination (default: 1). |
per_page | integer | No | Number of results per page (default: 100, max: 250). |
source.id | string | No | Filter by source (sitemap) id. Up to 3 ids, comma-separated. |
ignore.source.id | string | No | Exclude these source ids. Up to 3 ids, comma-separated. |
published_at | string | No | Single-day filter — expands to a 24-hour range starting at the given moment. ISO 8601, YYYY-MM-DD, or relative date (e.g. now). |
published_at.start | string | No | Start of the publication date range (inclusive). |
published_at.end | string | No | End of the publication date range (inclusive). |
sort.by | string | No | Sort field: id (default), published_at, or created_at. |
sort.order | string | No | Sort direction: desc (default) or asc. |
api_key | string | Yes* | Your API key. Can also be provided via headers. |
* Required if not provided in headers
No enrichment filters. Filters that rely on enriched data —
title,language.code,category.*,topic.*,entity.*,industry.*,sentiment.*, media filters, and similar — are not supported here, because that data does not exist yet at the discovery stage. Use/v1/news/everythingfor enriched search.
Each request costs 1 point (charged only when the response contains at least one article).
Response Format
{
"status": "ok",
"limit": 100,
"path": "https://api.apitube.io/v1/news/raw?page=1&per_page=100",
"page": 1,
"has_next_pages": true,
"next_page": "https://api.apitube.io/v1/news/raw?page=2&per_page=100",
"has_previous_page": false,
"previous_page": "",
"request_id": "string",
"results": [
{
"id": 0,
"title": "string",
"href": "string",
"created_at": "string",
"description": "string",
"body": "string",
"body_html": "string",
"author": "string",
"keywords": ["string"],
"source": {
"id": 0,
"domain": "string",
"home_page_url": "string",
"type": "string",
"bias": "string",
"rankings": { "opr": 0 },
"location": { "country_name": "string", "country_code": "string" },
"favicon": "string"
}
}
]
}Unlike /v1/news/everything, the raw response has no export block — bulk export formats are not available for this endpoint.
Response Fields
| Field | Type | Description |
|---|---|---|
status | string | Always ok on success. |
limit | integer | Number of results per page. |
page | integer | Current page number. |
has_next_pages | boolean | Whether more pages exist. |
next_page | string | URL for the next page (empty if none). |
has_previous_page | boolean | Whether a previous page exists. |
previous_page | string | URL for the previous page (empty if none). |
request_id | string | Unique identifier for the request. |
results | array | Array of raw article objects (see below). |
Each item in results:
| Field | Type | Description |
|---|---|---|
id | integer | Raw article id. |
title | string | null | Article title. |
href | string | null | Article URL. |
created_at | string | null | Publication date (may be null). |
description | string | null | Short description. |
body | string | Article body with HTML stripped (plain text). |
body_html | string | Article body as received from the feed (HTML preserved). |
author | string | null | Author. |
keywords | array | null | Raw categories/keywords. |
source | object | Publisher details, resolved from the source (sitemap). |
source.id | integer | null | Source (sitemap) id. |
source.domain | string | Source domain. |
source.home_page_url | string | Source home page URL. |
source.type | string | Source resource type. |
source.bias | string | Political bias (left / center / right). |
source.rankings.opr | number | null | Open PageRank score. |
source.location.country_name | string | Source country name. |
source.location.country_code | string | Source country ISO code. |
source.favicon | string | Favicon URL. |
The body / body_html pair mirrors /v1/news/everything: body is the plain-text version (HTML removed and whitespace collapsed), while body_html keeps the original HTML markup.
Request Examples
GET with query filters
curl "https://api.apitube.io/v1/news/raw?source.id=1024&per_page=5&api_key=YOUR_API_KEY"POST with JSON body
curl -X POST "https://api.apitube.io/v1/news/raw" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"published_at.start": "2026-05-26",
"published_at.end": "2026-05-27",
"sort.by": "published_at",
"sort.order": "desc",
"per_page": 5
}'Using Bearer token
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.apitube.io/v1/news/raw?source.id=1024"Response Example
{
"status": "ok",
"limit": 2,
"path": "https://api.apitube.io/v1/news/raw?per_page=2",
"page": 1,
"has_next_pages": true,
"next_page": "https://api.apitube.io/v1/news/raw?page=2&per_page=2",
"has_previous_page": false,
"previous_page": "",
"request_id": "req_def456ghi789",
"results": [
{
"id": 84512377,
"title": "AI advances reshape the chip industry in 2026",
"href": "https://example.com/ai-advances-2026",
"created_at": "2026-05-27 08:00:00",
"description": "A look at how new accelerators are changing the market.",
"body": "The field of artificial intelligence continues to move quickly...",
"body_html": "<p>The field of artificial intelligence continues to move quickly...</p>",
"author": "Jane Doe",
"keywords": ["technology", "ai", "semiconductors"],
"source": {
"id": 1024,
"domain": "example.com",
"home_page_url": "https://example.com",
"type": "news",
"bias": "center",
"rankings": { "opr": 6 },
"location": { "country_name": "United States", "country_code": "us" },
"favicon": "https://www.google.com/s2/favicons?domain=https://example.com"
}
},
{
"id": 84512376,
"title": "Tech company announces AI partnership",
"href": "https://news.example.org/ai-partnership",
"created_at": "2026-05-27 07:15:00",
"description": "Two firms join forces on model infrastructure.",
"body": "A major technology company announced today...",
"body_html": "<p>A major technology company announced today...</p>",
"author": null,
"keywords": ["business", "ai"],
"source": {
"id": 2048,
"domain": "news.example.org",
"home_page_url": "https://news.example.org",
"type": "news",
"bias": "left",
"rankings": { "opr": 4 },
"location": { "country_name": "United Kingdom", "country_code": "gb" },
"favicon": "https://www.google.com/s2/favicons?domain=https://news.example.org"
}
}
]
}Error Responses
Invalid or Missing API Key
{
"status": "not_ok",
"request_id": "req_abc123def456",
"errors": [
{
"status": 401,
"code": "ER0175",
"message": "API key is invalid or missing.",
"links": { "about": "https://docs.apitube.io/platform/news-api/http-response-codes" },
"timestamp": "2026-05-27T14:30:00Z"
}
]
}Status Code: 401
No Points on Account
{
"status": "not_ok",
"request_id": "req_abc123def456",
"errors": [
{
"status": 402,
"code": "ER0176",
"message": "You have no points on your account.",
"links": { "about": "https://docs.apitube.io/platform/news-api/http-response-codes" },
"timestamp": "2026-05-27T14:30:00Z"
}
]
}Status Code: 402
Rate Limit Exceeded
{
"status": "not_ok",
"request_id": "req_abc123def456",
"errors": [
{
"status": 429,
"code": "ER0203",
"message": "Rate limit exceeded.",
"links": { "about": "https://docs.apitube.io/platform/news-api/http-response-codes" },
"timestamp": "2026-05-27T14:30:00Z"
}
]
}Status Code: 429
Invalid Parameters
Invalid parameter values return HTTP 400 with a specific error code:
| Code | Parameter | Condition |
|---|---|---|
ER0050 / ER0051 / ER0052 | source.id | Not an integer / negative / wrong length (1–20 chars). |
ER0053 / ER0054 / ER0055 | ignore.source.id | Not an integer / negative / wrong length (1–20 chars). |
ER0104 / ER0105 | published_at.start | Invalid value / wrong length (1–30 chars). |
ER0106 / ER0107 | published_at.end | Invalid value / wrong length (1–30 chars). |
ER0108 / ER0109 | published_at | Wrong length (1–30 chars) / invalid value. |
ER0170 / ER0171 | per_page | Not an integer / greater than 250. |
ER0172 | page | Not an integer. |