Crie personagens a partir do catálogo, veja a prévia e baixe arquivos com esqueleto e animações direto do seu código, do seu pipeline de jogo ou do seu assistente de IA. Mesmas regras do estúdio: a cota e a licença seguem o plano da sua conta.
Começar em 3 passos
Entre no estúdio, abra o menu da conta e crie uma chave de API. Ela aparece uma única vez: guarde num cofre ou variável de ambiente. Criar chave no estúdio →
Sorteie um personagem (ou monte a receita com ids do catálogo):
Envie a chave no cabeçalho Authorization: Bearer avs_… em toda chamada. A API não aceita o cookie do site e não libera CORS: use a chave só no servidor, nunca em JavaScript de página. Cada conta pode ter até 5 chaves ativas, com escopos, e revogar uma corta o acesso na hora.
Escopo
Libera
catalog:read
catálogos (personagem e tipos de modelo) e validação de receitas
avatars:write
sortear, prévias em imagem e criação por IA (gasta créditos)
exports:write
criar arquivos (usa a cota), status, download e histórico
Limites e cota
A cota é da conta: o que você baixa pelo estúdio, pela API e pelo MCP soma no mesmo contador. Os cabeçalhos RateLimit-Limit, RateLimit-Remaining e RateLimit-Reset mostram o limite por minuto; ao estourar, a resposta é 429 com Retry-After.
Créditos de IA (criar 3, com foto 4, ajuste 2, repetido 1)
só pacotes comprados
30 por mês + pacotes
Arquivos, idempotência e licença
Fila:POST /exports responde 202 com o id. Consulte GET /exports/{id}?wait=20: a resposta espera até 25 s e evita várias consultas.
Idempotência: mande Idempotency-Key no POST /exports. Repetir com a mesma chave e o mesmo corpo em 24 h devolve o mesmo arquivo, sem gastar cota de novo.
Download: o arquivo fica 15 minutos no servidor. Baixe com a sua chave ou pelo download.url assinado (não precisa de chave; ideal para entregar a quem pediu).
Licença: todo arquivo leva um número AS-XXXXX-XXXXX (no GLB, no PNG e no LICENCA.txt dos .zip). Qualquer pessoa confere em GET /licenses/{id}, sem ver o dono.
Receitas: mande config (peças e cores) ou code (o código curto do link do estúdio). Ids errados viram o padrão; /avatars/validate explica o que mudou.
GLB compactado:"compress": true (só GLB) entrega a malha com Draco, em geral 70 a 80% menor e igual na tela. Quem abre precisa de um decodificador Draco (Blender, three.js com DRACOLoader, Babylon e Unity glTFast têm). O mesmo modelo com ou sem compressão conta como um download só.
Animais, humanos e outros modelos
Além do personagem chibi/voxel, a API monta os outros tipos do estúdio, cada um com a sua receita { kind, name, ...campos, palette }: creature (animais Fofo, Low poly e Voxel; cachorro e gato com raças e traços), tree (natureza), critter (Animais Cartoon de pelúcia, também com raças e traços), human (humano realista com guarda-roupa), toon (Cartoon), building, prop, vfx e world. Todos abrem também no plano grátis, com a mesma cota, a mesma licença e a mesma fila do estúdio.
Leia o catálogo do tipo: espécies, raças com os traços e as cores de cada uma, os traços que cada espécie aceita, zonas de cor e o que cada uma pinta e as animações.
Raça e traços: a raça traz orelhas, focinho, cauda e pelagem (e pernas e corpo nos animais Fofo); cada traço em traits troca só aquele detalhe por cima da raça (doberman de orelha caída = breed: "doberman", traits: { ears: "floppy" }). Traço que a espécie não aceita volta como aviso wrong_species.
Cores: cada espécie dos Animais Cartoon pinta só as zonas dela (species[].zones; leather é a cor das marcas: pintas do dálmata, caramelo do doberman). Cor numa zona que o modelo não usa volta como unused_zone.
Animações:clips leva os ids do modelo (/models/validate devolve a lista); as feitas no animador do estúdio entram em myClips (rig creature para animais, human para humano e Cartoon).
Planos: todo tipo abre também no grátis (prévia, validação, IA com créditos e download, que conta na cota do mês com licença pessoal). O Pro tira o limite de downloads e dá licença comercial, sprites 256 px / 8 direções e lote de personagens (pro_only no grátis). GET /me lista em kinds o que a sua conta pode usar.
Erros
Todo erro vem no mesmo formato: { "error": { "code", "message", "docs" } }. Use o code no seu código (ele não muda); a mensagem é para pessoas.
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: conecte o Claude e outros assistentes
O servidor MCP em /mcp deixa um assistente de IA montar personagens com você: ele consulta o catálogo, mostra a prévia em imagem e, quando você aprovar, exporta e entrega o link. Usa a mesma chave, a mesma cota e a mesma licença da 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.
Console MCP (testar aqui)
Referência
Conta, plano e cota
GET/me
Conta, plano e cota
Mostra o plano, os downloads usados no mês, os aleatórios restantes do dia, os limites e a chave usada.
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).
Peças, estilos, animações e cores
GET/catalogcatalog:read
Catálogo de peças, opções e animações
Tudo o que pode entrar numa receita: ids de peça por categoria, estilos, zonas de cor, paletas, animações, presets e opções de exportação do personagem. Com `kind` (creature, critter, human, toon, tree, building, prop, vfx, world), o catálogo daquele tipo de modelo: espécies, raças com traços e cores padrão, traços que cada espécie aceita, guarda-roupa, zonas de cor e o que cada uma pinta, faixas dos controles, animações e opções de exportação. Só metadados; nomes no 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 e pré-visualizar
POST/avatars/validatecatalog:read
Validar receita
Normaliza a receita (ids e cores conferidos), devolve o código curto e explica o que foi trocado, o que ficou no padrão e o que fica escondido (ex.: elmo esconde cabelo). Não gasta cota.
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
Sortear personagens
Gera de 1 a 10 receitas coerentes com o estilo (ou de qualquer estilo). Com `seed` o resultado se repete. No grátis conta no limite diário de aleatórios.
{
"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
Prévia em imagem
Retrato PNG de 128 ou 256 px renderizado no servidor. Não gasta download; tem limite por hora (grátis 30, Pro 300, somado com /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.
Animais, humanos e outros modelos
POST/models/validatecatalog:read
Validar receita de modelo
Normaliza a receita de um tipo de modelo ({kind, recipe} ou {kind, code}) com as regras do tipo, as mesmas do estúdio e da exportação, e explica o que mudou: campo que o tipo não tem (unknown_field), id fora da lista (unknown_option), raça ou traço de outra espécie (wrong_species), peça do outro gênero (wrong_gender), número preso na faixa (adjusted), cor inválida (invalid_color), zona que o modelo não pinta (unused_zone) ou fixa (fixed_zone), itens descartados (dropped). Devolve a receita normalizada, o código (base64url do JSON) e as animações que o modelo tem. Não gasta cota.
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
Prévia de modelo em imagem
Retrato PNG de 128 ou 256 px de um modelo (animal, animal cartoon, humano, cartoon, árvore...), renderizado no servidor como o PNG do download, sem licença. Não gasta download; usa o mesmo limite por hora da prévia do personagem.
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.
Arquivos (usam a cota de downloads)
POST/exportsexports:write
Criar arquivo (GLB, OBJ, sprites, PNG)
Valida, desconta 1 download da cota (lote: N) e coloca o arquivo na fila. Responde 202 com o id; acompanhe em GET /exports/{id}. Personagem: `config` ou `code`. Modelo: `kind` + `recipe` (ou `kind` + `code`), com as animações do modelo em `clips` (POST /models/validate lista quais) e, se quiser, as do animador em `myClips`. `compress: true` (só GLB) entrega o GLB com Draco, bem menor; o mesmo modelo com ou sem compressão conta como um download só. Use o cabeçalho Idempotency-Key para repetir com segurança.
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
Status do arquivo
Status, progresso, licença e, quando pronto, um link assinado de download (15 min). Com `wait` (até 25 s) a resposta espera terminar.
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
Baixar o arquivo
O arquivo pronto (fica 15 min no servidor). Com a chave no cabeçalho, ou sem chave usando o `token` do link assinado.
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
Histórico de downloads
Downloads da conta (estúdio, API e MCP) com número e tipo da licença, do mais novo ao mais antigo. Pagine com `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).
Criação por IA (usa créditos de IA)
GET/creditsavatars:write
Saldo de créditos de IA
Saldo (comprados + do Pro no mês), custo de cada tipo de geração e se a IA está disponível.
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
Criar personagem com IA
A IA (Claude) escolhe peças e cores do catálogo a partir de uma descrição, de uma foto de referência (data URL JPEG/PNG/WebP, até ~1,2 MB) ou ajusta uma receita (mode: refine, com `version` ou a receita atual). `target` (ou `kind`) escolhe o que criar: avatar (chibi/voxel, padrão; peças do catálogo e peças sob medida), creature (animais Fofo/Low poly/Voxel; em cachorro e gato a IA escolhe raça e traços para as características pedidas aparecerem, como "doberman de orelhas em pé"), human (humano realista), toon (Cartoon) ou critter (Animais Cartoon de pelúcia: espécie, raça e traços no cachorro e no gato, tamanho e cores das zonas da espécie); nos quatro últimos a IA usa só o catálogo do tipo e o resultado vem em `recipe` ({kind, ...}, a mesma receita de POST /exports e /models/preview), com avisos do que foi trocado (closest_species quando o bicho não existe e virou o mais parecido, unused_zone, wrong_species, unknown_option). Custa 3 créditos por texto, 4 com foto, 2 por ajuste e 1 quando o mesmo pedido já foi feito; cobrado antes e devolvido se falhar. Vale em qualquer plano: só precisa de créditos. Espera até 20 s; se não terminou, responde 202 com o id para GET /ai/generations/{id}. Pessoas reais e marcas viram traços 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"
}