Retrieve a call
Returns one call with every stored column (including transcript, transfer fields and telemetry), plus the derived analysis, has_recording, agent_name, campaign_name and contact_name. Use it after a call.completed / call.failed webhook, or to poll a call you placed with POST /api/calls.
Consistency. Cached for up to 5 minutes per call; the cache is invalidated when the call is closed (post-call webhook, reconciler, manual hang-up). Transcript and analysis arrive after the call ends and can lag it by seconds to minutes.
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.
Path parameters
The call’s id. Must be a UUID (400 Invalid call ID otherwise).
Response
A call as the API serializes it. Field names are snake_case (raw database columns); timestamps are ISO-8601 strings. Vendor identifiers (carrier call SID, voice-provider conversation id) are never returned.
Which fields are present depends on the endpoint:
GET /api/calls/{callId}returns every field below.GET /api/calls(list) returns a slimmer row: it omitstranscript,first_response_ms,transfer_call_sid,transferred_at,transferred_to,kpi_data,llm_cost_usd,llm_input_tokens,llm_output_tokens,sentiment_timeline,telemetry_fetched_at,tool_call_count,mcp_call_count,rag_lookup_count,tool_result_bytesanddnc_scanned_at.POST /api/callsreturns the stored row without the derived fields (analysis,has_recording,agent_name,campaign_name,contact_name).
Telemetry fields are null when not measured, which is not the same as 0. Every field is server-generated; calls cannot be edited through the API.

