List either your own avatars or the public avatar library (is_public=true), newest first. Pass the previous page's next_cursor to paginate; next_cursor=0 means no more pages.
Headers
X-API-KeystringrequiredYour VisionStory API key (sk-vs-...), kept server-side. Create or manage keys in API keys (Pro plan and up).
Query parameters
is_publicbooleanfalse lists your own avatars (with their framing); true lists the public avatar library instead.
Default: false
cursorintegerPagination cursor from the previous page's next_cursor. Omit or pass 0 for the first page.
Default: 0
limitintegerMaximum avatars to return per page. Range 1–100; defaults to 20.
Default: 20
Responses
200Successful Response
application/json
dataGetAvatarsResponse | nullrequirednullableThe endpoint-specific payload. See this endpoint's response schema for its fields; null only when the operation returns no payload.
avatarsAvatarDto[]requiredAvatars on this page, newest first: your own avatars, or the public library when the request sets is_public=true.
aspect_ratiosstring[]Aspect ratios this avatar was prepared for (1:1 / 9:16 / 16:9). Choose a matching aspect_ratio when generating a video.
avatar_idstringrequiredUnique avatar identifier. Pass it as avatar_id when generating a talking video.
created_atintegerUnix timestamp (seconds) when the avatar was created.
default_voice_idstringThe 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.
framingAvatarFraming[] | nullnullableCurrent 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.
aspect_ratiostringrequiredAspect ratio this framing applies to.
image_urlstring | nullnullableURL of the reference image videos in this aspect ratio currently use.
offset_xnumber | nullnullableHorizontal position of the framed area within the room it can move, from -1 to 1: -1 touches the left edge, 0 is centered, 1 touches the right edge. It has no effect when the framed area already spans the full width. null when zoom is null.
offset_ynumber | nullnullableVertical position of the framed area within the room it can move, from -1 to 1: -1 touches the top edge, 0 is centered, 1 touches the bottom edge. It has no effect when the framed area already spans the full height. null when zoom is null.
zoomnumber | nullnullableZoom level, at least 1. 1 is the largest area of this aspect ratio that fits in the avatar's source image (the widest framing, e.g. full body); 2 halves the framed width and height, making the person appear twice as large. null for avatars created before framing was supported.
thumbnail_urlstringrequiredURL of the avatar's preview thumbnail image.
next_cursorintegerCursor for the next page; pass it back as cursor. 0 means no more pages.
messagestringHuman-readable status message; "success" on a successful call.
server_timestring · date-timerequiredServer-side timestamp when the response was produced, in ISO 8601 format (UTC).
defaultError response. All failures share one 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 (useful for AI agents).
application/json
errorErrorDetailrequiredcodeintegerrequiredMachine-readable error code. Mirrors the HTTP status for transport-level failures (e.g. 401, 404, 422, 500) and may carry a business-specific code otherwise.
detailsstring | nullnullableOptional structured detail about the failure, e.g. a JSON string of per-field validation errors on a 422. Absent when there is nothing extra to report.
hintstring | nullnullableActionable next step for resolving the error, written for both humans and AI agents (e.g. how to fix the request, or where to obtain an API key). May be absent.
messagestringrequiredHuman-readable explanation of what went wrong. Safe to log or surface to end users; not localized.