Pagination

GET /api/v1/feed is cursor-paginated.

The rules

  1. Omit cursor on your first request.
  2. Read nextCursor and hasMore from the response.
  3. If hasMore is true, request again with cursor=<nextCursor>.
  4. Stop when hasMore is false.

Cursors are opaque

A cursor is an opaque string. Never construct one yourself, never parse one, never assume anything about its internal format. Only ever pass back a value the API itself gave you (either an item's own cursor field, or the page's nextCursor). The internal representation may change between API versions without notice — code that only ever round-trips a cursor value is unaffected by that.

Page size

Value
Default (limit omitted) 50
Maximum 200

A limit above the maximum, or a malformed value, is rejected with 400 MALFORMED_REQUEST — it is never silently clamped.

No page number

There is no "page 3" concept — only "the next page after this cursor." This is what makes pagination safe against concurrent inserts/updates elsewhere in the feed: you never skip or duplicate an item because something changed between two of your requests.