Skip to content

Search articles with /v1/news/everything ​

Use /v1/news/everything to search the news archive. Filter by title, language, date, source, category, topic, industry, entity, sentiment, media, readability or location. You can sort results, browse pages, get counts by field, highlight matches and export data. Other article endpoints search a specific part of the same archive.

Each request costs 1 point. Using the prompt parameter adds 2 points for the translation step; prompt requires Basic or above.

Endpoint ​

GET  /v1/news/everything
POST /v1/news/everything

Base URL: https://api.apitube.io. GET and POST return the same results. With GET, put filters in the URL. With POST, send them as JSON in the request body. Use POST for long values, such as a boolean query or a list of source IDs, to avoid URL length limits.

Authenticate with the X-API-Key header, an Authorization: Bearer header, or the api_key query parameter — see Authentication.

Parameters ​

All query and body parameters are optional. Without any filters the endpoint returns the most recent articles across all sources.

See Filters for the complete parameter reference: search filters, sorting, pagination, faceting, highlighting, field selection and export, with types, accepted values and examples.

Response format ​

Read articles from results and original article links from href. Use next_page and previous_page to navigate the results.

Response format describes the response envelope, article fields, facets, highlighting and export links.

Request examples ​

GET with query filters ​

bash
curl "https://api.apitube.io/v1/news/everything?title=bitcoin&language.code=en&published_at.start=NOW-7DAYS&per_page=10&api_key=YOUR_API_KEY"
python
import requests

response = requests.get(
    "https://api.apitube.io/v1/news/everything",
    params={
        "title": "bitcoin",
        "language.code": "en",
        "published_at.start": "NOW-7DAYS",
        "per_page": 10,
    },
    headers={"X-API-Key": "YOUR_API_KEY"},
)

for article in response.json()["results"]:
    print(article["published_at"], article["title"], article["href"])
javascript
const params = new URLSearchParams({
  title: 'bitcoin',
  'language.code': 'en',
  'published_at.start': 'NOW-7DAYS',
  per_page: '10'
});

const response = await fetch(`https://api.apitube.io/v1/news/everything?${params}`, {
  headers: { 'X-API-Key': 'YOUR_API_KEY' }
});
const data = await response.json();

for (const article of data.results) {
  console.log(article.published_at, article.title, article.href);
}
php
$query = http_build_query([
    'title' => 'bitcoin',
    'language.code' => 'en',
    'published_at.start' => 'NOW-7DAYS',
    'per_page' => 10,
    'api_key' => 'YOUR_API_KEY',
]);

$data = json_decode(file_get_contents("https://api.apitube.io/v1/news/everything?$query"), true);

foreach ($data['results'] as $article) {
    echo $article['published_at'], ' ', $article['title'], PHP_EOL;
}
go
package main

import (
	"encoding/json"
	"fmt"
	"net/http"
	"net/url"
)

func main() {
	u, _ := url.Parse("https://api.apitube.io/v1/news/everything")
	q := u.Query()
	q.Set("title", "bitcoin")
	q.Set("language.code", "en")
	q.Set("published_at.start", "NOW-7DAYS")
	q.Set("per_page", "10")
	u.RawQuery = q.Encode()

	req, _ := http.NewRequest("GET", u.String(), nil)
	req.Header.Set("X-API-Key", "YOUR_API_KEY")

	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()

	var data map[string]any
	json.NewDecoder(resp.Body).Decode(&data)
	fmt.Println(data["results"])
}

POST with a JSON body ​

bash
curl -X POST "https://api.apitube.io/v1/news/everything" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "bitcoin AND NOT (etf OR futures)",
    "language.code": "en",
    "published_at.start": "NOW-7DAYS",
    "sort.by": "published_at",
    "per_page": 50
  }'

Excluding values ​

21 filters have an ignore.* version for excluding values. These cover titles, languages, sources, authors, categories, topics, industries, entity IDs and names, and event types. Combine them with other filters to include and exclude values in one request:

bash
curl "https://api.apitube.io/v1/news/everything?category.id=medtop:04000000&ignore.source.domain=example.com&api_key=YOUR_API_KEY"

Limits ​

  • per_page is capped by plan (Free 10, Starter 50, Basic 200, Professional and Corporate 250) and the Free plan cannot go past page 5 — see Rate limits and quotas.
  • Limits on lists of values: most filters accept the first 3 values, including source.domain, language.code, category.id, topic.id, industry.id, entity.id, the *.name entity filters and their ignore.* versions. event.type and article.id accept 5. Extra values are ignored without an error. For example, source.domain=a.com,b.com,c.com,d.com searches only the first three domains. Send another request for the rest.
  • The prompt parameter requires Basic or above; on Free and Starter it returns 403 ER0706. Every other filter on this page works on every plan.
  • A title search (title, title_starts_with, title_ends_with, title_pattern, query) is limited to a 31-day published_at window on every plan. A wider explicit range returns 400 ER0110; no range at all searches the last 31 days and reports ER0366 in meta.warnings.

Errors ​

Errors follow the shared format and codes documented in HTTP response codes. The ones you are most likely to hit here:

CodeStatusMeaning
ER0110400Title search requested over a window wider than 31 days
ER0171400per_page above the plan ceiling
ER0173400Page 6 or beyond on the Free plan
ER0179400The same parameter passed twice
ER0175401API key is missing or invalid
ER0176402No points left on the account
ER0203429Rate limit exceeded
ER0706403prompt used on a plan below Basic
ER0701–ER0712400Boolean query failed to parse