List articles
const url = 'https://api.presscloud.ai/v1/articles?q=overname&search=keyword&search_in=title&country=NL&country=BE&language=nl&has_author=true&published_after=2026-01-01&published_before=2026-03-01&ingested_after=2026-08-20T07%3A44%3A12Z&sort=published_at&order=asc&per_page=25';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://api.presscloud.ai/v1/articles?q=overname&search=keyword&search_in=title&country=NL&country=BE&language=nl&has_author=true&published_after=2026-01-01&published_before=2026-03-01&ingested_after=2026-08-20T07%3A44%3A12Z&sort=published_at&order=asc&per_page=25' \ --header 'Authorization: Bearer <token>'Returns articles matching the filters, most recently published first. Every parameter is optional.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”The search term. Required, and at least 2 characters, when search=semantic.
Example
overnameHow q is matched.
keyword (default) matches as natural language. boolean applies an explicit grammar: every word required, "quoted phrases", and a leading - excludes. semantic matches by meaning: up to 500 of the closest matches are identified, the remaining filters are applied to those, and results are ordered by relevance with a relevance field on each article. Combining semantic search with a narrow filter may return fewer results than the equivalent keyword or boolean search.
Whether q is matched against the headline only (title, default) or the headline and article text (title_body). Applies to keyword and boolean search; combining it with search=semantic returns 422.
Country of the publishing outlet. Repeatable, and a comma-separated list is also accepted (country=NL,BE).
Example
[ "NL", "BE"]Repeatable, and a comma-separated list is also accepted.
Example
[ "nl"]Restrict to articles that carry a by-line. Accepts true, false, yes, no, 1 and 0. Omitting the parameter means either.
Example
trueMatches the outlet name or domain.
Matches the author name as the outlet published it.
Inclusive lower bound. With no value, the plan’s own history window applies.
Example
2026-01-01Inclusive upper bound, covering the whole day named. Must be on or after published_after. A value carrying its own time is honoured exactly.
Example
2026-03-01Inclusive lower bound on the time the article entered the index. Use with sort=ingested_at&order=asc to poll for new articles without missing late arrivals.
Example
2026-08-20T07:44:12ZSort field. Defaults to published_at, or relevance for semantic search. relevance is only valid with search=semantic. ingested_at excludes articles without an ingestion time.
Sort direction.
Articles per page.
The next_cursor value from a previous response. All other parameters must remain identical between pages. An invalid cursor returns 422.
Responses
Section titled “Responses”A page of articles.
object
Number of matching articles. Capped at 10,000 for keyword and boolean search; exact for semantic search.
true when total_results reached its cap. Omitted otherwise.
Cursor for the next page, or null on the final page.
An article. The full article text is not included.
object
Opaque, stable identifier. Use it to deduplicate across requests.
The first 200 characters of the body, HTML stripped, no ellipsis. Null when no body was captured.
Publication time. ISO 8601, UTC.
Time the article entered the index. ISO 8601, UTC. Typically minutes to a few hours after published_at.
Empty when the outlet published no by-line. Roughly 9% of articles carry one.
object
object
Relevance score between 0 and 1, rounded to four decimals. Included only in semantic search results, which are ordered by it. Omitted from keyword search results.
Example
{ "status": "ok", "total_results_is_estimate": true, "articles": [ { "id": "art_5c31b0", "published_at": "2026-08-20T07:42:00Z", "ingested_at": "2026-08-20T07:44:12Z", "authors": [ { "id": "aut_8f21c4", "name": "Joris de Vries" } ], "outlet": { "name": "Example Zakelijk", "domain": "example.nl" }, "language": "nl", "country": "NL", "relevance": 0.7314 } ]}Headers
Section titled “Headers”Requests per minute allowed by the plan. Present on every response.
Requests left in the current minute. Present on every response.
Requests allowed this month. Present when the plan has a quota.
Requests left this month.
Unix timestamp at which the quota resets — the start of next month.
The period the quota counters describe.
missing_token or invalid_token.
Error response. Use code for error handling; message is descriptive and may change.
object
Per-parameter validation messages. Only present on invalid_request.
object
Example
{ "status": "error", "code": "invalid_token", "message": "This API key is not valid."}A filter outside the plan: country_not_included or history_not_included.
Error response. Use code for error handling; message is descriptive and may change.
object
Per-parameter validation messages. Only present on invalid_request.
object
Example
{ "status": "error", "code": "country_not_included", "message": "This plan does not include coverage for BE."}invalid_request. Carries per-parameter messages.
Error response. Use code for error handling; message is descriptive and may change.
object
Per-parameter validation messages. Only present on invalid_request.
object
Example
{ "status": "error", "code": "invalid_request", "message": "One or more query parameters are not valid.", "errors": { "per_page": [ "The per page field must not be greater than 100." ] }}rate_limit_exceeded, quota_exceeded or too_many_failed_attempts. Distinguish by code.
Error response. Use code for error handling; message is descriptive and may change.
object
Per-parameter validation messages. Only present on invalid_request.
object
Example
{ "status": "error", "code": "rate_limit_exceeded", "message": "Too many requests. Slow down and retry after the interval in the Retry-After header."}Headers
Section titled “Headers”Seconds to wait before retrying.
semantic_search_unavailable. Semantic search is temporarily unavailable. Retry after a short delay, or repeat the request with search=keyword.
Error response. Use code for error handling; message is descriptive and may change.
object
Per-parameter validation messages. Only present on invalid_request.
object
Example
{ "status": "error", "code": "semantic_search_unavailable", "message": "Semantic search is temporarily unavailable. Retry shortly, or repeat the request with search=keyword."}