Požadavky
Požadavek je jedno volání jednoho modelu. Má id (req_…), stav, cenu v API kreditech (1000 = 1 USD) a po úspěšném dokončení vygenerované soubory. Stejný objekt se vrací z každého níže uvedeného endpointu pro každý model.
Najít model
Katalog všech 1 496 modelů je veřejný JSON (klíč není potřeba):
curl "https://api.doitong.com/v1/models?category=text-to-video&lab=Google&limit=20"
| Parametr dotazu | Význam |
|---|---|
q |
Slova, která se musí všechna objevit v názvu, id, výrobci nebo štítcích, například kling 3. |
category |
Jedno id kategorie, například text-to-video nebo upscale. GET https://api.doitong.com/v1/categories vypíše všech 21 kategorií s jejich počty. |
lab |
Výrobce modelu podle názvu nebo id, například Google nebo black-forest-labs. |
family |
Id family z předchozího řádku: každá varianta jednoho modelu (pro, fast, image-to-video, …). |
mode |
exact (cena se vypočítá ze vstupu), measured (z délky nebo velikosti vstupních souborů), estimate (odhadovaná cena za spuštění) nebo metered (účtováno podle skutečného využití, až do maximální částky za spuštění). |
limit, cursor |
Velikost stránky (1 až 100, výchozí 50) a next_cursor předchozí stránky. |
Každý řádek obsahuje id, name, lab, category, family, summary, tags, output_kind, docs_url a objekt price (viz Ceník). GET https://api.doitong.com/v1/models/{model_id} přidává úplné vstupní a výstupní JSON Schema, kanonické názvy parametrů, pravidla účtování a příklad vstupu. Neznámá hodnota category nebo mode vrací 400 invalid_parameter.
Spustit model
curl -X POST "https://api.doitong.com/v1/run/{model_id}?wait=20" \
-H "Authorization: Bearer $DOITONG_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order-1842-cover" \
-d '{"prompt": "..."}'
- Tělo požadavku je vstup modelu, objekt JSON. Každá stránka modelu uvádí jeho parametry.
- Vstup se kontroluje před účtováním. Neplatný vstup vrací
422 invalid_inputs problematickýmparama nic nestojí. ?wait=N(až 20 sekund) podrží volání, dokud požadavek neskončí nebo nevyprší čas.?webhook_url=https://…pošle na danou URL podepsaný POST, jakmile požadavek skončí (viz Webhooky).?storage=permanentnebo?storage=temporaryurčuje, jak dlouho se uchovávají výstupní soubory; bez tohoto parametru se použije nastavení účtu (viz Kde jsou soubory uložené).
Odpověď je 202 Accepted, dokud požadavek stále probíhá, a 200 OK, když skončil během čekání (nebo jde o opakované doručení, viz níže). Hlavičky Location a Doitong-Request-Id obsahují URL a id požadavku.
Stavy
-
queuedPřijato a zpoplatněno, čeká na worker -
runningModel generuje -
Konečné stavy:
succeededCena byla stržena; outputs[] obsahují URL v našem úložištifailedAutomaticky vráceno; chyba uvádí důvodcanceledZastaveno před výsledkem; vráceno
| Stav | Význam | Konečný |
|---|---|---|
queued |
Přijatý a zpoplatněný, čeká na pracovníka. queue_position může zobrazovat místo ve frontě. |
ne |
running |
Model generuje. | ne |
succeeded |
Dokončeno. outputs uvádí soubory. |
ano |
failed |
Model nebo limit proces zastavil. error uvádí důvod. API kredity se refundují. |
ano |
canceled |
Zrušeno před vytvořením výsledku. API kredity se refundují. | ano |
Požadavek, který běží déle než povolený čas, selže s kódem timeout a částka se refunduje: 15 minut pro obrázky, 60 minut pro video, 30 minut pro zvuk a vše ostatní.
Objekt požadavku
{
"id": "req_8k2m4q7x1z9c3v5b6n0p2r4t",
"object": "request",
"model": "flux/schnell",
"status": "succeeded",
"created_at": "2026-10-20T12:00:00Z",
"started_at": "2026-10-20T12:00:01Z",
"completed_at": "2026-10-20T12:00:02Z",
"queue_position": null,
"cost": { "credits": 3, "usd": "0.003", "charged": 3, "refunded": 0 },
"input": { "prompt": "..." },
"output": { "images": [ { "url": "https://content.doitong.com/dev-api/…/0-output.jpeg", "width": 1024, "height": 768 } ] },
"outputs": [
{ "type": "image", "url": "https://content.doitong.com/dev-api/…/0-output.jpeg", "content_type": "image/jpeg",
"width": 1024, "height": 768, "file_size": 183920, "stored": true }
],
"error": null,
"metrics": { "inference_seconds": 1.2 },
"storage": { "mode": "permanent", "bytes": 183920, "expires_at": null, "expired": false },
"urls": {
"self": "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t",
"cancel": "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/cancel"
}
}
outputsmá stejnou podobu pro každý model: jednu položku pro každý vygenerovaný soubor stype(image,video,audio,filenebo3d),urlv našem úložišti,content_typea, pokud jsou známy,file_size,width,height,duration.outputje vlastní objekt výsledku modelu (jeho pole jsou uvedena na stránce každého modelu) se stejnými URL.storageuvádí, jak se soubory uchovávají:mode(permanentnebotemporary), uloženébytes,expires_at(kdy se dočasný soubor smaže, u trvalých souborůnull) aexpired(true, jakmile soubory zmizí).cost.creditsje cena volání v API kreditech (cost.usdv USD),cost.chargedčástka stržená ze zůstatku API,cost.refundedvrácená částka. U modelumeteredjecost.creditsmaximální částka zablokovaná na začátku (cost.held); po úspěšném dokončenícost.settleduvádí skutečné využití a zbytek maximální částky je vcost.refunded(viz Účtování podle využití).- Když požadavek selže,
errorje{ "type": …, "code": …, "message": … }.
Načíst požadavek
curl "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t?wait=20" \
-H "Authorization: Bearer $DOITONG_API_KEY"
?wait=N(až 20 sekund) používá dlouhé dotazování: volání se vrátí, jakmile je požadavek dokončen, nebo po N sekundách s aktuálním stavem. Opakované volání je nejjednodušší způsob, jak čekat na výsledek.?logs=1přidá řádky protokolu průběhu modelu (posledních 50) jakologs.
Můžete načítat pouze požadavky vlastního účtu; jakékoli jiné id je 404 request_not_found.
Vypsat požadavky
curl "https://api.doitong.com/v1/requests?limit=20&status=succeeded&model=flux/schnell" \
-H "Authorization: Bearer $DOITONG_API_KEY"
Od nejnovějších. limit je 1 až 100 (výchozí 20), status a model filtrují výsledky. Odpověď je { "object": "list", "data": [ … ], "has_more": true, "next_cursor": "req_…" }; pro další stránku předejte cursor=<next_cursor>.
Zrušit požadavek
curl -X POST "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/cancel" \
-H "Authorization: Bearer $DOITONG_API_KEY"
- Zrušeno před spuštěním modelu: stav se změní na
canceled, API kredity se refundují a obdržíte200. - Probíhá generování: zrušení se předá dál a obdržíte
202s"cancel_requested": true. Pokud model přesto dokončí práci, požadavek normálně uspěje a bude zpoplatněn. - Již dokončené:
409 not_cancelable(požadavek, který je jižcanceled, jednoduše vrátí200).
Smazat soubory požadavku
curl -X DELETE "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/files" \
-H "Authorization: Bearer $DOITONG_API_KEY"
Okamžitě smaže naše kopie výstupních souborů požadavku a zastaví účtování úložiště. Odpověď je objekt požadavku s storage.expired: true; jeho URL zůstanou v záznamu, ale přestanou fungovat. Opakované volání nic nezmění (200). Požadavek ve stavu queued nebo running zatím žádné soubory nemá: 409 request_active. Vyžaduje models:run.
Idempotence: opakování bez dvojího účtování
Sítě selhávají. Chcete-li spuštění bezpečně zopakovat, odešlete hlavičku Idempotency-Key (libovolný řetězec o délce až 255 znaků, jedinečný pro každou operaci, například vlastní id objednávky):
- Stejný klíč a stejné tělo jako předtím: obdržíte původní požadavek (
200, hlavičkaIdempotent-Replayed: true) a nic se znovu neúčtuje. - Stejný klíč a tělo po spuštění, které selhalo před předáním modelu (
upstream_errornebointernal_errorpři odeslání,insufficient_credits,budget_exceeded,too_many_inflight): nic nebylo vytvořeno a nic se neúčtuje, takže opakovaný požadavek znovu spustí model místo vrácení chyby. - Stejný klíč s jiným tělem:
409 idempotency_mismatch. - Klíče platí pro API klíč, který je odeslal.
Kde jsou soubory uložené
Každý výstupní soubor se před označením požadavku jako succeeded zkopíruje do našeho úložiště, takže URL v outputs vedou na naše vlastní hostitele a můžete na ně přímo odkazovat. Jak dlouho zůstanou uložené, je na vás:
| Režim | Jak dlouho | Cena |
|---|---|---|
permanent (výchozí) |
Dokud je nesmažete | 100 API kredity (0,10 $) za GB měsíčně, účtováno denně ze zůstatku API |
temporary |
7 dnů, poté smazáno | Zdarma |
- Nastavení účtu určuje chování nových požadavků: přepínač „Uchovávat soubory navždy“ v dashboardu, nebo
PATCH https://api.doitong.com/v1/account/storages{"mode": "temporary"}.GET https://api.doitong.com/v1/accountho zobrazuje podstoragespolu s počtem uchovávaných bajtů a měsíčním odhadem. ?storage=permanent|temporarypři spuštění (argumentstoragenástroje MCPrun) toto nastavení pro dané spuštění přepíše.- Změna nastavení se nikdy nedotkne souborů, které již máte; smažte je pomocí
DELETE /requests/{id}/files. - Když zůstatek API nemůže úložiště zaplatit, nic se neúčtuje a obdržíte e-mail: dobijte účet do 30 dnů, jinak se uchovávané soubory změní na dočasné a o 7 dnů později se smažou.
Ve vzácném případě, že naše kopie selže, má položka "stored": false a URL je původní s krátkou platností: stáhněte ji co nejdříve.