# Klaidos

Kiekvienas galinis taškas sugenda taip pat: pateikiama HTTP būsena ir vienas JSON apvalkalas.

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

| Laukas | Reikšmė |
|---|---|
| `type` | Bendra klaidos klasė. Pagal ją nuspręskite, ką daryti. |
| `code` | Tiksli, nekintanti ir kompiuteriui nuskaitoma priežastis. Kiekvienam kodui skirtas toliau pateikiamas skyrius; `doc_url` pateikia nuorodą į jį. |
| `message` | Žmogui suprantamas paaiškinimas, kurį saugu įrašyti į žurnalą arba parodyti kūrėjui. |
| `param` | Probleminis įvesties parametras arba antraštė, jei toks yra. |
| `details` | Įvesties klaidų atveju – visos rastos problemos: `[{ "param", "message" }]`. |
| `request_id` | Užklausa, su kuria tai susiję, jei tokia yra. |

Už iškvietimą, kuris grąžina klaidą, mokestis netaikomas. Užklausa, kuri nepavyksta *po* priėmimo, išlaiko būseną
`failed`, užklausos objekte turi `error: { "type", "code", "message" }` ir mokestis už ją grąžinamas automatiškai.

## Tipai

| Tipas | HTTP būsena | Ką daryti |
|---|---|---|
| `invalid_request` | 400, 413 arba 422 | Pataisykite užklausą. Pakartotinai siunčiant tą patį iškvietimą jis vėl nepavyks. |
| `authentication_error` | 401 | Galiojantį raktą siųskite antraštėje `Authorization: Bearer <key>`. |
| `permission_error` | 403 | Naudokite raktą su reikiama aprėptimi. |
| `not_found` | 404 | Patikrinkite modelio ID arba užklausos ID. |
| `insufficient_credits` | 402 | Papildykite API likutį (`top_up_url` klaidoje). |
| `budget_exceeded` | 402 | Išnaudotas paties rakto biudžetas. Galutinis sprendimas: paprašykite rakto savininko jį padidinti. |
| `conflict` | 409 | Išteklius nėra būsenos, leidžiančios atlikti šį iškvietimą. |
| `rate_limited` | 429 | Palaukite `Retry-After` sekundes ir bandykite dar kartą. |
| `upstream_error` | 502 | Modelio posistemė nepavyko. Saugiai bandykite dar kartą su tuo pačiu `Idempotency-Key`: užklausa bus paleista iš naujo, mokestis netaikytas. |
| `service_unavailable` | 503 | API pristabdyta arba neveikia priklausomybė. Bandykite vėliau. |
| `internal_error` | 500 | Mūsų klaida. Bandykite dar kartą; jei problema išlieka, susisiekite su palaikymo tarnyba, nurodydami laiką ir `request_id`. |

## Kodai

### `invalid_request`

Bendra netinkamai suformuota užklausa (400).

### `invalid_json`

Turinys nėra galiojantis JSON (400).

### `invalid_body`

Turinys yra galiojantis JSON, bet ne objektas; modelio įvestis turi būti JSON objektas (400).

### `body_too_large`

Turinys didesnis nei 16 MB (413). Įkelkite didelius failus ir vietoje jų perduokite URL (žr. [Failai](https://doitong.com/developers/docs/files)).

### `invalid_parameter`

Užklausos parametras turi netinkamą reikšmę, pavyzdžiui, `limit` nepatenka į intervalą nuo 1 iki 100, `wait` nėra skaičius, nurodyta nežinoma
`status` arba `category`, arba `storage` reikšmė nėra `permanent` / `temporary` (400). Parametro pavadinimą nurodo `param`.

### `invalid_category`

`GET /openapi.json?category=` nurodo neegzistuojančią kategoriją (400). Jas išvardija `GET https://api.doitong.com/v1/categories`.

### `invalid_cursor`

Sąrašo iškvietimo `cursor` nepriklauso šiam sąrašui (400). Pradėkite iš naujo be žymeklio.

### `invalid_idempotency_key`

Antraštė `Idempotency-Key` tuščia arba ilgesnė nei 255 simboliai (400).

### `invalid_arguments`

MCP įrankio iškvietimui trūksta argumento arba jis netinkamai suformuotas (tik MCP). Argumento pavadinimą nurodo `param`.

### `invalid_input`

Modelio įvestis neatitinka tikrinimo reikalavimų (422): nežinomas parametras (pranešime pasiūlomas artimiausias galiojantis pavadinimas),
trūksta privalomo parametro, netinkamas tipas, reikšmė nepatenka į leidžiamą sąrašą arba intervalą, arba pateikti ir kanoninis, ir
vietinis pavadinimai su skirtingomis reikšmėmis. `param` yra pirmasis probleminis parametras, o `details` išvardija juos visus.
Mokestis netaikomas.

### `unsupported_file`

Failo tipas nepriimamas (422), pavyzdžiui, įkeltas failas turi nepalaikomą plėtinį arba `content_type`
neatitinka plėtinio.

### `invalid_webhook_url`

`webhook_url` nėra viešas `https://` URL (422). Privatūs, vietiniai ir paprasti `http://` adresai atmetami.

### `missing_api_key`

Galiniam taškui reikia API rakto, bet jis nebuvo išsiųstas (401).

### `invalid_api_key`

Raktas nežinomas, atšauktas arba nebegalioja (401).

### `insufficient_scope`

Raktas neturi šiam iškvietimui reikalingos aprėpties (403), pavyzdžiui, `models:run` paleidimui arba `models:read`, kad būtų galima skaityti
užklausas ir likutį. Žr. [Autentifikavimas](https://doitong.com/developers/docs/authentication#scopes).

### `account_disabled`

Paskyra uždaryta arba sustabdyta (403). Jos raktai nebeveikia.

### `not_found`

Kelias neegzistuoja (404).

### `model_not_found`

Viešo modelio su šiuo ID nėra (404). Modelius išvardykite naudodami `GET https://api.doitong.com/v1/models`.

### `request_not_found`

Jūsų paskyroje nėra užklausos su šiuo ID (404). Kitų paskyrų užklausos niekada nerodomos.

### `insufficient_credits`

Paskyros **API likutis** (API kreditai, 1 000 API kreditų = 1 $ – ne Doitong programėlių kreditai) nepadengia šio iškvietimo
kainos (402). Atsakymas išsiunčiamas prieš nuskaičiuojant bet kokią sumą. Klaidoje pateikiamas `top_up_url`; papildykite likutį
adresu [https://doitong.com/developers/dashboard#balance](https://doitong.com/developers/dashboard#balance) ir bandykite dar kartą.

```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.com/developers/dashboard#balance",
             "top_up_url": "https://doitong.com/developers/dashboard#balance", "doc_url": "https://doitong.com/developers/docs/errors#insufficient_credits" } }
```

### `budget_exceeded`

Iškvietimas viršytų paties API rakto biudžetą API kreditais (402). Biudžetą nustato rakto savininkas; pakartotinis bandymas nepadės,
kol jis jo nepadidins.

### `conflict`

Iškvietimas nesuderinamas su dabartine ištekliaus būsena (409).

### `idempotency_mismatch`

`Idempotency-Key` jau buvo naudotas su kitu turiniu (409). Naujam veiksmui naudokite naują raktą.

### `idempotency_in_progress`

Šiuo metu kuriama užklausa su tuo pačiu `Idempotency-Key` (409). Po akimirkos bandykite dar kartą, kad ją gautumėte.

### `request_active`

Užklausa vis dar yra `queued` arba `running`, todėl joje dar nėra failų, kuriuos būtų galima ištrinti (409). Ištrinkite juos, kai ji bus baigta.

### `not_cancelable`

Užklausa jau yra `succeeded` arba `failed`, todėl jos atšaukti negalima (409).

### `rate_limited`

Dabartiniu laikotarpiu raktas pateikė per daug užklausų (429). Žr. `X-RateLimit-*` ir `Retry-After` antraštes.

### `too_many_inflight`

Paskyra jau turi 10 `queued` arba `running` užklausų (429). Kitą paleiskite, kai viena iš jų bus baigta.

### `upstream_error`

Modelio posistemė atmetė užklausą arba jos neįvykdė (502 paleidimo metu arba užklausoje būsena `failed` su šiuo kodu). API kreditai
grąžinami. Jei pati posistemė atmetė įvestį, iškvietimas grąžina `422 invalid_input` su jos pranešimu.

### `upstream_lost`

Modelio posistemė nebežino apie užklausą, todėl rezultatas niekada nebus gautas. Ji baigiama būsena `failed` su šiuo kodu
(tipo `upstream_error`), o mokestis grąžinamas. Paleiskite ją dar kartą.

### `timeout`

Užklausa veikė ilgiau nei leidžiama (15 minučių vaizdams, 60 vaizdo įrašams, 30 kitais atvejais) ir buvo sustabdyta. Ji baigiama
būsena `failed` su šiuo kodu, o mokestis grąžinamas.

### `service_unavailable`

API laikinai pristabdyta arba neveikia priklausomybė, pavyzdžiui, failų įkėlimas (503). Bandykite vėliau.

### `internal_error`

Mūsų pusėje įvyko klaida (500). Bandykite dar kartą; jei problema išlieka, susisiekite su palaikymo tarnyba.

### `charge_failed`

Paskyros nepavyko apmokestinti dėl vidinės problemos (500). Užklausa pažymima kaip `failed`; niekas nenuskaičiuojama. Bandykite dar kartą.

### `pricing_unavailable`

Modelio kaina nesukonfigūruota, todėl šiuo metu jos negalima apskaičiuoti arba paleisti modelio (500).
