Skip to navigation

List calls

View as Markdown

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 nextCursor as cursor, unchanged. nextCursor is non-null whenever the page came back full (exactly limit rows), so the last page can be followed by one empty page. The cursor is opaque: it encodes the position of the last row (its created_at and id), so calls created at the same instant are never skipped or repeated between pages. Order ties on created_at are broken by id, 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 offset for a numbered pager. When offset is greater than 0 it takes precedence and cursor is ignored. total is 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 (or write).
  • 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

AuthorizationBearer

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.

ScopeGET / HEADPOST / PUT / PATCH / DELETEAdmin-only routes
readYesNoNo
writeYesYesNo
fullYesYesYes

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

limitintegerOptional1-100Defaults to 50

Page size, 1 to 100. A value outside the range or not an integer is rejected with 400 (it is not clamped).

cursorstringOptional<=512 characters

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.

offsetintegerOptional0-100000Defaults to 0

Rows to skip for numbered pagination, 0 to 100000 (400 outside the range). Takes precedence over cursor when greater than 0.

agentIdstringOptionalformat: "uuid"

Only calls served by this agent. Must be a UUID (400 otherwise). An agent of another workspace simply matches nothing.

campaignIdstringOptionalformat: "uuid"

Only calls filed under this campaign. Must be a UUID (400 otherwise).

Response

One page of calls.
dataobject

Errors

400
Bad Request Error
401
Unauthorized Error
403
Forbidden Error
429
Too Many Requests Error