Skip to content

API reference

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

Authentication

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.

Header
Authorization: Bearer ait_…
Where to get one
In Settings, under API tokens. It is shown once; revoke it from the same page.
Format
ait_ followed by at least 40 letters, digits, dashes or underscores.
Not supported
An API-key header, or a key in the query string. The bearer header is the only way in. OAuth is for MCP clients on /api/mcp: see the MCP docs.
Managing keys
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": [ … ]
}

Base URL

All paths below hang off https://aitachyon.com/api. Bodies are JSON both ways: send Content-Type: application/json on a POST.

Ids
Uuids. Most generation calls need a projectId: GET /api/me lists your projects.
Refs
Every item in your library also has a typed ref: img_, scn_, avt_, vo_ or vjob_ followed by its id. GET /api/generations/{ref} fetches any of them.
Deleting
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.
Files
Results come back as signed links, valid for one hour. Ask for the item again for a fresh link.
Rate limits
Per account and per kind of call. Past the limit: a 429 with Retry-After and X-RateLimit-* headers.
Machine-readable
The same endpoints as an OpenAPI 3.1 document, to import into an API client or generate a typed client from.

Errors

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.

StatusCodeWhen
400–The body failed validation; details says which field.
401–No key, a malformed key, or a revoked one. GET /api/me says which.
402INSUFFICIENT_BALANCEYour prepaid balance does not cover the call; balance_usd is what is left.
402KEY_SPEND_CAPThis key reached its cap; cap_usd, billed_usd and cap_window say how.
402INSUFFICIENT_CREDITSA 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.
500PROVIDER_ERROR, TIMEOUT, …Something failed while running; retryable says whether to try again.
503PROVIDER_UNAVAILABLEThe 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.

Async jobs

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.

Statuses
processing, then completed or failed.
Later
The finished item stays in your library: 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>"
  }
}

Pricing a call

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/pricing
Every model and unit. prepaid.actions is the dollar price per unit for a prepaid balance; actions is the plan grid, in credits.
POST /api/costs
The price of a list of calls in plan credits, shown in dollars at the Starter plan rate. GET it for the ids.
What you are charged
On a prepaid balance, what the job cost to run, +100% on video and avatars, +200% on images, audio and text; every charge is itemised in GET /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": [ … ]
}

Prices per call, in dollars

Account

Start here. Free, and the fastest way to check a token works.

GET

/api/me

Free

Your credit balance, plan, projects and available avatars.

curl https://aitachyon.com/api/me \
  -H "Authorization: Bearer ait_your_token"
GET

/api/credits/ledger

Free

Every spend and refund, each linked to the job that caused it.

GET

/api/usage/summary

Free

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.

GET

/api/generations

Free

Your library, newest first. Every item has a typed ref (img_, scn_, avt_, vo_, vjob_); page with ?before=next_before.

GET

/api/tokens

Free

Your active API tokens (no secrets). Signed-in session only: a token cannot list or mint tokens.

POST

/api/tokens

Free

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).

POST

/api/mcp

Free

The MCP server over streamable HTTP. Point any MCP client here with your bearer token; nothing to install.

GET

/api/generations/[ref]

Free

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

/api/generations/[ref]

Free

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.

Keys for your customers

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.

POST

/api/keys

Free

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.

GET

/api/keys

Free

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=.

DELETE

/api/keys

Free

With a platform key: revoke one child key (?id=).

Prepaid wallet

Pay as you go in dollars: each job costs its provider price plus your rate, itemised.

GET

/api/wallet/open

Free

Whether this account can switch to prepaid, and at what rate.

POST

/api/wallet/open

Free

Switch to prepaid. For an account with no subscription and no credits left.

GET

/api/wallet

Free

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
    }
  ]
}
POST

/api/wallet/topup

Free

A Stripe checkout for the amount you choose. The card is kept for automatic top-ups.

PUT

/api/wallet

Free

Automatic top-up: recharge X when the balance falls under Y. Signed-in session only: a token cannot change when your card is charged.

Images

Text-to-image and image-to-image, on-brand when a brand is attached.

POST

/api/images/generate

Per image, by provider

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
  }'
POST

/api/images/edit

Per call

Remove background, upscale, vectorize, replace background or inpaint.

POST

/api/images/director-preview

Free

See the art-directed prompt before spending anything.

POST

/api/images/ideas

Free

Image concepts for a brand or product.

Video

Scene generation and post-production. These are asynchronous: you get a task id to poll.

POST

/api/scenes/generate

AsyncPer clip, or per second by engine

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"
  }'
GET

/api/scenes/status/[taskId]

Free

Poll a scene until the mp4 is ready.

curl https://aitachyon.com/api/scenes/status/<task id> \
  -H "Authorization: Bearer ait_your_token"
POST

/api/scenes/director-preview

Free

Preview the art-directed video prompt, free.

POST

/api/videos/upscale

AsyncPer second of output

Upscale a finished video to 1080p or 4K.

POST

/api/videos/reframe

AsyncPer second

Reframe to another aspect ratio, generatively.

POST

/api/videos/motion

AsyncPer second

Transfer the motion and camera of a driving clip onto a still.

POST

/api/videos/lipsync

AsyncPer second

Retrofit lipsync onto an existing clip.

POST

/api/videos/dub

AsyncPer minute, rounded up

Dub a video into another language.

POST

/api/videos/matte

AsyncPer call

Remove the background, green-screen output.

POST

/api/videos/analyze

Per call

Score a finished video for virality before you post it.

POST

/api/export/assemble

Per call

Assemble clips, voiceover and captions into a finished mp4.

Avatars and presenters

Talking-head video from a photo or a trained likeness.

POST

/api/avatar/generate

AsyncPer second, with a minimum

Avatar video from an avatar and a voiceover.

GET

/api/avatar/status/[predictionId]

Free

Poll an avatar render.

POST

/api/avatars/persona

Per call

Create a reusable persona from a description.

POST

/api/avatars/twin

Per call, plus training

Build a likeness of yourself from reference photos.

POST

/api/creator/presenter

Per call

A presenter shot matched to your brand.

POST

/api/creator/plan

Free

Plan a creator-style shoot, free.

Audio

Voiceover, cloned voices, music and sound effects.

POST

/api/voiceover/generate

Per 450 characters

Voiceover from a script.

GET

/api/voiceover/voices

Free

Every voice you can use.

POST

/api/voiceover/sample

Free

Hear a voice before committing, free.

POST

/api/voices/clone

Per call

Clone a voice from a sample; returns a reusable voice id.

POST

/api/voices/speak

Per 450 characters

Speak with a cloned voice.

POST

/api/music/generate

Per call

A background track.

POST

/api/sfx/generate

Per call

A short sound effect.

Brand and copy

Read a website once, then everything you generate pulls from it.

POST

/api/brand/reference-kit

Free

Read a URL for its logo, colours, fonts and usable imagery. Free, and nothing is created.

POST

/api/brand/scrape

Per call

Analyse a website into a brand kit.

POST

/api/brand/create

Per call

Create a brand kit by hand.

POST

/api/scripts/generate

Per call

An ad script from a brief.

POST

/api/copy

Free

Headlines, CTAs and captions, free.

POST

/api/content/generate-captions

Per call

Platform-sized captions.

POST

/api/campaigns/angles

Per call

Distinct campaign angles for one product.

POST

/api/design-carousel/generate

Per call

A code-rendered carousel on your real brand theme.

3D and assets

Models, uploads and signed URLs.

POST

/api/three-d/generate

AsyncPer call

An image turned into a downloadable GLB.

GET

/api/three-d/status/[jobId]

Free

Poll a 3D job.

POST

/api/upload

Free

Upload an image, video or audio file to your account. Returns path, a signed url and a ref (upl_...) to delete it with.

DELETE

/api/uploads/[ref]

Free

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

POST

/api/signed-url

Free

A signed URL for one of your assets.

POST

/api/inspiration/search

Free

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