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

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.