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}
From key to finished video in one call
# 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"
# 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"
{
"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
}
]
}
See what each model makes
Browse by lab
All labs (84)- Alibaba Endpoints: 142
- Black Forest Labs Endpoints: 135
- Lightricks Endpoints: 102
- MiniMax Endpoints: 64
- Kling Endpoints: 62
- ByteDance Endpoints: 57
- Bria AI Endpoints: 54
- Stability AI Endpoints: 48
- PixVerse Endpoints: 42
- Google Endpoints: 41
- Ideogram Endpoints: 36
- Tencent Endpoints: 33
- Microsoft Endpoints: 27
- NVIDIA Endpoints: 25
- Meta Endpoints: 24
- Recraft Endpoints: 24
- Vidu Endpoints: 22
- xAI Endpoints: 19
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
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"
// .cursor/mcp.json
{
"mcpServers": {
"doitong-models": {
"url": "https://api.doitong.com/v1/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
// claude_desktop_config.json
{
"mcpServers": {
"doitong-models": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"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.
Restart Cursor after saving. The server appears under MCP in the settings.
Settings → Developer → Edit config, then restart Claude Desktop. Needs Node.js.