Pagination
Every list uses cursors:
{ "data": [ … ], "next_cursor": "eyJ2Ijpb…", "has_more": true }
limit: 1 to 100 (default 25).- For the next page, repeat the request with the same filters and
cursor=<next_cursor>. Stop whenhas_moreisfalse. - The cursor is opaque, signed, valid 24 hours and only for the same key and filters; otherwise
422 invalid_cursor. Do not parse it. - The order is always total (ties broken by
id), so pages never skip nor repeat records while writes happen.
Incremental sync
Contacts with updated_since come oldest first (updated_at, id). Keep the largest updated_at you saw and use it
on the next sync:
curl "https://atende.suporteja.com.br/v1/contacts?updated_since=2026-10-20T00:00:00Z&limit=100" \
-H "Authorization: Bearer $ATENDLLY_API_KEY"
A conversation's messages come newest first; use before_id with the next_before_id of the response.