Mulai Cepat
Jalankan pembuatan pertama Anda dalam beberapa menit. Semua 1.496 model menerima jenis permintaan yang sama dan mengembalikan objek permintaan yang sama, untuk gambar, video, dan audio: pelajari sekali di sini.
1. Dapatkan kunci API
Buat kunci di https://doitong.com/developers/dashboard#keys dan simpan dalam variabel lingkungan:
kunci hanya ditampilkan sekali. Setiap kunci dapat memiliki anggarannya sendiri, sehingga Anda dapat memberikannya kepada agen
tanpa mempertaruhkan seluruh akun. GET /account mengembalikan saldo API Anda.
export DOITONG_API_KEY="doitong_..."
curl "https://api.doitong.ru/v1/account" \
-H "Authorization: Bearer $DOITONG_API_KEY"
const res = await fetch("https://api.doitong.ru/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.ru/v1/account",
headers={"Authorization": f"Bearer {os.environ['DOITONG_API_KEY']}"},
)
print(r.json())
Pembuatan dibayar dari saldo API akun Anda dalam kredit API: 1.000 kredit API = $1, dan setiap model dikenai harga pembuatnya secara tepat. Isi ulang di https://doitong.ru/developers/dashboard#balance.
2. Dapatkan penawaran harga, lalu jalankan
POST /quote/{model_id} menerima JSON input dan mengembalikan harga yang tepat. Endpoint ini tidak memerlukan kunci dan tidak dikenai biaya.
Menjalankan input yang sama dikenai biaya tepat sebesar itu: penawaran harga adalah biaya yang dibayarkan. (Model yang dikenai biaya berdasarkan
penggunaan adalah pengecualian: penawaran harganya adalah biaya maksimum yang mungkin dikenakan, dan bagian yang tidak digunakan dikembalikan
dana setelah pembuatan selesai.)
curl -X POST "https://api.doitong.ru/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.ru/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.ru/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 kirim body yang sama ke POST /run/{model_id}. Tambahkan ?wait=20 untuk menahan koneksi hingga 20 detik: model yang cepat
mengembalikan hasil selesai dalam satu perjalanan pulang-pergi. Kirim header Idempotency-Key agar percobaan ulang tidak pernah menjalankan
(atau menagih) dua kali.
curl -X POST "https://api.doitong.ru/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.ru/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.ru/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 adalah 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 statusnya
Jika model masih bekerja saat waktu tunggu berakhir, Anda mendapatkan 202 Accepted dengan id permintaan dan status saat ini.
Setiap permintaan melewati siklus hidup yang sama:
-
queuedDiterima dan ditagihkan, menunggu worker -
runningModel sedang menghasilkan output -
Status akhir:
succeededQuote ditagihkan; outputs[] berisi URL di penyimpanan kamifailedDana dikembalikan otomatis; error menjelaskan penyebabnyacanceledDihentikan sebelum ada hasil; dana dikembalikan
Baca kembali permintaan menggunakan id-nya. ?wait=20 juga berfungsi di sini, sehingga loop sederhana sudah cukup:
curl "https://api.doitong.ru/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.ru/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t?wait=20", { headers })).json();
while (request.status === "queued" || request.status === "running") {
const res = await fetch(`https://api.doitong.ru/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.ru/v1/requests/{request['id']}",
params={"wait": 20},
headers=headers,
).json()
print(request["status"], request["outputs"][0]["url"] if request["outputs"] else None)
Saat status adalah succeeded, outputs[].url berisi tautan ke file di penyimpanan kami. Jika permintaan failed atau canceled,
kredit API-nya dikembalikan secara otomatis dan error menjelaskan alasannya. Batalkan apa pun yang masih queued atau running:
curl -X POST "https://api.doitong.ru/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/cancel" \
-H "Authorization: Bearer $DOITONG_API_KEY"
Untuk pekerjaan video yang lama, Anda dapat melewati polling dan mengirim webhook_url sebagai gantinya (lihat Webhooks).
4. File
Kirim URL publik apa pun sebagai input, atau minta URL unggahan dari POST /files, lakukan PUT file ke URL tersebut dan gunakan
file_url yang dikembalikan (lihat Files). Permintaan yang berhasil mencantumkan hasilnya di outputs[]
dengan type, content type, serta dimensi dan durasi jika diketahui.
curl -X POST "https://api.doitong.ru/v1/files" \
-H "Authorization: Bearer $DOITONG_API_KEY" \
-H "Content-Type: application/json" \
-d '{"filename": "fox.jpg", "content_type": "image/jpeg", "size": 482113}'
Error
Setiap model gagal dengan cara yang sama: satu envelope dengan type, code yang tepat, param yang bermasalah, dan setiap masalah
di details, sehingga agen dapat memperbaiki permintaan tanpa membaca uraian. Permintaan yang tidak valid tidak dikenai biaya.
{
"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 type dan code tercantum di Errors.
Harga
Harga dalam USD dan kredit API, serta ditampilkan di setiap halaman model sebelum Anda menjalankan. Setiap permintaan menyertakan cost
dengan credits, usd, charged, dan refunded. Pembuatan dikenai biaya saat diterima; permintaan failed dan canceled
dikembalikan dananya secara otomatis. Beberapa model menetapkan harga tepat dari input, beberapa berdasarkan panjang atau ukuran file yang
Anda kirim, dan model lainnya mengenakan perkiraan harga per pembuatan: bagaimanapun juga, penawaran harga adalah jumlah yang Anda bayar.
Beberapa model (model bahasa dan visi, alat suara, alat waktu pemrosesan) dikenai biaya berdasarkan penggunaan: penawaran harga adalah
biaya maksimum yang mungkin dikenakan, dan bagian yang tidak digunakan dikembalikan dananya secara otomatis. Lihat Pricing.
MCP dan agen AI
Hubungkan klien MCP apa pun ke https://api.doitong.ru/v1/mcp dengan kunci Bearer yang sama. Agen Anda dapat mencari katalog, mendapatkan penawaran harga dan
menjalankan model, serta membaca setiap halaman dokumentasi sebagai Markdown.
claude mcp add --transport http doitong-models https://api.doitong.ru/v1/mcp \
--header "Authorization: Bearer YOUR_API_KEY"
Langkah berikutnya
- Jelajahi semua model. Setiap halaman memiliki pembuat permintaan yang menuliskan kode untuk Anda.
- Pelajari siklus hidup permintaan: Requests.
- Gunakan nama parameter yang sama pada setiap model: Parameters.
- Bekerja dengan agen coding AI? Berikan https://doitong.com/developers/llms.txt atau hubungkan server MCP.