/api/me
FreeYour credit balance, plan, projects and available avatars.
curl https://aitachyon.com/api/me \
-H "Authorization: Bearer ait_your_token"Everything the app does, over HTTP: images, video, avatars, voiceovers, music and carousels. One key in one header, JSON in and out, no SDK. 60 endpoints, 32 of them free.
Base URL
https://aitachyon.com/api
Every request
Authorization: Bearer ait_your_token
Every request carries a personal API key as a bearer token in the Authorization header. The key acts as your account: keep it on a server, never in a page or an app people can download.
Authorization: Bearer ait_…ait_ followed by at least 40 letters, digits, dashes or underscores.GET and POST /api/tokens need a signed-in session: a key cannot list or create keys. A key can carry a spend cap per day or per month, a customer reference and an expiry.curl https://aitachyon.com/api/me \
-H "Authorization: Bearer ait_your_token"
# 200
{
"email": "[email protected]",
"billing": "wallet",
"wallet": {
"balance_usd": 10,
"markup_pct": null,
"rate": "+100% on video and avatars, +200% on images, audio and text"
},
"projects": [
{ "id": "8b1f2c4e-6d3a-4f5b-9c7e-2a1d0e9f8b7c", "name": "Spring launch" }
],
"avatars": [ … ]
}All paths below hang off https://aitachyon.com/api. Bodies are JSON both ways: send Content-Type: application/json on a POST.
projectId: GET /api/me lists your projects.img_, scn_, avt_, vo_ or vjob_ followed by its id. GET /api/generations/{ref} fetches any of them.DELETE /api/generations/{ref} deletes an item for good, file and entry; the charge stays on your ledger. POST /api/upload returns a ref (upl_…) for DELETE /api/uploads/{ref}. Both answer 200, or 404 for anything not yours. A project can also keep its uploads and generations for a set number of days only: ask us to turn it on.Retry-After and X-RateLimit-* headers.A refused call answers with a status and a JSON body that has an error sentence, and a code where there is one to branch on. A call refused before it runs is never charged.
| Status | Code | When |
|---|---|---|
| 400 | – | The body failed validation; details says which field. |
| 401 | – | No key, a malformed key, or a revoked one. GET /api/me says which. |
| 402 | INSUFFICIENT_BALANCE | Your prepaid balance does not cover the call; balance_usd is what is left. |
| 402 | KEY_SPEND_CAP | This key reached its cap; cap_usd, billed_usd and cap_window say how. |
| 402 | INSUFFICIENT_CREDITS | A plan account ran out of credits; hint explains how to switch to prepaid. |
| 404 | – | The project or the item is not yours, or does not exist: the same answer either way. |
| 429 | – | Too many calls of one kind; wait retryAfter seconds. |
| 500 | PROVIDER_ERROR, TIMEOUT, … | Something failed while running; retryable says whether to try again. |
| 503 | PROVIDER_UNAVAILABLE | The service behind the model refused on our side. Nothing was charged; pick another provider or retry later. |
{
"error": "Not authenticated."
}Messages and codes as the routes write them; balances and amounts are examples.
An image comes back in its response. The calls marked Async (video, avatars, 3D, video edits) answer at once with a pollUrl: GET it every few seconds until status is completed (with a signed link) or failed. These calls are charged when they start, and a job that fails is refunded in full, on its own ledger line.
processing, then completed or failed.GET /api/generations/{ref} returns it in any status, with a fresh link.curl https://aitachyon.com/api/scenes/generate \
-H "Authorization: Bearer ait_your_token" \
-H "Content-Type: application/json" \
-d '{
"projectId": "<project id>",
"prompt": "the product turning slowly on a kitchen counter",
"engine": "seedance-2.5",
"duration": 5,
"ratio": "16:9"
}'
# 200
{
"scene": {
"id": "0c7d3b9e-2f41-4a8e-9b6d-71e5a2c48f03",
"taskId": "<task id>",
"status": "processing",
"mode": "hd",
"engine": "seedance-2.5",
"resolution": "720p",
"audio": false,
"creditsCharged": 65,
"pollUrl": "/api/scenes/status/<task id>"
}
}Two open endpoints, no key needed, and neither spends anything. An agent on the MCP server gets the same answer by passing getCost: true to any paid tool.
GET /api/pricingprepaid.actions is the dollar price per unit for a prepaid balance; actions is the plan grid, in credits.POST /api/costsGET /api/wallet. On a plan, the credits listed for the call.curl https://aitachyon.com/api/pricing
{
"currency": "USD",
"credit_rate_usd": 0.058,
"prepaid": {
"basis": "Price per unit for a prepaid account: what the job cost to run, +100% on video and avatars, +200% on images, audio and text. …",
"actions": [
{
"action": "image_generation",
"group": "Images",
"label": "Image",
"variant": "Nano Banana",
"unit": "per image",
"markup_pct": 200,
"usd_low": 0.1008,
"usd_high": 0.1008
},
…
]
},
"actions": [ … ]
}Start here. Free, and the fastest way to check a token works.
Your credit balance, plan, projects and available avatars.
curl https://aitachyon.com/api/me \
-H "Authorization: Bearer ait_your_token"Every spend and refund, each linked to the job that caused it.
What you pay and what you owe, in your own prices: how the account pays, your price for every action and model, the period's usage by action and model (?period=this_month|last_month|30d, or unpaid for invoiced accounts), and your last 50 jobs.
Your library, newest first. Every item has a typed ref (img_, scn_, avt_, vo_, vjob_); page with ?before=next_before.
Your active API tokens (no secrets). Signed-in session only: a token cannot list or mint tokens.
Create a token; returned once. Signed-in session only. Optional: spend_cap_usd with cap_window day|month (jobs past it get a 402 KEY_SPEND_CAP), customer_ref (recorded on every charge), expires_in_days, can_mint (a platform key).
The MCP server over streamable HTTP. Point any MCP client here with your bearer token; nothing to install.
One item by its ref, in any status: poll a job and fetch its result with the same call.
curl https://aitachyon.com/api/generations/img_5fee6424-9a04-4f7c-8d82-5ece61c0d318 \
-H "Authorization: Bearer ait_your_token"Delete one item for good: its file, then its library entry (the charge stays on your ledger). 200 { deleted, ref, file_deleted }; 404 if it is not yours, or outside the project a project-bound key is tied to; 409 JOB_RUNNING while a job is still pending or processing.
Build on Aitachyon for your own users: one key per customer, each with its own spend cap, billed to your balance and reported per key.
With a platform key: create a key for one of your customers, with name, customer_ref, spend_cap_usd, cap_window (day|month) and expires_in_days. Returned once.
With a platform key: its active child keys, each with calls and billed USD over a range (?from=&to=, default this month), filterable by ?customer_ref=.
With a platform key: revoke one child key (?id=).
Pay as you go in dollars: each job costs its provider price plus your rate, itemised.
Whether this account can switch to prepaid, and at what rate.
Switch to prepaid. For an account with no subscription and no credits left.
Balance, spend today/7d/30d, burn per day, days left, spend by action, every charge with its cost.
GET https://aitachyon.com/api/wallet
{
"ledger": [
{
"at": "2026-11-01T09:30:12.000Z",
"kind": "charge",
"amount_usd": -0.1008,
"balance_after_usd": 9.9,
"action": "image_generation",
"model": "nanobanana",
"credits": 4,
"provider_cost_usd": 0.0336,
"markup_pct": 200,
"estimated": false,
"note": null
}
]
}A Stripe checkout for the amount you choose. The card is kept for automatic top-ups.
Automatic top-up: recharge X when the balance falls under Y. Signed-in session only: a token cannot change when your card is charged.
Text-to-image and image-to-image, on-brand when a brand is attached.
Generate an image. Providers differ in price; a people shot may add a finishing pass.
curl https://aitachyon.com/api/images/generate \
-H "Authorization: Bearer ait_your_token" \
-H "Content-Type: application/json" \
-d '{
"projectId": "<project id>",
"prompt": "product on linen, soft daylight",
"style": "Product Shot",
"width": 1024,
"height": 1280
}'Remove background, upscale, vectorize, replace background or inpaint.
See the art-directed prompt before spending anything.
Image concepts for a brand or product.
Scene generation and post-production. These are asynchronous: you get a task id to poll.
Generate a b-roll clip. Eight engines; flat-priced on the default tier, per-second on the others.
curl https://aitachyon.com/api/scenes/generate \
-H "Authorization: Bearer ait_your_token" \
-H "Content-Type: application/json" \
-d '{
"projectId": "<project id>",
"prompt": "the product turning slowly on a kitchen counter",
"engine": "seedance-2.5",
"duration": 5,
"ratio": "16:9"
}'Poll a scene until the mp4 is ready.
curl https://aitachyon.com/api/scenes/status/<task id> \
-H "Authorization: Bearer ait_your_token"Preview the art-directed video prompt, free.
Upscale a finished video to 1080p or 4K.
Reframe to another aspect ratio, generatively.
Transfer the motion and camera of a driving clip onto a still.
Retrofit lipsync onto an existing clip.
Dub a video into another language.
Remove the background, green-screen output.
Score a finished video for virality before you post it.
Assemble clips, voiceover and captions into a finished mp4.
Talking-head video from a photo or a trained likeness.
Avatar video from an avatar and a voiceover.
Poll an avatar render.
Create a reusable persona from a description.
Build a likeness of yourself from reference photos.
A presenter shot matched to your brand.
Plan a creator-style shoot, free.
Voiceover, cloned voices, music and sound effects.
Voiceover from a script.
Every voice you can use.
Hear a voice before committing, free.
Clone a voice from a sample; returns a reusable voice id.
Speak with a cloned voice.
A background track.
A short sound effect.
Read a website once, then everything you generate pulls from it.
Read a URL for its logo, colours, fonts and usable imagery. Free, and nothing is created.
Analyse a website into a brand kit.
Create a brand kit by hand.
Generate a logo.
An ad script from a brief.
Headlines, CTAs and captions, free.
Platform-sized captions.
Distinct campaign angles for one product.
A code-rendered carousel on your real brand theme.
Models, uploads and signed URLs.
An image turned into a downloadable GLB.
Poll a 3D job.
Upload an image, video or audio file to your account. Returns path, a signed url and a ref (upl_...) to delete it with.
Delete for good one file POST /api/upload stored, by the ref it returned. 200 { deleted }; 404 if it is not yours, already gone, or outside the project a project-bound key is tied to. A pinned copy is a library image: delete it with DELETE /api/generations/img_<id>.
A signed URL for one of your assets.
Search reference imagery, free.
Prefer to drive it from an agent?
The same account and key work over the hosted MCP server, from Claude Code, Cursor, Claude Desktop or any client that sends a header.
The MCP server