Hiter začetek
Prvo generiranje izvedite v nekaj minutah. Vseh 1496 modelov uporablja enako vrsto zahteve in vrača isti objekt zahteve za slike, video in zvok: tukaj se ga naučite enkrat.
1. Pridobite ključ API
Ustvarite ključ na naslovu https://doitong.com/developers/dashboard#keys in ga shranite v
spremenljivko okolja: prikazan je samo enkrat. Vsak ključ ima lahko svoj proračun, zato ga lahko dodelite agentu,
ne da bi tvegali celoten račun. GET /account vrne vaše stanje API.
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())
Izvedbe se plačujejo iz stanja vašega računa v kreditih API: 1000 API kreditov = 1 $, vsak model pa stane točno toliko, kot določi njegov izdelovalec. Dobroimetje dopolnite na naslovu https://doitong.com/developers/dashboard#balance.
2. Pridobite ponudbo, nato izvedite zahtevo
POST /quote/{model_id} sprejme vhodni JSON in vrne natančno ceno. Ključa ne potrebuje in nič ne stane.
Izvedba z enakim vhodom stane natanko toliko: ponudba je zaračunani znesek. (Izjema je model, ki se zaračunava
glede na uporabo: njegova ponudba je najvišji možni strošek izvedbe, neporabljeni del pa se po izvedbi vrne.)
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"
}
Nato pošljite isto telo na POST /run/{model_id}. Dodajte ?wait=20, da povezavo zadržite do 20 sekund: hiter
model vrne dokončan rezultat v enem povratnem klicu. Pošljite glavo Idempotency-Key, da se zahteva pri ponovnem
poskusu nikoli ne izvede (ali zaračuna) dvakrat.
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)
Odgovor je objekt zahteve:
{
"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. Spremljajte stanje
Če model ob koncu čakanja še vedno deluje, prejmete 202 Accepted z id zahteve in njenim trenutnim
status. Vsaka zahteva gre skozi enak življenjski cikel:
-
queuedSprejeto in zaračunano, čaka na izvajalca -
runningModel ustvarja vsebino -
Končna stanja:
succeededObračunana navedena cena; outputs[] vsebuje URL-je v naši shrambifailedSamodejno povrnjeno; napaka pojasnjuje razlogcanceledUstavljeno pred rezultatom; sredstva povrnjena
Zahtevo znova preberite z njenim id-jem. ?wait=20 deluje tudi tukaj, zato zadostuje preprosta zanka:
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)
Ko je status enak succeeded, outputs[].url vsebuje povezave do datotek v naši shrambi. Če zahteva failed ali
canceled, se njeni krediti API samodejno vrnejo, error pa pove razlog. Prekličite vse, kar je še queued ali
running:
curl -X POST "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/cancel" \
-H "Authorization: Bearer $DOITONG_API_KEY"
Pri dolgotrajnih video opravilih lahko preskočite preverjanje stanja in namesto tega posredujete webhook_url (glejte Webhooki).
4. Datoteke
Kot vhod lahko posredujete kateri koli javni URL ali pa za URL za nalaganje zaprosite z POST /files, datoteko
pošljete tja z PUT in uporabite vrnjeni file_url (glejte Datoteke). Uspešna zahteva navede rezultate v outputs[] z vrsto, vrsto vsebine ter, če sta znani, merami in trajanjem.
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}'
Napake
Vsak model odpove na enak način: z enim ovojem, ki vsebuje type, natančen code, sporni param in vsako težavo
v details, tako da lahko agent popravi zahtevo brez branja razlage. Za neveljavno zahtevo se nič ne zaračuna.
{
"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"
}
}
Vse vrste in kode so navedene v Napake.
Cene
Cene so v USD in kreditih API ter so prikazane na vsaki strani modela, preden ga zaženete. Vsaka zahteva vsebuje
cost s polji credits, usd, charged in refunded. Izvedba se zaračuna, ko je sprejeta; zahteve failed in
canceled se samodejno povrnejo. Nekateri modeli imajo ceno, izračunano natančno iz vhoda, pri nekaterih je odvisna
od dolžine ali velikosti poslanih datotek, drugi pa zaračunajo ocenjeno ceno na izvedbo: v vsakem primeru plačate
znesek ponudbe. Nekaj modelov (jezikovni in vidni modeli, glasovna orodja ter orodja za čas obdelave) se
zaračunava glede na uporabo: ponudba je najvišji možni strošek izvedbe, neporabljeni del pa se samodejno vrne. Glejte Cene.
MCP in AI-agenti
Kateri koli odjemalec MCP se lahko poveže z https://api.doitong.com/v1/mcp z istim ključem Bearer. Vaš agent lahko išče po
katalogu, pridobiva ponudbe in izvaja modele ter bere vse strani dokumentacije v Markdownu.
claude mcp add --transport http doitong-models https://api.doitong.com/v1/mcp \
--header "Authorization: Bearer YOUR_API_KEY"
Naslednji koraki
- Oglejte si vse modele. Vsaka stran ima gradnik zahteve, ki namesto vas napiše kodo.
- Spoznajte življenjski cikel zahteve: Zahteve.
- Pri vsakem modelu uporabljajte ista imena parametrov: Parametri.
- Delate z AI-agentom za programiranje? Posredujte mu https://doitong.com/developers/llms.txt ali povežite strežnik MCP.