Create a session
Allocate a worker and begin a realtime avatar session.
Returns immediately with status: queued; poll GET /v1/sessions/{id} (or wait for the session.first_frame webhook) to see the worker pick the job up. Sessions count against your plan’s concurrency cap; a 503 response with code=at_capacity and a Retry-After header means there are no free workers right now.
Authorizations
Live API key minted in the dashboard. Pass as Authorization: Bearer sk_live_…. Keys are scoped to a single environment (staging / prod).
Headers
1 - 255Body
Request body for POST /v1/sessions.
Stable av_… avatar id. Must reference a platform stock avatar or customer avatar the caller's API key can access.
Discriminated union of transport configs, keyed by type.
- LiveKitTransportConfig
- WebSocketTransportConfig
- PipecatTransportConfig
End the session automatically after this many seconds without received audio. Only applies to transports that observe inbound audio; ignored otherwise.
1 <= x <= 600Optional customer-requested hard ceiling on session duration. The API clamps this to the caller's plan limit and returns the effective value on the Session resource.
1 <= x <= 3600Customer-owned free-form JSON, <= 8 KB. Keys prefixed with _avatar. are managed by Protoface.
Quality tier; drives the billing multiplier.
mock, lite, standard, pro Response
Successful Response
Public session resource — what GET /v1/sessions/{id} returns.
sess_… prefixed ULID.
Output quality tier.
mock, lite, standard, pro Public session lifecycle.
Terminal states are ended, failed, canceled. ending is the
graceful-drain state while a worker finishes publishing in-flight frames.
created, queued, starting, running, ending, ended, failed, canceled BYO LiveKit transport.
The customer owns the room and mints worker_token; we never touch
their LiveKit API key or secret.
- LiveKitTransportConfig
- WebSocketTransportConfig
- PipecatTransportConfig
Service that created the session. Use this to group usage reporting.
api, playground, embed, share, public_demo, pipecat, video_generation Populated when Session.status == failed.
Set on session.first_frame.
"session"Set when worker emits session.starting.
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.

