> ## Documentation Index
> Fetch the complete documentation index at: https://developers.x-pilot.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# API Reference

> Authenticate, explore request parameters and test the X-Pilot REST API directly in the documentation.

export const XpilotArticleMetadata = () => <script type="application/ld+json" data-xpilot-article-metadata="" dangerouslySetInnerHTML={{
  __html: "{\"@context\":\"https://schema.org\",\"@id\":\"https://developers.x-pilot.ai/api-reference#article\",\"author\":{\"@type\":\"Organization\",\"@id\":\"https://www.x-pilot.ai/#organization\",\"name\":\"X-Pilot\",\"url\":\"https://www.x-pilot.ai/\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https://developers.x-pilot.ai/images/integration-api.png\",\"width\":1200,\"height\":675,\"caption\":\"REST requests use a scoped API key. Keys, credits and usage are managed in the App console.\"}}"
}} />;

<XpilotArticleMetadata />

export const XpilotBreadcrumb = () => <nav aria-label="Breadcrumb" className="xpilot-breadcrumb"><ol><li><a href="/">X-Pilot Developers</a></li><li aria-current="page"><span aria-hidden="true">/</span><span>API Reference</span></li></ol></nav>;

<XpilotBreadcrumb />

<p className="xpilot-doc-author">Documentation by <a href="https://www.x-pilot.ai/">X-Pilot</a></p>

## 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 the `Authorization: Bearer` header. MCP OAuth tokens do not authenticate REST requests. [Manage keys in the App](https://app.x-pilot.ai/developers/console).

## 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](/api-reference/check-credits) and [capacity](/api-reference/check-capacity) first. Give each write operation a stable `Idempotency-Key`; keep it for an exact retry and use a new key for different input.

## Endpoint groups

### Video Agent

* [`GET /v1/video-agents/conversations`](/api-reference/list-conversations) — List conversations
* [`POST /v1/video-agents/conversations`](/api-reference/create-conversation) — Create conversation
* [`GET /v1/video-agents/conversations/{conversation_id}`](/api-reference/get-conversation) — Get conversation
* [`POST /v1/video-agents/conversations/{conversation_id}`](/api-reference/send-message) — Send message
* [`GET /v1/video-agents/conversations/{conversation_id}/messages`](/api-reference/list-messages) — List messages
* [`POST /v1/video-agents/conversations/{conversation_id}/stop`](/api-reference/stop-conversation) — Stop conversation
* [`DELETE /v1/video-agents/conversations/{conversation_id}`](/api-reference/delete-conversation) — Delete conversation

### Renders

* [`GET /v1/video-agents/conversations/{conversation_id}/renders`](/api-reference/list-renders) — List renders
* [`POST /v1/video-agents/conversations/{conversation_id}/renders`](/api-reference/create-render) — Create render
* [`GET /v1/video-agents/conversations/{conversation_id}/renders/{render_id}`](/api-reference/get-render) — Get render
* [`DELETE /v1/video-agents/conversations/{conversation_id}/renders/{render_id}`](/api-reference/delete-render) — Delete render

### Brand kits

* [`GET /v1/brand-kits`](/api-reference/list-brand-kits) — List brand kits
* [`POST /v1/brand-kits`](/api-reference/create-brand-kit) — Create brand kit
* [`GET /v1/brand-kits/{brand_kit_id}`](/api-reference/get-brand-kit) — Get brand kit
* [`PUT /v1/brand-kits/{brand_kit_id}`](/api-reference/update-brand-kit) — Update brand kit
* [`DELETE /v1/brand-kits/{brand_kit_id}`](/api-reference/delete-brand-kit) — Delete brand kit

### Account & capacity

* [`GET /v1/account/credits`](/api-reference/check-credits) — Check credits
* [`GET /v1/account/capacity`](/api-reference/check-capacity) — Check capacity & budget

### Assets

* [`GET /v1/assets`](/api-reference/list-assets) — List owned assets
* [`POST /v1/assets`](/api-reference/upload-assets) — Upload assets

### Voices & audio

* [`GET /v1/voices`](/api-reference/list-voices) — list voices
* [`GET /v1/voices/{voice_id}`](/api-reference/get-voice) — get voice
* [`POST /v1/voices/speech`](/api-reference/generate-audio) — generate audio
* [`GET /v1/voices/clone/config`](/api-reference/get-voice-clone-config) — get voice clone config
* [`POST /v1/voices/clone`](/api-reference/clone-voice) — clone voice
* [`DELETE /v1/voices/{voice_id}`](/api-reference/delete-voice) — delete voice

### Avatars

* [`GET /v1/avatars`](/api-reference/list-avatars) — List owned avatars
* [`GET /v1/avatars/{avatar_id}`](/api-reference/get-avatar) — get avatar
* [`POST /v1/avatars`](/api-reference/create-avatar) — create avatar
* [`DELETE /v1/avatars/{avatar_id}`](/api-reference/delete-avatar) — delete avatar
* [`POST /v1/avatars/{avatar_id}/videos`](/api-reference/create-avatar-video) — create avatar video
* [`GET /v1/avatars/{avatar_id}/videos/{video_id}`](/api-reference/get-avatar-video) — 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](/openapi.json) · [Download shared REST contract](/downloads/reference.json)

export const XpilotDocFigure = () => <figure className="xpilot-doc-figure"><img src="/images/integration-api.png" alt="An application sends a scoped API key to the X-Pilot REST API and receives an HTTP status and JSON response." width="1200" height="675" loading="lazy" /><figcaption>REST requests use a scoped API key. Keys, credits and usage are managed in the App console.</figcaption></figure>;

<XpilotDocFigure />


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.