# Kļūdas

Katrs galapunkts neizdodas vienādi: HTTP statuss un viens JSON aploksnes objekts.

```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"
  }
}
```

| Lauks | Nozīme |
|---|---|
| `type` | Plaša kļūdas kategorija. Pēc tās nosakiet, kā rīkoties. |
| `code` | Precīzs iemesls, stabils un mašīnlasāms. Katram kodam tālāk ir atsevišķa sadaļa; `doc_url` ved uz to. |
| `message` | Cilvēkam saprotams skaidrojums, ko droši reģistrēt vai parādīt izstrādātājam. |
| `param` | Kļūdainais ievades parametrs vai galvene, ja tāds ir. |
| `details` | Ievades kļūdām — visas atrastās problēmas: `[{ "param", "message" }]`. |
| `request_id` | Saistītais pieprasījums, ja tāds pastāv. |

Par izsaukumu, kas atgriež kļūdu, nekas netiek iekasēts. Pieprasījums, kas neizdodas *pēc* pieņemšanas, saglabā statusu
`failed`, pieprasījuma objektā satur `error: { "type", "code", "message" }` un tiek automātiski atmaksāts.

## Tipi

| Tips | HTTP statuss | Rīcība |
|---|---|---|
| `invalid_request` | 400, 413 vai 422 | Izlabojiet pieprasījumu. Atkārtots tāds pats izsaukums atkal neizdosies. |
| `authentication_error` | 401 | Nosūtiet derīgu atslēgu laukā `Authorization: Bearer <key>`. |
| `permission_error` | 403 | Izmantojiet atslēgu ar nepieciešamo tvērumu. |
| `not_found` | 404 | Pārbaudiet modeļa ID vai pieprasījuma ID. |
| `insufficient_credits` | 402 | Papildiniet API atlikumu (`top_up_url` kļūdā). |
| `budget_exceeded` | 402 | Atslēgas budžets ir iztērēts. Rīcība: lūdziet atslēgas īpašniekam to palielināt. |
| `conflict` | 409 | Resurss nav stāvoklī, kas ļauj veikt šo izsaukumu. |
| `rate_limited` | 429 | Uzgaidiet `Retry-After` sekundes un mēģiniet vēlreiz. |
| `upstream_error` | 502 | Modeļa aizmugursistēma neizdevās. Droši mēģiniet vēlreiz ar to pašu `Idempotency-Key`: izsaukums tiks palaists vēlreiz; maksa netika iekasēta. |
| `service_unavailable` | 503 | API ir apturēts vai nedarbojas kāda atkarība. Mēģiniet vēlāk. |
| `internal_error` | 500 | Mūsu kļūda. Mēģiniet vēlreiz; ja tā atkārtojas, sazinieties ar atbalsta dienestu, norādot laiku un `request_id`. |

## Kodi

### `invalid_request`

Vispārīgs nepareizi veidots pieprasījums (400).

### `invalid_json`

Ķermenis nav derīgs JSON (400).

### `invalid_body`

Ķermenis ir derīgs JSON, bet nav objekts; modeļa ievadei jābūt JSON objektam (400).

### `body_too_large`

Ķermenis ir lielāks par 16 MB (413). Augšupielādējiet lielus failus un tā vietā nododiet to URL (skatiet [Faili](https://doitong.com/developers/docs/files)).

### `invalid_parameter`

Vaicājuma parametram ir nepareiza vērtība, piemēram, `limit` ir ārpus 1 līdz 100, `wait` nav skaitlis, nezināms
`status` vai `category`, vai `storage` nav `permanent` / `temporary` (400). `param` to norāda.

### `invalid_category`

`GET /openapi.json?category=` norāda kategoriju, kas nepastāv (400). `GET https://api.doitong.ru/v1/categories` tās uzskaita.

### `invalid_cursor`

Saraksta izsaukuma `cursor` nepieder šim sarakstam (400). Sāciet no jauna bez kursora.

### `invalid_idempotency_key`

`Idempotency-Key` galvene ir tukša vai garāka par 255 rakstzīmēm (400).

### `invalid_arguments`

MCP rīka izsaukumam trūkst arguments vai tas ir nepareizi veidots (tikai MCP). `param` norāda argumentu.

### `invalid_input`

Modeļa ievade neiztur validāciju (422): nezināms parametrs (ziņojums iesaka tuvāko derīgo nosaukumu),
trūkstošs obligātais parametrs, nepareizs tips, vērtība ārpus atļautā saraksta vai diapazona, vai arī norādīts gan kanoniskais, gan
vietējais nosaukums ar atšķirīgām vērtībām. `param` ir pirmais kļūdainais parametrs, bet `details` uzskaita visus.
Nekas netiek iekasēts.

### `unsupported_file`

Failam ir neatbalstīts tips (422), piemēram, augšupielādei ir neatbalstīts paplašinājums vai `content_type`,
kas neatbilst paplašinājumam.

### `invalid_webhook_url`

`webhook_url` nav publisks `https://` URL (422). Privātas, lokālas un vienkāršas `http://` adreses tiek noraidītas.

### `missing_api_key`

Galapunktam nepieciešama API atslēga, bet tā nav nosūtīta (401).

### `invalid_api_key`

Atslēga nav zināma, atsaukta vai beigusies (401).

### `insufficient_scope`

Atslēgai nav šim izsaukumam nepieciešamā tvēruma (403), piemēram, `models:run` palaišanai vai `models:read`, lai lasītu
pieprasījumus un atlikumu. Skatiet [Autentifikācija](https://doitong.com/developers/docs/authentication#scopes).

### `account_disabled`

Konts ir slēgts vai apturēts (403). Tā atslēgas vairs nedarbojas.

### `not_found`

Ceļš nepastāv (404).

### `model_not_found`

Publiska modeļa ar šo ID nav (404). Uzskaitiet modeļus ar `GET https://api.doitong.ru/v1/models`.

### `request_not_found`

Jūsu kontā nav pieprasījuma ar šo ID (404). Citu kontu pieprasījumi nekad nav redzami.

### `insufficient_credits`

Konta **API atlikums** (API kredīti, 1000 API kredītu = 1 $ — nevis Doitong lietotņu kredīti) nesedz šī izsaukuma
cenu (402). Atbilde tiek nosūtīta, pirms kaut kas tiek iekasēts. Kļūdā ir `top_up_url`; papildiniet atlikumu vietnē
[https://doitong.ru/developers/dashboard#balance](https://doitong.ru/developers/dashboard#balance) un mēģiniet vēlreiz.

```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`

Izsaukums pārsniegtu API atslēgas budžetu API kredītos (402). Budžetu iestata atslēgas īpašnieks; atkārtots mēģinājums nepalīdzēs,
līdz īpašnieks to palielinās.

### `conflict`

Izsaukums konfliktē ar pašreizējo resursa stāvokli (409).

### `idempotency_mismatch`

`Idempotency-Key` jau tika izmantota ar citu ķermeni (409). Jaunai darbībai izmantojiet jaunu atslēgu.

### `idempotency_in_progress`

Tieši tagad tiek izveidots pieprasījums ar tādu pašu `Idempotency-Key` (409). Pēc brīža mēģiniet vēlreiz, lai to saņemtu.

### `request_active`

Pieprasījums joprojām ir `queued` vai `running`, tāpēc tajā vēl nav dzēšamu failu (409). Izdzēsiet tos, kad pieprasījums būs pabeigts.

### `not_cancelable`

Pieprasījums jau ir `succeeded` vai `failed` un to nevar atcelt (409).

### `rate_limited`

Atslēga pašreizējā periodā veikusi pārāk daudz pieprasījumu (429). Skatiet `X-RateLimit-*` un `Retry-After` galvenes.

### `too_many_inflight`

Kontā jau ir 10 `queued` vai `running` pieprasījumi (429). Sāciet nākamo, kad kāds no tiem būs pabeigts.

### `upstream_error`

Modeļa aizmugursistēma noraidīja vai neizpildīja pieprasījumu (502 palaišanas laikā vai `failed` ar šo kodu pieprasījumā). API kredīti tiek
atmaksāti. Ja aizmugursistēma pati noraidīja ievadi, izsaukums atgriež `422 invalid_input` ar attiecīgo ziņojumu.

### `upstream_lost`

Modeļa aizmugursistēma vairs nezina par pieprasījumu, tāpēc rezultāts nekad neienāks. Tas beidzas ar `failed` un šo kodu
(tips `upstream_error`) un tiek atmaksāts. Palaidiet to vēlreiz.

### `timeout`

Pieprasījums darbojās ilgāk par atļauto laiku (15 minūtes attēliem, 60 video, 30 citos gadījumos) un tika apturēts. Tas beidzas ar
`failed` un šo kodu un tiek atmaksāts.

### `service_unavailable`

API īslaicīgi ir apturēts vai nedarbojas kāda atkarība, piemēram, failu augšupielāde (503). Mēģiniet vēlāk.

### `internal_error`

Mūsu pusē radās kļūme (500). Mēģiniet vēlreiz; ja tā atkārtojas, sazinieties ar atbalsta dienestu.

### `charge_failed`

Iekšējas problēmas dēļ no konta nevarēja iekasēt maksu (500). Pieprasījums atzīmēts kā `failed`; nekas netika paņemts. Mēģiniet vēlreiz.

### `pricing_unavailable`

Modeļa cena nav konfigurēta, tāpēc to pašlaik nevar aprēķināt vai modeli palaist (500).
