Kode kesalahan
Kode status HTTP Listings API, kode kesalahan SYxxxxx untuk Listings dan Social, serta tiga bentuk respons kesalahan yang dikembalikan oleh API v4.
Listings API menggunakan kode status HTTP konvensional untuk melaporkan hasil permintaan. Kode kesalahan memiliki awalan SY dan disertakan di dalam string kesalahan message, dengan format SYxxxxx: <human-readable reason>.
Kode status HTTP
HTTP status code summary
Tiga bentuk respons
Sebagian besar kegagalan menyertakan array errors, baik di tingkat teratas maupun di dalam hasil operasi, seperti yang ditunjukkan pada bagian-bagian di bawah. Beberapa kegagalan mengembalikan satu objek error sebagai gantinya: pembatasan laju (429) dan beberapa kegagalan tingkat permintaan (400/500 dengan code seperti INTERNAL_SERVER_ERROR). Periksa keduanya: errors adalah array, error adalah objek.
1. Tingkat permintaan: errors[] di tingkat teratas
Kegagalan autentikasi, otorisasi, dan format permintaan menghentikan pemrosesan sebelum operasi dijalankan. Kegagalan tersebut mengembalikan status 4xx yang sesuai (di atas) dengan kesalahan di tingkat teratas respons.
{ "data": { "createLocation": null }, "errors": [{ "message": "SY90005: Invalid Token" }]}2. Validasi operasi tulis: data.<operation>.errors[] bersarang
Permintaan untuk membuat, memperbarui, atau memublikasikan yang secara umum berformat benar mengembalikan HTTP 200. Jika input melanggar aturan bisnis, kegagalan dilaporkan secara bersarang di bawah payload milik operasi itu sendiri dalam data.<operation>.errors. Jika berhasil, array ini ada dan kosong ("errors": []).
{ "data": { "createLocation": { "errors": [ { "message": "SY10126: City is Mandatory" }, { "message": "SY10010: state_iso" } ], "location": null } }}3. Tingkat gateway: satu objek error di tingkat teratas
Pembatasan laju dan gangguan gateway yang tidak terduga menghentikan pemrosesan sebelum penerjemahan dan mengembalikan satu objek error dengan code, message, dan correlation_id. Lihat rate_limited di bawah untuk isi respons 429.
Selalu baca data.<operation>.errors pada operasi tulis, bahkan pada respons 200 dengan objek data.<operation> yang terisi: operasi tulis dapat gagal sebagian dan melaporkannya di sini.
Respons 402 Payment Required tidak memiliki pembungkus error: code, message, doc_url dan, jika ada faktur yang harus dibayar, pay_url berada di tingkat teratas. Lihat payment_required di bawah.
Mengulangi operasi tulis memiliki konsekuensi
API v4 tidak mendukung Idempotency-Key: header tersebut diabaikan, dan tidak ada endpoint yang mendeteksi operasi tulis berulang. Panggilan untuk membuat, memperbarui, atau memublikasikan yang mengalami batas waktu atau mengembalikan 5xx mungkin tetap telah menyimpan perubahan di server, sehingga percobaan ulang tanpa pemeriksaan dapat menghasilkan duplikat lokasi, postingan, atau balasan ulasan.
Anda dapat mengulangi operasi baca dengan jeda yang bertambah. Untuk operasi tulis, baca kembali terlebih dahulu: cari rekaman berdasarkan kunci yang Anda kendalikan (storeId, kode toko, daftar respons interaksi) dan hanya ulangi panggilan jika rekaman tersebut benar-benar tidak ada.
Kode umum
Common SY error codes
Kode validasi dalam rentang SY10xxx berkaitan dengan field input tertentu; message menyebutkan field atau aturan yang gagal dipenuhi. Kode autentikasi dan otorisasi dalam rentang SY90xxx berlaku pada tingkat permintaan dan dikembalikan di tingkat teratas dengan status yang sesuai.
Kode akun terhubung
Kode dalam rentang SY810xx berasal dari endpoint Connected Accounts yang mengimpor atau menautkan profil bisnis di platform publikasi. Kode tersebut dikembalikan secara bersarang dalam isi respons pada HTTP 200 (bentuk respons 2 di atas), jadi baca data.<operation>.errors meskipun statusnya menunjukkan keberhasilan.
SY810xx connected-account and import codes
Kode Social
Kode dalam rentang SY950xx berasal dari endpoint Social: merek, koneksi, dan postingan media sosial. Seperti kode akun terhubung, kode ini muncul secara bertingkat di dalam isi respons pada HTTP 200, jadi baca data.<operation>.error (dan data.<operation>.errors pada rute massal) meskipun statusnya menunjukkan keberhasilan.
SY950xx Social codes
SY95042 dan SY95044 merupakan kegagalan akibat hak akses paket, bukan kesalahan input: mencoba kembali tanpa mengubah paket akan menghasilkan kegagalan yang sama. SY95045, SY95046, SY95049, dan SY95052 merupakan kesalahan input yang dapat diperbaiki pada permintaan berikutnya.
Kode hak akses Listings
Listings plan codes
rate_limited
429 Too Many Requests: akun melampaui batas laju permintaan paketnya. Isi respons merupakan respons kesalahan standar yang memuat petunjuk retry_after_seconds, correlation_id untuk dicantumkan dalam permintaan dukungan, dan doc_url yang menautkan kembali ke bagian ini:
{ "error": { "code": "RATE_LIMITED", "message": "Too many requests. Slow down.", "retry_after_seconds": 30, "correlation_id": "9f2c1e64-2b1a-4b0e-9f1a-2c7d5e8a1b3c", "doc_url": "https://listingsapi.com/docs/error-codes#rate_limited" }}Tunggu sesuai retry_after_seconds (atau header Retry-After jika tersedia), lalu coba lagi dengan jeda yang bertambah secara eksponensial. Lihat Batas laju permintaan untuk batas tiap paket dan contoh implementasi jeda percobaan ulang.
payment_required
402: Pembayaran terakhir untuk akun ini gagal, sehingga setiap endpoint /api/v4 dinonaktifkan sementara. Isi respons menyertakan pay_url, yaitu halaman Stripe untuk faktur yang belum dibayar, jika tersedia, dan header respons X-Error-Code memuat code yang sama. Anda masih dapat membuka halaman Penagihan di dasbor untuk membayar.
{ "code": "payment_required", "message": "This account has an unpaid invoice, so API access is paused. Pay the invoice to restore access.", "pay_url": "https://invoice.stripe.com/i/acct_123/test_abc", "doc_url": "https://listingsapi.com/docs/error-codes#payment_required"}Akses dipulihkan dalam satu menit setelah faktur terbuka terakhir dibayar. Jika faktur masih belum dibayar 3 hari setelah kegagalan pembayaran pertama, langganan Listings dibatalkan dan lokasi milik akun diarsipkan. Jika akun juga memiliki langganan Social yang aktif, akun tetap memiliki akses Social; jika tidak, akun ditutup dan kunci API-nya berhenti berfungsi.
social_payment_required
402: Pembayaran terakhir untuk langganan Social gagal, sehingga endpoint Social (/api/v4/social/*) dinonaktifkan sementara. Endpoint Listings tetap berfungsi. Isi respons memiliki field yang sama dengan payment_required, dengan "code": "social_payment_required". Jika faktur masih belum dibayar 3 hari setelah kegagalan pembayaran pertama, langganan Social dibatalkan dan merek milik akun diarsipkan. Akun tanpa langganan Listings ditutup, dan kunci API-nya berhenti berfungsi.
Kesalahan bidang kontrol portal pengembang
Endpoint pengelolaan akun dan kunci di portal pengembang (rute API milik dasbor sendiri) mengembalikan satu respons kesalahan terstruktur yang berbeda dari format REST errors[] di atas. Setiap code memuat correlation_id dan doc_url yang menautkan kembali ke bagian yang sesuai di sini.
{ "error": { "code": "AUTH_INVALID_KEY", "message": "Session is invalid or expired.", "correlation_id": "9f2c1e64-2b1a-4b0e-9f1a-2c7d5e8a1b3c", "doc_url": "https://listingsapi.com/docs/error-codes#auth_invalid_key" }}auth_missing_key
401: Tidak ada kredensial yang diberikan. Masuk kembali, atau kirim kunci Anda sebagai Authorization: API <your-key>.
auth_invalid_key
401: Sesi atau kunci tidak valid atau telah kedaluwarsa. Lakukan autentikasi ulang atau terbitkan ulang kunci dari dasbor.
auth_insufficient_scope
403: Kredensial valid tetapi tidak diizinkan untuk tindakan ini. Kunci dengan cakupan baca tidak dapat memanggil endpoint tulis; terbitkan kunci dengan izin tulis jika Anda membutuhkannya.
not_found
404: Sumber daya yang diminta, atau sumber daya yang dirujuk berdasarkan ID, tidak ada.
conflict
409: Permintaan bertentangan dengan status sumber daya saat ini (misalnya, mencabut kunci yang sudah dicabut).
validation_failed
422: Isi permintaan gagal dalam validasi. field dan details dalam respons menyebutkan input yang bermasalah.
internal_error
500: Kesalahan tak terduga di sisi server. Coba ulang operasi baca dengan jeda yang bertambah secara eksponensial; untuk operasi tulis, baca kembali rekaman terlebih dahulu (lihat Mencoba ulang operasi tulis memiliki konsekuensi). Cantumkan correlation_id jika Anda menghubungi dukungan.
dependency_unavailable
503: Layanan yang menjadi dependensi API sedang tidak tersedia. Coba lagi dengan jeda percobaan ulang.
Untuk 429, lihat rate_limited di atas.
Menangani kesalahan dalam kode
Periksa status HTTP terlebih dahulu; lalu, untuk operasi tulis, telusuri isi respons untuk menemukan array errors bersarang:
from listingsapi import APIError, ListingsAPI client = ListingsAPI(api_key=os.environ["LISTINGSAPI_KEY"]) try: location = client.locations.create(input=payload)except APIError as e: # Raised for a non-2xx status (AuthenticationError, ValidationError, and # so on) and for an error payload returned inside a 200 body. raise RuntimeError(f"Listings API error: {e}") from eSaat menggunakan API HTTP secara langsung, dua pemeriksaan yang sama dilakukan secara eksplisit: kode status, lalu payload respons:
resp = requests.post( "https://listingsapi.com/api/v4/locations", headers={"Authorization": f"API {os.environ['LISTINGSAPI_KEY']}"}, json=payload, timeout=30,)resp.raise_for_status()body = resp.json() op = (body.get("data") or {}).get("createLocation") or {}if op.get("errors"): messages = [e["message"] for e in op["errors"]] raise RuntimeError(f"Listings API error: {messages}")Python SDK melakukan keduanya untuk Anda: SDK ini memetakan setiap status HTTP ke pengecualian dengan tipe tertentu dan juga memunculkan pengecualian saat payload kesalahan dikembalikan di dalam isi 200.