Skip to main content
List endpoints return a meta object (also mirrored inside result) with everything you need to page:

Page-based

The simplest approach — ?page=2&max=50. Good for jumping to a specific page and showing “Page X of Y”.
max is capped at 20 for anonymous callers and 100 with a key. total and totalPages tell you when to stop; nextPage is null on the last page. Page-based pagination can skip or repeat items when the underlying data changes between requests. For stable iteration over large result sets — and for syncing — use the opaque nextCursor:
When you pass a cursor, page is ignored and the count is skipped (so total is null) — keep paging until nextCursor comes back null.
A cursor is tied to the sortBy/order you used to create it. Keep them consistent across a paging run.

Incremental sync

To keep a local mirror fresh, sort by updatedAt ascending and pass updatedSince (a Unix timestamp or ISO 8601 date). You’ll only get scripts changed since then:
Store the largest updatedAt you’ve seen and pass it as the next updatedSince. See Best practices → Sync, don’t re-scrape.

Caching & ETags

Every cacheable response carries Cache-Control and an ETag. Send the ETag back as If-None-Match and you’ll get a 304 Not Modified with no body when nothing changed — saving bandwidth and not counting against your rate limit.
The X-Cache response header tells you whether you hit the edge cache (HIT), came from origin (MISS), or were served a stale-but-safe copy during an upstream hiccup (STALE).