List calls
const url = 'https://api.talki.it/v1/calls?limit=50';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://api.talki.it/v1/calls?limit=50' \ --header 'Authorization: Bearer <token>'Return calls newest first, ordered by started_at and then id. Requires calls:read. Limited to 600 requests per minute per credential.
Authorizations
Section titled “Authorizations”Parameters
Section titled “ Parameters ”Query Parameters
Section titled “Query Parameters”Maximum number of calls to return.
Maximum number of calls to return.
Only calls recorded at or after this instant (RFC 3339 UTC). INCLUSIVE, so a watermark equal to a record’s created_at returns that record again rather than risking skipping it — dedupe on id. Filters on created_at, not started_at: see the note on Call.created_at. When resuming a sync, subtract a safety lag (a minute is ample) from your stored watermark: created_at is the writing transaction’s start time, so it is ordered but not strictly commit-ordered.
Responses
Section titled “ Responses ”Successful Response
object
One inbound call the assistant answered. Calls are immutable after they are written. The public object deliberately excludes LLM usage, dashboard inbox state, refused calls, verbatim transcripts, and audio.
object
Opaque Talki call identifier.
Who called, as far as Talki can establish. The object is always present; its fields may be null. A display name is published only when the account owner curated it or imported it from an address book.
When the call ARRIVED, before the assistant picked up. RFC 3339 UTC. This is the ordering key for GET /v1/calls.
Appointments booked during this call, oldest first. Empty for a call that booked nothing. Includes appointments since cancelled — the link records what the call did, not the appointment’s current state.
When Talki wrote this record, which is after the call ended, not when the call started. This is the field created_after filters on, and the one to watermark an incremental sync against: a long call can be written AFTER a shorter call that started later, so a watermark on started_at could skip it.
True when another page is available.
Example
{ "data": [ { "id": "38d23d84-02d2-4418-b169-3608aa04a8f8", "caller": { "contact_id": "8fbb25f2-4f3b-4496-8aea-f0fc66de512d", "phone_number": "+393331234567", "display_name": "Giulia Bianchi" }, "started_at": "2026-09-15T09:14:31Z", "answered_at": "2026-09-15T09:14:34Z", "ended_at": "2026-09-15T09:18:02Z", "duration_seconds": 208, "summary": "Giulia asked to move her haircut to Friday morning.", "appointment_ids": [ "a3fe45ee-572f-4677-b1dd-f36c21bb47de" ], "created_at": "2026-09-15T09:18:03Z" } ], "next_cursor": null, "has_more": false}Headers
Section titled “Headers”Identifier to include when contacting Talki support.
A query parameter or cursor is invalid.
object
object
Example
{ "error": { "type": "invalid_request", "code": "invalid_parameter", "message": "limit: Input should be less than or equal to 100", "request_id": "req_7f24a2f8c6b64e699901563a458b5031" }}Headers
Section titled “Headers”Example
req_7f24a2f8c6b64e699901563a458b5031Identifier to include when contacting Talki support.
The credential is missing, malformed, expired, revoked, or unknown.
object
object
Example
{ "error": { "type": "authentication_error", "code": "invalid_credentials", "message": "The supplied API credential is invalid.", "request_id": "req_7f24a2f8c6b64e699901563a458b5031" }}Headers
Section titled “Headers”Example
req_7f24a2f8c6b64e699901563a458b5031Identifier to include when contacting Talki support.
The account or credential may not perform this request.
object
object
Example
{ "error": { "type": "permission_error", "code": "insufficient_scope", "message": "This credential does not have the required scope.", "request_id": "req_7f24a2f8c6b64e699901563a458b5031" }}Headers
Section titled “Headers”Example
req_7f24a2f8c6b64e699901563a458b5031Identifier to include when contacting Talki support.
The credential exceeded its request rate.
object
object
Example
{ "error": { "type": "rate_limit_error", "code": "rate_limit_exceeded", "message": "Too many requests. Retry after the interval in Retry-After.", "request_id": "req_7f24a2f8c6b64e699901563a458b5031" }}Headers
Section titled “Headers”Example
req_7f24a2f8c6b64e699901563a458b5031Identifier to include when contacting Talki support.
An unexpected error occurred.
object
object
Example
{ "error": { "type": "api_error", "code": "internal_error", "message": "An unexpected error occurred. Quote the request_id when reporting it.", "request_id": "req_7f24a2f8c6b64e699901563a458b5031" }}Headers
Section titled “Headers”Example
req_7f24a2f8c6b64e699901563a458b5031Identifier to include when contacting Talki support.
