Agent-readable docs index: /llms.txt. Full docs in one file: /llms-full.txt. Download /docs.zip to grep all markdown files locally.
/api/v1/news/latestGET
Get the latest news articles from 5,000+ sources
Authorization
bearerAuth *Bearer <token>
Clerk session JWT, or an API key (the ak_ prefix), sent as a Bearer token or an ?api_key= query parameter. Each endpoint requires the read scope for its resource (e.g. org:rates:read for rates). Token in: header
Query Parameters
page?integer
Page number
Default: 1Min: 1
per_page?integer
Items per page
Default: 100Min: 1Max: 500
days?integer
Number of days to look back
Default: 7Min: 1Max: 365
Response
200 · Paginated news articles
data?object[]
Show item properties
id *string
Opaque, stable identifier for the article. It is not a publisher identifier and will not match anything upstream.
title *string
The article's headline.
url?stringnull
Link to the article on the publisher's site.
published_date?string,null (date-time)
When the article was published according to its source, falling back to when it was first recorded if the source gave no date. The list is ordered by this field, newest first.
author?stringnull
Byline where the source reports one. Many feeds do not, so this is frequently absent.
source?stringnull
Short name of the feed the article was collected from; some providers report the publishing outlet's name here instead.
meta?object
Show properties
total?integer
Total number of records matching the request across every page, not just the number returned in this one.
page?integer
The 1-based page number this response covers.
per_page?integer
Maximum number of items on a page. The last page may hold fewer.
total_pages?integer
Number of pages available at this per_page. It is at least 1, even when nothing matched.
has_next?boolean
True when a page exists after this one.
has_prev?boolean
True when this is not the first page.
403 · The organization has no paid plan, so the realtime read scopes are refused. Distinct from a 429, which means a plan's budget ran out: nothing here resets on a timer, and the request succeeds only once the organization holds a plan.
error *string
Human-readable reason the request was refused.
status *integer
HTTP status code, repeated in the body.
upgrade_url?string (uri)
Page listing the plans and their request allowances, for buying access. Absent when no plan is available for purchase.
429 · The paid organization's minute or UTC-day request budget is exhausted.
error *"rate_limited"
Always rate_limited. Branch on this to detect a throttled request.
limit *"rpm" | "daily"
Which limit was hit: rpm for the per-minute cap or daily for the daily one.
message *string
Human-readable explanation naming the limit that was exceeded.
upgrade_url?string (uri)
Page listing the plans and their request allowances, for buying a larger budget. Absent when no plan is available for purchase.
Request example
curl -X GET "https://api.dev.adjacent.markets/api/v1/news/latest" \ -H "Authorization: Bearer <token>"
Response example
{ "data": [ { "id": "a1b2c3d4", "title": "Senate race tightens in Pennsylvania", "url": "https://example.com/news/senate-pa", "published_date": "2026-06-01T08:00:00Z", "author": "Jane Doe", "source": "Reuters" }, { "id": "e5f6g7h8", "title": "New polling shifts House outlook", "url": "https://example.com/news/house-outlook", "published_date": "2026-06-01T07:30:00Z", "author": "John Smith", "source": "AP" } ], "meta": { "total": 2, "page": 1, "per_page": 20, "total_pages": 1, "has_next": false, "has_prev": false } }