Kesalahan dan batas
MarkdownKode respons, artinya, dan tindakan yang diperlukan. Semua kesalahan berformat JSON dan memuat Request ID.
Panduan lengkap
Format kesalahan
Kesalahan dikembalikan dalam format API yang Anda panggil: objek error untuk OpenAI, {"type": "error", "error": {...}} untuk Anthropic, dan error dengan kolom status dan details untuk Gemini. Karena itu, SDK mengenalinya sebagai kesalahan API biasa.
error.codedanerror.reason— kelas kesalahan dari tabel di bawah; keduanya sama.error.type— nilai standar format (misalnya,invalid_request_erroratauserver_error).error.request_id(dalam Anthropic —request_idpada tingkat atas), headerX-Request-IDdan bagian akhir pesan — ID permintaan.- Dalam Gemini, kelas terdapat di
error.details:ErrorInfo.reason— kode yang sama dengan huruf besar (misalnya,MODEL_OVERLOADED),domain—ailoot.ai; ID permintaan terdapat diRequestInfo.requestId. - Dalam format Gemini, kesalahan 5xx yang tidak boleh diulang secara otomatis dan
result_pending_checkdikembalikan dengan status 409 danstatusABORTED: agar Gemini SDK dan CLI tidak mengulangnya secara otomatis. Kelas kesalahan terdapat diErrorInfo.reason(misalnya,MODEL_TIMEOUTatauRESULT_PENDING_CHECK). - Respons berformat OpenAI juga memuat kolom tingkat atas
codedanmessage— untuk klien lama.
{
"code": "API_KEY_REQUIRED",
"error": {
"code": "invalid_api_key",
"message": "No API key was sent with the request. Nothing was charged. Please check that the full key is sent in the Authorization header as \"Bearer <key>\". Request ID: 3b28d3de-5b02-4d07-9f3c-4b9a7d0e68d6.",
"param": null,
"reason": "invalid_api_key",
"request_id": "3b28d3de-5b02-4d07-9f3c-4b9a7d0e68d6",
"type": "invalid_request_error"
},
"message": "No API key was sent with the request. Nothing was charged. …"
}{
"type": "error",
"error": {
"type": "authentication_error",
"code": "invalid_api_key",
"reason": "invalid_api_key",
"message": "… Nothing was charged. … Request ID: 94ed3e31-4373-41ce-bf8a-0d1ed3f7235e."
},
"request_id": "94ed3e31-4373-41ce-bf8a-0d1ed3f7235e"
}{
"error": {
"code": 401,
"status": "UNAUTHENTICATED",
"message": "The API key is not valid. Nothing was charged. … Request ID: e7aa743b-9d0d-4064-b206-2562609f545b.",
"details": [
{
"@type": "type.googleapis.com/google.rpc.ErrorInfo",
"reason": "INVALID_API_KEY",
"domain": "ailoot.ai",
"metadata": {
"code": "invalid_api_key",
"reason": "invalid_api_key",
"request_id": "e7aa743b-9d0d-4064-b206-2562609f545b"
}
},
{
"@type": "type.googleapis.com/google.rpc.RequestInfo",
"requestId": "e7aa743b-9d0d-4064-b206-2562609f545b"
}
]
}
}Kode kesalahan
| HTTP | Kelas (reason) | Yang terjadi | Tindakan |
|---|---|---|---|
| 400 | invalid_request | Permintaan tidak valid: isi atau parameter salah; model tidak mendukung kolom, lampiran, atau alat dalam permintaan; kunci dikirim dalam alamat | Perbaiki permintaan sesuai pesan kesalahan: hapus kolom, lampiran, atau alat yang tidak didukung; kirim kunci melalui header. Penolakan karena kolom, lampiran, atau alat yang tidak didukung terjadi sebelum saldo ditahan — tidak ada pendebitan |
| 400 | context_length_exceeded | Permintaan melebihi konteks model | Persingkat riwayat atau gunakan model dengan konteks lebih besar |
| 400 | content_policy_violation | Permintaan ditolak berdasarkan kebijakan model | Ubah susunan permintaan |
| 401 | invalid_api_key | Kunci tidak ada atau tidak valid | Pastikan kunci dikirim secara lengkap |
| 401 | api_key_disabled | Kunci dinonaktifkan | Aktifkan kunci atau buat kunci baru |
| 402 | insufficient_balance, insufficient_quota | Saldo bebas tidak cukup bahkan untuk penahanan saldo minimum (insufficient_quota — kasus yang sama dalam bentuk yang dikenal OpenAI SDK) | Isi ulang saldo atau kurangi max_tokens |
| 402 | api_key_quota_exhausted | Batas pengeluaran total kunci habis | Naikkan batas kunci dalam dasbor |
| 402 | payment_disputed | Akun memiliki utang akibat pembayaran yang disengketakan | Permintaan baru ditangguhkan hingga utang dilunasi — hubungi dukungan |
| 403 | api_key_expired | Masa berlaku kunci habis | Buat kunci baru |
| 403 | account_inactive | Akun Anda dinonaktifkan | Hubungi dukungan |
| 403 | permission_denied | Kunci tidak diizinkan untuk permintaan ini (misalnya karena IP) | Periksa batasan kunci |
| 404 | model_not_found | Model tidak ditemukan | Cocokkan ID dengan /v1/models |
| 404 | unsupported_endpoint | Model tidak berfungsi dalam format ini | Pilih format atau model lain |
| 404 | not_found | Jalur atau objek tidak ditemukan (misalnya tugas) | Periksa alamat dan ID |
| 409 | duplicate_request | Operasi dengan kunci idempotensi yang sama telah diterima dan mungkin sudah selesai | Periksa hasil operasi pertama; jangan kirim operasi baru |
| 409 | not_ready, video_not_ready | Video atau tugas lain belum selesai | Periksa status nanti |
| 409, 503 | result_pending_check | Hasil permintaan sedang diperiksa. Pada tugas video, ini ditunjukkan oleh flag result_pending_check: true dalam respons status; tugas tetap in_progress | Jangan kirim ulang permintaan — status akan muncul dalam riwayat (GET https://ailoot.ai/api/v1/usage). Jangan buat ulang tugas video: periksa nanti melalui GET /v1/videos/{id} |
| 410 | model_retired | Model telah dihentikan dari layanan | Pilih versi baru dalam GET /v1/models |
| 413 | request_too_large | Isi permintaan terlalu besar | Kurangi ukuran file atau riwayat |
| 429 | rate_limit_exceeded, gateway_concurrency_limit, gateway_queue_full | Terlalu banyak permintaan atau permintaan serentak dari akun Anda | Tunggu (header Retry-After, biasanya 10 detik), lalu coba lagi |
| 429 | usage_limit_reached | Batas pengeluaran kunci per jendela waktu habis (5 jam, 1 hari, atau 7 hari) | Tunggu hingga jendela diperbarui atau naikkan batas kunci |
| 500 | internal_error | Kesalahan Ailoot | Hubungi dukungan dengan Request ID |
| 502 | invalid_model_response, empty_response, incomplete_response | Model mengembalikan respons tidak valid, kosong, atau tidak lengkap | Cari Request ID dalam riwayat dasbor. Jika ada hasil atau pendebitan, pengulangan akan membuat permintaan berbayar kedua. Tidak adanya catatan bukan bukti bahwa permintaan belum dikirim atau belum dijalankan: jangan kirim ulang permintaan yang status pengirimannya tidak diketahui; hubungi dukungan dengan menyertakan Request ID. |
| 502 | result_not_delivered | Hasil tidak terkirim karena kesalahan Ailoot; saldo yang ditahan atau biaya yang didebit telah dikembalikan | Permintaan dapat dikirim ulang |
| 503 | model_overloaded | Model sementara kelebihan beban | Jika X-Should-Retry: true — coba lagi setelah jumlah detik pada Retry-After; jika false — periksa dahulu Request ID dalam riwayat |
| 503 | model_unavailable | Model sementara tidak tersedia | Pilih model lain. Jika X-Should-Retry: true — coba lagi setelah jumlah detik pada Retry-After; jika false — periksa dahulu Request ID dalam riwayat |
| 503 | service_unavailable | Gangguan sementara pada Ailoot | Jika X-Should-Retry: true — coba lagi setelah jumlah detik pada Retry-After; jika false — periksa dahulu Request ID dalam riwayat |
| 503 | charge_not_confirmed | Respons tidak diberikan: pendebitan tidak dapat dikonfirmasi; saldo yang ditahan dikembalikan, tidak ada pendebitan | Jika X-Should-Retry: true — coba lagi setelah jumlah detik pada Retry-After; jika false — periksa dahulu Request ID dalam riwayat |
| 504 | model_timeout | Model tidak merespons tepat waktu; hasil masih mungkin muncul | Jangan kirim ulang permintaan sebelum memeriksa Request ID dalam riwayat |
Kode respons model dan pemeriksaan hasil (502, 503, dan 504) kini merujuk pada model atau permintaan: model_unavailable, model_timeout, invalid_model_response, incomplete_response, charge_not_confirmed dan result_pending_check. Jika kode Anda membandingkan error.code dengan nilai lama, ganti dengan kode pada tabel; pemetaan kode lama ke kode baru dapat dijelaskan oleh dukungan.
Kapan mengulang permintaan
- Periksa X-Should-Retry terlebih dahulu: jika
false,result_pending_checkataumodel_timeoutjangan ulangi secara otomatis. Cari Request ID dalam riwayat dasbor: hasil dan pendebitan terlihat di sana. - Pengulangan aman jika X-Should-Retry: true diterima: tunggu
Retry-Afterdetik. Untuk 5xx, kode saja tidak cukup: hasil mungkin sudah ada. Periksa dahulu riwayat dasbor atau hubungi dukungan dengan Request ID. Ini sangat penting untuk gambar, video, musik, dan langkah agen yang panjang. - Pengulangan tidak akan membantu: 400, 401, 402, 403, 404 — perbaiki dahulu permintaan, kunci, atau saldo.
Batas
Frekuensi dan jumlah permintaan serentak dibatasi untuk seluruh akun Anda, bukan setiap kunci. Jika terlampaui, responsnya 429 rate_limit_exceeded dengan header Retry-After: 10. Jika model itu sendiri kelebihan beban — 503 model_overloaded dengan Retry-After: 30. Jika membutuhkan beban lebih besar, hubungi dukungan.
Batas pengeluaran diatur pada kunci: batas total — 402 api_key_quota_exhausted, jendela 5 jam, 1 hari, dan 7 hari — 429 usage_limit_reached. Selengkapnya — Kunci dan alamat API.
Model NVIDIA: antrean
Daftar model dapat diminta dengan saldo nol; generasi memerlukan saldo untuk ditahan. Model NVIDIA (Nemotron dan lainnya) menggunakan antrean bersama: saat beban tinggi, respons dapat terlambat atau kesalahan “model sementara kelebihan beban” dikembalikan dengan header Retry-After — coba lagi setelah waktu tersebut. Harga tersedia dalam katalog; pendebitan mengikuti aturan model lainnya.
Batas ukuran ditetapkan oleh model: konteks (jumlah token yang dapat dikirim) dan panjang respons maksimum. Keduanya tercantum dalam katalog.
Riwayat dan biaya
Riwayat dan biaya · GET https://ailoot.ai/api/v1/usage · JWT · Authorization: Bearer $TOKEN
JWT ≠ sk-… · Login dan sesi