> ## Documentation Index
> Fetch the complete documentation index at: https://www.krea.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# त्रुटियाँ और डीबगिंग

> Krea API के लिए HTTP त्रुटियाँ और विफल जॉब कोड: प्रतिक्रिया संरचनाएँ, स्टेटस कोड, कॉन्करेंसी 429, और सपोर्ट को क्या भेजें।

कोई कॉल दो जगहों पर विफल हो सकती है। अनुरोध को तुरंत किसी HTTP त्रुटि के साथ अस्वीकार किया जा सकता है, या उसे स्वीकार करके बाद में `status: "failed"` के साथ समाप्त किया जा सकता है। विफल और रद्द किए गए जॉब्स के लिए शुल्क नहीं लिया जाता। आप केवल पूरे हुए जॉब्स के लिए भुगतान करते हैं। नोड ऐप में, ऐप के अपने जॉब के लिए कभी शुल्क नहीं लिया जाता। हर जनरेशन या LLM नोड के लिए तब शुल्क लिया जाता है जब उसका अपना जॉब पूरा होता है। कोई विफलता समानांतर नोड्स या अन्य शाखाओं को रद्द नहीं करती, इसलिए जो नोड ऐप के विफल होने के बाद पूरा होता है, उसके लिए भी शुल्क लिया जाता है, और ये शुल्क वापस नहीं किए जाते। जो नोड विफल होता है, रद्द होता है, या कभी शुरू नहीं होता, उसके लिए शुल्क नहीं लिया जाता। [API keys और बिलिंग](https://www.krea.ai/docs/hi/developers/api-keys-and-billing.md) देखें।

## अनुरोध के समय की त्रुटियाँ और विफल जॉब्स

**अनुरोध के समय की त्रुटियाँ** `4xx` या `5xx` स्टेटस लौटाती हैं। कोई जॉब नहीं बनता। बॉडी को नीचे बताए अनुसार पढ़ें।

**विफल जॉब्स** सबमिट के समय सफलता स्टेटस लौटाते हैं। [GET `/jobs/{id}`](https://www.krea.ai/docs/hi/developers/job-lifecycle) को पोल करें या किसी [वेबहुक](https://www.krea.ai/docs/hi/developers/webhooks.md) की प्रतीक्षा करें। जब जॉब समाप्त होता है, तो `status` `"failed"` होता है और विफलता शीर्ष-स्तरीय `error` ऑब्जेक्ट में होती है। विफल जॉब पर `result` न पढ़ें: वह छोड़ दिया जाता है (या `null` होता है)। इसमें आउटपुट केवल तभी होता है जब `status` `"completed"` हो। `cancelled` जॉब में न `result` होता है, न `error`।

`error.code` के आधार पर ब्रांच करें। `message` छोड़ा जा सकता है, और `provider_error` तथा `internal` के लिए यह प्रदाता का मुक्त-रूप टेक्स्ट होता है। `message` को पार्स न करें।

```javascript theme={"theme":{"light":"github-light-default","dark":"vesper"}}
if (job.status === "failed") {
  switch (job.error?.code ?? "internal") {
    case "content_policy":
    case "model_unavailable":
      // वही अनुरोध दोबारा भेजने पर संभवतः फिर से विफल होगा। इनपुट या मॉडल बदलें।
      break;
    case "insufficient_balance":
      // API बैलेंस टॉप अप करें, फिर दोबारा सबमिट करें।
      break;
    default:
      // timeout, auto_cancelled, provider_error, internal, node_app_node_failed,
      // या कोई अज्ञात कोड: बैकऑफ़ के साथ दोबारा सबमिट करें।
  }
}
```

## प्रतिक्रिया बॉडी

generate, jobs, assets, styles, और node apps पर, जब बॉडी JSON हो तो `message ?? error` पढ़ें। इन दोनों में से एक फ़ील्ड में सारांश होता है। कुछ `5xx` बॉडी JSON नहीं होतीं, जिनमें वह `502` भी शामिल है जिसकी बॉडी सादा टेक्स्ट `error code: 502` होती है। सावधानी से पार्स करें: यदि बॉडी JSON नहीं है, तो HTTP स्टेटस के आधार पर ब्रांच करें।

अधिकांश विफलताएँ `{ "message": "..." }` का उपयोग करती हैं, कभी-कभी अतिरिक्त फ़ील्ड्स (`limit`, `jobType`, `modelAccessDenial`) के साथ। अमान्य JSON और नीचे दिए गए कुछ हैंडलर इसके बजाय `{ "error": "..." }` का उपयोग करते हैं।

`/mcp` जैसे MCP एंडपॉइंट्स JSON-RPC त्रुटियाँ लौटाते हैं, `{ "jsonrpc", "id", "error": { "code", "message" } }`, न कि इस पेज पर दी गई HTTP बॉडी।

### `Accept: application/json` भेजें

> [!WARNING]
>
> `Accept: application/json` के बिना, कुछ त्रुटियाँ HTML पेज के रूप में लौटती हैं और JSON पार्सर विफल हो जाएगा।

`{ "message" }` त्रुटियाँ, जिनमें `401` और `404` शामिल हैं, तब JSON होती हैं जब `Accept` `application/json` या `*/*` हो। जब `Accept` मौजूद न हो, या `text/html` हो, तो ये स्टेटस एक HTML पेज (`Content-Type: text/html`) होते हैं और JSON पार्सर विफल हो जाएगा।

यह उन क्लाइंट्स के लिए मायने रखता है जो कोई `Accept` हेडर नहीं भेजते। Python का `urllib` उनमें से एक है। curl डिफ़ॉल्ट रूप से `Accept: */*` भेजता है, और Node का `fetch` भी, इसलिए दोनों JSON प्राप्त करते हैं जब तक आप `Accept` को ओवरराइड न करें।

बिना प्रमाणीकरण वाले `POST /generate/...`, `GET /jobs/{id}`, `GET /styles`, और `GET /assets`, `*/*` और `application/json` के लिए `401` `{"message":"Unauthorized"}` लौटाते हैं, और `Accept` न होने या `text/html` होने पर एक HTML पेज। किसी अज्ञात id के लिए प्रमाणीकृत `GET /jobs/{id}` स्टेटस के साथ यही करता है: जब `Accept` JSON माँगता है तो `404` JSON `{"message":"Job not found or unauthorized"}`, और जब `Accept` मौजूद न हो तो `404` `text/html`।

अमान्य JSON (`400`) और वैलिडेशन (`422`) `{ "error" }` का उपयोग करते हैं और `Accept` न होने पर भी JSON ही रहते हैं। यही बात removed-field `422`, सनसेट `410`, Zero Data Retention `402`, नोड-ऐप `{ "error" }` प्रतिक्रियाओं, और मैप की गई [Agent ऑपरेशन API](#agent-operation-api) त्रुटियों पर भी लागू होती है। `POST /generate/...` जॉब को स्वीकार करते समय आने वाले `402` और `429` भी JSON होते हैं, ब्राउज़र `Accept` के लिए भी।

`413` और `500` `{ "message" }` का उपयोग करते हैं और `401` तथा `404` की तरह `Accept` का पालन करते हैं।

### वैलिडेशन (`422`)

```json theme={"theme":{"light":"github-light-default","dark":"vesper"}}
{
  "error": "Validation failed",
  "details": [
    {
      "field": "width",
      "message": "Too small: expected number to be >0",
      "code": "too_small"
    },
    {
      "field": "",
      "message": "Unrecognized key: \"foo\"",
      "code": "unrecognized_keys"
    },
    {
      "field": "prompt",
      "message": "Enter a prompt.",
      "code": "custom"
    }
  ]
}
```

`details` हर समस्या को सूचीबद्ध करता है। `field` `.` से जोड़ा गया पाथ है (`"image_style_references.0.url"`)। ऑब्जेक्ट-स्तर की त्रुटियाँ खाली स्ट्रिंग का उपयोग करती हैं, जैसे ऊपर की अज्ञात key के मामले में। कई अज्ञात keys `Unrecognized keys: ...` और वही खाली `field` उत्पन्न करती हैं। `expected` केवल तभी जोड़ा जाता है जब `code` `"invalid_type"` हो।

अमान्य `X-Webhook-URL` हेडर भी इसी `422` का उपयोग करता है।

अमान्य क्वेरी पैरामीटर्स के साथ `GET /jobs` भी यही `422` लौटाता है। यह `400` नहीं है।

टूल के भीतर विफल होने वाली Zero Data Retention इनपुट जाँच `message` में स्पष्टीकरण के साथ `422` लौटाती है (`{ "message" }` संरचना, इसलिए `Accept` मायने रखता है)। [Zero Data Retention](https://www.krea.ai/docs/hi/developers/zdr.md) देखें।

### हटाए गए और डिप्रिकेटेड फ़ील्ड्स (`422`)

हटाया गया `batchSize` / `batch_size` फ़ील्ड एक अलग `422` का उपयोग करता है। इसमें कोई `details` array नहीं होता:

```json theme={"theme":{"light":"github-light-default","dark":"vesper"}}
{
  "error": "invalid_request",
  "reason": "removed_field",
  "field": "batchSize",
  "message": "Generation batch size is no longer supported. Submit one request per output.",
  "value": 2
}
```

`batch_size` भी इसी तरह हटाया गया है। `field` वही नाम होता है जो आपने भेजा।

डिप्रिकेटेड फ़ील्ड alias `reason` `"deprecated_field"` या `"conflicting_fields"` का उपयोग करता है, और लागू होने पर `replacement`, `sunset_date`, और `migration_url` भी। `error` और `reason` के आधार पर ब्रांच करें। किसी व्यक्ति को दिखाने वाला वाक्य `message` है।

### सनसेट मॉडल (`410`)

अपनी सनसेट तिथि पार कर चुका मॉडल `Deprecation: true` और एक `Sunset` हेडर (RFC 1123 तिथि) के साथ `410` लौटाता है:

```json theme={"theme":{"light":"github-light-default","dark":"vesper"}}
{
  "error": "model_unavailable",
  "reason": "deprecated",
  "message": "The model '<path>' was deprecated on <sunsetDate>. <reason> Use '<replacement>' instead.",
  "sunset_date": "YYYY-MM-DD",
  "replacement": "<optional>",
  "migration_url": "<optional>"
}
```

`error` स्थिर मान `"model_unavailable"` है। जब कोई अनुशंसित प्रतिस्थापन नहीं होता, तो `replacement` और `migration_url` छोड़ दिए जाते हैं। उसी मॉडल पर रिट्राई करने से `410` ही लौटता रहेगा। `replacement` सेट होने पर उस पर स्विच करें, और [डिप्रिकेशन](https://www.krea.ai/docs/hi/developers/deprecations.md) देखें।

जो मॉडल डिप्रिकेटेड है लेकिन अभी भी चालू है, वह त्रुटियों सहित हर प्रतिक्रिया पर `Deprecation` और `Sunset` भेजता है। डिप्रिकेटेड फ़ील्ड alias का उपयोग करने पर भी यही होता है, उसके अपने `422` पर भी। जब कोई माइग्रेशन गाइड मौजूद हो, तो एक `Link: <migration_url>; rel="deprecation"` हेडर भी भेजा जाता है।

## स्टेटस कोड

| स्टेटस | अर्थ |
| - | - |
| `400` | generate बॉडी मान्य JSON नहीं है, नोड-ऐप इनपुट URL का उपयोग नहीं किया जा सका, या asset या नोड-ऐप पैरामीटर्स अमान्य हैं। नोड-ऐप execute पर अमान्य JSON `500` होता है। |
| `401` | क्रेडेंशियल्स मौजूद नहीं हैं या अमान्य हैं। |
| `402` | जॉब शुरू होने से पहले अनुरोध अस्वीकार कर दिया गया। [402](#402-payment-required) देखें। |
| `403` | कॉलर प्रमाणीकृत है लेकिन उसे इस संसाधन का उपयोग करने की अनुमति नहीं है। |
| `404` | कोई रूट मेल नहीं खाया, मॉडल पाथ अज्ञात है या आपके लिए उपलब्ध नहीं है, या कोई जॉब, asset, style, या नोड ऐप मौजूद नहीं है। |
| `405` | इस पाथ के लिए HTTP मेथड की अनुमति नहीं है। |
| `410` | मॉडल सनसेट हो चुका है। [सनसेट मॉडल](#sunset-models-410) देखें। |
| `413` | अनुरोध बॉडी बहुत बड़ी है। [413](#413-payload-too-large) देखें। |
| `422` | वैलिडेशन विफल हुआ, कोई हटाया गया या डिप्रिकेटेड फ़ील्ड भेजा गया, या कोई इनपुट स्थायी रूप से अस्वीकार कर दिया गया। |
| `429` | कॉन्करेंसी सीमा पार हो गई है और जॉब को बैकलॉग नहीं किया जा सकता। यह सीमा अनुमानित है। |
| `500` | अनहैंडल्ड सर्वर त्रुटि। `{ "message": "Internal Error" }`। कोई exception टेक्स्ट नहीं। `Accept` का पालन करता है। |
| `502`, `504` | रिट्राई योग्य। `502` Cloudflare के सादे टेक्स्ट `error code: 502` के रूप में आता है, JSON के रूप में नहीं, इसलिए स्टेटस कोड के आधार पर ब्रांच करें। `504` भी सादा टेक्स्ट हो सकता है। [इनपुट डाउनलोड](#input-downloads) देखें। |

### `400`

generate पर अमान्य JSON हमेशा JSON होता है, किसी `Accept` हेडर की आवश्यकता नहीं:

```json theme={"theme":{"light":"github-light-default","dark":"vesper"}}
{
  "error": "Invalid JSON: Expected property name or '}' in JSON at position 1 (line 1 column 2)"
}
```

नोड-ऐप execute किसी ऐसे इनपुट URL के लिए जिसका वह उपयोग नहीं कर सकता, `{ "error" }` का उपयोग करता है: `Invalid URL for input "<key>"`, या `Failed to download URL for <key>: …`। डाउनलोड संदेश अस्थायी विफलताओं को भी कवर करता है, इसलिए generate के विपरीत ([इनपुट डाउनलोड](#input-downloads) देखें) नोड-ऐप डाउनलोड विफलता हमेशा `400` होती है। यदि URL मान्य है तो एक बार रिट्राई करें।

`POST /node-apps/{id}/execute` पर अमान्य JSON ऊपर वाला generate `400` नहीं है। यह `500` `{ "message": "Internal Error" }` बन जाता है, बिना किसी exception टेक्स्ट के, और यह `Accept` का पालन करता है।

assets और node apps पर अन्य `400` प्रतिक्रियाएँ एक छोटे स्पष्टीकरण के साथ `{ "message": "..." }` होती हैं, उदाहरण के लिए presigned अपलोड पर `No file provided` या नोड-ऐप versions पर `Invalid pagination parameters`। विफल asset अपलोड, अपलोड सर्विस का स्टेटस (`400`, `401`, `404`, या `500`) आगे भेजता है और उसका प्रतिक्रिया टेक्स्ट `message` में रख सकता है। वह टेक्स्ट कभी-कभी JSON स्ट्रिंग होता है। `GET /jobs` पर अमान्य क्वेरी पैरामीटर्स [`422`](#validation-422) होते हैं, `400` नहीं।

### `401`

generate, jobs, assets, styles, और node apps:

```json theme={"theme":{"light":"github-light-default","dark":"vesper"}}
{ "message": "Unauthorized" }
```

presigned अपलोड `{ "message": "Presigned upload URL expired" }` या `{ "message": "Invalid presigned upload URL" }` लौटाते हैं।

### `402` भुगतान आवश्यक

API-बिल्ड क्लाइंट (API key, या API key का उपयोग करने वाला MCP) के लिए, जिसका API बैलेंस जॉब को कवर नहीं करता:

```json theme={"theme":{"light":"github-light-default","dark":"vesper"}}
{
  "message": "Your API balance is separate from your workspace compute balance. Please top up your API balance to continue using the API."
}
```

[krea.ai/app/api/ ↗](https://krea.ai/app/api/) पर टॉप अप करें। चालू जॉब्स पूरे होते हैं। [API keys और बिलिंग](https://www.krea.ai/docs/hi/developers/api-keys-and-billing.md) देखें।

सार्वजनिक API पर अन्य `402` `message` मान:

| `message` | कब |
| - | - |
| `This tool is not available on your current plan.` | आपका प्लान या वर्कस्पेस इस मॉडल के लिए किसी समवर्ती जॉब की अनुमति नहीं देता। |
| `MEMBER_USAGE_LIMIT_REACHED` | प्लान सदस्य उपयोग सीमाएँ लागू करता है और इस सदस्य का बजट पार हो जाएगा। |
| `WORKSPACE_USAGE_LIMIT_REACHED` | प्लान सदस्य उपयोग सीमाएँ लागू करता है और वर्कस्पेस का बजट पार हो जाएगा। |
| `MEMBER_LIMIT_VIOLATION` | वर्कस्पेस में उसके प्लान की अनुमति से अधिक सदस्य हैं। |
| `K3_ULTRA_ACCESS_REQUIRED` | `thinking_mode` `"ultra"` (या पुराने `"max"`) और इमेज रेफ़रेंस के साथ Krea 3, ऐसे प्लान पर जिसमें Krea 3 Ultra नहीं है। इमेज रेफ़रेंस के बिना, Ultra `"fast"` के रूप में चलता है। |
| `ENHANCER_RESOLUTION_LIMIT_REACHED` | अपस्केल free प्लान की अनुमति से बड़ा है। |

जिस वर्कस्पेस में Zero Data Retention सक्षम नहीं है, वहाँ Zero Data Retention के साथ generate कॉल यह बॉडी लौटाती है, हमेशा JSON:

```json theme={"theme":{"light":"github-light-default","dark":"vesper"}}
{ "error": "Zero data retention is not enabled for this workspace." }
```

[Agent ऑपरेशन API](#agent-operation-api) अपनी `402` बॉडी का उपयोग करती है। वे API बैलेंस से नहीं, बल्कि वर्कस्पेस कंप्यूट बैलेंस से लेती हैं।

### `403`

| `message` या `error` | कब |
| - | - |
| `Use an API key or a plugin session` | Realtime, जिसे API key या OAuth या प्लगइन सेशन के बिना कॉल किया गया। `{ "message" }`। |
| `This endpoint needs a workspace service API key` | Usage API, क्रेडेंशियल वर्कस्पेस service API key नहीं है। `{ "message" }`। |
| `Your plan is not entitled to the usage API` | Usage API, प्लान इसका हकदार नहीं है। `{ "message" }`। |
| `FEATURE_RESTRICTED` | मॉडल पॉलिसी द्वारा अस्वीकृति। बॉडी में `modelAccessDenial` भी शामिल होता है। `{ "message" }`। |
| `MODEL_ACCESS_REQUIRED` | मॉडल केवल आंतरिक उपयोग के लिए है। `{ "message" }`। |
| `This node app cannot be used via the API.` | नोड-ऐप execute। `{ "error" }`, हमेशा JSON। |
| `Free users cannot run node apps` | free-प्लान वर्कस्पेस पर नोड-ऐप execute। `{ "message" }`। |
| `You do not own this style` | ऐसे style को बदलना या साझा करना जिसके आप स्वामी नहीं हैं। `{ "message" }`। |

### `404`

हर `404` `{ "message" }` होता है, उदाहरण के लिए अज्ञात जॉब id:

```json theme={"theme":{"light":"github-light-default","dark":"vesper"}}
{ "message": "Job not found or unauthorized" }
```

`Accept` हेडर न होने पर ये HTML बन जाते हैं, सिवाय उस `Endpoint not found` के जो ऐसे मॉडल के लिए आता है जिसका उपयोग आपकी key या प्लान नहीं कर सकता; वह हमेशा JSON होता है। बिना `Accept` के किसी अज्ञात id के लिए प्रमाणीकृत `GET /jobs/{id}` `404` `text/html` होता है।

| `message` | कब |
| - | - |
| `Not Found` | कोई रूट पाथ से मेल नहीं खाया। |
| `Endpoint not found` | `/generate` के अंतर्गत कोई मॉडल पाथ जो अज्ञात है, या जिसका उपयोग यह API key या प्लान नहीं कर सकता। |
| `Job not found or unauthorized` | जॉब id मौजूद नहीं है या अमान्य है, `DELETE /jobs/{id}` सहित। |
| `Asset not found` | asset मौजूद नहीं है। |
| `Style not found` | style मौजूद नहीं है। ऐसे style को बदलना या साझा करना जिसके आप स्वामी नहीं हैं, `Style not found or you are not the owner` होता है। |
| `Node app not found` | नोड ऐप मौजूद नहीं है। |
| `Workspace not found` | Usage API, वर्कस्पेस मौजूद नहीं है। |

अज्ञात Agent ऑपरेशन भी `404` `{ "message": "Endpoint not found" }` होता है, Agent की `{ "error", "code" }` संरचना नहीं।

### `405`

बॉडी सादा टेक्स्ट होती है, बिना `Content-Type` हेडर के, JSON नहीं, तब भी जब `Accept` `application/json` हो। टेक्स्ट मेथड के बाद ` method not allowed` होता है, उदाहरण के लिए `GET method not allowed`। एक `Allow` हेडर उन मेथड्स को सूचीबद्ध करता है जिन्हें पाथ स्वीकार करता है।

### `413` पेलोड बहुत बड़ा

बहुत बड़ी अनुरोध बॉडी `413` के साथ अस्वीकार कर दी जाती है। API से आने पर बॉडी `Accept` का पालन करती है:

```json theme={"theme":{"light":"github-light-default","dark":"vesper"}}
{ "message": "Payload Too Large" }
```

बहुत बड़ी बॉडी API तक पहुँचने से पहले ही HTML `413` पेज के साथ अस्वीकार की जा सकती है। फ़ाइलें इनलाइन न भेजें। फ़ाइल को `POST /assets` से अपलोड करें और लौटाए गए URL को generate अनुरोध में पास करें।

### इनपुट डाउनलोड

जो होस्ट `404` या `410` लौटाता है, वह स्थायी `422` होता है। बॉडी JSON होती है, और `Accept` मायने रखता है:

```json theme={"theme":{"light":"github-light-default","dark":"vesper"}}
{ "message": "Input file rejected: fetching <url> returned HTTP 404" }
```

होस्ट `410` वही वाक्य `410` के साथ उपयोग करता है। अन्य स्थायी अस्वीकृतियाँ `Input file rejected: …` का उपयोग करती हैं।

रिट्राई योग्य डाउनलोड विफलता `502` या `504` होती है। बॉडी के नहीं, बल्कि स्टेटस कोड के आधार पर ब्रांच करें, और रिट्राई करें।

| स्टेटस | आपको क्या मिलता है | रिट्राई करें? |
| - | - | - |
| `422` | जब होस्ट `404` लौटाता है तो JSON `{ "message": "Input file rejected: fetching <url> returned HTTP 404" }`। होस्ट `410` वही वाक्य `410` के साथ उपयोग करता है। | नहीं। विफलता स्थायी है। |
| `502` | Cloudflare का सादा टेक्स्ट `error code: 502`, `Content-Type: text/plain; charset=UTF-8` के साथ। तब पुष्टि की गई जब फ़ाइल होस्ट `503`, `500`, या `429` लौटाता है, और जब डोमेन resolve नहीं होता। | हाँ। स्टेटस कोड के आधार पर ब्रांच करें। |
| `504` | लाइव परीक्षण नहीं किया गया। यह भी Cloudflare के सादे टेक्स्ट के रूप में आ सकता है। | हाँ। स्टेटस कोड के आधार पर ब्रांच करें। |

यदि एक ही URL के लिए `502` बार-बार आता रहे, तो संभवतः URL ब्लॉक है या टूटा हुआ है। URL बदलें।

3D export रूपांतरण विफलताएँ भी `502` होती हैं। उस पाथ का लाइव परीक्षण नहीं किया गया था, इसलिए बॉडी भी Cloudflare के सादे टेक्स्ट `error code: 502` के रूप में आ सकती है। स्टेटस कोड के आधार पर ब्रांच करें और रिट्राई करें। यदि एक ही मॉडल URL के लिए `502` बार-बार आता रहे, तो संभवतः URL ब्लॉक है या टूटा हुआ है।

### `429` कॉन्करेंसी

जब जॉब को बैकलॉग नहीं किया जा सकता, तो कॉन्करेंसी सीमा से ऊपर का अनुरोध `429` और `Content-Type: application/json` के साथ अस्वीकार किया जा सकता है:

```json theme={"theme":{"light":"github-light-default","dark":"vesper"}}
{
  "message": "CONCURRENCY_LIMIT_REACHED",
  "limit": 4,
  "jobType": "k2"
}
```

`limit` इस प्रकार के जॉब के लिए आपकी कॉन्करेंसी सीमा है। इसे प्रति उपयोगकर्ता गिना जाता है, प्रति वर्कस्पेस नहीं। यह अनुमानित है: एक छोटा बर्स्ट इसके ऊपर भी स्वीकार किया जा सकता है, इसलिए यह न मानें कि अनुरोध संख्या `limit + 1` ही विफल होगा। `jobType` एक आंतरिक जॉब श्रेणी है, सार्वजनिक मॉडल पाथ नहीं। इसके आधार पर ब्रांच न करें।

Krea 2 अपनी साझा कतार भर जाने पर केवल `{ "message": "CONCURRENCY_LIMIT_REACHED" }` भी लौटा सकता है, बिना `limit` या `jobType` के। यह आपकी सीमा नहीं है। रुकें और रिट्राई करें।

बैकलॉगिंग केवल तभी चालू होती है जब प्लान में यह शामिल हो (Pro और उससे ऊपर), मॉडल इसका समर्थन करता हो, और अनुरोध [Zero Data Retention](https://www.krea.ai/docs/hi/developers/zdr.md) न हो। Krea 2 अनुरोध फ़िलहाल किसी भी प्लान पर बैकलॉग नहीं किए जाते, इसलिए सीमा पार होने पर वे `429` लौटाते हैं। जब यह चालू होती है, तो अतिरिक्त जॉब `status: "backlogged"` के साथ स्वीकार किया जाता है और स्लॉट खाली होते ही शुरू हो जाता है। बैकलॉग की कोई अलग सीमा नहीं है। [रेट लिमिट्स](https://www.krea.ai/docs/hi/developers/rate-limits.md) देखें।

API `Retry-After` या `X-RateLimit-*` नहीं भेजती। प्रतिक्रिया में `cf-ray` शामिल होता है। `429` पर, चालू जॉब्स पूरे होने के बाद एक्सपोनेंशियल बैकऑफ़ के साथ रिट्राई करें (`GET /jobs/{id}` को पोल करें, या वेबहुक का उपयोग करें)।

यदि बाद में पूरा होने वाला कोई जॉब बैलेंस समाप्त कर देता है, तो बैकलॉग में अभी भी पड़े जॉब्स `error.code` `"insufficient_balance"` के साथ विफल हो जाते हैं। यह एक विफल जॉब है, HTTP `402` नहीं। ये जॉब्स वेबहुक नहीं भेजते, इसलिए बैकलॉग किए गए जॉब्स के लिए `GET /jobs/{id}` को पोल करें।

## Agent ऑपरेशन API

`POST /agent/{operation}` और `GET /agent/session/{sessionId}` `{ "error", "code"?, "allowedModels"? }` लौटाते हैं। केवल `error` आवश्यक है। `allowedModels` camelCase में है। जो टर्न स्वीकार किए जाने के बाद विफल होता है, वह सेशन पर `status: "failed"` के रूप में दिखाई देता है, इन HTTP त्रुटियों में से किसी के रूप में नहीं। [Agent](https://www.krea.ai/docs/hi/developers/agent.md) देखें।

| स्टेटस | बॉडी |
| - | - |
| `400` | `{ "error": "Invalid JSON body" }` |
| `401` | `{ "error": "Unauthorized" }` |
| `402` | `{ "error": "Insufficient compute balance for an Agent turn", "code": "compute_limit" }`, या `{ "error": "Free plan Agent message limit reached. Upgrade to keep using the Agent", "code": "free_message_limit" }`। |
| `403` | `{ "error": "Model is not included in the workspace plan", "code": "model_not_entitled", "allowedModels": ["..."] }`। |
| `404` | अज्ञात ऑपरेशन: `{ "message": "Endpoint not found" }`। अन्यथा `{ "error": "Session not found or not accessible", "code": "not_found" }`, या `{ "error": "<file reference error>", "code": "attachment_not_found" }`। |
| `409` | `{ "error": "...", "code": "conflict" }`। |
| `422` | गलत इनपुट: `{ "error": "Validation failed", "details": [...] }`, जैसा [वैलिडेशन](#validation-422) में है। अन्य मैप की गई त्रुटियाँ `{ "error": "<message>" }` होती हैं, और `code` मौजूद होने पर वह भी। डिस्कनेक्ट किए गए डेस्कटॉप ऐप का कोई `code` नहीं होता; संदेश `That desktop app is not connected` से शुरू होता है। |

अपरिचित Agent त्रुटि कोड भी `{ "error", "code" }` के साथ `422` ही होता है। अज्ञात-ऑपरेशन `404` और अनहैंडल्ड `500` `{ "message" }` का उपयोग करते हैं और `Accept` का पालन करते हैं।

## विफल जॉब का `error.code`

`GET /jobs` और `GET /jobs/{id}` केवल तभी `error` सेट करते हैं जब `status` `"failed"` हो। कोई उपयोगी `result` नहीं होता:

```json theme={"theme":{"light":"github-light-default","dark":"vesper"}}
{
  "status": "failed",
  "error": {
    "code": "content_policy",
    "message": "An external provider's moderation systems rejected the generation."
  }
}
```

> [!WARNING]
>
> `error.code` के आधार पर ब्रांच करें। `message` को कभी पार्स न करें।
>
> `message` छोड़ा जा सकता है। `provider_error` और `internal` संदेश मुक्त-रूप होते हैं, और `internal` संदेश प्रदाता का कच्चा टेक्स्ट हो सकता है, जैसे `failed to download media from the provided URL`। जिस `code` को आप नहीं पहचानते, उसे `internal` मानें।

| `code` | `message` | क्या करें |
| - | - | - |
| `content_policy` | `Krea's moderation systems rejected the generation.` या `An external provider's moderation systems rejected the generation.` | प्रॉम्प्ट या इनपुट बदलें। वही अनुरोध संभवतः फिर से अस्वीकार कर दिया जाएगा। |
| `timeout` | `An external provider did not complete the generation in sufficient time.` | जॉब को रिट्राई करें। |
| `insufficient_balance` | छोड़ा जाता है। नोड ऐप इसके बजाय `You are out of compute units. Add more compute units to continue running this node app.` लौटा सकता है। | टॉप अप करें, फिर दोबारा सबमिट करें। यह जॉब पहले स्वीकार किया गया था; HTTP कॉल ने `402` नहीं लौटाया। |
| `auto_cancelled` | `Job repeatedly failed healthchecks and was automatically cancelled.` | जॉब को दोबारा सबमिट करें। |
| `model_unavailable` | आमतौर पर प्रदाता का अपना टेक्स्ट। जब कोई न हो तो `The provider retired this model. It no longer accepts new generations.`। | इस मॉडल को कॉल करना बंद करें। यदि [डिप्रिकेशन](https://www.krea.ai/docs/hi/developers/deprecations.md) पर कोई प्रतिस्थापन है तो उसका उपयोग करें। |
| `provider_error` | आमतौर पर प्रदाता का अपना टेक्स्ट। | बैकऑफ़ के साथ रिट्राई करें। |
| `internal` | मुक्त-रूप, या छोड़ा गया। | बाद में रिट्राई करें। सपोर्ट से संपर्क करने पर `job_id` बताएँ। |
| `node_app_node_failed` | `Node "<type>" failed: <detail>` या `Node "<type>" failed.` | `message` पढ़ें। यदि नोड को कोई अस्थायी समस्या हुई, जैसे टाइमआउट, तो ऐप को फिर से चलाएँ। अन्यथा पहले उस नोड को ठीक करें। ऐप के अपने जॉब के लिए कभी शुल्क नहीं लिया जाता। हर जनरेशन या LLM नोड के लिए तब शुल्क लिया जाता है जब उसका अपना जॉब पूरा होता है। कोई विफलता समानांतर नोड्स या अन्य शाखाओं को रद्द नहीं करती, इसलिए जो नोड ऐप के विफल होने के बाद पूरा होता है, उसके लिए भी शुल्क लिया जाता है, और ये शुल्क वापस नहीं किए जाते। जो नोड विफल होता है, रद्द होता है, या कभी शुरू नहीं होता, उसके लिए शुल्क नहीं लिया जाता। नोड id और नोड प्रकार सार्वजनिक जॉब पर नहीं होते। |

विफल जॉब के लिए वेबहुक डिलीवरी उसी जॉब ऑब्जेक्ट का उपयोग करती है, `error` सहित। रद्द किए गए जॉब की डिलीवरी में कोई `error` नहीं होता। 256 KiB से बड़ा पेलोड नहीं भेजा जाता, और उस जॉब के लिए आगे कोई डिलीवरी नहीं की जाती, इसलिए इसके बजाय `GET /jobs/{id}` को पोल करें। बॉडी पर भरोसा करने से पहले सिग्नेचर सत्यापित करें। [वेबहुक](https://www.krea.ai/docs/hi/developers/webhooks.md) देखें।

## डीबगिंग

Krea का कोई request-id हेडर नहीं है। हर प्रतिक्रिया में Cloudflare का `cf-ray` हेडर शामिल होता है। कोई `Retry-After` या `X-RateLimit-*` हेडर नहीं भेजा जाता।

जब आप [support@krea.ai](mailto:support@krea.ai) पर लिखें, तो शामिल करें:

* `job_id`, जब कॉल ने कोई जॉब बनाया हो या किसी जॉब को संबोधित किया हो
* समय और एंडपॉइंट
* अनुरोध के समय की त्रुटि के लिए, `cf-ray` मान

`Access-Control-Allow-Origin` `*` है। generate, jobs, assets, styles, और node apps पर `Access-Control-Expose-Headers` सेट नहीं है, इसलिए ब्राउज़र `fetch` `cf-ray`, `Deprecation`, या `Sunset` नहीं पढ़ सकता। `cf-ray` को नेटवर्क लॉग से, या किसी सर्वर-साइड क्लाइंट से कॉपी करें।

किसी भी प्रतिक्रिया पर, मॉडल के कॉल स्वीकार करना बंद करने से पहले `Deprecation` और `Sunset` जाँचें। [डिप्रिकेशन](https://www.krea.ai/docs/hi/developers/deprecations.md) देखें।

## अगले चरण

> **[जॉब लाइफ़साइकिल](https://www.krea.ai/docs/hi/developers/job-lifecycle.md)**
>
> जॉब के पूरा, विफल या रद्द होने तक स्टेटस पोल करें

> **[वेबहुक](https://www.krea.ai/docs/hi/developers/webhooks.md)**
>
> विफल जॉब की डिलीवरी पर सिग्नेचर सत्यापित करें

> **[रेट लिमिट्स](https://www.krea.ai/docs/hi/developers/rate-limits.md)**
>
> अतिरिक्त जॉब्स कब बैकलॉग होते हैं और कब वे 429 लौटाते हैं

> **[API Keys & Billing](https://www.krea.ai/docs/hi/developers/api-keys-and-billing.md)**
>
> 402 के बाद API बैलेंस टॉप अप करें


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.