Skip to content
Reading with an AI assistant?View as MarkdownOpen in ClaudeOpen in ChatGPT

Guides

Pagination, filtering and idempotency

List endpoints in the SkedCast API use keyset (cursor) pagination instead of page numbers (a few short lists, such as campaigns and best times, return everything at once), and every write needs an Idempotency-Key. Both exist for the same reason: correctness under concurrent writes, not just convenience.

Browse docs

5 min read

Why keyset, not offset#

Offset pagination (?page=3) breaks under concurrent writes: if a row is inserted or deleted while you're paging, you can see a row twice or skip one, and it gets slower the deeper you page. Keyset pagination follows a cursor derived from the last row you saw, so it stays correct and fast at any depth.

bash
curl "https://api.skedcast.com/v1/posts?limit=50&cursor=eyJ…" \
  -H "Authorization: Bearer sked_live_YOUR_KEY"
json
{
  "data": [ { "object": "post", "id": "…" } ],
  "page": { "cursor": null, "nextCursor": "eyJ…", "hasMore": true },
  "meta": { "correlationId": "c-…" }
}
The list envelope. Iterate until hasMore is false.

Filtering#

Most list endpoints accept status, client and platform filters as ordinary query parameters next to limit and cursor. See the resource's table in the API reference for the filters it supports.

Idempotency on writes#

Every POST, PATCH and DELETE needs an Idempotency-Key header (except POST /v1/posts/preview). Any unique string works. A UUID is simplest. Replaying the same key returns the original result instead of creating a duplicate, so a network retry after a timeout is safe. A different body under the same key is refused with 422 idempotency_key_reuse, never silently accepted.

paginationidempotencyfiltering

FAQ

Can I jump to a specific page number?
No. Keyset pagination has no page numbers, only "the next batch after this cursor". If you need a specific slice, filter more narrowly (by date range or status) instead of skipping ahead.
What happens if I reuse an Idempotency-Key with a different request body?
You get 422 idempotency_key_reuse and the request isn't run. Generate a fresh key for each distinct request.

Ready to broadcast everywhere?

Sign up free — no credit card. You land on the Free plan, and you can start a one-time 7-day Studio trial from your workspace whenever you are ready. Connect your first accounts, import a batch, and watch one post fan out across every platform.