Skip to main content
GET
List calls
Returns your calls, newest first. 50 per page by default - page through the rest with limit and offset.

Request

Query parameters

The response is a bare array, not an object with a total or has_more. Page until you get fewer rows back than you asked for.

Response

200 OK returns a JSON array:

Response fields

duration_ms is time CONNECTED, not dial-to-hangup. Ring time is excluded, so it matches what your carrier bills you and it matches the recording length. On an outbound call start_timestamp is when dialling began, so end_timestamp - start_timestamp will be LARGER than duration_ms by however long the phone rang. Use answered_at if you want the ring time: answered_at - start_timestamp.
The response includes internal fields that are not part of this contract. You will see id, api_key_id and system_prompt_used in the JSON. They are yours, but they are engine plumbing rather than API surface - do not build against them, as they may change or be removed without a version bump.
Older calls stay reachable with offset, but call data is deleted after 90 days - see Data retention. To keep full history, subscribe to the call.completed webhook and store each call in your own backend as it arrives.
Fetch one call by ID with Get call.