Currents News API Documentation
Search Endpoint
The Search Endpoint lets you query 26M+ articles from a broad global source catalog. This endpoint is designed for deep discovery, content analysis, and precise retrieval of historical or real-time news based on keywords or structured filters.
Planning a search-led product?
Use the Search News API overview when you are comparing keyword discovery, date-range search, history windows, and plan fit before wiring the endpoint into an app.
Endpoint
V1 (Stable):
https://api.currentsapi.services/v1/search
V2 (Canonical Taxonomy & Keyset Pagination):
https://api.currentsapi.services/v2/search
cursor is rejected on /v1/search and supported on /v2/search.
/v2/available/categories on /v2/search. On /v1/search use legacy v1 categories (for example, technology or science instead of science_technology). Passing a v2-only category to v1 returns 400 Invalid parameters.
Query Parameters
keywords / query
Search for articles containing specific terms.
- keywords: Standard term search (for example,
technology). - query: Boolean syntax with
AND,OR,NOT, quotes, and parentheses. - Precedence: If both are provided,
keywordstakes priority overquery.
Non-ASCII query values must be URL-encoded in GET URLs. Most HTTP clients handle this automatically when you pass values through a params or query object.
Filtering
Filter by language code (default: en).
Filter by 2-letter country code.
Filter by one or more canonical V2 categories.
1 (news), 2 (articles), 3 (discussion).
Time Window
Search after this date (RFC 3339 / ISO-8601 parseable value).
Search before this date (RFC 3339 / ISO-8601 parseable value).
Domain Control
Restrict search to one domain (for example, reuters.com).
Exclude specific domains from results.
Case-insensitive exact author filter (validated in API test coverage).
Pagination
The page index (starts at 1, max 180).
Results per page (1 to 300, default 30; account-tier caps still apply).
(V2 Only) Keyset token for deep pagination without offsets.
Offset guardrail: requests where (page_number - 1) * page_size > 5000 are rejected.
Example Calls
Programming-language tabs for the same search request:
Request
curl -H "Authorization: Bearer YOUR_API_KEY" "https://api.currentsapi.services/v1/search?keywords=technology&language=en&page_number=1&page_size=5"
Request
fetch("https://api.currentsapi.services/v1/search?keywords=technology&language=en&page_number=1&page_size=5", {
headers: { Authorization: "Bearer YOUR_API_KEY" }
})
.then((res) => res.json())
.then((data) => console.log(data));
Request
import requests
res = requests.get(
"https://api.currentsapi.services/v1/search",
params={
"keywords": "technology",
"language": "en",
"page_number": 1,
"page_size": 5,
},
headers={"Authorization": "Bearer YOUR_API_KEY"},
)
print(res.json())
Request
library(httr)
res <- GET(
"https://api.currentsapi.services/v1/search",
query = list(
keywords = "technology",
language = "en",
page_number = 1,
page_size = 5
),
add_headers(Authorization = "Bearer YOUR_API_KEY")
)
content(res, "parsed")
Boolean query example (matches test coverage):
curl -H "Authorization: Bearer YOUR_API_KEY" "https://api.currentsapi.services/v1/search?query=(%22AI%22%20OR%20%22Machine%20Learning%22)%20AND%20NOT%20%22Ethics%22&language=en"
Non-ASCII keyword example:
curl -H "Authorization: Bearer YOUR_API_KEY" "https://api.currentsapi.services/v1/search?keywords=Beyonc%C3%A9&language=en"
V2 search with canonical category:
curl -H "Authorization: Bearer YOUR_API_KEY" "https://api.currentsapi.services/v2/search?keywords=Redwood%20Materials&language=en&country=US&category=science_technology"
V1 search with legacy category:
curl -H "Authorization: Bearer YOUR_API_KEY" "https://api.currentsapi.services/v1/search?keywords=Redwood%20Materials&language=en&country=US&category=technology"
V2 cursor pagination flow:
curl -H "Authorization: Bearer YOUR_API_KEY" "https://api.currentsapi.services/v2/search?keywords=technology&language=en&page_size=5"curl -H "Authorization: Bearer YOUR_API_KEY" "https://api.currentsapi.services/v2/search?keywords=technology&language=en&page_size=5&cursor=<cursor-from-previous-response>"
Copy the
next_cursor value from the previous response and replace <cursor-from-previous-response>.
Response Object
- status:
okorerror. - page: Current page index.
- next_cursor: (V2 Only) Token to fetch the next contiguous page, or
nullwhen exhausted. -
news: List of articles with attributes:
id,title,description,url,author,image,language,category,published.
Full Response Example (V2)
{
"status": "ok",
"news": [
{
"id": "61f50bbd-20ad-47a3-9d77-9f8e0a08f0ad",
"title": "AI chip demand lifts quarterly guidance",
"description": "Vendors reported stronger-than-expected demand...",
"url": "https://example.com/markets/ai-chip-demand",
"author": "Market Desk",
"image": "https://example.com/images/ai-chip.jpg",
"language": "en",
"category": ["economy_business_finance", "science_technology"],
"published": "2026-03-24 12:05:00 +0000"
}
],
"page": 1,
"next_cursor": "eyJwIjoiMjAyNi0wMy0yNFQxMjowNTowMCswMDowMCIsImlkIjoiNjFmNTBiYmQtMjBhZC00N2EzLTlkNzctOWY4ZTBhMDhmMGFkIn0"
}