List calls
Returns the workspace’s calls, inbound and outbound, newest first (created_at descending), optionally filtered by agent and/or campaign. Use GET /api/calls/{callId} for the transcript and the detail-only columns.
Two pagination styles are supported; use one or the other:
- Cursor: pass the previous page’s
nextCursorascursor, unchanged.nextCursoris non-null whenever the page came back full (exactlylimitrows), so the last page can be followed by one empty page. The cursor is opaque: it encodes the position of the last row (itscreated_atandid), so calls created at the same instant are never skipped or repeated between pages. Order ties oncreated_atare broken byid, descending. A legacy cursor (a bare ISO-8601 timestamp, the format used until 2026-09-15) is still accepted and returns calls created strictly before it. - Offset: pass
offsetfor a numbered pager. Whenoffsetis greater than 0 it takes precedence andcursoris ignored.totalis always the count of every call matching the filters.
List rows omit the large or detail-only columns (transcript, transfer_*, kpi_data, token counts, sentiment_timeline, execution counters and a few more); see the Call schema for the exact list. Vendor identifiers (carrier call SID, voice-provider conversation id) are never returned.
Consistency. Pages are cached for up to 60 seconds per exact combination of parameters. A manual hang-up invalidates the cache; post-call updates may take up to a minute to appear here, while GET /api/calls/{callId} is invalidated on the same events.
Idempotency. Read-only; safe to retry.
Access
- Required scope:
read(orwrite). - Rate limit: General API — 120 (Starter), 200 (Growth), 300 (Business) or 600 (Enterprise) requests/min per workspace. The 20/min outbound limit does not apply to this route. See Rate limits.
- Plan: Available on every plan.
Authentication
Workspace API key: jl_ followed by 64 lowercase hex characters, created by the workspace owner in the
dashboard (Settings → API Keys) and sent as Authorization: Bearer jl_.... The plaintext is shown once,
at creation; Jelliu stores only a SHA-256 hash. A workspace can hold up to 25 active keys.
Operations restricted to admins or owners reject keys without the full scope with 403, and say so in
their description. No key, whatever its scope, can mint or revoke API keys or rotate a webhook secret —
that requires a signed-in owner session. A revoked key stops authenticating within about 10 seconds.
See Authentication.
Query parameters
Page size, 1 to 100. A value outside the range or not an integer is rejected with 400 (it is not clamped).
The opaque nextCursor of the previous page; pass it back exactly as received. Returns the calls that follow that position. A legacy ISO-8601 timestamp is still accepted and returns calls created strictly before it. Any other value is rejected with 400 VALIDATION_FAILED. Ignored (and not validated) when offset is greater than 0.
Rows to skip for numbered pagination, 0 to 100000 (400 outside the range). Takes precedence over cursor when greater than 0.
Only calls served by this agent. Must be a UUID (400 otherwise). An agent of another workspace simply matches nothing.
Only calls filed under this campaign. Must be a UUID (400 otherwise).

