Skins
Generate a skin
Draws a 64x64 player skin from a description: the face, hair and clothes, with the second layer used for hair, collars and boots that stand off the body. Takes a few minutes; poll job (skin:<id>) at GET /jobs/{job}, then fetch the PNG.
Charged to the key owner's own credits, refunded in full if it fails. Takes a personal API key.
/skinsBody
promptstringrequiredmax 400 charactersWho it is.
namestringIts name. Absent uses the prompt.
variantstringdefault "wide"Arm width.
Options: wide, slim
Response · 202
Accepted. Poll job until it leaves generating.
idstringrequiredThe skin's id.
namestringrequiredIts name.
variantstringrequiredArm width: wide (Steve) or slim (Alex).
Options: wide, slim
statusstringrequiredWhere its generation got to. A skin made in the Studio is ready.
Options: generating, ready, error
errorstringrequiredWhy the generation failed. Null otherwise.
promptstringrequiredWhat it was generated from, if it was.
createdAtstringrequiredISO 8601.
updatedAtstringrequiredISO 8601.
jobstringrequiredIts job handle, skin:<id>.
Error codes
Branch on error.code, never on the message.
invalid_json400The request body wasn't a JSON object.
invalid_request400Something in the body or query is wrong. message says what.
invalid_api_key401The key isn't one of ours, or it has been revoked.
missing_api_key401No Authorization: Bearer header was sent.
wrong_key_kind401An MCP key sent to the REST API, or an API key sent to the MCP server. Each only opens its own.
insufficient_credits402Not enough AI Credits to run this. Nothing was started or charged.
account_suspended403The account is suspended, so its keys open nothing. message says until when, if the suspension has an end date.
forbidden403Valid key, but not permitted to do this in this pack.
plan_required403The key is valid, but its account is on Starter. The API needs a paid plan.
not_found404No such pack, asset or job.
skin_limit_reached409The account holds as many skins as it may. Delete one first.