Avatars/Create avatar
Create avatar
POST/api/v1/avatar
Create a custom avatar from a single portrait image (JPEG/PNG/WEBP/HEIC, up to 10MB). The returned avatar_id can then speak any script via POST /api/v1/video.
The avatar starts with automatic framing; the response includes it as framing. Change it with POST /api/v1/avatar/framing.
Headers
X-API-KeystringRequired
Your VisionStory API key (
sk-vs-...), kept server-side. Create one at OpenApi (Pro plan and up).Request body
img_urlstring | nullOptional
Publicly reachable URL of the source image. Provide either this or
inline_data. Formats: JPEG/PNG/WEBP/HEIC, up to 10MB.inline_dataInlineDataModel | nullOptional
Source image as inline base64 data. Provide either this or
img_url.Response
200Successful Response
Successful calls return a standard envelope: the endpoint payload under data (its fields are documented below), plus a message string ("success") and an ISO 8601 server_time.
Response fields (
data)avatar_idstringRequired
Unique avatar identifier. Pass it as
avatar_id when generating a talking video.thumbnail_urlstringRequired
URL of the avatar's preview thumbnail image.
aspect_ratiosarray of stringOptional
Aspect ratios this avatar was prepared for (
1:1 / 9:16 / 16:9). Choose a matching aspect_ratio when generating a video.created_atintegerOptionalDefault
0Unix timestamp (seconds) when the avatar was created.
default_voice_idstringOptionalDefault
""The voice this avatar was set up with.
voice_id is required in a text script, so copy this value when you want the avatar's own voice (rather than guessing one). May be empty for avatars without a preset voice.framingarray of AvatarFraming | nullOptional
Current framing per aspect ratio, always 3 entries in the order 9:16, 16:9, 1:1. New avatars start with automatic framing; change it with POST /api/v1/avatar/framing. It is shared with the web editor. Always null for public avatars, which cannot be reframed through the API.
Errors
All error responses share one JSON envelope: an error object with a numeric code, a human-readable message, an optional details string, and an optional hint giving an actionable next step (handy for AI agents).
errorErrorDetailRequired
Error payload returned with every non-2xx response. Present only on failure; successful calls use the standard success envelope instead.