> ## 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.

# الأخطاء وتصحيحها

> أخطاء HTTP ورموز المهام الفاشلة في Krea API: أشكال الاستجابات، ورموز الحالة، واستجابات 429 الخاصة بالتزامن، وما يجب إرساله إلى الدعم.

قد يفشل الطلب في موضعين. فإما أن يُرفض فورًا بخطأ HTTP، وإما أن يُقبل ثم ينتهي لاحقًا بالحالة `status: "failed"`. لا تُحتسب رسوم على المهام الفاشلة والملغاة، فأنت تدفع مقابل المهام المكتملة فقط. في تطبيق العُقد (node app)، لا تُحتسب أبدًا رسوم على مهمة التطبيق نفسها. تُحتسب رسوم كل عقدة توليد أو عقدة LLM عند اكتمال مهمتها الخاصة. لا يؤدي الفشل إلى إلغاء العُقد المتوازية أو الفروع الأخرى، لذا تُحتسب أيضًا رسوم العقدة التي تكتمل بعد فشل التطبيق، ولا تُسترد تلك الرسوم. لا تُحتسب رسوم على العقدة التي تفشل أو تُلغى أو لا تبدأ أبدًا. راجع [مفاتيح API والفوترة](https://www.krea.ai/docs/ar/developers/api-keys-and-billing.md).

## أخطاء وقت الطلب والمهام الفاشلة

**أخطاء وقت الطلب** تُرجع حالة `4xx` أو `5xx`. لا تُنشأ أي مهمة. اقرأ نص الاستجابة كما هو موضح أدناه.

**المهام الفاشلة** تُرجع حالة نجاح عند الإرسال. استعلم عبر [GET `/jobs/{id}`](https://www.krea.ai/docs/ar/developers/job-lifecycle) أو انتظر [الويب هوك](https://www.krea.ai/docs/ar/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، اقرأ `message ?? error` عندما يكون النص بصيغة JSON. يحمل أحد هذين الحقلين الملخص. بعض نصوص `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`، ومنهم `urllib` في Python. يرسل curl افتراضيًا `Accept: */*`، وكذلك `fetch` في Node، لذا يتلقى كلاهما JSON ما لم تغيّر `Accept`.

تُرجع الطلبات غير المصادَق عليها إلى `POST /generate/...` و`GET /jobs/{id}` و`GET /styles` و`GET /assets` الحالة `401` مع `{"message":"Unauthorized"}` عند `*/*` و`application/json`، وصفحة HTML عند غياب `Accept` أو عند `text/html`. ويحدث الأمر نفسه مع الحالة في طلب `GET /jobs/{id}` مصادَق عليه لمعرّف غير معروف: `404` بصيغة JSON مع `{"message":"Job not found or unauthorized"}` عندما تطلب `Accept` صيغة JSON، و`404` بصيغة `text/html` عندما تكون `Accept` مفقودة.

يستخدم JSON غير الصالح (`400`) والتحقق (`422`) الشكل `{ "error" }` ويبقيان بصيغة JSON حتى عند غياب `Accept`. وينطبق الأمر نفسه على `422` الخاص بالحقول المُزالة، و`410` الخاص بالنماذج الموقوفة، و`402` الخاص بـ Zero Data Retention، واستجابات `{ "error" }` في تطبيقات العُقد، وأخطاء [Agent operation API](#agent-operation-api) المُعيَّنة. كما أن `402` و`429` الناتجتين عن قبول مهمة `POST /generate/...` تكونان بصيغة JSON أيضًا، حتى مع `Accept` الخاصة بالمتصفح.

تستخدم `413` و`500` الشكل `{ "message" }` وتتبعان `Accept`، مثل `401` و`404`.

### التحقق (`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"`). تستخدم الأخطاء على مستوى الكائن سلسلة فارغة، كما في المفتاح غير المعروف أعلاه. تُنتج عدة مفاتيح غير معروفة `Unrecognized keys: ...` مع `field` الفارغ نفسه. لا يُضاف `expected` إلا عندما تكون `code` هي `"invalid_type"`.

تستخدم ترويسة `X-Webhook-URL` غير الصالحة استجابة `422` نفسها.

يُرجع `GET /jobs` مع معلمات استعلام غير صالحة استجابة `422` هذه أيضًا، وليس `400`.

يُرجع فحص مدخلات Zero Data Retention الذي يفشل داخل الأداة `422` مع الشرح في `message` (بشكل `{ "message" }`، لذا تهمّ `Accept`). راجع [Zero Data Retention](https://www.krea.ai/docs/ar/developers/zdr.md).

### الحقول المُزالة والموقوفة (`422`)

يستخدم الحقل المُزال `batchSize` / `batch_size` استجابة `422` مختلفة، من دون مصفوفة `details`:

```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` هي الاسم الذي أرسلته.

يستخدم الاسم البديل الموقوف لحقلٍ ما قيمة `reason` إما `"deprecated_field"` أو `"conflicting_fields"`، بالإضافة إلى `replacement` و`sunset_date` و`migration_url` عند انطباقها. اعتمد في التفرّع على `error` و`reason`. أما الجملة التي تُعرض على الشخص فهي `message`.

### النماذج الموقوفة نهائيًا (`410`)

يُرجع النموذج الذي تجاوز تاريخ إيقافه النهائي `410` مع `Deprecation: true` وترويسة `Sunset` (تاريخ بصيغة RFC 1123):

```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/ar/developers/deprecations.md).

يرسل النموذج الموقوف الذي لا يزال يعمل الترويستين `Deprecation` و`Sunset` في كل استجابة، بما فيها الأخطاء. واستخدام اسم بديل موقوف لحقلٍ ما يفعل الشيء نفسه، بما في ذلك في استجابة `422` الخاصة به. وعند وجود دليل ترحيل، تُرسل أيضًا ترويسة `Link: <migration_url>; rel="deprecation"`.

## رموز الحالة

| الحالة | المعنى |
| - | - |
| `400` | نص طلب generate ليس JSON صالحًا، أو تعذّر استخدام عنوان URL لمدخل في تطبيق عُقد، أو معلمات الأصول أو تطبيق العُقد غير صالحة. JSON غير الصالح في تنفيذ تطبيق العُقد يُرجع `500`. |
| `401` | بيانات الاعتماد مفقودة أو غير صالحة. |
| `402` | رُفض الطلب قبل بدء أي مهمة. راجع [402](#402-payment-required). |
| `403` | المستدعي مصادَق عليه لكنه غير مسموح له باستخدام هذا المورد. |
| `404` | لم يطابق أي مسار، أو مسار النموذج غير معروف أو غير متاح لك، أو المهمة أو الأصل أو النمط أو تطبيق العُقد غير موجود. |
| `405` | طريقة HTTP غير مسموح بها لهذا المسار. |
| `410` | النموذج موقوف نهائيًا. راجع [النماذج الموقوفة نهائيًا](#sunset-models-410). |
| `413` | نص الطلب كبير جدًا. راجع [413](#413-payload-too-large). |
| `422` | فشل التحقق، أو أُرسل حقل مُزال أو موقوف، أو رُفض أحد المدخلات نهائيًا. |
| `429` | تجاوز حد التزامن ولا يمكن إضافة المهمة إلى التراكم. الحد تقريبي. |
| `500` | خطأ خادم غير معالَج. `{ "message": "Internal Error" }`. من دون نص الاستثناء. يتبع `Accept`. |
| `502`، `504` | قابلة لإعادة المحاولة. تصل `502` على هيئة نص Cloudflare عادي `error code: 502`، وليس JSON، لذا اعتمد في التفرّع على رمز الحالة. قد تكون `504` نصًا عاديًا أيضًا. راجع [تنزيل المدخلات](#input-downloads). |

### `400`

يكون JSON غير الصالح في generate دائمًا بصيغة 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)"
}
```

يستخدم تنفيذ تطبيق العُقد الشكل `{ "error" }` لعنوان URL لمدخل لا يمكنه استخدامه: `Invalid URL for input "<key>"`، أو `Failed to download URL for <key>: …`. تغطي رسالة التنزيل حالات الفشل المؤقتة أيضًا، لذا على عكس generate (راجع [تنزيل المدخلات](#input-downloads)) يكون فشل التنزيل في تطبيق العُقد دائمًا `400`. أعد المحاولة مرة واحدة إذا كان عنوان URL صالحًا.

JSON غير الصالح في `POST /node-apps/{id}/execute` ليس استجابة `400` الخاصة بـ generate أعلاه. بل يصبح `500` مع `{ "message": "Internal Error" }`، من دون نص الاستثناء، ويتبع `Accept`.

استجابات `400` الأخرى في الأصول وتطبيقات العُقد تكون `{ "message": "..." }` مع شرح قصير، مثل `No file provided` في الرفع عبر رابط موقَّع مسبقًا أو `Invalid pagination parameters` في إصدارات تطبيق العُقد. يمرّر الرفع الفاشل للأصل حالة خدمة الرفع كما هي (`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" }
```

يُرجع الرفع عبر رابط موقَّع مسبقًا `{ "message": "Presigned upload URL expired" }` أو `{ "message": "Invalid presigned upload URL" }`.

### الدفع مطلوب (`402`)

بالنسبة لعميل يُحاسَب عبر API (مفتاح API، أو MCP باستخدام مفتاح API) لا يغطي رصيد 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 والفوترة](https://www.krea.ai/docs/ar/developers/api-keys-and-billing.md).

قيم `message` الأخرى لـ `402` في واجهة API العامة:

| `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` | Krea 3 مع `thinking_mode` بقيمة `"ultra"` (أو القيمة القديمة `"max"`) ومع صور مرجعية، على خطة لا تتضمن Krea 3 Ultra. بدون صور مرجعية، يعمل Ultra بوضع `"fast"`. |
| `ENHANCER_RESOLUTION_LIMIT_REACHED` | عملية التكبير أكبر مما تسمح به الخطة المجانية. |

يُرجع طلب generate مع Zero Data Retention على مساحة عمل لم تُفعَّل فيها الميزة هذا النص، بصيغة JSON دائمًا:

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

تستخدم [Agent operation API](#agent-operation-api) نصوص `402` خاصة بها. وهي تعتمد على رصيد الحوسبة في مساحة العمل، وليس على رصيد API.

### `403`

| `message` أو `error` | متى |
| - | - |
| `Use an API key or a plugin session` | Realtime، عند الاستدعاء بدون مفتاح API أو جلسة OAuth أو جلسة إضافة. `{ "message" }`. |
| `This endpoint needs a workspace service API key` | Usage API، بيانات الاعتماد ليست مفتاح API خدميًا لمساحة العمل. `{ "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.` | تنفيذ تطبيق العُقد. `{ "error" }`، بصيغة JSON دائمًا. |
| `Free users cannot run node apps` | تنفيذ تطبيق العُقد على مساحة عمل بالخطة المجانية. `{ "message" }`. |
| `You do not own this style` | تغيير نمط لا تملكه أو مشاركته. `{ "message" }`. |

### `404`

كل استجابة `404` تكون `{ "message" }`، مثل معرّف مهمة غير معروف:

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

يجعل غياب ترويسة `Accept` هذه الاستجابات بصيغة HTML، باستثناء `Endpoint not found` لنموذج لا يمكن لمفتاحك أو خطتك استخدامه، فهي بصيغة JSON دائمًا. طلب `GET /jobs/{id}` مصادَق عليه لمعرّف غير معروف بدون `Accept` يُرجع `404` بصيغة `text/html`.

| `message` | متى |
| - | - |
| `Not Found` | لم يطابق أي مسار. |
| `Endpoint not found` | مسار نموذج تحت `/generate` غير معروف، أو لا يمكن لمفتاح API هذا أو للخطة استخدامه. |
| `Job not found or unauthorized` | معرّف مهمة مفقود أو غير صالح، بما في ذلك `DELETE /jobs/{id}`. |
| `Asset not found` | أصل مفقود. |
| `Style not found` | نمط مفقود. تغيير نمط لا تملكه أو مشاركته يُرجع `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، مع صفحة `413` بصيغة HTML. لا ترسل الملفات ضمن الطلب مباشرة. ارفع الملف باستخدام `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` | JSON `{ "message": "Input file rejected: fetching <url> returned HTTP 404" }` عندما يُرجع المضيف `404`. يستخدم `410` من المضيف الجملة نفسها مع `410`. | لا. الفشل دائم. |
| `502` | نص Cloudflare عادي `error code: 502`، مع `Content-Type: text/plain; charset=UTF-8`. مؤكَّد عندما يُرجع مضيف الملف `503` أو `500` أو `429`، وعندما يتعذّر تحليل اسم النطاق. | نعم. اعتمد في التفرّع على رمز الحالة. |
| `504` | لم تُختبر مباشرة. قد تصل أيضًا على هيئة نص Cloudflare عادي. | نعم. اعتمد في التفرّع على رمز الحالة. |

تكرار `502` لعنوان URL نفسه يعني على الأرجح أن عنوان URL محظور أو معطّل. غيّر عنوان URL.

حالات فشل التحويل عند تصدير النماذج ثلاثية الأبعاد تكون `502` أيضًا. لم يُختبر هذا المسار مباشرة، لذا قد يصل النص أيضًا على هيئة نص Cloudflare عادي `error code: 502`. اعتمد في التفرّع على رمز الحالة وأعد المحاولة. تكرار `502` لعنوان URL النموذج نفسه يعني على الأرجح أن عنوان 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/ar/developers/zdr.md). لا تُضاف طلبات Krea 2 إلى التراكم في أي خطة حاليًا، لذا تُرجع `429` عند تجاوز الحد. عندما يكون التراكم مفعّلًا، تُقبل المهمة الإضافية بالحالة `status: "backlogged"` وتبدأ بمجرد توفر مكان شاغر. لا يوجد حد منفصل للتراكم. راجع [حدود المعدل](https://www.krea.ai/docs/ar/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 operation API

يُرجع `POST /agent/{operation}` و`GET /agent/session/{sessionId}` الشكل `{ "error", "code"?, "allowedModels"? }`. الحقل `error` وحده مطلوب. `allowedModels` بصيغة camelCase. الدورة التي تفشل بعد قبولها تظهر بالحالة `status: "failed"` في الجلسة، وليس كأحد أخطاء HTTP هذه. راجع [Agent](https://www.krea.ai/docs/ar/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 غير المعروف يبقى `422` مع `{ "error", "code" }`. أما `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/ar/developers/deprecations.md) إن وُجد. |
| `provider_error` | عادةً نص المزوّد نفسه. | أعد المحاولة مع التراجع. |
| `internal` | نص حر، أو محذوف. | أعد المحاولة لاحقًا. اذكر `job_id` إذا تواصلت مع الدعم. |
| `node_app_node_failed` | `Node "<type>" failed: <detail>` أو `Node "<type>" failed.` | اقرأ `message`. إذا واجهت العقدة مشكلة مؤقتة، مثل انتهاء المهلة، فشغّل التطبيق مجددًا. وإلا فأصلح تلك العقدة أولًا. لا تُحتسب أبدًا رسوم على مهمة التطبيق نفسها. تُحتسب رسوم كل عقدة توليد أو عقدة LLM عند اكتمال مهمتها الخاصة. لا يؤدي الفشل إلى إلغاء العُقد المتوازية أو الفروع الأخرى، لذا تُحتسب أيضًا رسوم العقدة التي تكتمل بعد فشل التطبيق، ولا تُسترد تلك الرسوم. لا تُحتسب رسوم على العقدة التي تفشل أو تُلغى أو لا تبدأ أبدًا. معرّف العقدة ونوعها غير موجودين في المهمة العامة. |

تستخدم عمليات تسليم الويب هوك لمهمة فاشلة كائن المهمة نفسه، بما في ذلك `error`. ولا يحتوي تسليم المهمة الملغاة على `error`. لا تُرسل الحمولة التي يتجاوز حجمها 256 KiB، ولا تُجرى أي عمليات تسليم أخرى لتلك المهمة، لذا استعلم عبر `GET /jobs/{id}` بدلًا من ذلك. تحقّق من التوقيع قبل أن تثق بالنص. راجع [الويب هوك](https://www.krea.ai/docs/ar/developers/webhooks.md).

## تصحيح الأخطاء

لا توجد ترويسة لمعرّف الطلب خاصة بـ Krea. لكن كل استجابة تتضمن ترويسة `cf-ray` من Cloudflare. لا تُرسل أي ترويسة `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/ar/developers/deprecations.md).

## الخطوات التالية

> **[دورة حياة المهمة](https://www.krea.ai/docs/ar/developers/job-lifecycle.md)**
>
> استعلم عن الحالة حتى تكتمل المهمة أو تفشل أو تُلغى

> **[الويب هوك](https://www.krea.ai/docs/ar/developers/webhooks.md)**
>
> تحقّق من التوقيع في تسليم مهمة فاشلة

> **[حدود المعدل](https://www.krea.ai/docs/ar/developers/rate-limits.md)**
>
> متى تُضاف المهام الإضافية إلى التراكم ومتى تُرجع 429

> **[مفاتيح API والفوترة](https://www.krea.ai/docs/ar/developers/api-keys-and-billing.md)**
>
> اشحن رصيد API بعد استجابة 402


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