Langsung ke konten utama
Semua kegagalan memakai body { "error": "..." }. Field diagnostik tambahan hanya muncul di beberapa kode.

400 — permintaan ditolak

Tubuh permintaan tidak bisa dibaca atau tidak lolos validasi. Job tidak dibuat, kredit tidak terpotong.
Untuk error Parameter tidak valid, jangan coba-coba nilai lain. Ambil ulang GET /api/v1/models dan pakai array yang tercantum.
Jangan pernah mengulang request 401. Perbaiki kredensialnya lebih dulu.
Solusinya adalah top-up, bukan retry. Bandingkan requiredCredits dengan harga perkiraan dari katalog sebelum mengirim batch.
Terjadi ketika GET /api/v1/jobs/{id} memakai id milik akun lain — biasanya karena id dihardcode atau key yang dipakai berganti. Job milik sendiri tidak pernah kena kode ini.
Modelnya dikenal tapi sedang dimatikan. Segarkan katalog dan pindahkan permintaan ke model lain; jangan diulang ke model yang sama.
Kompres atau potong dulu. Batas ini berlaku sebelum isi berkas diperiksa, jadi tidak bisa dinegosiasikan lewat parameter.

429 — kapasitas

Tiga sebab berbeda, bentuk body berbeda:Konkurensi penuh (akun Unlimited)
Kuota video harian habis
Antrean server penuh / unggahan terlalu sering
Pada POST /api/v1/upload, respons membawa header Retry-After dalam detik. Hormati nilainya.
429 berarti tunggu, bukan ganti key. Membuat API key baru tidak menaikkan batas apa pun karena semua batas menempel di akun.
Jarang, dan tidak memakan kredit. Laporkan beserta waktu dan endpoint-nya.
Gunakan backoff eksponensial dan pertahankan idempotencyKey yang sama.

Kesalahan yang muncul sebagai failed, bukan status HTTP

Kasus ini datang belakangan, dari errorMessage di GET /api/v1/jobs/{id}. Kredit sudah dipotong lalu dikembalikan, jadi periksa creditsCharged yang tersisa 0.
Pesan errorMessage sengaja berbahasa Inggris di respons API. Silakan diterjemahkan ke bahasa UI kamu, tapi jangan diubah artinya saat ditampilkan ke pengguna akhir.