Skip to main content
SocialAPI paginates large lists with opaque cursors. Send limit to set the page size, read the next cursor from the response, and send it back as cursor until the response has no next cursor. Never build, parse, or change a cursor: pass back exactly the value the API returned.

Page through a list

Request the first page without a cursor:
Response (HTTP 200):
Request the next page with the same filters and the returned cursor:
The last page has no next cursor: the field is absent or an empty string, depending on the endpoint. Stop when the next cursor is absent or empty. On endpoints that return pagination.has_more, it is false on the last page. A cursor records a position, not the filters or sort order. Send the same filters, sort, and limit on every page of one list. A cursor reused with different filters continues from the same position under the new filters.

Fetch every page

Read the next cursor from the field listed for the endpoint in the table below: it is pagination.next_cursor on some endpoints and a top-level next_cursor on others.

Parameters

Paginated endpoints

Rules for an out-of-range limit:
  • Above the maximum: the API uses the maximum, except on GET /v1/webhooks/{id}/deliveries, where a value above 100 uses 50.
  • Text instead of a number: treated like 0, except on GET /v1/inbox/reviews/{accountId}, where text uses 20 and only a number below 1 returns 400 validation.field_invalid.
  • Google and WhatsApp endpoints: positive values go to the platform unchecked, so the platform decides what it accepts. The exception is GET /v1/platforms/google/accounts/{id}/search-keywords, where a negative value or a value above 100 returns 400 validation.page_size_invalid.
  • Platform page limits: GET /v1/inbox/comments/{postId} can return fewer comments than limit, because the platform sets its own page size. YouTube returns at most 100 per page, and Bluesky returns one page.
GET /v1/posts rejects a malformed cursor with 400 validation.field_invalid and error.meta.field set to cursor. Pass only values the API returned. GET /v1/events returns the events inside your plan’s event history. See Plans and usage.

Lists with no pagination

These endpoints return every item in one response:
  • GET /v1/accounts (filter with brand_id), GET /v1/brands, GET /v1/keys, GET /v1/keys/scopes, GET /v1/invites, GET /v1/announcements, GET /v1/billing/plans
  • GET /v1/webhooks, GET /v1/webhooks/events
  • GET /v1/automations (filter with account_id)
  • GET /v1/accounts/{id}/pages, GET /v1/accounts/{id}/boards
  • GET /v1/inbox/reviews
  • GET /v1/platforms/facebook/logins/{loginId}/pages, GET /v1/platforms/google/logins/{loginId}/locations
  • GET /v1/platforms/instagram/accounts/{id}/media/{mediaId}/collaborators
  • GET /v1/exports returns the 50 newest exports. Older exports are not listed.
  • GET /v1/exports/{id}/videos
Analytics, metrics, and insights endpoints return a date range or a time series instead of pages. GET /v1/usage returns one object.
  • API reference: every query parameter on each list endpoint
  • IDs: store IDs and cursors as opaque strings
  • Errors: the validation.* codes list endpoints return
  • Plans and usage: how long events and webhook deliveries stay listed on each plan
  • Rate limits: the limits that apply to every request, including platform limits on reads
Last modified on October 19, 2026