Animate4Me

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

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"}.