Video API
Video endpoints exposed by the Devotel CPaaS API Base path:/api/v1/video
Endpoint count: 21
List avatar-agent personas
GET /api/v1/video/avatar-agentsCompose an avatar-agent join plan
GET /api/v1/video/avatar-agents/{id}/join-planstring
required
The vaa_-prefixed persona id.
string
required
Name of the WebRTC room the avatar will join.
List avatar-video render jobs
GET /api/v1/video/avatar-video-rendersstatus or persona_id. Read-only; scoped on video:read (or video:write as a superset).
string (enum: queued|rendering|completed|failed)
Filter to render jobs in this lifecycle state.
string
Filter to render jobs scripted from this vaa_-prefixed persona.
Get an avatar-video render job
GET /api/v1/video/avatar-video-renders/{id}string
required
The vavr_-prefixed render job id.
List room-config templates
GET /api/v1/video/room-templatesGet a room-config template
GET /api/v1/video/room-templates/{id}string
required
The vrtpl_-prefixed template id.
Room usage analytics
GET /api/v1/video/rooms-analytics/usagesummary plus a per-UTC-day daily time series for sessions-over-time charts. Read-only; scoped on video:read (or video:write as a superset).
string
Window start (ISO 8601 date-time). Defaults to 30 days before
to.string
Window end (ISO 8601 date-time). Defaults to now.
Register an avatar-agent persona
POST /api/v1/video/avatar-agentsstring
required
Tenant-supplied label rendered in the picker. Unique within the tenant (case-insensitive).
string
required
The conversational agent that drives the dialog (agt_-prefixed).
string (enum: tavus|heygen|did)
required
Rendered-avatar provider this persona uses.
string
required
The tenant’s own opaque persona/replica reference id at that provider.
string | null
Optional opening line the avatar speaks on join.
string | null
Optional BCP-47-ish locale hint for TTS (e.g. en-US).
boolean
Whether the persona is dispatchable to rooms. Defaults to true.
Script an avatar-video render job
POST /api/v1/video/avatar-video-rendersmerge_fields into script_template and persists the request as a pollable job. Does not call the provider render API directly; the tenant’s render runtime performs the actual render and reports back via PATCH /api/v1/video/avatar-video-renders/. Owner/admin/developer only; scoped on video:write.
string
required
The vaa_-prefixed avatar persona to render from. Must be an existing, enabled persona.
string
required
The operator-authored script, with optional tokens.
string | null
Optional BCP-47-ish locale override for TTS; falls back to the persona’s locale when omitted.
object
Values for every referenced by script_template. A referenced token with no supplied value rejects the request.
Create a room-config template
POST /api/v1/video/room-templatesstring
required
Tenant-supplied label rendered in the template picker. Unique within the tenant (case-insensitive).
string
Optional operator description.
any
required
—
Create a room from a template
POST /api/v1/video/room-templates/{id}/instantiatestring
required
The vrtpl_-prefixed template id.
string
required
Label for the new room (per-instance).
string | null
Optional ISO 8601 date-time to schedule the room for; omit or null to create it live now.
string
Consent-receipt id threaded into the recording-consent gate when the template auto-starts a recording in a two-party-consent jurisdiction.
Post a chat message into a video room
POST /api/v1/video/rooms-scheduled/{id}/chatorbit.chat data-channel topic. Any joined participant may post (mirrors reactions / Q&A) — an SDK bot or webinar viewer included. Chat is transient: the message is fanned out, never persisted, so there is no list to read back. The sender identity is SERVER-stamped from the auth context and is never a body field; the caller mints the message_id UUID so the stateless send → delete lifecycle correlates client-side. Scoped on video:read (or video:write as a superset).
string
required
Scheduled room id.
string
required
Client-minted UUID correlating the send → delete lifecycle.
string
required
The message text. The sender identity is never a body field — the server stamps it.
string
Optional
message_id of the message being replied to (threaded replies).Configure a video room’s chat content-safety policy
POST /api/v1/video/rooms-scheduled/{id}/chat-policymode: block a matched message is rejected and never reaches another participant or the replay history; flag delivers it but marks it for moderator review; log delivers it unchanged and only records the match. Disabling the policy (enabled: false) preserves the default deliver-first behaviour. Host-only — requires the video:write role (owner | admin | developer) and is audited. Complements the reactive moderation endpoints (/chat/delete, /chat/clear).
string
required
Scheduled room id.
boolean
required
Master switch. When false the send handler behaves exactly as before (deliver-first).
string (enum: block|flag|log)
required
What to do with a matched message.
block rejects it pre-broadcast; flag delivers-and-marks it for review; log delivers it unchanged and records the match.string (enum: profanity|pii|toxicity)[]
required
Built-in content-safety categories to screen for (deduped server-side).
string[]
required
Operator-curated exact / word-boundary terms, applied whenever the policy is enabled regardless of
categories.Clear the entire room chat (host-only)
POST /api/v1/video/rooms-scheduled/{id}/chat/clearclear event so every client hides all messages posted before the clear timestamp. Host-only — requires the video:write role (owner | admin | developer) and is audited. The moderator identity is SERVER-stamped from the auth context. Carries no body fields; a stray payload is rejected.
string
required
Scheduled room id.
Delete a single chat message (host-only)
POST /api/v1/video/rooms-scheduled/{id}/chat/deletedelete event so every client hides the message with the matching message_id. Host-only — requires the video:write role (owner | admin | developer) and is audited. The moderator identity is SERVER-stamped from the auth context, never a body field.
string
required
Scheduled room id.
string
required
The message to remove (matches a prior send’s
message_id).Update an avatar-agent persona
PATCH /api/v1/video/avatar-agents/{id}string
required
The vaa_-prefixed persona id.
string
—
string
—
string (enum: tavus|heygen|did)
—
string
—
string | null
—
string | null
—
boolean
—
Report an avatar-video render job’s status
PATCH /api/v1/video/avatar-video-renders/{id}string
required
The vavr_-prefixed render job id.
string (enum: rendering|completed|failed)
required
The new lifecycle state. Must be a valid transition from the job’s current status.
string
The rendered clip’s HTTPS URL. Required when transitioning to completed.
string
Human-readable failure reason. Set when transitioning to failed.
Update a room-config template
PATCH /api/v1/video/room-templates/{id}string
required
The vrtpl_-prefixed template id.
string
—
string | null
—
any
—
Delete an avatar-agent persona
DELETE /api/v1/video/avatar-agents/{id}string
required
The vaa_-prefixed persona id.
Delete an avatar-video render job
DELETE /api/v1/video/avatar-video-renders/{id}string
required
The vavr_-prefixed render job id.
Delete a room-config template
DELETE /api/v1/video/room-templates/{id}string
required
The vrtpl_-prefixed template id.