# Hatalar

Her uç nokta aynı şekilde başarısız olur: bir HTTP durumu ve tek bir JSON zarfı.

```json
{
  "error": {
    "type": "invalid_request",
    "code": "invalid_input",
    "message": "duration must be one of 5, 10.",
    "param": "duration",
    "details": [ { "param": "duration", "message": "duration must be one of 5, 10." } ],
    "request_id": null,
    "doc_url": "https://doitong.com/developers/docs/errors#invalid_input"
  }
}
```

| Alan | Anlamı |
|---|---|
| `type` | Hatanın genel sınıfı. Ne yapılacağına buna göre karar verin. |
| `code` | Kesin neden; sabit ve makine tarafından okunabilir. Her kodun aşağıda bir bölümü vardır; `doc_url` bu bölüme bağlantı verir. |
| `message` | Geliştiriciye gösterilmesi veya günlüğe kaydedilmesi güvenli, insanlar tarafından okunabilir açıklama. |
| `param` | Hatalı girdi parametresi veya üst bilgisi, varsa. |
| `details` | Girdi hatalarında bulunan tüm sorunlar: `[{ "param", "message" }]`. |
| `request_id` | İlgili istek, varsa. |

Hata döndüren bir çağrı için ücret alınmaz. Kabul edildikten *sonra* başarısız olan bir istek `failed` durumunu korur, istek nesnesinde `error: { "type", "code", "message" }` taşır ve otomatik olarak iade edilir.

## Türler

| Tür | HTTP durumu | Yapılacak işlem |
|---|---|---|
| `invalid_request` | 400, 413 veya 422 | İsteği düzeltin. Aynı çağrıyı yeniden denemek yine başarısız olur. |
| `authentication_error` | 401 | `Authorization: Bearer <key>` içinde geçerli bir anahtar gönderin. |
| `permission_error` | 403 | Gerekli kapsama sahip bir anahtar kullanın. |
| `not_found` | 404 | Model kimliğini veya istek kimliğini kontrol edin. |
| `insufficient_credits` | 402 | API bakiyesine bakiye yükleyin (hatadaki `top_up_url`). |
| `budget_exceeded` | 402 | Anahtarın kendi bütçesi tükenmiş. Son olarak anahtar sahibinden bütçeyi artırmasını isteyin. |
| `conflict` | 409 | Kaynak, bu çağrıya izin veren bir durumda değil. |
| `rate_limited` | 429 | `Retry-After` saniye bekleyin, ardından yeniden deneyin. |
| `upstream_error` | 502 | Model arka ucu başarısız oldu. Aynı `Idempotency-Key` ile yeniden denemek güvenlidir: işlem tekrar çalışır; ücret alınmaz. |
| `service_unavailable` | 503 | API duraklatılmış veya bir bağımlılık kullanılamıyor. Daha sonra yeniden deneyin. |
| `internal_error` | 500 | Bizim hatamız. Yeniden deneyin; sürerse zaman ve `request_id` ile desteğe başvurun. |

## Kodlar

### `invalid_request`

Genel biçimi bozuk istek (400).

### `invalid_json`

Gövde geçerli bir JSON değil (400).

### `invalid_body`

Gövde geçerli bir JSON ancak bir nesne değil; model girdisi bir JSON nesnesi olmalıdır (400).

### `body_too_large`

Gövde 16 MB'tan büyük (413). Büyük dosyaları yükleyin ve bunun yerine URL'lerini gönderin ([Dosyalar](https://doitong.com/developers/docs/files) bölümüne bakın).

### `invalid_parameter`

Bir sorgu parametresinin değeri yanlış; örneğin `limit` 1 ile 100 arasında değil, `wait` bir sayı değil, bilinmeyen bir `status` veya `category` ya da `storage` değeri `permanent` / `temporary` dışında (400). `param` bunu belirtir.

### `invalid_category`

`GET /openapi.json?category=` mevcut olmayan bir kategori belirtir (400). `GET https://api.doitong.ru/v1/categories` bunları listeler.

### `invalid_cursor`

Bir liste çağrısındaki `cursor` bu listeye ait değil (400). İmleç olmadan yeniden başlayın.

### `invalid_idempotency_key`

`Idempotency-Key` üst bilgisi boş veya 255 karakterden uzun (400).

### `invalid_arguments`

Bir MCP araç çağrısında eksik veya biçimi bozuk bir bağımsız değişken var (yalnızca MCP). `param` bağımsız değişkeni belirtir.

### `invalid_input`

Model girdisi doğrulamadan geçmiyor (422): bilinmeyen bir parametre (mesaj en yakın geçerli adı önerir), eksik zorunlu parametre, yanlış tür, izin verilen liste veya aralık dışında değer ya da hem kurallı hem yerel adın farklı değerlerle verilmesi. `param` ilk hatalı parametredir ve `details` tümünü listeler. Ücret alınmaz.

### `unsupported_file`

Bir dosyanın kabul etmediğimiz bir türü var (422); örneğin desteklenmeyen uzantıya sahip bir yükleme veya uzantıyla eşleşmeyen bir `content_type`.

### `invalid_webhook_url`

`webhook_url` herkese açık bir `https://` URL'si değil (422). Özel, yerel ve düz `http://` adresleri reddedilir.

### `missing_api_key`

Uç nokta bir API anahtarı gerektiriyor ancak hiç anahtar gönderilmedi (401).

### `invalid_api_key`

Anahtar bilinmiyor, iptal edilmiş veya süresi dolmuş (401).

### `insufficient_scope`

Anahtar bu çağrının gerektirdiği kapsama sahip değil (403); örneğin çalıştırma için `models:run`, istekleri ve bakiyeyi okumak için `models:read`. [Kimlik doğrulama](https://doitong.com/developers/docs/authentication#scopes) bölümüne bakın.

### `account_disabled`

Hesap kapatılmış veya askıya alınmış (403). Anahtarları artık çalışmaz.

### `not_found`

Yol mevcut değil (404).

### `model_not_found`

Bu kimliğe sahip herkese açık model yok (404). Modelleri `GET https://api.doitong.ru/v1/models` ile listeleyin.

### `request_not_found`

Hesabınızda bu kimliğe sahip bir istek yok (404). Diğer hesapların istekleri hiçbir zaman görünür değildir.

### `insufficient_credits`

Hesabın **API bakiyesi** (API kredisi, 1.000 API kredisi = $1 — Doitong uygulamalarının kredileri değil) bu çağrının fiyatını karşılamıyor (402). Yanıt, herhangi bir ücret alınmadan önce gönderilir. Hata `top_up_url` taşır; [https://doitong.ru/developers/dashboard#balance](https://doitong.ru/developers/dashboard#balance) adresinden para ekleyin ve yeniden deneyin.

```json
{ "error": { "type": "insufficient_credits", "code": "insufficient_credits",
             "message": "This request costs 560 API credits ($0.56); the API balance is 120 API credits ($0.12). Top up at https://doitong.ru/developers/dashboard#balance",
             "top_up_url": "https://doitong.ru/developers/dashboard#balance", "doc_url": "https://doitong.com/developers/docs/errors#insufficient_credits" } }
```

### `budget_exceeded`

Çağrı, API anahtarının API kredisi cinsinden kendi bütçesini aşar (402). Bütçeyi anahtarın sahibi belirler; onlar artırana kadar yeniden denemek işe yaramaz.

### `conflict`

Çağrı, kaynağın mevcut durumuyla çakışıyor (409).

### `idempotency_mismatch`

`Idempotency-Key` daha önce farklı bir gövdeyle kullanılmış (409). Yeni bir işlem için yeni bir anahtar kullanın.

### `idempotency_in_progress`

Aynı `Idempotency-Key` ile bir istek şu anda oluşturuluyor (409). İsteği almak için kısa süre sonra yeniden deneyin.

### `request_active`

İstek hâlâ `queued` veya `running` durumunda, bu nedenle henüz silinecek dosyası yok (409). Tamamlandıktan sonra silin.

### `not_cancelable`

İstek zaten `succeeded` veya `failed` durumunda ve iptal edilemez (409).

### `rate_limited`

Anahtar, geçerli zaman aralığında çok fazla istek yaptı (429). `X-RateLimit-*` ve `Retry-After` üst bilgilerine bakın.

### `too_many_inflight`

Hesapta zaten `queued` veya `running` durumunda 10 istek var (429). Bunlardan biri tamamlandığında sonrakini başlatın.

### `upstream_error`

Model arka ucu isteği reddetti veya başarısız oldu (çalıştırmada 502 ya da istekte bu kodla `failed`). API kredisi iade edilir. Arka uç girdiyi kendisi reddettiyse çağrı bunun yerine mesajıyla birlikte `422 invalid_input` döndürür.

### `upstream_lost`

Model arka ucu isteği artık tanımıyor; bu nedenle hiçbir sonuç gelmeyecek. İstek bu kodla (tür `upstream_error`) `failed` durumunda sona erer ve iade edilir. Tekrar çalıştırın.

### `timeout`

İstek sınırından daha uzun çalıştı (görseller için 15 dakika, video için 60, diğerleri için 30) ve durduruldu. Bu kodla `failed` durumunda sona erer ve iade edilir.

### `service_unavailable`

API geçici olarak duraklatılmış veya dosya yüklemeleri gibi bir bağımlılık kullanılamıyor (503). Daha sonra yeniden deneyin.

### `internal_error`

Bizim tarafımızda bir sorun oluştu (500). Yeniden deneyin; sürerse desteğe başvurun.

### `charge_failed`

Dahili bir sorun nedeniyle hesaptan ücret alınamadı (500). İstek `failed` olarak işaretlenir; hiçbir şey alınmaz. Yeniden deneyin.

### `pricing_unavailable`

Modelin fiyatı yapılandırılmamış; bu nedenle şu anda fiyat verilemez veya çalıştırılamaz (500).
