Pagination
Jelliu uses four paging styles, depending on the endpoint. Each is described below with its parameter names and bounds.
Parameters are query-string values. A value out of range is rejected with 400 VALIDATION_FAILED rather than silently clamped. See Errors.
Cursor
Items come newest first. Each page returns a cursor that marks the position of its last item; pass it back as cursor to get the items that come after it. Items created at the same instant are never skipped or repeated between pages.
The cursor is an opaque string. Pass it back exactly as you received it, and do not build, parse or store it as a date: its format can change.
- Legacy timestamp cursors. Until 2026-09-15 the cursor was the ISO 8601
created_atof the last item. A timestamp is still accepted and keeps its old meaning, items created strictly before that instant, so a client holding one keeps working. It can skip items created at the same instant as the boundary, so switch to the returned cursor. - Malformed cursors. Any other value returns
400 VALIDATION_FAILEDwithdetails.fieldErrors.cursor.
Agents
1 to 200. Defaults to 50.
The meta.nextCursor value from the previous page. A legacy ISO 8601 timestamp is also accepted.
Case-insensitive match on the agent name. 1 to 200 characters.
GET /api/agents returns { "data": [ ... ], "meta": { "nextCursor": "..." } }. data is the array of agents. Pass meta.nextCursor as cursor to fetch the next page. It is null when the page has fewer items than limit, which means you have reached the end.
Calls
1 to 100. Defaults to 50.
The nextCursor value from the previous page. A legacy ISO 8601 timestamp is also accepted.
0 to 100000. Alternative to cursor for numbered pages. A non-zero offset takes precedence over cursor.
Only calls handled by this agent.
Only calls from this campaign.
GET /api/calls returns the page together with its paging state:
nextCursor is null when the page holds fewer than limit calls. Pass it back as cursor to continue:
Listing calls uses the general API limit of your plan; it does not spend the 20-per-minute budget for placing calls. Use limit=100 when walking the full history. See Rate limits.
Webhook deliveries
GET /api/webhooks/{webhookId}/deliveries takes limit (1 to 100, default 50) and cursor, plus the optional filters status and type. It returns { "data": [ ... ], "meta": { "next_cursor": "..." } }, newest first; pass meta.next_cursor back as cursor for the next page. It is null when there is nothing more. A cursor this endpoint did not return is refused with 400 VALIDATION_FAILED (El cursor no es válido.); timestamps are not accepted. Deliveries are kept for 30 days. See Delivery log.
Page number
1-based page number. 1 to 100000. Defaults to 1.
1 to 100. Defaults to 20 for campaigns and 50 for contacts.
Extra filters:
GET /api/campaigns/{campaignId}/contactsacceptsstatus.GET /api/contactsacceptssearch(1 to 200 characters) over phone, name and email.
Response shapes:
Contact lists report total, so you can compute the number of pages. The campaign list does not; stop when a page returns fewer than limit items.
Message cursor
GET /api/conversations/{conversationId} pages the thread’s messages backwards, from the newest.
1 to 200. Defaults to 50.
The ID of a message in this conversation. The page holds the limit messages immediately older than it.
Each page is in chronological order (oldest first), and the response carries the cursor under meta:
Without before you get the most recent messages. While hasMore is true, pass nextBefore (the ID of the oldest message on the page) as before to read further back; it is null on the first page of the thread. Messages sharing a timestamp are never skipped or repeated between pages. See Conversations for a full example.
Offset
1 to 100. Defaults to 50.
Number of items to skip. 0 to 100000. Defaults to 0.
Stop when a page returns fewer than limit items.
Endpoints without paging
Some lists are small and take no paging parameters. For example, GET /api/webhooks returns every webhook of the workspace (at most 20), newest first, and GET /api/webhooks/event-types returns the whole event catalog.

