Feed API
GET /api/v1/feed
Requires the feed.read scope. This is the only endpoint that consumes your Site's entitlement
quota — every other endpoint documented here is free to call (subject to normal rate limiting).
Query parameters
| Parameter | Meaning |
|---|---|
cursor |
Resume from this point. Omit for the first page. |
limit |
Page size. Default and maximum are documented in Pagination. |
Response shape
{
"items": [ /* FeedItemResponse */ ],
"nextCursor": "opaque string, or null",
"hasMore": true
}
Item fields — canonical vs. effective
Every item carries two parallel sets of content fields. This is deliberate, not redundant:
| Canonical (never changes meaning) | Effective (what you should render) |
|---|---|
title |
effectiveTitle |
description |
effectiveDescription |
imageUrl |
effectiveImageUrl |
title/description/imageUrlare always the original, source-provider values.effectiveTitle/effectiveDescriptionare what you should actually display — either the same as the canonical values, or your Site's own AI-rewritten variant, depending oncontentMode(see AI-Enriched Content).effectiveImageUrl/imageModefollow the same idea for images — see Images & Media.
Other fields
| Field | Meaning |
|---|---|
cursor |
This item's own opaque position — usable the same way as nextCursor. |
changeType |
What kind of change this feed entry represents. |
articleId |
The article's identity. Stable across updates to the same article. |
url |
The canonical source URL. |
sourceName / sourceDomain |
Attribution. |
language / country |
Locale metadata, when known. |
publishedAt / updatedAt |
Timestamps (UTC). |
categoryKeys |
The Central taxonomy categories this article matched, deterministically ordered. |
duplicateOfArticleId |
Set only if a moderator has confirmed this article as a duplicate of another. Usually null. |
What's deliberately not here
The feed never includes the full original article body/content — only metadata, title, and description. This is a rights/scope decision, not an omission.
Tenant scoping
The feed you receive is already filtered to your Site's own subscriptions (see Taxonomy & Subscriptions) — you never receive an article your Site isn't subscribed to, and filtering happens server-side, not something you need to replicate.