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 — not the general filter set:
Prompt
Plain-language description of what you want; translated into the filters below.
| Parameter | Type | Required | Description |
|---|---|---|---|
prompt | string | No | Plain-language description of the news you want. Only PARTIALLY applied here: this endpoint understands published_at.start, published_at.end, sort.order and per_page, so anything else the prompt produced is reported in meta.prompt.ignored with reason unsupported_on_endpoint. The 2-point translation fee still applies on a cache miss. Available on Basic and above — Free and Starter get 403 ER0706. Range: 3–500 characters. |
Request for Articles Described in Plain Language
This request asks for recent English-language coverage of Tesla and Elon Musk without naming a single filter.
curl "https://api.apitube.io/v1/news/raw?prompt=Tesla%20and%20Elon%20Musk%20news%20in%20English%20for%20the%20last%2010%20days&api_key=YOUR_API_KEY"import requests
response = requests.get(
"https://api.apitube.io/v1/news/raw",
params={
"prompt": "Tesla%20and%20Elon%20Musk%20news%20in%20English%20for%20the%20last%2010%20days",
"api_key": "YOUR_API_KEY",
},
)
print(response.json())const params = new URLSearchParams({ "prompt": "Tesla%20and%20Elon%20Musk%20news%20in%20English%20for%20the%20last%2010%20days", "api_key": "YOUR_API_KEY" });
const response = await fetch(`https://api.apitube.io/v1/news/raw?${params}`);
const data = await response.json();
console.log(data);$query = http_build_query(["prompt" => "Tesla%20and%20Elon%20Musk%20news%20in%20English%20for%20the%20last%2010%20days", "api_key" => "YOUR_API_KEY"]);
$response = file_get_contents("https://api.apitube.io/v1/news/raw?$query");
$data = json_decode($response, true);
print_r($data);package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
u, _ := url.Parse("https://api.apitube.io/v1/news/raw")
q := u.Query()
q.Set("prompt", "Tesla%20and%20Elon%20Musk%20news%20in%20English%20for%20the%20last%2010%20days")
q.Set("api_key", "YOUR_API_KEY")
u.RawQuery = q.Encode()
resp, _ := http.Get(u.String())
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var data map[string]any
json.Unmarshal(body, &data)
fmt.Println(data)
}import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.apitube.io/v1/news/raw?prompt=Tesla%20and%20Elon%20Musk%20news%20in%20English%20for%20the%20last%2010%20days&api_key=YOUR_API_KEY"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}Write a script in your preferred language that calls the APITube News API:
GET https://api.apitube.io/v1/news/raw?prompt=Tesla%20and%20Elon%20Musk%20news%20in%20English%20for%20the%20last%2010%20days
Read the API key from an environment variable (do not hardcode it), handle request
errors, and print the key fields of each result.
Docs: https://docs.apitube.io/platform/news-api/rawDate and time
| Parameter | Type | Required | Description |
|---|---|---|---|
published_at | string | No | Single day filter (creates a 24h range). ISO 8601 / YYYY-MM-DD / relative. Example: 2026-05-27. |
published_at.end | string | No | End of the publication date range. Example: 2026-05-27. |
published_at.start | string | No | Start of the publication date range. Example: 2026-05-26. |
Request to get news articles within a specific date range
curl "https://api.apitube.io/v1/news/raw?published_at.start=2022-01-01&published_at.end=2022-01-31&api_key=YOUR_API_KEY"import requests
response = requests.get(
"https://api.apitube.io/v1/news/raw",
params={
"published_at.start": "2022-01-01",
"published_at.end": "2022-01-31",
"api_key": "YOUR_API_KEY",
},
)
print(response.json())const params = new URLSearchParams({ "published_at.start": "2022-01-01", "published_at.end": "2022-01-31", "api_key": "YOUR_API_KEY" });
const response = await fetch(`https://api.apitube.io/v1/news/raw?${params}`);
const data = await response.json();
console.log(data);$query = http_build_query(["published_at.start" => "2022-01-01", "published_at.end" => "2022-01-31", "api_key" => "YOUR_API_KEY"]);
$response = file_get_contents("https://api.apitube.io/v1/news/raw?$query");
$data = json_decode($response, true);
print_r($data);package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
u, _ := url.Parse("https://api.apitube.io/v1/news/raw")
q := u.Query()
q.Set("published_at.start", "2022-01-01")
q.Set("published_at.end", "2022-01-31")
q.Set("api_key", "YOUR_API_KEY")
u.RawQuery = q.Encode()
resp, _ := http.Get(u.String())
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var data map[string]any
json.Unmarshal(body, &data)
fmt.Println(data)
}import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.apitube.io/v1/news/raw?published_at.start=2022-01-01&published_at.end=2022-01-31&api_key=YOUR_API_KEY"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}Write a script in your preferred language that calls the APITube News API:
GET https://api.apitube.io/v1/news/raw?published_at.start=2022-01-01&published_at.end=2022-01-31
Read the API key from an environment variable (do not hardcode it), handle request
errors, and print the key fields of each result.
Docs: https://docs.apitube.io/platform/news-api/rawRequest to get news using a relative time range
curl "https://api.apitube.io/v1/news/raw?published_at.start=NOW-7DAYS&published_at.end=NOW&api_key=YOUR_API_KEY"import requests
response = requests.get(
"https://api.apitube.io/v1/news/raw",
params={
"published_at.start": "NOW-7DAYS",
"published_at.end": "NOW",
"api_key": "YOUR_API_KEY",
},
)
print(response.json())const params = new URLSearchParams({ "published_at.start": "NOW-7DAYS", "published_at.end": "NOW", "api_key": "YOUR_API_KEY" });
const response = await fetch(`https://api.apitube.io/v1/news/raw?${params}`);
const data = await response.json();
console.log(data);$query = http_build_query(["published_at.start" => "NOW-7DAYS", "published_at.end" => "NOW", "api_key" => "YOUR_API_KEY"]);
$response = file_get_contents("https://api.apitube.io/v1/news/raw?$query");
$data = json_decode($response, true);
print_r($data);package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
u, _ := url.Parse("https://api.apitube.io/v1/news/raw")
q := u.Query()
q.Set("published_at.start", "NOW-7DAYS")
q.Set("published_at.end", "NOW")
q.Set("api_key", "YOUR_API_KEY")
u.RawQuery = q.Encode()
resp, _ := http.Get(u.String())
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var data map[string]any
json.Unmarshal(body, &data)
fmt.Println(data)
}import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.apitube.io/v1/news/raw?published_at.start=NOW-7DAYS&published_at.end=NOW&api_key=YOUR_API_KEY"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}Write a script in your preferred language that calls the APITube News API:
GET https://api.apitube.io/v1/news/raw?published_at.start=NOW-7DAYS&published_at.end=NOW
Read the API key from an environment variable (do not hardcode it), handle request
errors, and print the key fields of each result.
Docs: https://docs.apitube.io/platform/news-api/rawSource
| Parameter | Type | Required | Description |
|---|---|---|---|
ignore.source.id | string | No | Comma-separated source IDs to exclude (max 3). Example: 789. |
source.id | string | No | Comma-separated source (sitemap) IDs (max 3). Example: 123. |
Sorting
| Parameter | Type | Required | Description |
|---|---|---|---|
sort.by | string | No | Sort field (default id). One of: id, published_at, created_at. Example: id. |
sort.order | string | No | Sort direction (default desc). One of: asc, desc. Example: desc. |
Request to get news articles sorted by the published date in ascending order
curl "https://api.apitube.io/v1/news/raw?sort.by=published_at&sort.order=asc&api_key=YOUR_API_KEY"import requests
response = requests.get(
"https://api.apitube.io/v1/news/raw",
params={
"sort.by": "published_at",
"sort.order": "asc",
"api_key": "YOUR_API_KEY",
},
)
print(response.json())const params = new URLSearchParams({ "sort.by": "published_at", "sort.order": "asc", "api_key": "YOUR_API_KEY" });
const response = await fetch(`https://api.apitube.io/v1/news/raw?${params}`);
const data = await response.json();
console.log(data);$query = http_build_query(["sort.by" => "published_at", "sort.order" => "asc", "api_key" => "YOUR_API_KEY"]);
$response = file_get_contents("https://api.apitube.io/v1/news/raw?$query");
$data = json_decode($response, true);
print_r($data);package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
u, _ := url.Parse("https://api.apitube.io/v1/news/raw")
q := u.Query()
q.Set("sort.by", "published_at")
q.Set("sort.order", "asc")
q.Set("api_key", "YOUR_API_KEY")
u.RawQuery = q.Encode()
resp, _ := http.Get(u.String())
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var data map[string]any
json.Unmarshal(body, &data)
fmt.Println(data)
}import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.apitube.io/v1/news/raw?sort.by=published_at&sort.order=asc&api_key=YOUR_API_KEY"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}Write a script in your preferred language that calls the APITube News API:
GET https://api.apitube.io/v1/news/raw?sort.by=published_at&sort.order=asc
Read the API key from an environment variable (do not hardcode it), handle request
errors, and print the key fields of each result.
Docs: https://docs.apitube.io/platform/news-api/rawRequest to get news articles sorted by the overall sentiment magnitude in descending order
curl "https://api.apitube.io/v1/news/raw?sort.by=sentiment.overall.score&sort.order=desc&api_key=YOUR_API_KEY"import requests
response = requests.get(
"https://api.apitube.io/v1/news/raw",
params={
"sort.by": "sentiment.overall.score",
"sort.order": "desc",
"api_key": "YOUR_API_KEY",
},
)
print(response.json())const params = new URLSearchParams({ "sort.by": "sentiment.overall.score", "sort.order": "desc", "api_key": "YOUR_API_KEY" });
const response = await fetch(`https://api.apitube.io/v1/news/raw?${params}`);
const data = await response.json();
console.log(data);$query = http_build_query(["sort.by" => "sentiment.overall.score", "sort.order" => "desc", "api_key" => "YOUR_API_KEY"]);
$response = file_get_contents("https://api.apitube.io/v1/news/raw?$query");
$data = json_decode($response, true);
print_r($data);package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
u, _ := url.Parse("https://api.apitube.io/v1/news/raw")
q := u.Query()
q.Set("sort.by", "sentiment.overall.score")
q.Set("sort.order", "desc")
q.Set("api_key", "YOUR_API_KEY")
u.RawQuery = q.Encode()
resp, _ := http.Get(u.String())
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var data map[string]any
json.Unmarshal(body, &data)
fmt.Println(data)
}import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.apitube.io/v1/news/raw?sort.by=sentiment.overall.score&sort.order=desc&api_key=YOUR_API_KEY"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}Write a script in your preferred language that calls the APITube News API:
GET https://api.apitube.io/v1/news/raw?sort.by=sentiment.overall.score&sort.order=desc
Read the API key from an environment variable (do not hardcode it), handle request
errors, and print the key fields of each result.
Docs: https://docs.apitube.io/platform/news-api/rawRequest to get the most viral/engaging articles
curl "https://api.apitube.io/v1/news/raw?sort.by=engagement&sort.order=desc&api_key=YOUR_API_KEY"import requests
response = requests.get(
"https://api.apitube.io/v1/news/raw",
params={
"sort.by": "engagement",
"sort.order": "desc",
"api_key": "YOUR_API_KEY",
},
)
print(response.json())const params = new URLSearchParams({ "sort.by": "engagement", "sort.order": "desc", "api_key": "YOUR_API_KEY" });
const response = await fetch(`https://api.apitube.io/v1/news/raw?${params}`);
const data = await response.json();
console.log(data);$query = http_build_query(["sort.by" => "engagement", "sort.order" => "desc", "api_key" => "YOUR_API_KEY"]);
$response = file_get_contents("https://api.apitube.io/v1/news/raw?$query");
$data = json_decode($response, true);
print_r($data);package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
u, _ := url.Parse("https://api.apitube.io/v1/news/raw")
q := u.Query()
q.Set("sort.by", "engagement")
q.Set("sort.order", "desc")
q.Set("api_key", "YOUR_API_KEY")
u.RawQuery = q.Encode()
resp, _ := http.Get(u.String())
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var data map[string]any
json.Unmarshal(body, &data)
fmt.Println(data)
}import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.apitube.io/v1/news/raw?sort.by=engagement&sort.order=desc&api_key=YOUR_API_KEY"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}Write a script in your preferred language that calls the APITube News API:
GET https://api.apitube.io/v1/news/raw?sort.by=engagement&sort.order=desc
Read the API key from an environment variable (do not hardcode it), handle request
errors, and print the key fields of each result.
Docs: https://docs.apitube.io/platform/news-api/rawRequest to get the most media-rich articles
curl "https://api.apitube.io/v1/news/raw?sort.by=media_richness&sort.order=desc&api_key=YOUR_API_KEY"import requests
response = requests.get(
"https://api.apitube.io/v1/news/raw",
params={
"sort.by": "media_richness",
"sort.order": "desc",
"api_key": "YOUR_API_KEY",
},
)
print(response.json())const params = new URLSearchParams({ "sort.by": "media_richness", "sort.order": "desc", "api_key": "YOUR_API_KEY" });
const response = await fetch(`https://api.apitube.io/v1/news/raw?${params}`);
const data = await response.json();
console.log(data);$query = http_build_query(["sort.by" => "media_richness", "sort.order" => "desc", "api_key" => "YOUR_API_KEY"]);
$response = file_get_contents("https://api.apitube.io/v1/news/raw?$query");
$data = json_decode($response, true);
print_r($data);package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
u, _ := url.Parse("https://api.apitube.io/v1/news/raw")
q := u.Query()
q.Set("sort.by", "media_richness")
q.Set("sort.order", "desc")
q.Set("api_key", "YOUR_API_KEY")
u.RawQuery = q.Encode()
resp, _ := http.Get(u.String())
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var data map[string]any
json.Unmarshal(body, &data)
fmt.Println(data)
}import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.apitube.io/v1/news/raw?sort.by=media_richness&sort.order=desc&api_key=YOUR_API_KEY"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}Write a script in your preferred language that calls the APITube News API:
GET https://api.apitube.io/v1/news/raw?sort.by=media_richness&sort.order=desc
Read the API key from an environment variable (do not hardcode it), handle request
errors, and print the key fields of each result.
Docs: https://docs.apitube.io/platform/news-api/rawMost Trustworthy News Sources
curl "https://api.apitube.io/v1/news/raw?sort.by=trust&sort.order=desc&published_at.start=2024-01-01&api_key=YOUR_API_KEY"import requests
response = requests.get(
"https://api.apitube.io/v1/news/raw",
params={
"sort.by": "trust",
"sort.order": "desc",
"published_at.start": "2024-01-01",
"api_key": "YOUR_API_KEY",
},
)
print(response.json())const params = new URLSearchParams({ "sort.by": "trust", "sort.order": "desc", "published_at.start": "2024-01-01", "api_key": "YOUR_API_KEY" });
const response = await fetch(`https://api.apitube.io/v1/news/raw?${params}`);
const data = await response.json();
console.log(data);$query = http_build_query(["sort.by" => "trust", "sort.order" => "desc", "published_at.start" => "2024-01-01", "api_key" => "YOUR_API_KEY"]);
$response = file_get_contents("https://api.apitube.io/v1/news/raw?$query");
$data = json_decode($response, true);
print_r($data);package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
u, _ := url.Parse("https://api.apitube.io/v1/news/raw")
q := u.Query()
q.Set("sort.by", "trust")
q.Set("sort.order", "desc")
q.Set("published_at.start", "2024-01-01")
q.Set("api_key", "YOUR_API_KEY")
u.RawQuery = q.Encode()
resp, _ := http.Get(u.String())
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var data map[string]any
json.Unmarshal(body, &data)
fmt.Println(data)
}import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.apitube.io/v1/news/raw?sort.by=trust&sort.order=desc&published_at.start=2024-01-01&api_key=YOUR_API_KEY"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}Write a script in your preferred language that calls the APITube News API:
GET https://api.apitube.io/v1/news/raw?sort.by=trust&sort.order=desc&published_at.start=2024-01-01
Read the API key from an environment variable (do not hardcode it), handle request
errors, and print the key fields of each result.
Docs: https://docs.apitube.io/platform/news-api/rawPagination
| Parameter | Type | Required | Description |
|---|---|---|---|
page | integer | No | Page number (default 1). Example: 1. |
per_page | integer | No | Results per page (default 100, max 250; the Free plan is capped at 10 and Starter at 50). Example: 100. |
Request to get news articles with pagination
curl "https://api.apitube.io/v1/news/raw?per_page=10&page=1&api_key=YOUR_API_KEY"import requests
response = requests.get(
"https://api.apitube.io/v1/news/raw",
params={
"per_page": "10",
"page": "1",
"api_key": "YOUR_API_KEY",
},
)
print(response.json())const params = new URLSearchParams({ "per_page": "10", "page": "1", "api_key": "YOUR_API_KEY" });
const response = await fetch(`https://api.apitube.io/v1/news/raw?${params}`);
const data = await response.json();
console.log(data);$query = http_build_query(["per_page" => "10", "page" => "1", "api_key" => "YOUR_API_KEY"]);
$response = file_get_contents("https://api.apitube.io/v1/news/raw?$query");
$data = json_decode($response, true);
print_r($data);package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
u, _ := url.Parse("https://api.apitube.io/v1/news/raw")
q := u.Query()
q.Set("per_page", "10")
q.Set("page", "1")
q.Set("api_key", "YOUR_API_KEY")
u.RawQuery = q.Encode()
resp, _ := http.Get(u.String())
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var data map[string]any
json.Unmarshal(body, &data)
fmt.Println(data)
}import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.apitube.io/v1/news/raw?per_page=10&page=1&api_key=YOUR_API_KEY"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}Write a script in your preferred language that calls the APITube News API:
GET https://api.apitube.io/v1/news/raw?per_page=10&page=1
Read the API key from an environment variable (do not hardcode it), handle request
errors, and print the key fields of each result.
Docs: https://docs.apitube.io/platform/news-api/raw
promptis only partially applied. This endpoint acceptsprompton Basic and above (Free and Starter get403 ER0706), but it can only usepublished_at.start,published_at.end,sort.orderandper_pageout of it. Anything else the prompt produced — entities, categories, a headline search — is reported inmeta.prompt.ignoredwithreason: unsupported_on_endpointrather than silently pretending to filter. The 2-point translation fee still applies on a cache miss, so on this endpoint a hand-written date range is usually the better deal.
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"import requests
resp = requests.get(
"https://api.apitube.io/v1/news/raw",
params={"source.id": 1024, "per_page": 5, "api_key": "YOUR_API_KEY"},
)
print(resp.json())const params = new URLSearchParams({ "source.id": "1024", per_page: "5", api_key: "YOUR_API_KEY" });
const resp = await fetch(`https://api.apitube.io/v1/news/raw?${params}`);
console.log(await resp.json());$query = http_build_query(["source.id" => 1024, "per_page" => 5, "api_key" => "YOUR_API_KEY"]);
$data = json_decode(file_get_contents("https://api.apitube.io/v1/news/raw?$query"), true);
print_r($data);package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
u, _ := url.Parse("https://api.apitube.io/v1/news/raw")
q := u.Query()
q.Set("source.id", "1024")
q.Set("per_page", "5")
q.Set("api_key", "YOUR_API_KEY")
u.RawQuery = q.Encode()
resp, _ := http.Get(u.String())
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var data map[string]any
json.Unmarshal(body, &data)
fmt.Println(data)
}import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.apitube.io/v1/news/raw?source.id=1024&per_page=5&api_key=YOUR_API_KEY"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}Write a script in your preferred language that calls the APITube News API:
GET https://api.apitube.io/v1/news/raw?source.id=1024&per_page=5
Read the API key from an environment variable (do not hardcode it), handle request
errors, and print the key fields of each result.
Docs: https://docs.apitube.io/platform/news-api/everythingPOST 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
}'import requests
resp = requests.post(
"https://api.apitube.io/v1/news/raw",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"published_at.start": "2026-05-26",
"published_at.end": "2026-05-27",
"sort.by": "published_at",
"sort.order": "desc",
"per_page": 5,
},
)
print(resp.json())const resp = await fetch("https://api.apitube.io/v1/news/raw", {
method: "POST",
headers: { "X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json" },
body: JSON.stringify({
"published_at.start": "2026-05-26",
"published_at.end": "2026-05-27",
"sort.by": "published_at",
"sort.order": "desc",
per_page: 5,
}),
});
console.log(await resp.json());$ch = curl_init("https://api.apitube.io/v1/news/raw");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ["X-API-Key: YOUR_API_KEY", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => json_encode([
"published_at.start" => "2026-05-26",
"published_at.end" => "2026-05-27",
"sort.by" => "published_at",
"sort.order" => "desc",
"per_page" => 5,
]),
]);
$data = json_decode(curl_exec($ch), true);
print_r($data);package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
)
func main() {
payload, _ := json.Marshal(map[string]any{
"published_at.start": "2026-05-26",
"published_at.end": "2026-05-27",
"sort.by": "published_at",
"sort.order": "desc",
"per_page": 5,
})
req, _ := http.NewRequest("POST", "https://api.apitube.io/v1/news/raw", bytes.NewBuffer(payload))
req.Header.Set("X-API-Key", "YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var data map[string]any
json.Unmarshal(body, &data)
fmt.Println(data)
}import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
String payload = "{\"published_at.start\": \"2026-05-26\", \"published_at.end\": \"2026-05-27\", \"sort.by\": \"published_at\", \"sort.order\": \"desc\", \"per_page\": 5}";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.apitube.io/v1/news/raw"))
.header("X-API-Key", "YOUR_API_KEY")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(payload))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}Write a script in your preferred language that calls the APITube News API:
POST https://api.apitube.io/v1/news/raw
Body (JSON):
{
"published_at.start": "2026-05-26",
"published_at.end": "2026-05-27",
"sort.by": "published_at",
"sort.order": "desc",
"per_page": 5
}
Read the API key from an environment variable (do not hardcode it), handle request
errors, and print the key fields of each result.
Docs: https://docs.apitube.io/platform/news-api/everythingUsing 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. |