# Error

Error memakai format OpenAI supaya SDK bisa membacanya:

```json
{
  "error": {
    "message": "insufficient credits, please top up",
    "type": "insufficient_credits",
    "code": 402
  }
}
```

Di `/v1/messages` (Anthropic), error memakai format Anthropic
(`{"type": "error", "error": {"type": "...", "message": "..."}}`) supaya Claude Code dan Anthropic SDK
menampilkan pesan yang benar.

| Status | `type` | Arti & solusi |
|---|---|---|
| 400 | `invalid_request_error` | Body tidak valid, model tidak dikenal/nonaktif, atau model dipakai di endpoint yang salah (mis. model embedding di chat). |
| 401 | `authentication_error` | API key salah, dicabut, kedaluwarsa, atau akun ditangguhkan. |
| 402 | `insufficient_credits` | Saldo habis atau batas kredit key tercapai. Top-up atau naikkan batas. |
| 403 | `permission_error` | IP tidak ada di allow-list key, atau model tidak diizinkan untuk key ini. |
| 404 | `not_found_error` | Resource tidak ada. |
| 429 | `rate_limit_error` | Terlalu banyak request (per menit atau paralel). Tunggu lalu coba lagi dengan backoff. |
| 502 | `upstream_error` | Provider model sedang bermasalah. Coba lagi atau pakai model lain. |
| 500 | `internal_error` | Kesalahan di sisi SumoRouter. |

Rekomendasi: retry otomatis dengan exponential backoff untuk `429` dan `5xx`; jangan retry `400`, `401`, `402`, `403`.
