REST API
Batas dan error
Format error, kode yang paling sering ditemui, batas request per menit, dan cara menanganinya.
Format error
Setiap error dijawab dengan status HTTP yang sesuai dan body yang bentuknya selalu sama:
{
"error": {
"code": "INSUFFICIENT_CREDITS",
"message": "Kredit tidak cukup untuk model ini"
}
}Bercabanglah di code, yang tidak pernah berubah. message ditulis untuk manusia dan mengikuti header Accept-Language, jadi boleh langsung ditampilkan ke penggunamu.
Kode yang paling sering ditemui
| Status | Kode | Artinya | Yang perlu dilakukan |
|---|---|---|---|
| 400 | BAD_REQUEST | Body atau parameter tidak sesuai skema | Periksa field yang disebut di message |
| 400 | JOB_ALREADY_SENT | Job sudah dikirim ke model, tidak bisa dibatalkan | Tunggu hasilnya; kredit tidak dikembalikan |
| 400 | JOB_NOT_CANCELABLE | Job sudah selesai | Tidak ada |
| 400 | WEBHOOK_URL_INVALID | webhookUrl bukan alamat HTTPS publik di port 443 | Pakai alamat HTTPS yang bisa dijangkau dari internet. Lihat Webhook |
| 401 | UNAUTHORIZED | Kunci tidak ada, salah, dicabut, atau kedaluwarsa | Periksa header Authorization atau buat kunci baru |
| 402 | INSUFFICIENT_CREDITS | Saldo tidak cukup untuk request ini | Isi ulang kredit di studio |
| 403 | EMAIL_UNVERIFIED | Email akun belum diverifikasi | Verifikasi email di studio |
| 403 | ACCOUNT_SUSPENDED | Akun ditangguhkan | Hubungi tim lewat Telegram |
| 404 | NOT_FOUND | Job, berkas, atau proyek tidak ada atau bukan milik akun ini | Periksa id-nya |
| 429 | TOO_MANY_ACTIVE_JOBS | Sudah ada 5 job yang berjalan | Tunggu salah satunya selesai, lalu coba lagi |
| 429 | RATE_LIMITED | Terlalu banyak request dalam semenit | Tunggu sesuai message, lalu coba lagi |
Kalau input tidak lolos aturan model, misalnya pilihan yang tidak ada, berkas acuan yang terlalu besar, atau kombinasi setelan yang tidak didukung, jawabannya 400 dengan kode yang menjelaskan aturannya. Kredit tidak dipotong untuk request yang ditolak.
Batas
| Batas | Nilai |
|---|---|
Job berjalan bersamaan (QUEUED, SUBMITTED, RUNNING) | 5 per akun |
| Variasi per request | 1 sampai 5 |
| Request yang memulai generate atau mengunggah | 30 per menit per kunci |
| Request lainnya | 120 per menit per kunci |
| Id per request tautan unduhan | 100 |
| Item per halaman daftar | 50 |
Batas per menit dihitung per kunci API, jadi beberapa kunci tidak saling menghabiskan jatah.
Saran penanganan
- Ulangi dengan jeda untuk
429dan untuk error5xx. Jeda yang bertambah (2, 4, 8 detik) sudah cukup. - Jangan mengulang
POST /jobssecara buta setelah koneksi terputus. Periksa duluGET /jobs?sort=newest&limit=5untuk memastikan job-nya belum terbuat, supaya kredit tidak terpotong dua kali. - Job yang
FAILEDsudah dikembalikan kreditnya. Tidak perlu tindakan apa pun untuk refund.

