सामग्री पर जाएँ
API गाइड

अनुरोध

Markdown के रूप में देखें अपडेट किया गया

एक अनुरोध किसी एक मॉडल का एक कॉल होता है। इसमें एक id (req_…), एक स्थिति, API क्रेडिट में इसकी लागत (1000 = 1 USD), और सफल होने पर जनरेट की गई फ़ाइलें होती हैं। नीचे दिए गए हर एंडपॉइंट से, हर मॉडल के लिए यही ऑब्जेक्ट वापस आता है।

मॉडल ढूँढें

सभी 1,496 मॉडल का कैटलॉग सार्वजनिक JSON है (कुंजी की आवश्यकता नहीं):

टर्मिनल
curl "https://api.doitong.ru/v1/models?category=text-to-video&lab=Google&limit=20"
क्वेरी पैरामीटर अर्थ
q नाम, id, निर्माता या टैग में मौजूद होने वाले सभी शब्द, जैसे kling 3।
category एक श्रेणी id, जैसे text-to-video या upscale। GET https://api.doitong.ru/v1/categories सभी 21 श्रेणियों को उनकी संख्या के साथ सूचीबद्ध करता है।
lab मॉडल का निर्माता, नाम या id से, जैसे Google या black-forest-labs।
family पिछली पंक्ति से मिला family id: एक मॉडल के हर वैरिएंट (pro, fast, image-to-video, …)।
mode exact (कीमत इनपुट से निर्धारित होती है), measured (इनपुट फ़ाइलों की लंबाई या आकार से), estimate (प्रति रन अनुमानित कीमत) या metered (वास्तविक उपयोग के अनुसार शुल्क, प्रति रन अधिकतम सीमा तक)।
limit, cursor पेज का आकार (1 से 100, डिफ़ॉल्ट 50) और पिछले पेज का next_cursor।

हर पंक्ति में id, name, lab, category, family, summary, tags, output_kind, docs_url और एक price ऑब्जेक्ट होता है (Pricing देखें)। GET https://api.doitong.ru/v1/models/{model_id} पूरा इनपुट और आउटपुट JSON Schema, मानक पैरामीटर नाम, कीमत के नियम और एक उदाहरण इनपुट जोड़ता है। अज्ञात category या mode के लिए 400 invalid_parameter मिलता है।

मॉडल चलाएँ

टर्मिनल
curl -X POST "https://api.doitong.ru/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": "..."}'
  • बॉडी मॉडल का इनपुट, यानी एक JSON ऑब्जेक्ट, होती है। हर मॉडल पेज इसके पैरामीटर सूचीबद्ध करता है।
  • किसी भी शुल्क से पहले इनपुट की जाँच की जाती है। अमान्य इनपुट पर गलत param के साथ 422 invalid_input मिलता है और कोई शुल्क नहीं लगता।
  • ?wait=N (अधिकतम 20 सेकंड) कॉल को तब तक रोकता है, जब तक अनुरोध पूरा न हो जाए या समय समाप्त न हो जाए।
  • ?webhook_url=https://… अनुरोध पूरा होने पर उस URL पर हस्ताक्षरित POST भेजता है (Webhooks देखें)।
  • ?storage=permanent या ?storage=temporary तय करता है कि आउटपुट फ़ाइलें कितने समय तक रखी जाएँ; इसके बिना खाते की सेटिंग लागू होती है (Where फ़ाइलें live देखें)।

अनुरोध के काम करने के दौरान प्रतिक्रिया 202 Accepted होती है और प्रतीक्षा के दौरान पूरा होने पर (या रीप्ले होने पर, नीचे देखें) 200 OK होती है। Location और Doitong-Request-Id हेडर अनुरोध का URL और id देते हैं।

स्थितियाँ

अनुरोध का जीवनचक्र
  1. queued स्वीकार और शुल्क लिया गया, वर्कर की प्रतीक्षा में
  2. running मॉडल जनरेट कर रहा है
  3. अंतिम स्थितियाँ:
    • succeededकोटेशन का शुल्क लिया गया; outputs[] में हमारे स्टोरेज के URL हैं
    • failedअपने-आप रिफंड किया गया; एरर में कारण दिया गया है
    • canceledपरिणाम से पहले रोका गया; रिफंड किया गया
स्थिति अर्थ अंतिम
queued स्वीकार किया गया और शुल्क लिया गया, वर्कर की प्रतीक्षा में। queue_position कतार में स्थान दिखा सकता है। नहीं
running मॉडल जनरेट कर रहा है। नहीं
succeeded पूरा हुआ। outputs फ़ाइलों की सूची देता है। हाँ
failed मॉडल या किसी सीमा ने इसे रोक दिया। error कारण बताता है। API क्रेडिट रिफंड किए जाते हैं। हाँ
canceled परिणाम तैयार होने से पहले रद्द किया गया। API क्रेडिट रिफंड किए जाते हैं। हाँ

समय सीमा से अधिक चलने वाला अनुरोध timeout कोड के साथ विफल होता है और उसका रिफंड किया जाता है: इमेज के लिए 15 मिनट, वीडियो के लिए 60 मिनट, ऑडियो और बाकी सभी के लिए 30 मिनट।

अनुरोध ऑब्जेक्ट

JSON
{
  "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.ru/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t",
    "cancel": "https://api.doitong.ru/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/cancel"
  }
}
  • outputs हर मॉडल के लिए समान होता है: हर जनरेट की गई फ़ाइल के लिए एक एंट्री, जिसमें type (image, video, audio, file या 3d), हमारे स्टोरेज का एक url, content_type और ज्ञात होने पर file_size, width, height, duration होते हैं।
  • output मॉडल का अपना परिणाम ऑब्जेक्ट होता है (इसके फ़ील्ड हर मॉडल पेज पर सूचीबद्ध हैं), जिसमें वही URLs होते हैं।
  • storage बताता है कि फ़ाइलें कैसे रखी जाती हैं: mode (permanent या temporary), संग्रहीत bytes, expires_at (अस्थायी फ़ाइल हटाए जाने का समय, स्थायी फ़ाइलों के लिए null) और expired (फ़ाइलें हट जाने के बाद true)।
  • cost.credits API क्रेडिट में कॉल की कीमत (cost.usd USD में), cost.charged API शेष राशि से डेबिट की गई राशि और cost.refunded वापस की गई राशि होती है। metered मॉडल के लिए cost.credits शुरुआत में रोकी गई अधिकतम राशि (cost.held) होती है; रन सफल होने पर cost.settled उपयोग की राशि बताता है और अधिकतम राशि का शेष cost.refunded में होता है (Charged by उपयोग देखें)।
  • अनुरोध विफल होने पर error { "type": …, "code": …, "message": … } होता है।

अनुरोध पढ़ें

टर्मिनल
curl "https://api.doitong.ru/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY"
  • ?wait=N (अधिकतम 20 सेकंड) लॉन्ग-पोल करता है: कॉल अनुरोध के अंतिम स्थिति में पहुँचते ही लौटता है, या N सेकंड बाद वर्तमान स्थिति के साथ लौटता है। परिणाम की प्रतीक्षा करने का यह सबसे सरल तरीका है।
  • ?logs=1 मॉडल की प्रगति की लॉग पंक्तियाँ (अंतिम 50) logs के रूप में जोड़ता है।

आप केवल अपने खाते के अनुरोध पढ़ सकते हैं; किसी अन्य id के लिए 404 request_not_found मिलता है।

अनुरोधों की सूची बनाएँ

टर्मिनल
curl "https://api.doitong.ru/v1/requests?limit=20&status=succeeded&model=flux/schnell" \
  -H "Authorization: Bearer $DOITONG_API_KEY"

नवीनतम पहले। limit 1 से 100 तक है (डिफ़ॉल्ट 20), status और model फ़िल्टर करते हैं। प्रतिक्रिया { "object": "list", "data": [ … ], "has_more": true, "next_cursor": "req_…" } होती है; अगले पेज के लिए cursor=<next_cursor> भेजें।

अनुरोध रद्द करें

टर्मिनल
curl -X POST "https://api.doitong.ru/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/cancel" \
  -H "Authorization: Bearer $DOITONG_API_KEY"
  • मॉडल शुरू होने से पहले रद्द किया गया: स्थिति canceled हो जाती है, API क्रेडिट रिफंड किए जाते हैं और आपको 200 मिलता है।
  • पहले से जनरेट हो रहा है: रद्द करने का अनुरोध आगे भेजा जाता है और आपको "cancel_requested": true के साथ 202 मिलता है। यदि मॉडल फिर भी पूरा हो जाता है, तो अनुरोध सामान्य रूप से सफल होता है और शुल्क लिया जाता है।
  • पहले से अंतिम स्थिति में है: 409 not_cancelable (पहले से canceled अनुरोध केवल 200 लौटाता है)।

अनुरोध की फ़ाइलें हटाएँ

टर्मिनल
curl -X DELETE "https://api.doitong.ru/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/files" \
  -H "Authorization: Bearer $DOITONG_API_KEY"

अनुरोध की आउटपुट फ़ाइलों की हमारी प्रतियाँ तुरंत हटाता है और उनका स्टोरेज शुल्क रोक देता है। प्रतिक्रिया storage.expired: true वाले अनुरोध ऑब्जेक्ट की होती है; इसके URLs रिकॉर्ड में बने रहते हैं, लेकिन अब काम नहीं करते। इसे फिर कॉल करने पर कुछ नहीं बदलता (200)। queued या running अनुरोध में अभी कोई फ़ाइल नहीं होती: 409 request_active। इसके लिए models:run आवश्यक है।

Idempotency: दो बार भुगतान किए बिना पुनः प्रयास

नेटवर्क विफल हो सकते हैं। रन को सुरक्षित रूप से दोबारा आज़माने के लिए Idempotency-Key हेडर भेजें (255 वर्णों तक की कोई भी स्ट्रिंग, प्रति ऑपरेशन अद्वितीय, जैसे आपका अपना ऑर्डर id):

  • पहले जैसा ही key और body: आपको मूल अनुरोध वापस मिलता है (200, हेडर Idempotent-Replayed: true) और दोबारा कोई शुल्क नहीं लिया जाता।
  • ऐसे रन के बाद वही key और body, जो मॉडल तक पहुँचने से पहले विफल हुआ था (upstream_error या internal_error on submit, insufficient_credits, budget_exceeded, too_many_inflight): कुछ भी जनरेट नहीं हुआ और कोई शुल्क नहीं लिया गया, इसलिए विफलता लौटाने के बजाय पुनः प्रयास मॉडल को फिर चलाता है।
  • अलग body के साथ वही key: 409 idempotency_mismatch।
  • Keys उस API कुंजी तक सीमित होती हैं जिसने उन्हें भेजा है।

फ़ाइलें कहाँ रहती हैं

हर आउटपुट फ़ाइल अनुरोध को succeeded चिह्नित करने से पहले हमारे स्टोरेज में कॉपी की जाती है, इसलिए outputs में दिए गए URLs हमारे अपने होस्ट पर होते हैं और आप उनसे सीधे लिंक कर सकते हैं। वे कितने समय तक रहेंगी, यह आपकी पसंद है:

मोड अवधि कीमत
permanent (डिफ़ॉल्ट) जब तक आप उन्हें हटाएँ प्रति GB प्रति माह 100 API क्रेडिट ($0.10), API शेष राशि से प्रतिदिन शुल्क
temporary 7 दिनों तक, फिर हटाई जाती हैं निःशुल्क
  • खाता सेटिंग नए अनुरोधों के लिए तय करती है: डैशबोर्ड में "फ़ाइलें हमेशा के लिए रखें" स्विच, या PATCH https://api.doitong.ru/v1/account/storage के साथ {"mode": "temporary"}। GET https://api.doitong.ru/v1/account इसे storage के अंतर्गत दिखाता है, साथ में आपके रखे गए bytes और मासिक अनुमान के साथ।
  • रन पर ?storage=permanent|temporary (MCP run टूल का storage आर्ग्युमेंट) उस रन के लिए इसे ओवरराइड करता है।
  • सेटिंग बदलने से आपके पास पहले से मौजूद फ़ाइलों पर कोई प्रभाव नहीं पड़ता; उन्हें DELETE /requests/{id}/files से हटाएँ।
  • जब API शेष राशि स्टोरेज का भुगतान नहीं कर सकती, तो कोई शुल्क नहीं लिया जाता और आपको ईमेल मिलता है: 30 दिनों के भीतर टॉप-अप करें, अन्यथा रखी गई फ़ाइलें अस्थायी हो जाएँगी और 7 दिनों बाद हटा दी जाएँगी।

दुर्लभ स्थिति में जब हमारी कॉपी विफल हो जाती है, तो एंट्री में "stored": false होता है और URL मूल, कम समय तक उपलब्ध रहने वाला URL होता है: इसे जल्द डाउनलोड करें।