API reference

Full Sprite AI REST API reference: endpoints for generating sprites and animations, request and response formats, parameters, and example calls.

GET/api/me

Your account: plan, balance, and rate limit.

curl https://www.sprite-ai.art/api/me \
-H "Authorization: Bearer sai_sk_your_key_here"
200 OK
{
"user_id": "...",
"email": "you@example.com",
"plan": "studio",
"rate_limit_per_minute": 60,
"monthly_token_allotment": 1000,
"monthly_tokens_used": 340,
"purchased_token_balance": 0,
"total_token_balance": 660,
"monthly_renews_at": "2026-07-01T00:00:00.000Z",
"billing_period": "monthly"
}

GET/api/balance

Token balance only, a subset of /api/me.

curl https://www.sprite-ai.art/api/balance \
-H "Authorization: Bearer sai_sk_your_key_here"
200 OK
{
"plan": "studio",
"total_token_balance": 660,
"purchased_token_balance": 0,
"monthly_token_allotment": 1000,
"monthly_tokens_used": 340,
"monthly_renews_at": "2026-07-01T00:00:00.000Z",
"billing_period": "monthly"
}

GET/api/asset-types

Asset types with their token cost and size range.

curl https://www.sprite-ai.art/api/asset-types \
-H "Authorization: Bearer sai_sk_your_key_here"
TypeToken costSize
character132–400 px
item132–400 px
creature132–400 px
tile48–512 px
background48–512 px
ui48–512 px
effect48–512 px

GET/api/limits

Request bounds and token costs for your key.

curl https://www.sprite-ai.art/api/limits \
-H "Authorization: Bearer sai_sk_your_key_here"
200 OK
{
"rate_limit_per_minute": 60,
"sprite": { "min_size": 8, "max_size": 512, "prompt_max_length": 1500 },
"animation": { "min_frames": 4, "max_frames": 24, "frames_must_be_even": true }
}

POST/api/sprites

Generate a still sprite. Synchronous: the PNG comes back inline. Costs 1 token (4 for tile, background, ui, effect).

FieldTypeRequiredDescription
promptstringYesWhat to draw. 3–1500 chars.
asset_typestringNoInferred from the prompt when omitted.
widthintegerNo8–512 px. Default 64.
heightintegerNo8–512 px. Default 64.
directionstringNoFacing direction, e.g. south.
camera_perspectivestringNoe.g. side, top_down, isometric.
publicbooleanNoAdd to the public gallery. Default false.
reference_asset_idstringNoUUID of a sprite you own, used as a style reference.
curl https://www.sprite-ai.art/api/sprites \
-H "Authorization: Bearer sai_sk_your_key_here" \
-H "Content-Type: application/json" \
-d '{ "prompt": "a knight with a blue cape", "asset_type": "character" }'
201 Created
{
"id": "a1b2c3d4-...",
"status": "completed",
"width": 64,
"height": 64,
"assetType": "character",
"tokensSpent": 1,
"image": { "format": "png", "pngBase64": "iVBORw0KGgoAAAANS..." }
}

The PNG is inline in image.pngBase64. There is no hosted URL.

POST/api/sprites/import

Add a sprite you already have (a local PNG, or any pixel sprite) and get back an id you can animate (source_generation_id) or use as a style reference (reference_asset_id). Free: importing spends no tokens and runs no AI.

The image must be a single sprite (PNG, JPEG, or WebP), 16–256px per side, not a sprite sheet. Imported sprites are always private.

FieldTypeRequiredDescription
imagestringYesThe sprite, as base64 or a data:image/...;base64 URL.
titlestringNoLabel for the sprite. Default "Imported sprite".
asset_typestringNoAsset-type tag (metadata only).
curl https://www.sprite-ai.art/api/sprites/import \
-H "Authorization: Bearer sai_sk_your_key_here" \
-H "Content-Type: application/json" \
-d '{ "image": "<png base64>", "title": "hero" }'
201 Created
{
"id": "a1b2c3d4-...",
"status": "completed",
"width": 64,
"height": 64,
"title": "hero"
}

GET/api/sprites/{id}

Fetch one of your past sprites.

curl https://www.sprite-ai.art/api/sprites/a1b2c3d4-... \
-H "Authorization: Bearer sai_sk_your_key_here"

GET/api/sprites

List your sprites and animations, newest first.

ParameterTypeDescription
limitinteger1–100. Default 20.
offsetintegerFor pagination. Default 0.
statusstringFilter by status.
asset_typestringFilter by type, e.g. animation.
curl "https://www.sprite-ai.art/api/sprites?limit=20" \
-H "Authorization: Bearer sai_sk_your_key_here"

POST/api/animations

Start an animation job from a source sprite. Asynchronous: returns an id immediately, then you poll until it finishes (~90s). The token cost scales with frame_count.

Reference the source by source_generation_id: the id of a sprite you own, from POST /api/sprites (generate) or POST /api/sprites/import. No image bytes travel through this call; we fetch them server-side. The source must be a single still sprite, no larger than 256px on either side, not a sprite sheet or an existing animation.

FieldTypeRequiredDescription
source_generation_idstringYesUUID of a sprite you generated or imported.
presetstringYesMotion preset (Walk, Run, Idle, ...) or Custom.
frame_countintegerNoEven, 4–16. Default 8. Drives the token cost.
custom_promptstringCustom onlyFree-form motion. Required when preset is Custom.
publicbooleanNoAdd to the public gallery. Default false.

The Custom preset requires a paid (Creator or higher) plan. On a free plan it returns 402 with code upgrade_required. Built-in presets work on any plan.

curl https://www.sprite-ai.art/api/animations \
-H "Authorization: Bearer sai_sk_your_key_here" \
-H "Content-Type: application/json" \
-d '{ "source_generation_id": "a1b2c3d4-...", "preset": "Walk", "frame_count": 8 }'
202 Accepted
{ "id": "a1b2c3d4-...", "status": "processing" }

GET/api/animations/{id}

Poll an animation job. While running it returns processing with an optional progress (0–1). When status is completed, the sheet is in image.spritesheetBase64. On failed, tokens are refunded automatically. Poll about every 5 seconds.

# poll every ~5s until status is completed or failed
curl https://www.sprite-ai.art/api/animations/a1b2c3d4-... \
-H "Authorization: Bearer sai_sk_your_key_here"
200 OK (completed)
{
"id": "a1b2c3d4-...",
"status": "completed",
"frameWidth": 64,
"frameHeight": 64,
"frameCount": 8,
"fps": 12,
"image": { "format": "png", "spritesheetBase64": "iVBORw0KGgoAAAANS..." }
}

A single horizontal-strip PNG. Slice it with frameCount, frameWidth, frameHeight.

POST/api/animations/{id}/cancel

Cancel a running job and refund its tokens. If the job already completed or failed, it returns an error since there is nothing to cancel.

curl -X POST https://www.sprite-ai.art/api/animations/a1b2c3d4-.../cancel \
-H "Authorization: Bearer sai_sk_your_key_here"
200 OK
{ "id": "a1b2c3d4-...", "status": "cancelled" }

POST/api/restyles

Redraw a sprite you own in a different style: same character, same pose, new look. Asynchronous like animations: returns an id immediately, then you poll until it finishes (~15s typical, up to ~90s if a GPU worker has to boot). Flat cost: 4 tokens, presets and custom prompts alike.

Reference the source by source_generation_id: the id of a sprite you own, from POST /api/sprites (generate) or POST /api/sprites/import. No image bytes travel through this call; we fetch them server-side. The source must be 16-512px on each side; the result comes back at the source's size.

FieldTypeRequiredDescription
source_generation_idstringYesUUID of a sprite you generated or imported, 16-512px per side.
presetstringOne of preset / custom_promptLocked style: fire, ice, gold, zombie, holy, cursed, poison, royal, shadow, steampunk.
custom_promptstringOne of preset / custom_promptFree-form style instruction, up to 500 chars. Same price as a preset, any plan.
publicbooleanNoAdd to the public gallery. Default false.
curl https://www.sprite-ai.art/api/restyles \
-H "Authorization: Bearer sai_sk_your_key_here" \
-H "Content-Type: application/json" \
-d '{ "source_generation_id": "a1b2c3d4-...", "preset": "gold" }'
202 Accepted
{ "id": "a1b2c3d4-...", "status": "processing" }

GET/api/restyles/{id}

Poll a restyle job. While running it returns processing; when status is completed, the sprite is in image.pngBase64 at native resolution. On failed, tokens are refunded automatically. Poll about every 3 seconds.

# poll every ~3s until status is completed or failed
curl https://www.sprite-ai.art/api/restyles/a1b2c3d4-... \
-H "Authorization: Bearer sai_sk_your_key_here"
200 OK (completed)
{
"id": "a1b2c3d4-...",
"status": "completed",
"width": 64,
"height": 64,
"isPublic": false,
"slug": null,
"image": { "format": "png", "pngBase64": "iVBORw0KGgoAAAANS..." }
}

POST/api/restyles/{id}/cancel

Cancel a running restyle and refund its tokens. If the job already completed or failed, it returns an error since there is nothing to cancel.

curl -X POST https://www.sprite-ai.art/api/restyles/a1b2c3d4-.../cancel \
-H "Authorization: Bearer sai_sk_your_key_here"
200 OK
{ "id": "a1b2c3d4-...", "status": "cancelled" }

POST/api/normal-maps

Generate a tangent-space normal map for a sprite or animation you own, for dynamic lighting in a game engine. Our own model, trained on real 3D geometry rather than edge-detect heuristics: the output encodes the subject's actual form, and its alpha channel is a pixel-exact copy of the source silhouette. Synchronous: the finished PNG comes back inline in a few seconds, no job to poll. Cost: 1 token per frame.

An animation source is normal-mapped per frame automatically (the model is deterministic, so frames never flicker) and comes back as the same-layout horizontal strip. Load it in your engine exactly like the animation itself.

FieldTypeRequiredDescription
source_generation_idstringYesUUID of a sprite or animation you own. Frames must be 32-256px per side.
strengthnumberNoDetail injection, 0-5, default 0. 0 is truest to the geometry; ~2.5 re-adds the sprite's drawn shading for a hand-crafted look.
flip_greenbooleanNoFlip green for DirectX / +Y-down engines (Unreal). Default false = OpenGL / +Y-up (Godot, Unity, WebGL).
columnsnumberNoOnly for a still that is really a sprite sheet: its column count. Ignored for animations (layout is known). columns x rows <= 24.
rowsnumberNoSheet row count, with columns. Default 1.
curl https://www.sprite-ai.art/api/normal-maps \
-H "Authorization: Bearer sai_sk_your_key_here" \
-H "Content-Type: application/json" \
-d '{ "source_generation_id": "a1b2c3d4-..." }'
201 Created
{
"id": "e5f6a7b8-...",
"status": "completed",
"width": 64,
"height": 64,
"frameCount": 1,
"tokensSpent": 1,
"image": { "format": "png", "pngBase64": "iVBORw0KGgoAAAANS..." }
}

Errors

Every error returns the same JSON shape. Branch on code, not message.

{ "code": "invalid_request", "message": "...", "details": {} }
HTTPCodeCause
400invalid_requestBody failed validation.
401invalid_api_keyKey missing or not recognized.
402insufficient_tokensNot enough tokens.
402upgrade_requiredNeeds a paid plan.
403api_key_revokedThe key was revoked.
404not_foundNot found, or not yours.
422nsfw_promptPrompt rejected by the filter.
429rate_limitedToo many requests.
500provider_failureRender failed. Tokens refunded.

Last updated August 11, 2026

We use cookies to enhance your experience. Essential cookies are required for the site to function. You can choose to accept all cookies or only essential ones.

Cookie policy