API Coming soon
Image in, Spine 4.2 animation out — from your own code.
The API is coming soon. It will run the same pipeline as the app, over HTTPS, as part of the Pro plan; jobs will cost the same tokens as in the app. The reference below is a preview.
Authentication
Create a key in My account > API keys. A key is shown once; we store only its hash. Send it in every request:
Authorization: Bearer a4m_your_key_here
Keys work while your account is on the Pro plan. Revoke a key in My account at any time. Keep keys on your server, never in a web page or an app bundle.
Limits
- 60 requests per minute per key (answer
429 rate_limitedwith aRetry-Afterheader). - Up to 2 jobs in progress and 20 jobs per day per account, as in the app.
- Images: PNG, JPG or WebP, up to 10 MB, at least 256 px on each side. A transparent background works best; a flat single-colour background is removed automatically.
Cost
One symbols job from an image = 20 tokens; one character = 60 tokens; one job from a description (prompt) = 30 tokens, one character from a description = 70 tokens, 5 new picture variants = 5 tokens. Tokens are charged when the request is accepted. A job that fails on our side is refunded automatically. Pro jobs go through the priority queue.
Endpoints
Base URL: https://animate4me.com
POST/api/v1/jobs
Multipart form. Fields: image (file) or prompt (text, 3 to 400 characters, see below), category = symbols (symbols and objects) or characters (a character, image only, image or prompt; a character from a prompt gets idle only), templates (optional, repeat the field for each animation, e.g. idle, win; leave out for the default set), name (optional).
Templates per category. symbols: the symbol list idle, land, win, dissolve, anticipation, or the object list appear, open, open_idle, collect, explode, press, hit (idle is in both). One job uses one list; mixing the two lists returns 400 mixed_templates. characters: idle and win, always both.
curl -X POST https://animate4me.com/api/v1/jobs \
-H "Authorization: Bearer $A4M_KEY" \
-F category=symbols \
-F templates=idle -F templates=win \
-F image=@ring.png
201 {"job_id": "3f9c0a1b2c3d4e5f", "status": "queued", "tokens": 4980}
GET/api/v1/jobs/{job_id}
curl https://animate4me.com/api/v1/jobs/3f9c0a1b2c3d4e5f \
-H "Authorization: Bearer $A4M_KEY"
{"id": "3f9c0a1b2c3d4e5f", "status": "done", "progress": 100, "stage": "animation",
"error": null, "category": "symbols", "templates": ["idle", "win"], "name": "ring",
"created_at": "2026-11-06T18:00:00Z", "finished_at": "2026-11-06T18:00:41Z",
"version": 1, "animations": ["idle", "win"],
"zip_url": "/api/v1/jobs/3f9c0a1b2c3d4e5f/zip"}
status goes queued → running → done or failed (then error says why and the tokens are back). Poll every 3 to 5 seconds; a symbols job usually takes under a minute, a character job several minutes.
GET/api/v1/jobs/{job_id}/zip
The Spine 4.2 export of the latest version: skeleton.json, skeleton.atlas, the PNG page and a README. 409 job_not_done until the job is done.
curl -L -o ring_spine42.zip https://animate4me.com/api/v1/jobs/3f9c0a1b2c3d4e5f/zip \
-H "Authorization: Bearer $A4M_KEY"
From a description: prompt, then pick a picture
Send prompt instead of image. We paint 5 picture variants of one object on a transparent background, then the job waits with status = choose and lists them in variants. Pick one (free) and the job continues to the animation like an uploaded image; or ask for 5 new variants (5 tokens).
curl -X POST https://animate4me.com/api/v1/jobs -H "Authorization: Bearer $A4M_KEY" \
-F category=symbols -F prompt="a golden treasure chest with rubies"
{"id": "8a1d…", "status": "choose", "source": "prompt", "prompt": "a golden treasure chest with rubies", "round": 1,
"variants": [{"id": "r1_1", "round": 1, "url": "/api/v1/jobs/8a1d…/variants/r1_1.webp",
"png_url": "/api/v1/jobs/8a1d…/variants/r1_1.png"}, …],
"can_regenerate": true, "regen_price": 5, …}
POST/api/v1/jobs/{job_id}/pick
JSON {"variant": "r1_3"}. Free. The job goes back to queued and finishes like any other job.
POST/api/v1/jobs/{job_id}/regenerate
5 new variants of the same description (5 tokens), added to variants. If a round fails on our side its tokens come back and the earlier variants stay available.
GET/api/v1/jobs/{job_id}/variants/{id}.png
A variant as a transparent PNG (.webp for a small preview).
A whole run in one script
JOB=$(curl -s -X POST https://animate4me.com/api/v1/jobs -H "Authorization: Bearer $A4M_KEY" \
-F category=symbols -F templates=appear -F templates=open -F image=@crown.png | python3 -c 'import json,sys;print(json.load(sys.stdin)["job_id"])')
until curl -s https://animate4me.com/api/v1/jobs/$JOB -H "Authorization: Bearer $A4M_KEY" | grep -Eq '"status": ?"(done|failed)"'; do sleep 4; done
curl -s -o crown_spine42.zip https://animate4me.com/api/v1/jobs/$JOB/zip -H "Authorization: Bearer $A4M_KEY"
Errors
Errors are JSON: {"error": "code", "message": "plain English"}.
401 unauthorized— missing, wrong or revoked key.403 api_not_in_plan— the account is not on the Pro plan.402 insufficient_tokens— nothing was charged; top up or wait for next month's tokens.400 mixed_templates— animations from both lists in onesymbolsjob; nothing was charged.413/422 bad_image— the image was rejected (reasonsays why); nothing was charged.400 content_blocked— the image or description was blocked by our content policy; nothing was charged.400 bad_prompt— the description is empty or too long.409 not_choosing— pick / regenerate only while the job shows its variants.429 rate_limited,429 too_many_active,429 daily_limit— slow down.404 not_found— no such job on your account.