List sessions
const url = 'https://example.com/v1/sessions?limit=20';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://example.com/v1/sessions?limit=20' \ --header 'Authorization: Bearer <token>'List sessions for the calling org, newest first. Repeatable status filters OR together; the group aliases active and terminal expand to the underlying status set. created_after / created_before accept ISO-8601 UTC. Paginate with limit + starting_after=<last_session_id>.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Query Parameters
Section titled “Query Parameters ”Repeatable filter. Accepts a SessionStatus value or the aliases active / terminal. Multiple values OR together.
Page size. Default 20, max 100.
Page size. Default 20, max 100.
Responses
Section titled “ Responses ”Successful Response
Cursor-paginated list of sessions.
object
Public session resource — what GET /v1/sessions/{id} returns.
object
Populated when Session.status == failed.
object
Stable lower_snake_case subcode.
Human-readable summary; not stable.
sess_… prefixed ULID.
Output quality tier. Drives the credit billing multiplier.
standard is the default for new sessions. mock is reserved for
internal tests and the bring-up runtime (no real model loaded); it
bills as standard when it appears on a real session.
Public session lifecycle.
Terminal states are ended, failed, canceled. ending is the
graceful-drain state while a worker finishes publishing in-flight frames.
BYO LiveKit transport.
The customer owns the room and mints worker_token; we never touch
their LiveKit API key or secret.
object
How the worker receives audio. See LiveKitAudioSource.
Name of the LiveKit room the worker should join.
If True and no participant joins within 10 s, the worker falls back to a synthetic sine generator. Demo aid only; default off.
Customer’s LiveKit URL, e.g. wss://my-app.livekit.cloud.
Identity the worker presents inside the room.
Short-lived JWT the customer mints authorizing our worker to join the room. Write-only. Never echoed back on read; GET /v1/sessions/{id}.transport.worker_token returns the string "[redacted]".
Reserved — raw WebSocket transport. Not yet available.
Listed in the schema so existing clients keep parsing future responses,
but POST /v1/sessions rejects it today with
invalid_request / code=transport.unsupported.
object
Reserved — Pipecat integration. Not yet available.
Rejected at create-time today; see WebSocketTransportConfig.
object
Live usage counters embedded in the Session resource.
Eventually-consistent — lags the latest worker heartbeat by up to
one interval. Canonical billing data lives in UsageEvent.
object
Example
{ "data": [], "has_more": false, "object": "list"}Unknown status filter value.
Wire format for every non-2xx public API response.
object
Concrete error returned inside ApiErrorEnvelope.error.
object
Stable machine-readable subcode (lower_snake_case). SDKs should switch on this, not message.
Human-readable summary. Not stable; do not parse.
Echo of the X-Request-Id response header for support.
Top-level error categories. Maps roughly to HTTP status.
code (a free-form lower_snake_case string on ApiError) is the
machine-readable subcode SDKs should switch on; type is the broad
category.
Example
{ "error": { "code": "transport.unsupported", "message": "transport.type=pipecat is reserved and not yet available", "param": "transport.type", "request_id": "req_01HXY5K8E7QYG3X8Z6N9R7S0VR", "type": "invalid_request" }}Missing or invalid API key.
Wire format for every non-2xx public API response.
object
Concrete error returned inside ApiErrorEnvelope.error.
object
Stable machine-readable subcode (lower_snake_case). SDKs should switch on this, not message.
Human-readable summary. Not stable; do not parse.
Echo of the X-Request-Id response header for support.
Top-level error categories. Maps roughly to HTTP status.
code (a free-form lower_snake_case string on ApiError) is the
machine-readable subcode SDKs should switch on; type is the broad
category.
Example
{ "error": { "code": "transport.unsupported", "message": "transport.type=pipecat is reserved and not yet available", "param": "transport.type", "request_id": "req_01HXY5K8E7QYG3X8Z6N9R7S0VR", "type": "invalid_request" }}Request body or parameters failed validation.
Wire format for every non-2xx public API response.
object
Concrete error returned inside ApiErrorEnvelope.error.
object
Stable machine-readable subcode (lower_snake_case). SDKs should switch on this, not message.
Human-readable summary. Not stable; do not parse.
Echo of the X-Request-Id response header for support.
Top-level error categories. Maps roughly to HTTP status.
code (a free-form lower_snake_case string on ApiError) is the
machine-readable subcode SDKs should switch on; type is the broad
category.
Example
{ "error": { "code": "transport.unsupported", "message": "transport.type=pipecat is reserved and not yet available", "param": "transport.type", "request_id": "req_01HXY5K8E7QYG3X8Z6N9R7S0VR", "type": "invalid_request" }}