Skip to content
New Kling 3.0 and Seedance 2.0 are live

One API for the best image, video and audio models

Same request format for every model. Exact price before you run. Files kept forever or 7 days for free, your choice.

POSTapi.doitong.com/v1/run/{model_id}

1,496models
84labs
ImageVideoAudio3DTextData (JSON)File
one request format for all of them
Quickstart

From key to finished video in one call

Read the quickstart
terminal
# Keys start with doitong_
export DOITONG_API_KEY="doitong_..."

# Check it works: returns your API credit balance
curl https://api.doitong.com/v1/account \
  -H "Authorization: Bearer $DOITONG_API_KEY"
terminal
# Run the model; wait up to 20 s for the finished result in the same call
curl -X POST "https://api.doitong.com/v1/run/kling-video/v3/pro/image-to-video?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "The banana manager turns to the camera, smiles and waves while coworkers keep typing, gentle handheld camera",
    "image": "https://content.doitong.com/images/gp/image_20260610003801_541d9719_316882.png",
    "duration": 5
  }'

# Still "queued" or "running"? Poll with the id from the response:
curl "https://api.doitong.com/v1/requests/REQUEST_ID?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY"
response.json
{
  "id": "req_8k2m4q7x1z9c3v5b6n0p2r4t",
  "model": "kling-video/v3/pro/image-to-video",
  "status": "succeeded",
  "cost": {
    "credits": 840,
    "usd": "0.84",
    "charged": 840,
    "refunded": 0
  },
  "outputs": [
    {
      "type": "video",
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.mp4",
      "content_type": "video/mp4",
      "file_size": 1843200,
      "width": 1280,
      "height": 720,
      "duration": 5,
      "stored": true
    }
  ]
}
1,496 models · 21 categories

See what each model makes

All categories (21)

Browse by lab

All labs (84)
Why Doitong API

Learn one request. Use every model.

Unified parameters

image, duration and aspect_ratio mean the same thing on every model. Model-native names still work as aliases.

"image": "…", "duration": 5

One request URL for every model

Switch models by changing the path. Auth, body and response stay identical.

POST /run/{model_id}

Quote = charge

POST /quote/{model_id} returns the exact price for your input. That is what you pay, never more.

→ { "credits": 560, "usd": "0.56" }

Files kept as long as you need

Every output is copied to our storage. Keep it forever for $0.10 per GB a month, or 7 days for free: one switch in your account, or per request.

?storage=permanent | temporary

One error format

Every failure names the parameter, the reason and a doc link, on every model. Invalid input is never charged.

"param": "duration", "code": "out_of_range"

Budgets per key + MCP

Cap spend per key, then hand that key to an agent through the MCP server.

api.doitong.com/v1/mcp
Built for AI agents

Let your agent pick the model, quote the price and run it

Connect Claude, ChatGPT or Cursor to the Doitong MCP server with the same key you use for REST. Every docs page also ships as Markdown, so agents read exactly what you read.

  • Quotes before every run, so agents stay inside the budget
  • Errors name the parameter the agent must fix
  • A Markdown version of every page for context windows

Paste it into Claude, ChatGPT or Cursor, then describe what you want to build.

Show the prompt
You can generate images, video, audio and 3D with the Doitong API.
Read https://doitong.com/developers/llms.txt first, then the .md page of each model you plan to use.
Base URL: https://api.doitong.com/v1. Authenticate with the header "Authorization: Bearer $DOITONG_API_KEY".
List models with GET /models and read one model's schema with GET /models/{model_id}.
Always call POST /quote/{model_id} with the input first and tell me the price (1000 API credits = 1 USD).
Then call POST /run/{model_id}?wait=20 with the same JSON body and an Idempotency-Key header.
If the status is still queued or running, poll GET /requests/{id}?wait=20.
Use outputs[].url from the response; files are kept forever unless the account keeps them 7 days
(pass ?storage=temporary for throwaway runs). Use only parameters from the model schema.
claude mcp add --transport http doitong-models https://api.doitong.com/v1/mcp \
  --header "Authorization: Bearer YOUR_API_KEY"

Run once in your project folder. Same Bearer key as the REST API.