Skip to content

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/raw

Both 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:

ParameterTypeRequiredDescription
pageintegerNoPage number for pagination (default: 1).
per_pageintegerNoNumber of results per page (default: 100, max: 250).
source.idstringNoFilter by source (sitemap) id. Up to 3 ids, comma-separated.
ignore.source.idstringNoExclude these source ids. Up to 3 ids, comma-separated.
published_atstringNoSingle-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.startstringNoStart of the publication date range (inclusive).
published_at.endstringNoEnd of the publication date range (inclusive).
sort.bystringNoSort field: id (default), published_at, or created_at.
sort.orderstringNoSort direction: desc (default) or asc.
api_keystringYes*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/everything for enriched search.

Each request costs 1 point (charged only when the response contains at least one article).

Response Format

json
{
  "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

FieldTypeDescription
statusstringAlways ok on success.
limitintegerNumber of results per page.
pageintegerCurrent page number.
has_next_pagesbooleanWhether more pages exist.
next_pagestringURL for the next page (empty if none).
has_previous_pagebooleanWhether a previous page exists.
previous_pagestringURL for the previous page (empty if none).
request_idstringUnique identifier for the request.
resultsarrayArray of raw article objects (see below).

Each item in results:

FieldTypeDescription
idintegerRaw article id.
titlestring | nullArticle title.
hrefstring | nullArticle URL.
created_atstring | nullPublication date (may be null).
descriptionstring | nullShort description.
bodystringArticle body with HTML stripped (plain text).
body_htmlstringArticle body as received from the feed (HTML preserved).
authorstring | nullAuthor.
keywordsarray | nullRaw categories/keywords.
sourceobjectPublisher details, resolved from the source (sitemap).
source.idinteger | nullSource (sitemap) id.
source.domainstringSource domain.
source.home_page_urlstringSource home page URL.
source.typestringSource resource type.
source.biasstringPolitical bias (left / center / right).
source.rankings.oprnumber | nullOpen PageRank score.
source.location.country_namestringSource country name.
source.location.country_codestringSource country ISO code.
source.faviconstringFavicon 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

shell
curl "https://api.apitube.io/v1/news/raw?source.id=1024&per_page=5&api_key=YOUR_API_KEY"

POST with JSON body

shell
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

shell
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://api.apitube.io/v1/news/raw?source.id=1024"

Response Example

json
{
  "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

json
{
  "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

json
{
  "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

json
{
  "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:

CodeParameterCondition
ER0050 / ER0051 / ER0052source.idNot an integer / negative / wrong length (1–20 chars).
ER0053 / ER0054 / ER0055ignore.source.idNot an integer / negative / wrong length (1–20 chars).
ER0104 / ER0105published_at.startInvalid value / wrong length (1–30 chars).
ER0106 / ER0107published_at.endInvalid value / wrong length (1–30 chars).
ER0108 / ER0109published_atWrong length (1–30 chars) / invalid value.
ER0170 / ER0171per_pageNot an integer / greater than 250.
ER0172pageNot an integer.