Skip to navigation

Search calls with a JSON filter

Bounded typed alternative to GET /calls for large call or agent ID selections. POST is used only because the selection can exceed URL limits: this is a read with no effect, safe to retry, needs no Idempotency-Key and counts toward read rate limits. Same workspace authorization, result rows, ordering and cursor rules as the GET form. Body and filter limits are separate from GET: up to 1000 ID values in total and 128 KiB encoded. Results stay paged (limit at most 200); nothing expands transcripts, results or variables. Not a general query language.

Authentication

AuthorizationBearer

Create and manage workspace-owned keys through the existing app session routes, outside this public API. Creator and manager identities are audit actors only. Key validity follows workspace policy, expiry and explicit revocation, independently of creator membership. Do not include a workspace-selection header.

Request

This endpoint expects an object.
filterobjectRequired

Same field names and meaning as the GET /calls query parameters. Fields combine with AND. start/end, updated_since, the 93-day span and metadata_key/metadata_value pairing follow GET /calls exactly. An empty object means no filter within the workspace and default range.

limitintegerOptional1-200Defaults to 50
Page size, same bounds as GET.
cursorstringOptional<=2048 characters

Opaque cursor from the previous page. It binds the filter and limit: send them unchanged with it; a change is refused with invalid_request. Expires after 24 hours.

Response headers

X-Request-IdstringOptional
Safe server request correlation ID.
RateLimit-LimitintegerOptional
Requests allowed in the current window for the tightest applicable limit.
RateLimit-RemainingintegerOptional
Requests left in the current window.
RateLimit-ResetintegerOptional
Seconds until the current window resets.

Response

Search calls with a JSON filter.
itemslist of objects
next_cursorstring or null
Opaque continuation cursor. Null means the last page.
scanned_throughdatetime or null
poll_after_secondsinteger>=1

Errors

400
Bad Request Error
401
Unauthorized Error
403
Forbidden Error
413
Content Too Large Error
429
Too Many Requests Error
500
Internal Server Error
503
Service Unavailable Error