Crea personajes a partir del catálogo, mira la vista previa y descarga archivos con esqueleto y animaciones directo desde tu código, tu pipeline de juego o tu asistente de IA. Las mismas reglas del estudio: la cuota y la licencia siguen el plan de tu cuenta.
Empieza en 3 pasos
Entra al estudio, abre el menú de la cuenta y crea una clave de API. Se muestra una sola vez: guárdala en un gestor de secretos o una variable de entorno. Crear clave en el estudio →
Sortea un personaje (o arma la receta con ids del catálogo):
Envía la clave en la cabecera Authorization: Bearer avs_… en cada llamada. La API no acepta la cookie del sitio y no tiene CORS: usa la clave solo en tu servidor, nunca en JavaScript de página. Cada cuenta puede tener hasta 5 claves activas con alcances, y revocar una corta el acceso al instante.
Alcance
Permite
catalog:read
catálogos (personaje y tipos de modelo) y validación de recetas
avatars:write
personajes aleatorios, vistas previas en imagen y creación con IA (gasta créditos)
exports:write
crear archivos (usa la cuota), estado, descarga e historial
Límites y cuota
La cuota es de la cuenta: lo que descargas por el estudio, la API y el MCP suma en el mismo contador. Las cabeceras RateLimit-Limit, RateLimit-Remaining y RateLimit-Reset muestran el límite por minuto; al superarlo recibes 429 con Retry-After.
Créditos de IA (crear 3, con foto 4, ajuste 2, repetido 1)
solo paquetes comprados
30 por mes + paquetes
Archivos, idempotencia y licencia
Cola:POST /exports responde 202 con el id. Consulta GET /exports/{id}?wait=20: la respuesta espera hasta 25 s y evita muchas consultas.
Idempotencia: envía Idempotency-Key en POST /exports. Repetir con la misma clave y el mismo cuerpo en 24 h devuelve el mismo archivo sin gastar cuota otra vez.
Descarga: el archivo queda 15 minutos en el servidor. Descárgalo con tu clave o por el download.url firmado (no necesita clave; ideal para entregarlo a quien lo pidió).
Licencia: cada archivo lleva un número AS-XXXXX-XXXXX (en el GLB, el PNG y el LICENCA.txt de los .zip). Cualquiera lo verifica en GET /licenses/{id} sin ver al dueño.
Recetas: envía config (piezas y colores) o code (el código corto del enlace del estudio). Los ids incorrectos vuelven al valor por defecto; /avatars/validate explica qué cambió.
GLB comprimido:"compress": true (solo GLB) entrega la malla con Draco, en general 70 a 80% más liviana e igual en pantalla. Quien lo abre necesita un decodificador Draco (Blender, three.js con DRACOLoader, Babylon y Unity glTFast lo tienen). El mismo modelo con o sin compresión cuenta como una sola descarga.
Animales, humanos y otros modelos
Además del personaje chibi/vóxel, la API arma los otros tipos del estudio, cada uno con su receta { kind, name, ...campos, palette }: creature (animales Suave, Low poly y Vóxel; perro y gato con razas y rasgos), tree (naturaleza), critter (Animales Cartoon de peluche, también con razas y rasgos), human (humano realista con guardarropa), toon (Cartoon), building, prop, vfx y world. Todos funcionan también en el plan gratis, con la misma cuota, licencia y cola del estudio.
Lee el catálogo del tipo: especies, razas con sus rasgos y colores, los rasgos que acepta cada especie, zonas de color y lo que pinta cada una, y las animaciones.
Raza y rasgos: la raza trae orejas, hocico, cola y pelaje (y patas y cuerpo en los animales Suave); cada rasgo en traits cambia solo ese detalle sobre la raza (dóberman de orejas caídas = breed: "doberman", traits: { ears: "floppy" }). Un rasgo que la especie no acepta vuelve como aviso wrong_species.
Colores: cada especie de Animales Cartoon pinta solo sus zonas (species[].zones; leather es el color de las marcas: manchas del dálmata, fuego del dóberman). Un color en una zona que el modelo no usa vuelve como unused_zone.
Animaciones:clips lleva los ids del modelo (/models/validate devuelve la lista); las hechas en el animador del estudio van en myClips (rig creature para animales, human para humano y Cartoon).
Planes: todo tipo se abre también en el gratis (vista previa, validación, IA con créditos y descarga, que cuenta en la cuota del mes con licencia personal). Pro quita el límite de descargas y suma licencia comercial, sprites de 256 px / 8 direcciones y lotes de personajes (pro_only en el gratis). GET /me lista en kinds lo que tu cuenta puede usar.
Errores
Todo error tiene el mismo formato: { "error": { "code", "message", "docs" } }. Usa el code en tu código (no cambia); el mensaje es para personas.
HTTP
code
message
401
missing_key
Send your API key in the header: Authorization: Bearer avs_...
401
invalid_key
API key not found or revoked.
403
not_verified
Confirm the account e-mail before using the API.
403
scope
This API key does not have the scope this endpoint needs.
429
rate_limited
Too many requests. Retry after the seconds in the Retry-After header.
400
invalid_json
The request body is not valid JSON.
413
too_large
The request body is too large.
400
config_required
Send the avatar as `config` (object) or `code` (recipe code).
400
invalid_code
The recipe code could not be decoded.
400
invalid_style
Unknown style. See `styles` in GET /api/v1/catalog.
400
invalid_family
Unknown family. See `families` in GET /api/v1/catalog (chibi, voxel).
400
invalid_count
`count` must be an integer in the allowed range.
400
invalid_seed
`seed` must be an integer from 0 to 4294967295.
400
invalid_size
`size` must be one of the allowed values.
400
format
`format` must be glb, obj, sprites or png.
400
fps
`fps` must be one of 12, 24, 30, 36 or 60.
400
clips
GLB and sprites need at least one valid clip id in `clips`.
400
sprites
`dirs` must be 1, 4 or 8 and `size` 64, 128 or 256.
402
pro_only
This option is available on the Pro plan (sprites over 128 px or 4 directions, character batches).
400
too_big
Too many sprite frames. Use fewer clips, directions, a lower fps or a smaller size.
400
batch
`batch.count` must be 1 to 50 and batches are GLB only.
429
busy
An export is already running for this account. Wait for it to finish.
402
quota
Monthly download quota reached (free plan). The Pro plan has unlimited downloads.
402
random_limit
Daily random limit reached on the free plan.
503
queue_full
The export queue is full. Try again in a minute.
404
not_found
Not found (or it belongs to another account, or it already expired).
403
expired_link
This download link is invalid or expired. Ask GET /api/v1/exports/{id} for a new one.
400
idempotency_key
`Idempotency-Key` must have 1 to 255 visible ASCII characters.
422
idempotency_mismatch
This Idempotency-Key was already used with a different request body.
409
idempotency_in_progress
A request with this Idempotency-Key is still being processed.
402
credits
Not enough AI credits. Buy a credit pack in the studio.
503
ai_off
AI generation is not available right now.
429
ai_busy
An AI generation is already running for this account.
429
ai_daily
Daily AI generation limit reached for this account.
503
ai_paused
AI generation is paused for today. Try again tomorrow.
400
ai_prompt
`prompt` must have 3 to 1000 characters (or send an image).
400
ai_image
`image` must be a data URL of a JPEG, PNG or WebP image.
413
ai_image_size
The image is too large (max ~1.2 MB). Resize it and try again.
200
ai_refused
The AI declined this request. Describe the character differently.
200
ai_incomplete
The AI could not finish this character. Try a simpler description.
200
ai_bad_output
The AI answer was invalid. Your credits were returned; try again.
200
ai_failed
The AI service failed. Your credits were returned; try again.
400
ai_kind
`target` must be avatar, creature, human, toon or critter, and match the recipe or version being adjusted.
400
invalid_kind
Unknown model kind. See `kinds` (creature, critter, human, toon, tree, building, prop, vfx, world).
400
recipe_required
Send the model as `recipe` (object with its fields) or `code` (base64url JSON of the recipe).
400
item
`item` must be a part present in this recipe and the format glb or obj (characters, realistic human and Cartoon only).
400
compress
`compress` must be true or false (GLB only).
500
generic
Something went wrong on our side. Try again.
MCP: conecta Claude y otros asistentes
El servidor MCP en /mcp permite que un asistente de IA cree personajes contigo: consulta el catálogo, muestra la vista previa en imagen y, cuando apruebes, exporta y te entrega el enlace. Usa la misma clave, cuota y licencia que la API.
Character catalog: part ids by category (with styles and rules), styles, color zones, palettes, style presets, animation clips and export options. With kind (creature, critter, human, toon, tree, building, prop, vfx, world): that model kind's ids and options (species, breeds with traits and colors, traits each species accepts, wardrobe, zones and what they paint, clips, Pro flag). Call this first.
validate_avatar
Normalizes a recipe and explains problems (unknown ids, wrong category, invalid colors), defaults and hidden categories. Free.
random_avatar
1 to 5 random recipes, optionally of one style. A seed makes it reproducible. Counts toward the daily random limit on the free plan.
preview_avatar
Renders a PNG portrait (128 or 256 px) of the recipe so you and the user can see it. Does not use the download quota (hourly limit).
export_avatar
Creates the downloadable file: glb (rigged + animations), obj (zip), sprites (zip of sheets) or png (1024 px portrait); with item, just that one part (glb or obj). Uses 1 download from the monthly quota. Waits up to ~25 s and returns a download link valid for 15 minutes plus the license. Ask the user before calling.
validate_model
Normalizes a model recipe ({kind, recipe} or {kind, code}) with that kind's rules and explains what changed: unknown_field, unknown_option, wrong_species (breed or trait of another species), wrong_gender, adjusted (number clamped), invalid_color, unused_zone (that model does not paint this zone), fixed_zone. Returns the normalized recipe, its code and the animation clips it has. Free.
preview_model
Renders a PNG portrait (128 or 256 px) of a model recipe (animal, Cartoon animal, human, Cartoon, tree...). Does not use the download quota (hourly limit shared with preview_avatar).
export_model
Creates the downloadable file of a model recipe: glb (rigged + animations; a world without clips is a static map), obj (zip), sprites (zip of sheets) or png (1024 px portrait). Uses 1 download from the monthly quota (same quota and license as the studio, on any kind). Waits up to ~25 s and returns a download link valid for 15 minutes plus the license. Ask the user before calling.
ai_generate
SPENDS THE USER'S AI CREDITS: 3 for a new design, 2 to adjust (mode refine), 1 when the same request was made before; charged up front and refunded if it fails. Call it only when the user asks for an AI design and agrees to spend credits (composing from get_catalog yourself is free). The studio AI designs a recipe from the description: target avatar (chibi/voxel character, default), creature (animal: species, breed and traits so the asked characteristics show), human (realistic), toon (Cartoon) or critter (Cartoon plush animal); every target works on any plan and only needs AI credits. Refine: mode refine + version (asset.version of a previous result) or the current recipe/config. Waits up to ~25 s; if still running it returns { status: running, id }: call ai_generation. The result has config (avatar) or recipe ({kind, ...}) ready for preview_* and export_*, plus warnings and the credits spent.
ai_generation
Result of an ai_generate by id (kept 15 minutes); waits up to `wait` seconds (max 25). Does not spend credits.
get_export
Status of an export by id; waits up to `wait` seconds (max 25). When done, returns a fresh 15-minute download link.
account_status
Plan, license kind, downloads used and left this month, random rolls left today and limits.
Consola MCP (pruébalo aquí)
Referencia
Cuenta, plan y cuota
GET/me
Cuenta, plan y cuota
Devuelve el plan, las descargas usadas en el mes, los aleatorios restantes del día, los límites y la clave en uso.
200 OK
401 Missing or invalid API key.
403 The key lacks the scope, or the account e-mail is not confirmed.
429 Rate limited (see Retry-After and RateLimit-* headers).
Piezas, estilos, animaciones y colores
GET/catalogcatalog:read
Catálogo de piezas, opciones y animaciones
Todo lo que puede ir en una receta: ids de pieza por categoría, estilos, zonas de color, paletas, animaciones, presets y opciones de exportación del personaje. Con `kind` (creature, critter, human, toon, tree, building, prop, vfx, world), el catálogo de ese tipo de modelo: especies, razas con rasgos y colores por defecto, rasgos que acepta cada especie, guardarropa, zonas de color y lo que pinta cada una, rangos de los controles, animaciones y opciones de exportación. Solo metadatos; nombres en el idioma pedido.
lang
query
pt | en | es
kind
query
avatar | creature | tree | human | building | prop | vfx | world | toon | critter
avatar = chibi/voxel character (the response below); a model kind returns ModelCatalog.
category
query
head | hair | eyes | mouth | beard | helmet | body | legs | boots | gloves | back | handR | handL
Character only: parts of this category.
family
query
chibi | voxel
Character only: parts of this family (chibi or voxel).
kind=prop only: just the types of this group (the full prop catalog is large).
200 OK (Catalog, or ModelCatalog with kind)
400 Unknown kind (invalid_kind).
401 Missing or invalid API key.
403 The key lacks the scope, or the account e-mail is not confirmed.
429 Rate limited (see Retry-After and RateLimit-* headers).
Validar, sortear y previsualizar
POST/avatars/validatecatalog:read
Validar receta
Normaliza la receta (ids y colores verificados), devuelve el código corto y explica qué se reemplazó, qué quedó por defecto y qué queda oculto (p. ej. el casco oculta el pelo). Gratis.
403 The key lacks the scope, or the account e-mail is not confirmed.
429 Rate limited (see Retry-After and RateLimit-* headers).
POST/avatars/randomavatars:write
Personajes aleatorios
Genera de 1 a 10 recetas coherentes con el estilo (o de cualquier estilo). Con `seed` el resultado se repite. En el plan gratis cuenta en el límite diario de aleatorios.
{
"style": "mago",
"count": 2,
"seed": 42
}
200 OK
400 Invalid style, count or seed.
401 Missing or invalid API key.
402 Daily random limit reached (free plan).
403 The key lacks the scope, or the account e-mail is not confirmed.
429 Rate limited (see Retry-After and RateLimit-* headers).
POST/avatars/previewavatars:write
Vista previa en imagen
Retrato PNG de 128 o 256 px renderizado en el servidor. No gasta descarga; tiene límite por hora (gratis 30, Pro 300, sumado con /models/preview).
403 The key lacks the scope, or the account e-mail is not confirmed.
429 Rate limited (see Retry-After and RateLimit-* headers).
503 Render queue full.
Animales, humanos y otros modelos
POST/models/validatecatalog:read
Validar receta de modelo
Normaliza la receta de un tipo de modelo ({kind, recipe} o {kind, code}) con las reglas del tipo, las mismas del estudio y de la exportación, y explica qué cambió: campo que el tipo no tiene (unknown_field), id fuera de la lista (unknown_option), raza o rasgo de otra especie (wrong_species), pieza del otro género (wrong_gender), número ajustado al rango (adjusted), color inválido (invalid_color), zona que el modelo no pinta (unused_zone) o deja fija (fixed_zone), elementos descartados (dropped). Devuelve la receta normalizada, su código (JSON en base64url) y las animaciones del modelo. Gratis.
400 No recipe (recipe_required), invalid code (invalid_code) or unknown kind (invalid_kind).
401 Missing or invalid API key.
403 The key lacks the scope, or the account e-mail is not confirmed.
429 Rate limited (see Retry-After and RateLimit-* headers).
POST/models/previewavatars:write
Vista previa de modelo en imagen
Retrato PNG de 128 o 256 px de un modelo (animal, animal cartoon, humano, cartoon, árbol...), renderizado en el servidor como el PNG de la descarga, sin licencia. No gasta descarga; usa el mismo límite por hora que la vista previa del personaje.
403 The key lacks the scope, or the account e-mail is not confirmed.
429 Rate limited (see Retry-After and RateLimit-* headers).
503 Render queue full.
Archivos (usan la cuota de descargas)
POST/exportsexports:write
Crear archivo (GLB, OBJ, sprites, PNG)
Valida, descuenta 1 descarga de la cuota (lote: N) y pone el archivo en la cola. Responde 202 con el id; síguelo con GET /exports/{id}. Personaje: `config` o `code`. Modelo: `kind` + `recipe` (o `kind` + `code`), con las animaciones del modelo en `clips` (POST /models/validate las lista) y, si quieres, las del animador en `myClips`. `compress: true` (solo GLB) entrega el GLB con Draco, mucho más liviano; el mismo modelo con o sin compresión cuenta como una sola descarga. Usa la cabecera Idempotency-Key para reintentar con seguridad.
Idempotency-Key
header
string
Same key + same body within 24 h returns the same export without using quota again.
402 Free monthly quota reached (quota) or a Pro-only option: sprites over 128 px / 4 directions, batch (pro_only).
403 The key lacks the scope, or the account e-mail is not confirmed.
409 Idempotency-Key still in progress.
422 Idempotency-Key reused with another body.
429 Rate limited (see Retry-After and RateLimit-* headers).
503 Export queue full (quota returned).
GET/exports/{id}exports:write
Estado del archivo
Estado, progreso, licencia y, cuando está listo, un enlace firmado de descarga (15 min). Con `wait` (hasta 25 s) la respuesta espera a que termine.
id *
path
string
wait
query
integer
200 OK
401 Missing or invalid API key.
403 The key lacks the scope, or the account e-mail is not confirmed.
404 Unknown, expired or not yours.
429 Rate limited (see Retry-After and RateLimit-* headers).
GET/exports/{id}/fileexports:write
Descargar el archivo
El archivo listo (queda 15 min en el servidor). Con la clave en la cabecera, o sin clave usando el `token` del enlace firmado.
id *
path
string
token
query
string
From `download.url` (no API key needed).
200 File (model/gltf-binary, application/zip or image/png)
403 Invalid or expired signed link.
404 Unknown, expired or not yours.
GET/downloadsexports:write
Historial de descargas
Descargas de la cuenta (estudio, API y MCP) con número y tipo de licencia, de la más nueva a la más antigua. Pagina con `before`.
limit
query
integer
before
query
integer
Return downloads with id lower than this (use `next`).
200 OK
401 Missing or invalid API key.
403 The key lacks the scope, or the account e-mail is not confirmed.
429 Rate limited (see Retry-After and RateLimit-* headers).
Creación con IA (usa créditos de IA)
GET/creditsavatars:write
Saldo de créditos de IA
Saldo (comprados + del Pro en el mes), costo de cada tipo de generación y si la IA está disponible.
200 OK
401 Missing or invalid API key.
403 The key lacks the scope, or the account e-mail is not confirmed.
429 Rate limited (see Retry-After and RateLimit-* headers).
POST/ai/generateavatars:write
Crear personaje con IA
La IA (Claude) elige piezas y colores del catálogo a partir de una descripción, una foto de referencia (data URL JPEG/PNG/WebP, hasta ~1,2 MB) o ajusta una receta (mode: refine, con `version` o la receta actual). `target` (o `kind`) elige qué crear: avatar (chibi/voxel, por defecto; piezas del catálogo y piezas a medida), creature (animales Suave/Low poly/Vóxel; en perros y gatos la IA elige raza y rasgos para que aparezcan las características pedidas, como "dóberman de orejas erguidas"), human (humano realista), toon (Cartoon) o critter (Animales Cartoon de peluche: especie, raza y rasgos en perros y gatos, tamaño y colores de las zonas de la especie); en los cuatro últimos la IA usa solo el catálogo del tipo y el resultado llega en `recipe` ({kind, ...}, la misma receta de POST /exports y /models/preview), con avisos de lo que se reemplazó (closest_species cuando el animal no existe y se volvió el más parecido, unused_zone, wrong_species, unknown_option). Cuesta 3 créditos por texto, 4 con foto, 2 por ajuste y 1 cuando el mismo pedido ya se hizo; se cobra antes y se devuelve si falla. Vale en cualquier plan: solo necesita créditos. Espera hasta 20 s; si no terminó, responde 202 con el id para GET /ai/generations/{id}. Personas reales y marcas se vuelven rasgos genéricos.
Character (avatar)
{
"prompt": "a tall rapper with braids, dark sunglasses and a blue jacket",
"lang": "en"
}
Cartoon doberman (critter)
{
"target": "critter",
"prompt": "a doberman with pointy ears",
"lang": "en"
}
Low poly dalmatian (creature)
{
"target": "creature",
"prompt": "a low poly dalmatian puppy with spots and a red collar",
"lang": "en"
}