Pagination

Every list endpoint uses opaque cursor-keyset pagination. The envelope looks like this:

{
  "data": [
    /* rows */
  ],
  "pagination": {
    "cursor": "eyJpZCI6ImNtN2Fzc2V0MDEifQ==",
    "has_more": true,
    "limit": 50
  }
}

Walking pages

Pass the cursor from the previous page as ?cursor= on the next request:

# Page 1
curl -H "X-API-Key: msk_test_..." \
  "https://app-api.dev.mobilytics.ai/v1/partner/assets?limit=50"

# Page 2 — use the cursor from page 1
curl -H "X-API-Key: msk_test_..." \
  "https://app-api.dev.mobilytics.ai/v1/partner/assets?limit=50&cursor=eyJpZCI6..."

Stop when has_more is false.

Rules

  • limit is 1 – 500. Default is 50.
  • cursor is opaque base64 — do not decode or construct it. The encoding may change at any time.
  • Ordering is stable (primary key ascending). Cursors never skip or duplicate rows.
  • An invalid cursor returns 400 INVALID_CURSOR.

What's not paginated

  • /v1/partner/meta
  • /v1/partner/assets/:id (single resource)
  • Time-bucketed metrics and demographics — bounded by the query's date range.