Panduan ringkas
Jalankan penjanaan pertama anda dalam beberapa minit. Kesemua 1,496 model menerima jenis permintaan yang sama dan mengembalikan objek permintaan yang sama untuk imej, video dan audio: pelajarinya sekali di sini.
1. Dapatkan kunci API
Cipta kunci di https://doitong.com/developers/dashboard#keys dan simpan dalam pemboleh ubah persekitaran: kunci itu hanya dipaparkan sekali. Setiap kunci boleh mempunyai belanjawannya sendiri, jadi anda boleh memberikannya kepada ejen tanpa mempertaruhkan seluruh akaun. GET /account mengembalikan baki API anda.
export DOITONG_API_KEY="doitong_..."
curl "https://api.doitong.com/v1/account" \
-H "Authorization: Bearer $DOITONG_API_KEY"
const res = await fetch("https://api.doitong.com/v1/account", {
headers: { Authorization: `Bearer ${process.env.DOITONG_API_KEY}` },
});
console.log(await res.json());
import os
import requests
r = requests.get(
"https://api.doitong.com/v1/account",
headers={"Authorization": f"Bearer {os.environ['DOITONG_API_KEY']}"},
)
print(r.json())
Penjanaan dibayar daripada baki API akaun anda dalam kredit API: 1,000 kredit API = $1, dan setiap model berharga tepat seperti harga pembuatnya. Tambah nilai di https://doitong.com/developers/dashboard#balance.
2. Dapatkan sebut harga, kemudian jalankan
POST /quote/{model_id} menerima JSON input dan mengembalikan harga tepat. Ia tidak memerlukan kunci dan tidak berharga apa-apa. Menjalankan input yang sama menelan kos tepat seperti itu: sebut harga ialah cajnya. (Model yang dicaj mengikut penggunaan ialah pengecualian: sebut harganya ialah kos maksimum penjanaan, dan bahagian yang tidak digunakan dibayar balik selepas penjanaan.)
curl -X POST "https://api.doitong.com/v1/quote/kling-video/v3/pro/image-to-video" \
-H "Content-Type: application/json" \
-d '{"image": "https://example.com/fox.jpg", "duration": 5, "generate_audio": true}'
const res = await fetch("https://api.doitong.com/v1/quote/kling-video/v3/pro/image-to-video", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ image: "https://example.com/fox.jpg", duration: 5, generate_audio: true }),
});
const quote = await res.json();
console.log(quote.credits, quote.usd); // 840 "0.84"
import requests
r = requests.post(
"https://api.doitong.com/v1/quote/kling-video/v3/pro/image-to-video",
json={"image": "https://example.com/fox.jpg", "duration": 5, "generate_audio": True},
)
print(r.json()["credits"], r.json()["usd"]) # 840 0.84
{
"object": "quote",
"model": "kling-video/v3/pro/image-to-video",
"credits": 840,
"usd": "0.84",
"unit": "second",
"quantity": 5,
"unit_credits": 168,
"mode": "exact",
"breakdown": "5 s × 168 API credits"
}
Kemudian hantar isi yang sama kepada POST /run/{model_id}. Tambahkan ?wait=20 untuk mengekalkan sambungan sehingga 20 saat: model yang pantas mengembalikan hasil yang telah selesai dalam satu pusingan pergi balik. Hantar pengepala Idempotency-Key supaya percubaan semula tidak menjalankan (atau mencaj) dua kali.
curl -X POST "https://api.doitong.com/v1/run/flux/schnell?wait=20" \
-H "Authorization: Bearer $DOITONG_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: lighthouse-001" \
-d '{"prompt": "A lighthouse on a rocky coast at dusk, warm light in the window"}'
const res = await fetch("https://api.doitong.com/v1/run/flux/schnell?wait=20", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.DOITONG_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": "lighthouse-001",
},
body: JSON.stringify({ prompt: "A lighthouse on a rocky coast at dusk, warm light in the window" }),
});
const request = await res.json();
console.log(request.status, request.outputs[0]?.url);
import os
import requests
r = requests.post(
"https://api.doitong.com/v1/run/flux/schnell",
params={"wait": 20},
headers={
"Authorization": f"Bearer {os.environ['DOITONG_API_KEY']}",
"Idempotency-Key": "lighthouse-001",
},
json={"prompt": "A lighthouse on a rocky coast at dusk, warm light in the window"},
)
request = r.json()
print(request["status"], request["outputs"][0]["url"] if request["outputs"] else None)
Responsnya ialah objek permintaan:
{
"id": "req_8k2m4q7x1z9c3v5b6n0p2r4t",
"object": "request",
"model": "flux/schnell",
"status": "succeeded",
"cost": { "credits": 3, "usd": "0.003", "charged": 3, "refunded": 0 },
"outputs": [
{ "type": "image", "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
"content_type": "image/jpeg", "width": 1024, "height": 768, "stored": true }
],
"error": null
}
3. Ikuti status
Jika model masih berfungsi apabila tempoh menunggu tamat, anda menerima 202 Accepted dengan id permintaan dan status semasanya. Setiap permintaan melalui kitar hayat yang sama:
-
queuedDiterima dan dicaj, menunggu pekerja -
runningModel sedang menjana -
Status akhir:
succeededHarga yang disebut telah dicaj; outputs[] mengandungi URL pada storan kamifailedDipulangkan secara automatik; ralat menerangkan sebabnyacanceledDihentikan sebelum hasil tersedia; bayaran dipulangkan
Baca semula permintaan menggunakan idnya. ?wait=20 juga berfungsi di sini, jadi gelung mudah sudah memadai:
curl "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t?wait=20" \
-H "Authorization: Bearer $DOITONG_API_KEY"
const headers = { Authorization: `Bearer ${process.env.DOITONG_API_KEY}` };
let request = await (await fetch("https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t?wait=20", { headers })).json();
while (request.status === "queued" || request.status === "running") {
const res = await fetch(`https://api.doitong.com/v1/requests/${request.id}?wait=20`, { headers });
request = await res.json();
}
console.log(request.status, request.outputs[0]?.url);
import os
import requests
headers = {"Authorization": f"Bearer {os.environ['DOITONG_API_KEY']}"}
request = {"id": "req_8k2m4q7x1z9c3v5b6n0p2r4t", "status": "queued"}
while request["status"] in ("queued", "running"):
request = requests.get(
f"https://api.doitong.com/v1/requests/{request['id']}",
params={"wait": 20},
headers=headers,
).json()
print(request["status"], request["outputs"][0]["url"] if request["outputs"] else None)
Apabila status ialah succeeded, outputs[].url mengandungi pautan kepada fail pada storan kami. Jika permintaan failed atau canceled, kredit API-nya dibayar balik secara automatik dan error menyatakan sebabnya. Batalkan apa-apa yang masih queued atau running:
curl -X POST "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/cancel" \
-H "Authorization: Bearer $DOITONG_API_KEY"
Untuk kerja video yang panjang, anda boleh melangkau tinjauan berkala dan sebaliknya menghantar webhook_url (lihat Webhook).
4. Fail
Hantar sebarang URL awam sebagai input, atau minta URL muat naik daripada POST /files, PUT fail itu di sana dan gunakan file_url yang dikembalikan (lihat Fail). Permintaan yang berjaya menyenaraikan hasilnya dalam outputs[] bersama jenis, jenis kandungan dan, jika diketahui, dimensi serta tempoh.
curl -X POST "https://api.doitong.com/v1/files" \
-H "Authorization: Bearer $DOITONG_API_KEY" \
-H "Content-Type: application/json" \
-d '{"filename": "fox.jpg", "content_type": "image/jpeg", "size": 482113}'
Ralat
Setiap model gagal dengan cara yang sama: satu sampul dengan type, code yang tepat, param yang bermasalah dan setiap masalah dalam details, supaya ejen boleh membetulkan permintaan tanpa membaca prosa. Tiada caj dikenakan untuk permintaan yang tidak sah.
{
"error": {
"type": "invalid_request",
"code": "invalid_input",
"message": "duration must be one of 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15.",
"param": "duration",
"details": [ { "param": "duration", "message": "duration must be one of 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15." } ],
"request_id": null,
"doc_url": "https://doitong.com/developers/docs/errors#invalid_input"
}
}
Setiap jenis dan kod disenaraikan dalam Ralat.
Harga
Harga adalah dalam USD dan kredit API serta dipaparkan pada setiap halaman model sebelum anda menjalankannya. Setiap permintaan membawa cost dengan credits, usd, charged dan refunded. Penjanaan dicaj apabila diterima; permintaan failed dan canceled dibayar balik secara automatik. Sesetengah model berharga tepat berdasarkan input, sesetengahnya berdasarkan panjang atau saiz fail yang anda hantar, manakala yang lain mengenakan anggaran harga setiap penjanaan: apa jua caranya, sebut harga ialah jumlah yang anda bayar. Beberapa model (model bahasa dan penglihatan, suara, alat masa pemprosesan) dicaj mengikut penggunaan: sebut harganya ialah kos maksimum penjanaan, dan bahagian yang tidak digunakan oleh penjanaan dibayar balik secara automatik. Lihat Harga.
MCP dan ejen AI
Sambungkan mana-mana klien MCP kepada https://api.doitong.com/v1/mcp dengan kunci Bearer yang sama. Ejen anda boleh mencari katalog, mendapatkan sebut harga dan menjalankan model, serta membaca setiap halaman dokumentasi sebagai Markdown.
claude mcp add --transport http doitong-models https://api.doitong.com/v1/mcp \
--header "Authorization: Bearer YOUR_API_KEY"
Langkah seterusnya
- Semak imbas semua model. Setiap halaman mempunyai pembina permintaan yang menulis kod untuk anda.
- Pelajari kitar hayat permintaan: Permintaan.
- Gunakan nama parameter yang sama pada setiap model: Parameter.
- Bekerja dengan ejen pengekodan AI? Berikan ejen itu https://doitong.com/developers/llms.txt atau sambungkan pelayan MCP.