---
url: 'https://docs.apitube.io/platform/news-api/everything.md'
description: >-
  Search the APITube news archive with GET or POST /v1/news/everything. Find
  endpoint details, request examples, response format, limits and errors.
---

# 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](/platform/news-api/authentication).

## Parameters

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

See [Filters](/platform/news-api/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](/platform/news-api/response-structure) describes the response envelope, article fields, facets, highlighting and export links.

## Request examples

### GET with query filters

::: code-group

```bash [cURL]
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 [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 [Node.js]
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 [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 [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](/platform/news-api/rate-limits).
* **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`](/platform/news-api/ai/natural-language-search) 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](/platform/news-api/http-response-codes). The ones you are most likely to hit here:

| Code | Status | Meaning |
|------|--------|---------|
| `ER0110` | 400 | Title search requested over a window wider than 31 days |
| `ER0171` | 400 | `per_page` above the plan ceiling |
| `ER0173` | 400 | Page 6 or beyond on the Free plan |
| `ER0179` | 400 | The same parameter passed twice |
| `ER0175` | 401 | API key is missing or invalid |
| `ER0176` | 402 | No points left on the account |
| `ER0203` | 429 | Rate limit exceeded |
| `ER0706` | 403 | `prompt` used on a plan below Basic |
| `ER0701`–`ER0712` | 400 | Boolean `query` failed to parse |

## Related

* [Count articles](/platform/news-api/count) — the same filters, returning only the total.
* [Top headlines](/platform/news-api/top-headlines) — the same filters, narrowed to current headlines.
* [Parameters reference](/platform/news-api/filters#parameters) — syntax, edge cases and workflow examples for every filter family.
