Dokumentasi API Hop
Kode Kesalahan dan Pemecahan Masalah
Cari seluruh kode kesalahan platform, kenali kesalahan khusus protokol, coba kembali dengan aman, dan kumpulkan informasi diagnostik untuk pengguna serta asisten AI.
Kenali Bagian yang Gagal
- Catat status HTTP, metode permintaan, dan jalur yang sebenarnya. Status HTTP dan kode kesalahan aplikasi menjelaskan lapisan yang berbeda; jangan saling menggantikannya.
- Baca kolom kesalahan sesuai protokol yang Anda panggil. Respons native, OpenAI, Claude, dan Gemini tidak semuanya memiliki struktur yang sama.
- Untuk permintaan streaming, periksa juga peristiwa kesalahan dan status penyelesaiannya. Untuk tugas asinkron, periksa
statustugas. HTTP200tidak menjamin pembuatan berhasil. - Gunakan tabel di bawah untuk memperbaiki permintaan atau memutuskan apakah perlu mencoba kembali.
messageadalah teks penjelasan, bukan enum yang stabil; jangan membuat percabangan berdasarkan kata-katanya.
Enum Kode Kesalahan Platform
Ini adalah enum lengkap kode kesalahan aplikasi platform. Nama merupakan label referensi; nilai code dalam respons berupa angka. “HTTP Umum” adalah panduan pemecahan masalah, bukan pemetaan tetap untuk setiap endpoint. Gunakan status HTTP dan isi respons yang sebenarnya. code yang diteruskan dari upstream mungkin tidak termasuk dalam enum ini.
code Numerik | Nama | HTTP Umum | Makna dan Tindakan |
|---|---|---|---|
10000 | BAD_REQUEST | 400 | Format permintaan, jalur, atau parameter dasar tidak valid. Periksa metode, jalur, sintaks JSON, dan nama parameter. |
10001 | VALIDATION_ERROR | 400 / 422 | Validasi parameter gagal. Periksa kolom wajib, tipe, rentang, dan kombinasi parameter. |
20000 | AUTH_ERROR | 401 | Autentikasi gagal. Periksa validitas API Key, kedaluwarsa, dan format header autentikasi. |
20001 | FORBIDDEN | 403 | Akses ditolak atau akun dibatasi. Periksa izin akun dan kepemilikan sumber daya. |
30000 | NOT_FOUND | 404 | Jalur, model, atau sumber daya tidak ada. Periksa jalur endpoint, model, dan ID tugas terhadap sumber daya yang terlihat oleh API Key saat ini. |
30001 | CONFLICT | 409 | Operasi bertentangan dengan status sumber daya saat ini. Baca statusnya sebelum menyesuaikan operasi; hindari pengiriman ganda. |
40000 | INSUFFICIENT_CREDIT | 402 | Saldo tidak cukup. Periksa dan isi ulang saldo sebelum memanggil kembali. |
40001 | RATE_LIMIT | 429 | Permintaan masuk terlalu sering. Kurangi laju permintaan dan tunda percobaan ulang. |
40002 | CONCURRENCY_LIMIT | 429 | Terlalu banyak permintaan berjalan bersamaan. Kurangi konkurensi dan tunggu permintaan yang ada selesai. |
50000 | PROVIDER_ERROR | 502 | Panggilan upstream gagal atau tidak mengembalikan hasil yang valid. Periksa apakah hasil telah dibuat sebelum mempertimbangkan percobaan ulang terbatas. |
50001 | SERVICE_UNAVAILABLE | 503 | Layanan sementara tidak tersedia. Coba kembali nanti dengan batasan; kumpulkan informasi diagnostik jika kegagalan berlanjut. |
50002 | GATEWAY_TIMEOUT | 504 | Pemrosesan melewati batas waktu. Hasilnya mungkin belum pasti; periksa apakah eksekusi terjadi sebelum mencoba kembali. |
50003 | INTERNAL_ERROR | 500 | Terjadi kesalahan server yang belum terklasifikasi. Batasi percobaan ulang; kumpulkan informasi diagnostik jika kegagalan berlanjut. |
HTTP 429 saja tidak dapat membedakan batas laju dan batas konkurensi secara andal. Bedakan keduanya hanya jika tersedia kode kesalahan numerik yang eksplisit. Periksa pengenal model dalam daftar model; jangan menulis ulang nilai model sendiri.
Baca Kesalahan Berdasarkan Protokol
Contoh di bawah menunjukkan struktur umum yang dihasilkan platform, bukan satu format yang dijamin untuk setiap kegagalan. Kegagalan autentikasi dapat dikembalikan oleh lapisan pemrosesan yang berbeda, dan respons yang diteruskan dari upstream dapat mempertahankan struktur, kode string, atau tipenya sendiri. Kenali bentuk respons yang sebenarnya sebelum menguraikannya. Jika tidak dikenali, simpan kolom asli dan status HTTP alih-alih memaksakan konversi.
API Native Platform
Biasanya baca error.code dan error.message. requestId mungkin tidak ada.
{
"success": false,
"error": {
"code": 10000,
"message": "Bad request"
},
"requestId": "req_example"
}Sebagian kesalahan mungkin menggunakan code dan message tingkat atas. Klien harus menerima perbedaan ini dan tidak boleh menganggap ketiadaan objek error sebagai bukti keberhasilan. Respons validasi parameter juga mungkin tidak memiliki kode kesalahan numerik. Anggap kode yang tidak ada sebagai tidak diketahui, bukan mengarangnya.
API Kompatibel OpenAI
Kesalahan umum yang dihasilkan platform menggunakan code, message, dan type tingkat atas; kolom tersebut tidak selalu dibungkus dalam error.
{
"code": 40000,
"message": "Insufficient credit",
"type": "api_error"
}type adalah kategori protokol; code adalah kode kesalahan numerik platform dalam struktur ini. api_error saja tidak menentukan apakah percobaan ulang tepat dilakukan. Kesalahan upstream yang diteruskan dan kesalahan streaming dapat berisi error bertingkat; tangani respons protokol yang sebenarnya. Lihat Chat Completions dan Responses.
API Kompatibel Claude
Dalam struktur umum, type tingkat atas bernilai error, kategori spesifiknya adalah error.type, dan deskripsinya adalah error.message. Struktur ini tidak mencakup code numerik platform. Jangan mengarangnya.
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "max_tokens must be a positive safe integer"
}
}Platform menghasilkan tipe kesalahan Claude berikut secara lokal. Ini bukan enum lengkap tipe kesalahan upstream.
error.type | Pemetaan HTTP Lokal | Yang Perlu Diperiksa |
|---|---|---|
invalid_request_error | 400 | Periksa format dan parameter permintaan. |
authentication_error | 401 | Periksa kredensial autentikasi. |
api_error | Status HTTP lainnya | Kesalahan API umum; periksa status HTTP dan deskripsi yang sebenarnya. Kesalahan ini belum tentu dapat dicoba kembali. |
Lihat Claude Messages.
Kesalahan Bergaya Gemini
Saat menerima respons bergaya Gemini, baca error.code, error.message, dan error.status. Di sini, status adalah kategori string, bukan status HTTP atau status tugas asinkron.
{
"error": {
"code": 10000,
"message": "Bad request",
"status": "INVALID_ARGUMENT"
}
}Kesalahan yang dihasilkan platform dalam bentuk ini menggunakan nilai code numerik platform. Pemetaan string status lokal ada di bawah; ini bukan enum seluruh status upstream.
error.status | Pemetaan HTTP Lokal | Yang Perlu Diperiksa |
|---|---|---|
UNAUTHENTICATED | 401 | Periksa kredensial autentikasi. |
RESOURCE_EXHAUSTED | 402 / 429 | Periksa saldo atau batas penggunaan; string saja tidak dapat membedakannya. |
PERMISSION_DENIED | 403 | Periksa izin dan kepemilikan sumber daya. |
NOT_FOUND | 404 | Periksa jalur, model, atau sumber daya. |
UNAVAILABLE | 503 | Layanan sementara tidak tersedia. |
INTERNAL | >= 500, kecuali 503 | Kesalahan server; 504 juga menggunakan nilai ini. |
INVALID_ARGUMENT | Status HTTP lainnya | Periksa status HTTP dan permintaan yang sebenarnya; 409 juga menggunakan nilai ini. |
503 diprioritaskan dan menggunakan UNAVAILABLE, bukan INTERNAL. Respons upstream mungkin menggunakan semantik code dan status yang berbeda. Jangan menerapkan tabel kode kesalahan platform ke setiap kode numerik Gemini.
Mencoba Kembali dengan Aman
| Situasi | Tindakan yang Disarankan |
|---|---|
400 / 401 / 402 / 403 / 404 / 409 / 422 | Perbaiki permintaan, kredensial, saldo, izin, atau status sumber daya terlebih dahulu. Jangan berulang kali mengirim ulang permintaan yang tidak berubah. Kirim API Key hanya dalam header, jangan pernah dalam parameter kueri URL. |
429 | Kurangi laju dan konkurensi, lalu tunggu sebelum mencoba kembali. Sekadar menambah jumlah percobaan ulang biasanya memperburuk pembatasan. |
500 / 502 / 503 / 504 | Nilai risiko eksekusi ganda terlebih dahulu, lalu gunakan jeda eksponensial terbatas dengan variasi acak, misalnya maksimal 3 percobaan ulang dengan batas total waktu tunggu. |
| Jaringan terputus atau klien melewati batas waktu | Tidak menerima hasil bukan berarti server tidak menjalankan permintaan. Tandai hasil sebagai tidak diketahui alih-alih menyatakan kegagalan atau langsung membuat permintaan lain. |
Patuhi header Retry-After yang valid jika tersedia. Jangan berasumsi setiap kesalahan menyertakannya. Mencoba ulang secara otomatis permintaan pembuatan yang tidak idempoten dapat mengeksekusinya lagi dan menimbulkan biaya tambahan. Halaman ini tidak menjanjikan dukungan umum kunci idempotensi; menambahkan Idempotency-Key sendiri tidak menjamin deduplikasi.
Jika Anda sudah memiliki jobId, periksa tugas tersebut sebelum membuat yang lain. Jika tidak memiliki jobId dan hasilnya belum pasti, simpan pengenal permintaan dan stempel waktu untuk investigasi.
Streaming dan Tugas Asinkron
Permintaan SSE
Setelah SSE dimulai, status HTTP mungkin tetap 200 sementara kegagalan berikutnya dilaporkan melalui peristiwa kesalahan atau payload dalam stream. Uraikan peristiwa dan data sesuai protokol yang dipilih dan periksa penyelesaian normal. Saat terjadi kesalahan atau koneksi terputus secara tak terduga, jangan menganggap teks atau gambar parsial sebagai hasil lengkap yang berhasil. Nama peristiwa dan payload berbeda antar-endpoint. Jangan hanya memeriksa satu kolom error tetap atau menggunakan “teks apa pun telah diterima” sebagai syarat keberhasilan.
Tugas Asinkron
Respons pembuatan yang berisi data.jobId berarti permintaan telah diterima, bukan pembuatan sudah selesai. Respons HTTP yang berhasil saat memeriksa tugas berarti kueri berhasil. Anda tetap harus memeriksa data.status tugas:
PENDING,CONNECT,PROCESSING: lanjutkan polling sebagaimana dijelaskan dalam dokumentasi Jobs.COMPLETED: bacaoutputResult.FAILED,CANCELLED: hentikan polling dan simpan ID tugas serta informasi respons yang telah dibersihkan dari data sensitif untuk investigasi.
Detail kegagalan mungkin muncul dalam data.outputResult.error. Kolom ini opsional dan tidak dijamin ada untuk setiap tugas yang gagal. Gunakan Jobs hanya jika respons pembuatan secara eksplisit mengembalikan jobId. Jangan menerapkan polling tugas ke endpoint yang mengembalikan hasil langsung melalui JSON atau SSE.
Diagnostik untuk Pengguna dan Asisten AI
Berikan informasi berikut yang telah dibersihkan dari data sensitif kepada dukungan atau asisten AI. Gunakan unknown untuk kolom yang tidak ada; gunakan unknown untuk status HTTP jika tidak menerima respons HTTP. Pertahankan jalur kolom dan tipe nilai asli, misalnya error.code: 10000 (number) atau error.code: "invalid_api_key" (string). Jangan otomatis mengonversi code string menjadi kode numerik platform atau mengarang kolom yang tidak ada berdasarkan message, status HTTP, atau nama model.
time_with_timezone: unknown
method: unknown
path_without_query: unknown
model: unknown
stream: unknown
http_status: unknown
error_code_path_value_and_type: unknown
error_type_path_and_value: unknown
protocol_status_path_and_value: unknown
sanitized_message: unknown
request_id_from_body_or_X-Request-ID: unknown
job_id: unknown
job_status: unknown
retry_after: unknown
retry_count_and_delays: unknown
received_partial_output: unknownBaca requestId dari isi respons atau header respons X-Request-ID jika tersedia. Pertahankan jobId sebagai string agar angka panjang tidak kehilangan presisi. Berikan hanya parameter permintaan minimal yang telah dibersihkan dari data sensitif. Hapus API Key, token, cookie, header autentikasi lengkap, informasi pribadi, prompt privat, dan isi file masukan. Hapus parameter kueri URL serta URL masukan atau keluaran yang berisi tanda tangan atau kredensial akses. Jangan menempelkan log permintaan lengkap tanpa meninjaunya.
Asisten AI harus membedakan kolom yang diamati dari kemungkinan penyebab dan mengidentifikasi informasi yang belum tersedia. Bukti yang tidak cukup tidak boleh dianggap sebagai bukti bahwa permintaan berhasil, tidak dieksekusi, atau tidak dikenai biaya.