Skip to main content
POST
Query followed feeds: entries, source health, or aggregates

Authorizations

Authorization
string
header
required

Clerk OAuth 2.0 Authorization Code flow with PKCE. Request the minimum scope required by the operation.

Body

application/json
since
string

The "what's new" shorthand: entries published after this time (falling back to discovery time when the feed gives none), newest published first. {"since":"1d"} is the whole catch-up call. Entries only.

Required string length: 1 - 64
select

"entries" = rows · "sources" = per-source health (where.collection/source only; use having for health filters; stalled = nothing published in 14 days and nothing delivered in 7, quiet = nothing delivered in 7) · "aggregate" = counts. Default "entries".

Allowed value: "entries"
where
object

Entry selection predicate: fields AND together; omit a field to not filter on it. Source queries/mutations accept only collection and source; use query having for source-health filters.

limit
integer

Default 20, maximum 100; page further with next_cursor.

Required range: 1 <= x <= 100
cursor
string

Only a next_cursor from a previous response; omit on the first call.

Maximum string length: 500
per_source_limit
integer

Fair sample: at most this many entries per source across the result set, before pagination. Omit for an exhaustive stream. omitted.by_per_source_limit reports articles outside this sample.

Required range: 1 <= x <= 20
order_by

Default -discovered_at: newest arrivals first, so backfilled items never hide.

Allowed value: "-discovered_at"
fields
string[]

Project only these entry fields. ["id"] is the cheap diff shape. Summary is opt-in.

Maximum array length: 14
Allowed value: "id"
format

"compact" returns token-lean text lines (#entry_id [source · s<source_id> · collection] date title / url) in text; entries is then an empty array and fields is ignored.

Allowed value: "json"
group_by
Allowed value: "source"
compare
object

Trend detection for aggregates: counts inside the window vs the prior baseline, e.g. {"window":"7d","baseline":"28d"}.

having
object

Filter groups/sources on derived values.

Response

entries: {total, returned, omitted:{by_limit}, next_cursor, entries[] | text} · sources: {total, returned, omitted:{by_having,by_limit}, next_cursor, sources[]} · aggregate: {group_by, total_entries, groups[]}. Filtered queries include classification_coverage. Source fetch_status and last_fetched_at describe fetching; legacy health describes publisher activity, so stalled does not mean fetching failed.

entries: {total, returned, omitted:{by_limit}, next_cursor, entries[] | text} · sources: {total, returned, omitted:{by_having,by_limit}, next_cursor, sources[]} · aggregate: {group_by, total_entries, groups[]}. Filtered queries include classification_coverage. Source fetch_status and last_fetched_at describe fetching; legacy health describes publisher activity, so stalled does not mean fetching failed.

object
string
required
Allowed value: "feed_query"
select
string
required
classification_coverage
object

Coverage before the classification decision and pagination. Pending articles are not excluded; retry the query after classification catches up. Degraded assessments used the filter's uncertainty policy.

Last modified on September 13, 2026