Authentication
Create a API Key in the developer console. Set XPILOT_API_BASE_URL to the deployment’s Node API root and XPILOT_API_KEY to the secret in your environment. OAuth tokens are bound to MCP. REST uses a scoped API key in theAuthorization: Bearer header. MCP OAuth tokens do not authenticate REST requests. Manage keys in the App.
Online playground
Choose an endpoint in the sidebar, select Try it, enter your key and parameters, then send the request. The response panel shows the HTTP status and response body. File endpoints accept multipart uploads. No request runs merely by opening a page. Code samples provide the shared contract defaults; the playground sends the values you enter. Generation and rendering may consume workspace credits. Check credits and capacity first. Give each write operation a stableIdempotency-Key; keep it for an exact retry and use a new key for different input.
Endpoint groups
Video Agent
GET /v1/video-agents/conversations— List conversationsPOST /v1/video-agents/conversations— Create conversationGET /v1/video-agents/conversations/{conversation_id}— Get conversationPOST /v1/video-agents/conversations/{conversation_id}— Send messageGET /v1/video-agents/conversations/{conversation_id}/messages— List messagesPOST /v1/video-agents/conversations/{conversation_id}/stop— Stop conversationDELETE /v1/video-agents/conversations/{conversation_id}— Delete conversation
Renders
GET /v1/video-agents/conversations/{conversation_id}/renders— List rendersPOST /v1/video-agents/conversations/{conversation_id}/renders— Create renderGET /v1/video-agents/conversations/{conversation_id}/renders/{render_id}— Get renderDELETE /v1/video-agents/conversations/{conversation_id}/renders/{render_id}— Delete render
Brand kits
GET /v1/brand-kits— List brand kitsPOST /v1/brand-kits— Create brand kitGET /v1/brand-kits/{brand_kit_id}— Get brand kitPUT /v1/brand-kits/{brand_kit_id}— Update brand kitDELETE /v1/brand-kits/{brand_kit_id}— Delete brand kit
Account & capacity
GET /v1/account/credits— Check creditsGET /v1/account/capacity— Check capacity & budget
Assets
GET /v1/assets— List owned assetsPOST /v1/assets— Upload assets
Voices & audio
GET /v1/voices— list voicesGET /v1/voices/{voice_id}— get voicePOST /v1/voices/speech— generate audioGET /v1/voices/clone/config— get voice clone configPOST /v1/voices/clone— clone voiceDELETE /v1/voices/{voice_id}— delete voice
Avatars
GET /v1/avatars— List owned avatarsGET /v1/avatars/{avatar_id}— get avatarPOST /v1/avatars— create avatarDELETE /v1/avatars/{avatar_id}— delete avatarPOST /v1/avatars/{avatar_id}/videos— create avatar videoGET /v1/avatars/{avatar_id}/videos/{video_id}— get avatar video
Status and recovery
Poll GET /v1/video-agents/conversations/{conversation_id}/messages every 5 seconds or subscribe to signed Webhooks. When a message is paused, next_action says what to send: confirm_outline (outline_action=confirm, or revise with a prompt) or reply (answer with a prompt). A disconnect does not mean completion. No SSE in this release. Use conversation_id for ownership and message_id for per-turn status. Lists do not return project_id. Times are Unix seconds. 401: expired/revoked credential. 403: scope/ownership. 402: credits/budget. 400 with param/allowed: invalid field or value. 409: idempotency conflict, conversation busy or avatar not ready. 429: RPM/concurrency; respect Retry-After. After a transport error, retry with the same Idempotency-Key. Download OpenAPI JSON · Download shared REST contract
