DocsDokumentasi API Reseller

Errors & Troubleshooting

Kode error, HTTP status, dan cara penanganannya.

Bagian 5 dari 6Diperbarui

5.1 Cara membaca galat

Semua galat berbentuk {"success": false, "error": {"code", "message"}, "request_id"}. Percabangan di kode Anda sebaiknya memakai error.code.

Bentuk lengkap respons galat ada di bagian 2.2.

5.2 Urutan pemeriksaan request

Setiap request melewati pemeriksaan berikut. Yang pertama menolak menentukan jawabannya.

#PemeriksaanJawaban bila gagal
1Toko ada dan aktif404 tenant_not_found, 403 tenant_suspended, 503 tenant_unavailable
2Key tidak ada di query string400 invalid_request
3Alamat IP Anda belum melewati batas kegagalan autentikasi429 rate_limited
4Key valid, aktif, dan pemiliknya boleh memakai API401 invalid_api_key, 403 account_suspended, 403 api_access_disabled, 403 ip_not_allowed, 503 service_unavailable
5Channel Telegram toko aktif, lalu toko menyediakan API Reseller403 channel_disabled, 403 plan_not_eligible, 503 service_unavailable
6Batas rate per key429 rate_limited
7Slot pemrosesan per toko tersedia503 server_busy
8POST /orders: ukuran body413 payload_too_large
9Validasi request dan logika bisnisLihat bagian 5.3 sampai bagian 5.7

Catatan:

  • Key yang tidak dikenal dan key yang sudah dicabut dijawab identik (401 invalid_api_key, isi sama). Anda tidak bisa membedakannya dari respons, dan itu disengaja.
  • Status reseller, blokir, dan Akses API dibaca dari database pada setiap request, tanpa cache. Perubahan oleh toko berlaku mulai request berikutnya.
  • Kegagalan invalid_api_key dan ip_not_allowed dihitung per alamat IP per toko: 20 kegagalan per 5 menit. Setelah itu IP tersebut dijawab 429 rate_limited sebelum key diperiksa, termasuk untuk key yang benar, sampai hitungannya turun. Aplikasi yang salah konfigurasi key dan mengulang terus akan mengunci dirinya sendiri.

5.3 Galat toko

KodeHTTPKapanYang dilakukan
tenant_not_found404Slug di alamat tidak valid atau toko tidak adaPeriksa slug. Jangan diulang
tenant_suspended403Toko ditangguhkanHubungi toko
tenant_unavailable503Toko belum aktif atau layanannya sedang tidak tersediaHubungi toko. Coba lagi setelah toko aktif

5.4 Galat autentikasi dan akses

KodeHTTPKapanYang dilakukan
invalid_request400API key dikirim lewat query stringPindahkan key ke header Authorization. Pertimbangkan memutar key
invalid_api_key401Header Authorization hilang atau bukan Bearer, format key salah, key tidak dikenal, sudah dicabut, atau berasal dari toko lainPeriksa key dan slug. Minta key baru ke toko bila perlu. Jangan diulang, setiap kegagalan dihitung
account_suspended403Akun reseller diblokirHubungi toko
api_access_disabled403Akses API dimatikan, akun bukan lagi reseller, atau tidak punya akun TelegramHubungi toko
ip_not_allowed403IP klien tidak ada di allowlist keyMinta toko menambahkan IP server Anda. Periksa alamat keluar server (NAT, proxy)
channel_disabled403Channel Telegram toko dimatikanHubungi toko
plan_not_eligible403Toko tidak menyediakan API ResellerHubungi toko. Key tidak dihapus dan berfungsi lagi setelah toko menyediakannya kembali (perubahan berlaku dalam sekitar satu menit)

5.5 Galat request dan data

KodeHTTPKapanYang dilakukan
invalid_request422Body bukan JSON yang valid, variant_id bukan UUID, quantity di luar 1 sampai 20, field tak dikenal, Idempotency-Key hilang atau salah format, id di path bukan UUID, parameter limit, offset, status, from, atau to tidak validBaca error.message, perbaiki request. Jangan diulang tanpa perubahan
payload_too_large413Body POST /orders lebih dari 8 KBKirim body yang lebih kecil. Body yang benar hanya berisi variant_id dan quantity
not_found404Path tidak dikenal di bawah /resellerPeriksa path
product_not_found404Produk tidak ada, tidak aktif, terhapus, atau private tanpa izin untuk AndaPeriksa id produk. Untuk produk private, minta toko memberi izin
variant_not_found404Varian tidak ada, tidak aktif, terhapus, atau produknya private tanpa izin untuk AndaPeriksa id varian dan izin produk
order_not_found404Order tidak ada, milik pelanggan lain, atau bukan order APIPeriksa id order

5.6 Galat pembelian

KodeHTTPKapanYang dilakukan
insufficient_balance402Saldo kurang atau wallet belum adaTop up lewat bot Telegram toko, lalu coba lagi
insufficient_stock409Stok varian habisAman diulang dengan key yang sama beberapa kali (bagian 3.5). Bila tetap muncul, tandai habis
stock_reserved409Stok ada tetapi sedang ditahan order pending pembeli lainCoba lagi dalam beberapa menit
variant_unavailable409Total setelah diskon grosir kurang dari Rp 1, sehingga varian tidak bisa dibeliJangan diulang. Hubungi toko soal harga varian
request_in_progress409Request lain dengan Idempotency-Key yang sama masih diproses. Header Retry-After: 1Aman diulang dengan key yang sama setelah 1 detik
idempotency_key_reuse422Idempotency-Key sudah dipakai untuk variant_id atau quantity yang berbedaPakai key baru untuk pembelian baru
account_suspended403Akun diblokir saat pembelian diprosesHubungi toko

5.7 Galat beban dan layanan

KodeHTTPKapanYang dilakukan
rate_limited429Batas rate per key terlampaui, atau batas kegagalan autentikasi per IP terlampaui. Header Retry-After berisi detik tungguTunggu Retry-After, lalu ulangi (aman dengan key yang sama)
server_busy503Server sedang melayani batas maksimum request bersamaan untuk toko ini dan slot tidak kosong dalam 2 detik. Header Retry-After: 1Tunggu 1 detik lalu ulangi (aman dengan key yang sama). Kurangi request paralel
service_unavailable503Server tidak bisa memutuskan, misalnya database atau data layanan toko tidak terbaca. Request ditolak, bukan diizinkanUlangi dengan jeda yang membesar (aman dengan key yang sama)
internal_error500Kesalahan di server. Detailnya tidak dikirim ke klienCatat request_id. Ulangi dengan key yang sama, dan laporkan ke toko bila berulang

5.8 Pemecahan masalah

Gejala yang paling sering ditemui dan langkah pertama yang perlu dicoba.

GejalaKemungkinan penyebabYang dilakukan
401 invalid_api_key padahal key terasa benarKey sudah diputar atau dicabut, <slug> di alamat dasar bukan toko tempat key diterbitkan, atau key terpotong atau salah ketik. Key yang tidak dikenal, dicabut, atau milik toko lain dijawab identikPeriksa slug di bagian 1.3 dan salin ulang key utuh. Bila perlu, minta toko memutar key
429 rate_limited sejak awal, bahkan dengan key yang benarIP Anda sudah melewati 20 kegagalan autentikasi per 5 menit, jadi dijawab 429 sebelum key diperiksaPerbaiki key, lalu tunggu sesuai Retry-After (bisa sampai 300 detik). Jangan mengulang terus
403 ip_not_allowedAlamat keluar server Anda tidak ada di allowlist. Bila server keluar lewat NAT atau proxy, yang dilihat API adalah alamat keluarnyaMinta toko menambahkan alamat itu (bagian 4.2)
Respons POST /orders hilang, timeout, atau hasilnya tidak diketahuiJaringan putus setelah server memproses pembelianUlangi dengan Idempotency-Key yang sama, jangan buat key baru. Bila semua percobaan habis, cek GET /orders?idempotency_key=<key> (bagian 3.5)
409 request_in_progressRequest lain dengan key yang sama masih berjalan, misalnya dua proses mengirim pembelian yang sama bersamaanTunggu 1 detik lalu ulangi dengan key yang sama
402 insufficient_balanceSaldo kurang atau wallet belum ada. Top up hanya tersedia lewat bot Telegram tokoTop up, cek GET /balance (bagian 3.1), lalu coba lagi
403 plan_not_eligible atau 403 channel_disabledToko tidak menyediakan API Reseller, atau channel Telegram toko dimatikan. Key tidak dihapusHubungi toko. Key berfungsi lagi setelah syaratnya terpenuhi (perubahan berlaku dalam sekitar satu menit)

Butuh bantuan dengan integrasi?

Sertakan request_id dari respons galat, lalu hubungi tim Ayosel lewat Telegram atau WhatsApp, atau email [email protected].