Ikhtisar
Ketika suatu permintaan gagal, Dodo Payments API mengembalikan kode status HTTP dan body JSON yang menyebutkan error tersebut. Gunakan halaman ini untuk menemukan penyebab error dan cara mengatasinya. Setiap respons error mencakup:- Kode status HTTP yang menunjukkan kategori umum error.
- A
codeyang mengidentifikasi error secara tepat, misalnyaUNSUPPORTED_COUNTRY. - A
messageyang menjelaskan error dengan bahasa sederhana.messagedapat berupanull, misalnya untuk internal server errors.
code sebagai dasar penanganan error, bukan message. Beberapa kode mengembalikan lebih dari satu pesan, bergantung pada penyebabnya.
Gunakan kode error ini untuk:
- Men-debug masalah integrasi.
- Menangani error dengan benar dalam aplikasi Anda.
- Menampilkan feedback yang bermakna kepada pelanggan.
- Menjaga pemrosesan pembayaran tetap andal.
Ini adalah error API dan logika bisnis. Untuk alasan penolakan kartu yang dikembalikan pada pembayaran yang gagal (seperti
INSUFFICIENT_FUNDS atau CARD_DECLINED), lihat referensi Transaction Failures.Kode Error API Standar
API menggunakan kode status HTTP berikut untuk error:Format Respons Error
Body respons error berisi dua field,code dan message:
Referensi Kode Error
Kode error di bawah ini dikelompokkan berdasarkan area API yang terkait. Setiap entri mencantumkan kondisi yang memicu error dan pesan yang dikembalikan API. Placeholder seperti{id} mewakili nilai yang diisi oleh API.
Autentikasi & Akun
-
UNAUTHORIZED- Pemicu: Permintaan tidak memiliki API key atau menggunakan API key yang tidak valid (HTTP 401), atau API key tidak memiliki peran yang diperlukan oleh tindakan tersebut (HTTP 403)
- Pesan: Anda tidak diizinkan untuk melakukan tindakan ini
-
MERCHANT_NOT_LIVE- Pemicu: Permintaan live mode untuk bisnis yang belum mengaktifkan live payments (HTTP 403). Ini mencakup bisnis yang hanya pernah menggunakan test mode, serta bisnis yang live payments-nya belum diaktifkan karena verifikasi belum selesai. Permintaan test mode tidak terpengaruh.
- Pesan: Live payments belum diaktifkan untuk merchant
-
BUSINESS_ARCHIVED- Pemicu: Permintaan apa pun yang ditujukan kepada pelanggan untuk bisnis yang diarsipkan (HTTP 403). Ini mencakup checkout, payment links, storefront, Customer Portal, dan aktivasi license key.
- Pesan: Bisnis ini telah diarsipkan dan tidak lagi menerima permintaan
Pembayaran & Checkout
-
CHECKOUT_SESSION_CONSUMED- Pemicu: Checkout session sudah menghasilkan pembayaran (HTTP 403). Buat checkout session baru.
- Pesan: Pembayaran dengan checkout session yang diberikan sudah dibuat.
-
MANUAL_RETRY_ALREADY_PAID- Pemicu: Percobaan ulang manual atas renewal invoice yang pembayarannya sudah berhasil. Mengirimkannya lagi akan menagih pelanggan dua kali.
- Pesan: Pembayaran untuk invoice ini sudah berhasil
-
MANUAL_RETRY_HARD_DECLINE- Pemicu: Percobaan ulang manual ketika kegagalan terbaru pada invoice merupakan hard decline, atau tidak memiliki error code yang diklasifikasikan. Penagihan lain pada kartu yang sama tidak akan berhasil, jadi perbarui payment method.
- Pesan: Kegagalan terakhir pada invoice ini adalah hard decline, sehingga percobaan ulang tidak dapat berhasil (atau) Kegagalan terakhir pada invoice ini tidak dapat diklasifikasikan, sehingga tidak dapat dicoba ulang
-
MANUAL_RETRY_IN_FLIGHT- Pemicu: Percobaan ulang manual saat pembayaran pada invoice berstatus
processingatau belum memiliki status yang tercatat. Tunggu hasil pembayaran tersebut, jangan mengirimkannya lagi. - Pesan: Pembayaran pada invoice ini masih sedang diproses
- Pemicu: Percobaan ulang manual saat pembayaran pada invoice berstatus
-
MANUAL_RETRY_LIMIT_REACHED- Pemicu: Percobaan ulang manual setelah seluruh 3 pengiriman pada invoice digunakan, atau sebelum cooldown berakhir (HTTP 429). Pengiriman kedua menunggu 1 jam setelah pengiriman pertama, dan pengiriman ketiga menunggu 3 jam setelah pengiriman kedua. Body hanya membawa
codedanmessage. Untuk mengetahui kapan pengiriman berikutnya diizinkan, bacaretry_available_atdariGET /payments/{payment_id}/retry. - Pesan: Semua percobaan ulang manual untuk invoice ini telah digunakan (atau) Percobaan ulang sekarang belum tersedia untuk invoice ini
- Pemicu: Percobaan ulang manual setelah seluruh 3 pengiriman pada invoice digunakan, atau sebelum cooldown berakhir (HTTP 429). Pengiriman kedua menunggu 1 jam setelah pengiriman pertama, dan pengiriman ketiga menunggu 3 jam setelah pengiriman kedua. Body hanya membawa
-
NO_ELIGIBLE_PAYMENT_METHODS- Pemicu: Tidak ada payment method yang tetap tersedia untuk pembayaran setelah filtering (HTTP 422)
- Pesan: Tidak ditemukan payment method yang memenuhi syarat
-
PAYMENT_NOT_PERMITTED- Pemicu: Checkout atau percobaan pembayaran oleh pelanggan yang ada di blocklist merchant (HTTP 403). Kode dan pesan sengaja tidak menyebutkan penyebabnya.
- Pesan: Pembayaran ini tidak dapat diproses.
-
PAYMENT_NOT_RETRYABLE- Pemicu: Percobaan ulang manual atas pembayaran yang tidak dicakup oleh percobaan ulang manual. Pembayaran tidak memiliki invoice, invoice-nya bukan renewal subscription yang terbuka, belum ada pembayaran pada invoice yang gagal, subscription tidak memiliki recurring billing yang dikonfigurasi (misalnya subscription on-demand), atau pelanggan ada di blocklist.
- Pesan: Berbeda-beda menurut penyebabnya, misalnya: Hanya pembayaran renewal subscription yang dapat dicoba ulang
-
PAYMENT_NOT_SUCCEEDED- Pemicu: Upaya untuk mengembalikan dana atau memproses pembayaran yang belum berhasil
- Pesan: Pembayaran yang diberikan belum berhasil
-
PREVIOUS_PAYMENT_PENDING- Pemicu: Upaya membuat charge saat pembayaran sebelumnya berada dalam status non-terminal. Juga dikembalikan untuk percobaan ulang manual ketika pembayaran terbaru pada invoice bukan
failedmaupun sedang berlangsung, misalnyarequires_customer_actionataucancelled. - Pesan: Tidak dapat membuat charge baru karena pembayaran sebelumnya belum berhasil (atau) Pembayaran terbaru pada invoice ini belum gagal
- Pemicu: Upaya membuat charge saat pembayaran sebelumnya berada dalam status non-terminal. Juga dikembalikan untuk percobaan ulang manual ketika pembayaran terbaru pada invoice bukan
-
UNSUCCESSFUL_PAYMENT_ID- Pemicu: Payment ID merujuk pada pembayaran yang belum berhasil
- Pesan: Payment ID memiliki status tidak berhasil.
Connector & BYOP
Error ini berkaitan dengan payment connector milik merchant (Bring Your Own Processor, atau BYOP).-
BYOP_CONNECTOR_DISABLED- Pemicu: Memperbarui payment method subscription yang dirutekan melalui connector BYOP yang dinonaktifkan. Dodo Payments tidak beralih ke connector miliknya sendiri, jadi aktifkan kembali connector terlebih dahulu.
- Pesan: Subscription dirutekan melalui connector milik merchant sendiri (BYOP) yang saat ini dinonaktifkan
-
BYOP_CUSTOM_INVOICE_ADDRESS_MISSING- Pemicu: Pembayaran yang dirutekan melalui connector merchant (BYOP) tidak memiliki alamat invoice kustom
- Pesan: Alamat invoice kustom BYOP diperlukan ketika pembayaran dirutekan melalui connector merchant
-
CONNECTOR_LABEL_ALREADY_EXISTS- Pemicu: Membuat connector dengan label yang sudah ada
- Pesan: Connector dengan label ini sudah ada. Pilih label lain.
Refund
-
EXISTING_REFUND_REQUEST_PROCESSING- Pemicu: Permintaan refund sebelumnya masih diproses
- Pesan: Permintaan refund dengan status “Pending” masih diproses
-
LINE_ITEM_FULLY_REFUNDED- Pemicu: Upaya melakukan refund atas line item yang sudah sepenuhnya direfund
- Pesan: Line item
{id}telah sepenuhnya direfund dan tidak dapat direfund lagi.
-
LINE_ITEM_NOT_FOUND- Pemicu: ID item bukan bagian dari pembayaran yang dirujuk
- Pesan: Line item
{id}tidak ditemukan dalam pembayaran
-
LINE_ITEM_PRORATED- Pemicu: Refund atau pembaruan dicoba pada line item yang diprorata
- Pesan: Line item
{id}tidak dapat direfund karena bersifat prorata
-
LINE_ITEM_REFUND_AMOUNT_TOO_HIGH- Pemicu: Jumlah refund, termasuk pajak, lebih besar daripada jumlah yang dibayar
- Pesan: Jumlah refund yang diminta untuk line item
{id}termasuk pajak adalah{amount}, melebihi jumlah yang dibayar{amount}
-
LINE_ITEM_REFUND_AMOUNT_TOO_LOW- Pemicu: Jumlah refund berada di bawah ambang minimum
- Pesan: Jumlah refund yang diminta untuk line item
{id}adalah{amount}, terlalu rendah
-
NOTHING_TO_REFUND- Pemicu: Tidak ada jumlah yang dapat direfund karena semua line item positif sudah sepenuhnya direfund
- Pesan: Tidak ada jumlah yang tersisa untuk direfund. Semua line item positif telah sepenuhnya direfund.
-
PARTIAL_REFUND_NOT_ALLOWED- Pemicu: Refund sebagian dicoba pada payment method yang hanya mendukung refund penuh
- Pesan: Refund sebagian tidak diizinkan untuk payment method ini
-
PAYMENT_ALREADY_REFUNDED- Pemicu: Refund duplikat
- Pesan: Pembayaran ini sudah direfund
-
PAYMENT_HAS_BEEN_REFUNDED- Pemicu: Pembayaran telah sepenuhnya direfund
- Pesan: Payment ID telah sepenuhnya direfund.
-
REFUND_AMOUNT_EXCEEDS_PAID_AMOUNT- Pemicu: Total jumlah refund lebih besar daripada jumlah yang dibayar
- Pesan: Jumlah refund yang dihitung lebih besar daripada jumlah yang dibayar
-
REFUND_WINDOW_EXPIRED- Pemicu: Refund diminta di luar jangka waktu refund yang diizinkan
- Pesan: Refund tidak dapat dimulai
{days}hari setelah pembuatan pembayaran. Hubungi support@dodopayments.com.
-
ZERO_AMOUNT_PAYMENT_REFUND_NOT_ALLOWED- Pemicu: Upaya melakukan refund atas pembayaran dengan jumlah nol
- Pesan: Tidak dapat melakukan refund atas pembayaran dengan jumlah mata uang nol
Subscription & Add-on
-
ADDONS_IN_USAGE_BASED_BILLING_NOT_SUPPORTED- Pemicu: Upaya menambahkan add-on ke subscription berbasis penggunaan
- Pesan: Add-on dalam Subscription tidak didukung untuk Usage Based Billing
-
ADDONS_NOT_ALLOWED_FOR_ON_DEMAND- Pemicu: Upaya menambahkan add-on ke subscription on-demand
- Pesan: Add-on tidak diizinkan untuk subscription on-demand
-
CANCEL_SCHEDULED_PLAN_CHANGE_FOR_CUSTOMER_PORTAL_DISABLED- Pemicu: Customer Portal mencoba membatalkan perubahan plan terjadwal saat bisnis menonaktifkan tindakan tersebut
- Pesan: Pembatalan perubahan plan terjadwal dinonaktifkan untuk customer portal.
-
CHARGE_NOT_ALLOWED_FOR_SCHEDULED_CANCELLATION- Pemicu: Upaya menagih subscription yang dijadwalkan untuk dibatalkan
- Pesan: Subscription dijadwalkan untuk dibatalkan
-
CUSTOMER_HAS_EXISTING_SUBSCRIPTION- Pemicu: Membuat subscription untuk pelanggan yang sudah memilikinya, ketika bisnis tidak mengizinkan beberapa subscription per pelanggan
- Pesan: Pelanggan
{id}memiliki subscription yang sudah ada. Untuk mengizinkan beberapa subscription per pelanggan, ubah pengaturan bisnis
-
DO_NOT_BILL_NOT_ALLOWED_IN_CUSTOMER_PORTAL- Pemicu: Mode proration
do_not_billdigunakan dalam perubahan plan Customer Portal - Pesan: Mode proration do_not_bill tidak diizinkan di customer portal
- Pemicu: Mode proration
-
DUPLICATE_ADDON_IDS_IN_REQUEST- Pemicu:
addon_idyang sama muncul lebih dari sekali dalam permintaan - Pesan: ID add-on duplikat tidak diizinkan
- Pemicu:
-
INACTIVE_SUBSCRIPTION_PLAN_CHANGE_NOT_SUPPORTED- Pemicu: Perubahan plan pada subscription yang tidak aktif
- Pesan: Perubahan plan tidak didukung untuk subscription yang tidak aktif
-
INVALID_PRORATION_MODE_WITH_NEXT_BILLING_DATE- Pemicu: Mode proration selain
full_immediatelydigunakan bersamaeffective_at: next_billing_date - Pesan: Hanya mode proration full_immediately yang diizinkan dengan effective_at: next_billing_date
- Pemicu: Mode proration selain
-
MISSING_ADDON_IDS- Pemicu: Daftar
addon_idkosong atau berisi ID yang tidak dikenal - Pesan: Satu atau beberapa ID produk tidak ada:
{id}
- Pemicu: Daftar
-
ON_DEMAND_PLAN_CHANGE_NOT_SUPPORTED- Pemicu: Perubahan plan pada subscription on-demand
- Pesan: Perubahan plan tidak didukung untuk subscription on-demand
-
ON_DEMAND_USAGE_BASED_BILLING_NOT_SUPPORTED- Pemicu: Upaya menggunakan subscription on-demand dengan Usage Based Billing
- Pesan: On Demand Subscriptions tidak didukung untuk Usage Based Billing
-
ONE_TIME_PRODUCTS_NOT_ALLOWED_FOR_ON_DEMAND- Pemicu: Produk satu kali ditambahkan ke subscription on-demand
- Pesan: Produk satu kali tidak diizinkan untuk subscription on-demand
-
PENDING_PLAN_CHANGE_EXISTS- Pemicu: Perubahan plan baru diminta saat perubahan sebelumnya masih menunggu pembayaran
- Pesan: Perubahan plan yang tertunda sudah ada untuk subscription ini. Tunggu hingga pembayaran saat ini selesai.
-
PLAN_CHANGE_FOR_CUSTOMER_PORTAL_DISABLED- Pemicu: Perubahan plan melalui Customer Portal saat bisnis menonaktifkannya
- Pesan: Perubahan plan subscription untuk customer portal dinonaktifkan.
-
PLAN_CHANGE_NOT_ALLOWED_FOR_SCHEDULED_CANCELLATION- Pemicu: Perubahan plan pada subscription yang dijadwalkan untuk dibatalkan
- Pesan: Subscription dijadwalkan untuk dibatalkan
-
SCHEDULE_PLAN_CHANGE_FOR_CUSTOMER_PORTAL_DISABLED- Pemicu: Menjadwalkan perubahan plan melalui Customer Portal saat bisnis menonaktifkannya
- Pesan: Penjadwalan perubahan plan dinonaktifkan untuk bisnis ini.
-
SCHEDULED_PLAN_CHANGE_EXISTS- Pemicu: Membuat perubahan plan terjadwal saat perubahan tersebut sudah ada
- Pesan: Perubahan plan terjadwal sudah ada untuk subscription ini. Batalkan perubahan terjadwal yang ada sebelum membuat yang baru.
-
SCHEDULED_PLAN_CHANGE_NOT_FOUND- Pemicu: Merujuk atau membatalkan perubahan plan terjadwal yang tidak ada
- Pesan: Tidak ditemukan perubahan plan terjadwal untuk subscription ini.
-
SUBSCRIPTION_EXPIRED- Pemicu: Menagih subscription setelah tanggal
expires_at - Pesan: Subscription telah kedaluwarsa, tidak dapat membuat charge baru
- Pemicu: Menagih subscription setelah tanggal
-
SUBSCRIPTION_HAS_NO_PAYMENT_METHOD- Pemicu: Percobaan ulang manual atas subscription yang tidak memiliki payment method tersimpan untuk ditagih off-session
- Pesan: Subscription ini tidak memiliki payment method tersimpan untuk ditagih
-
SUBSCRIPTION_INACTIVE- Pemicu: Status subscription bukan
active - Pesan: Subscription tidak aktif (atau) Subscription ini tidak live, sehingga pembatalan tidak dapat dijadwalkan
- Pemicu: Status subscription bukan
-
SUBSCRIPTION_NOT_ON_DEMAND- Pemicu: Tindakan on-demand pada subscription yang ditagih dengan interval tetap
- Pesan: Subscription sudah bukan on-demand
-
SUBSCRIPTION_PAYMENT_RETRY_LIMIT_EXCEEDED- Pemicu: Percobaan ulang pembayaran subscription melampaui jumlah maksimum percobaan
- Pesan: Batas maksimum 10 percobaan ulang untuk subscription ini telah terlampaui
Pelanggan & Blocklist
-
CUSTOMER_ALREADY_BLOCKED- Pemicu: Memblokir pelanggan yang sudah ada di blocklist dan tidak memiliki subscription live yang tersisa untuk dibatalkan (HTTP 409)
- Pesan: Pelanggan ini sudah ada di blocklist
-
PORTAL_ACTION_NOT_PERMITTED- Pemicu: Pelanggan yang diblokir memanggil route penulisan Customer Portal: membatalkan, menjeda, melanjutkan, mengubah plan, atau memperbarui payment method (HTTP 403). Route pembacaan tetap terbuka. Kode dan pesan sengaja tidak menyebutkan penyebabnya.
- Pesan: Tindakan ini tidak tersedia.
Produk, Cart & Brand
-
BRAND_ALREADY_ARCHIVED- Pemicu: Mengarsipkan brand yang sudah diarsipkan
- Pesan: Brand sudah diarsipkan
-
BRAND_ARCHIVED- Pemicu: Memperbarui brand yang diarsipkan, mengirimkannya untuk verifikasi, atau menandai produk, koleksi produk, atau subscription baru ke brand tersebut
- Pesan: Brand diarsipkan (atau) Brand diarsipkan dan tidak dapat diperbarui (atau) Brand diarsipkan dan tidak dapat dikirim untuk verifikasi
-
BRAND_ARCHIVE_TARGET_REQUIRED- Pemicu: Mengarsipkan brand yang masih memiliki produk, subscription live, atau koleksi produk tanpa target
move_products_to - Pesan: Brand memiliki
{count}produk. Tetapkan move_products_to ke brand target untuk menandainya ulang. Pesan akan menyebutkan subscription live atau koleksi produk jika hal tersebut yang menghalangi pengarsipan.
- Pemicu: Mengarsipkan brand yang masih memiliki produk, subscription live, atau koleksi produk tanpa target
-
BRAND_MISMATCH- Pemicu: Item cart berasal dari brand yang berbeda
- Pesan: Semua item dalam product cart harus berasal dari brand yang sama
-
BRAND_NOT_ENABLED- Pemicu: Brand dinonaktifkan atau tidak aktif
- Pesan: Brand yang diberikan tidak diaktifkan
-
BRAND_SUBMISSION_NOT_ENABLED- Pemicu: Fitur pengiriman ulang verifikasi brand tidak diaktifkan
- Pesan:
Brand verificatin resubmission is not enabled(ditulis persis seperti yang dikembalikan API)
-
CANNOT_ARCHIVE_PRIMARY_BRAND- Pemicu: Mengarsipkan brand utama, yang brand ID-nya merupakan business ID
- Pesan: Brand utama tidak dapat diarsipkan
-
FILE_IN_USE- Pemicu: Menghapus file produk digital yang masih dirujuk oleh active entitlement grants
- Pesan: File digital dirujuk oleh grant aktif
-
INVALID_BRAND_ARCHIVE_TARGET- Pemicu:
move_products_tomenunjuk ke brand yang sedang diarsipkan, brand yang diarsipkan, atau brand milik bisnis lain - Pesan: move_products_to harus berupa brand milik bisnis ini yang tidak diarsipkan (atau) move_products_to tidak boleh berupa brand yang Anda arsipkan
- Pemicu:
-
INVALID_SUGGESTED_PRICE- Pemicu: Harga yang disarankan Pay What You Want lebih rendah daripada harga minimum
- Pesan: Harga yang Disarankan tidak boleh lebih rendah daripada harga minimum. Dalam skema pay what you want, harga dianggap sebagai jumlah minimum yang diterima
-
LOCALIZED_PRICE_ALREADY_EXISTS- Pemicu: Harga terlokalisasi sudah ada untuk produk dan negara atau mata uang ini
- Pesan: Harga terlokalisasi untuk produk dan negara/mata uang ini sudah ada
-
LOCALIZED_PRICE_DUPLICATES_BASE- Pemicu: Harga terlokalisasi menduplikasi mata uang dasar atau negara dasar produk
- Pesan: Harga terlokalisasi menduplikasi mata uang/negara dasar produk
-
LOCALIZED_PRICE_SHAPE_MISMATCH- Pemicu: Bentuk harga terlokalisasi tidak sesuai dengan
pricing_modeproduk - Pesan: Bentuk harga terlokalisasi tidak sesuai dengan pricing_mode produk
- Pemicu: Bentuk harga terlokalisasi tidak sesuai dengan
-
MISSING_PRODUCT_INFORMATION- Pemicu: Produk ada, tetapi informasi wajib tidak ada
- Pesan: Produk
{id}ada, tetapi informasi wajib lainnya tidak ada atau tidak valid
-
PAY_AS_YOU_WANT_AMOUNT_REQUIRED- Pemicu: Jumlah tidak ada untuk produk Pay What You Want
- Pesan: Jumlah wajib diisi untuk produk pay as you want
-
PRODUCT_CART_EMTPY- Pemicu: Product cart kosong dikirimkan
- Pesan: product_cart kosong (error code sengaja ditulis
EMTPYagar sesuai dengan nilai persis yang dikembalikan API)
-
PRODUCT_COLLECTION_IS_DELETED- Pemicu: Mengoperasikan koleksi produk yang telah dihapus
- Pesan: Tidak ada pesan
-
PRODUCT_COLLECTION_MUST_HAVE_PRODUCTS- Pemicu: Menghapus produk terakhir, atau grup terakhir yang berisi produk, dari koleksi
- Pesan: Tidak dapat menghapus produk terakhir dalam koleksi. Arsipkan koleksi sebagai gantinya. (atau) Tidak dapat menghapus grup terakhir yang berisi produk. Arsipkan koleksi sebagai gantinya.
-
PRODUCT_IS_DELETED- Pemicu: Produk telah dihapus
- Pesan: Tidak ada pesan
-
PRODUCT_PRICING_MODE_REQUIRED- Pemicu: Menambahkan harga terlokalisasi sebelum
pricing_modeproduk ditetapkan - Pesan: pricing_mode produk harus ditetapkan sebelum menambahkan harga terlokalisasi
- Pemicu: Menambahkan harga terlokalisasi sebelum
-
SLUG_ALREADY_TAKEN- Pemicu: Slug produk atau short URL yang diminta sudah digunakan
- Pesan: Slug sudah digunakan
-
UNABLE_TO_EDIT_PRIMARY_BRAND- Pemicu: Upaya memperbarui brand utama melalui API brand biasa
- Pesan: Brand utama tidak dapat diperbarui melalui API endpoint ini.
Diskon
-
DISCOUNT_ALREADY_USED_ON_SUBSCRIPTION- Pemicu: Menerapkan kembali diskon yang sudah digunakan pada subscription ini
- Pesan: Diskon ini sudah digunakan pada subscription ini
-
DISCOUNT_CODE_ALREADY_EXISTS- Pemicu: Membuat kode diskon yang sudah ada
- Pesan: Discount Code sudah ada
-
DISCOUNT_CODE_EXPIRED- Pemicu: Kode diskon telah melewati tanggal
expires_at - Pesan: Kode diskon kedaluwarsa
- Pemicu: Kode diskon telah melewati tanggal
-
DISCOUNT_CODE_USAGE_LIMIT_EXCEEDED- Pemicu: Kode diskon digunakan setelah
usage_limittercapai - Pesan: Batas penggunaan tidak boleh kurang dari times_used (atau) Kode diskon telah mencapai batas penggunaan
- Catatan: Terminal. Kode sudah habis, jadi jangan coba lagi.
- Pemicu: Kode diskon digunakan setelah
-
DISCOUNT_CONCURRENT_REDEMPTION- Pemicu: Penukaran lain atas kode yang sama menahan lock batas penggunaan terlalu lama (HTTP 503)
- Pesan: Diskon sedang ditukarkan secara bersamaan; coba lagi
- Catatan: Transient. Kode mungkin masih memiliki kapasitas, sehingga permintaan aman untuk dicoba lagi. Jangan tampilkan ini kepada pelanggan sebagai kode yang sudah habis.
-
DISCOUNT_CURRENCY_OPTION_INVALID- Pemicu:
currency_optionstidak valid saat create atau update - Pesan: Diskon flat memerlukan setidaknya satu opsi mata uang dengan default yang dapat ditentukan (atau) Opsi mata uang duplikat tidak diizinkan (atau) Hanya satu opsi mata uang yang boleh ditandai sebagai default
- Pemicu:
-
DISCOUNT_CUSTOMER_NOT_ELIGIBLE- Pemicu: Pelanggan tidak memenuhi
customer_eligibilitykode (first_time,existing, atau tidak ada dalam allow list kodespecific) - Pesan: Pelanggan tidak memenuhi syarat untuk kode diskon ini
- Pemicu: Pelanggan tidak memenuhi
-
DISCOUNT_MINIMUM_SUBTOTAL_NOT_MET- Pemicu: Subtotal cart lebih rendah daripada
minimum_subtotalyang dikonfigurasi untuk mata uang checkout - Pesan: Subtotal cart lebih rendah daripada subtotal minimum yang diperlukan untuk diskon
- Pemicu: Subtotal cart lebih rendah daripada
-
DISCOUNT_NOT_YET_ACTIVE- Pemicu: Kode digunakan sebelum tanggal
starts_at - Pesan: Kode diskon belum aktif (starts_at berada di masa mendatang)
- Pemicu: Kode digunakan sebelum tanggal
-
DISCOUNT_PER_CUSTOMER_USAGE_LIMIT_EXCEEDED- Pemicu: Pelanggan sudah menukarkan kode sebanyak
per_customer_usage_limitkali - Pesan: Batas penggunaan per pelanggan untuk kode diskon ini telah terlampaui
- Pemicu: Pelanggan sudah menukarkan kode sebanyak
-
DISCOUNT_NOT_APPLICABLE_TO_NEW_PRODUCT- Pemicu: Perubahan plan ke produk yang tidak dicakup oleh diskon yang sudah ada
- Pesan: Diskon tidak berlaku untuk produk plan baru
-
DISCOUNT_NOT_AVAILABLE_FOR_ON_DEMAND- Pemicu: Kode diterapkan pada subscription on-demand
- Pesan: Kupon diskon tidak tersedia untuk subscription on-demand
-
DISCOUNT_NOT_AVAILABLE_FOR_PRODUCT- Pemicu: Kode diterapkan pada produk yang tidak dicakup olehnya
- Pesan: Kupon diskon tidak tersedia untuk produk ini
-
INVALID_DISCOUNT_CODE- Pemicu: Kode tidak ada, atau tidak berlaku untuk produk apa pun dalam cart
- Pesan: Discount Code tidak valid (atau) Discount Code tidak dapat diterapkan pada produk apa pun dalam cart
-
INVALID_PERCENTAGE- Pemicu: Persentase lebih tinggi daripada 100% (10.000 basis points)
- Pesan: Jumlah persentase tidak boleh lebih dari 10000 (atau) Jumlah kode diskon tidak boleh lebih dari 100%
-
UNSUPPORTED_DISCOUNT_TYPE- Pemicu: Jenis diskon yang tidak didukung.
percentagedanflatsama-sama didukung; diskon jumlah per unit tidak didukung. - Pesan: Hanya kode diskon persentase dan flat yang didukung (atau) Saat ini hanya kode diskon persentase yang didukung
- Pemicu: Jenis diskon yang tidak didukung.
License Key
-
ACTIVATION_LIMIT_LESS_THAN_CURRENT_AMOUNT- Pemicu: Batas aktivasi baru license key lebih rendah daripada jumlah instance saat ini
- Pesan: Batas aktivasi baru tidak boleh kurang dari jumlah instance saat ini
-
INACTIVE_LICENSE_KEY- Pemicu: Status license key bukan
active - Pesan: License key tidak aktif
- Pemicu: Status license key bukan
-
LICENSE_KEY_LIMIT_REACHED- Pemicu: Jumlah aktivasi telah mencapai batas aktivasi
- Pesan: Batas aktivasi license key telah tercapai
-
LICENSE_KEY_NOT_FOUND- Pemicu: Instance ID atau license key ID tidak valid
- Pesan: Instance license key tidak ditemukan atau bukan milik license key ini
-
NO_EXPIRY_ON_SUBSCRIPTION_LICENSE_KEYS- Pemicu: Upaya menetapkan tanggal kedaluwarsa pada license key berbasis subscription
- Pesan: Tidak dapat menetapkan tanggal kedaluwarsa untuk license key berbasis subscription
Usage-Based Billing & Meter
-
DUPLICATE_METER_IDS_IN_REQUEST- Pemicu: Meter ID yang sama muncul lebih dari sekali dalam permintaan
- Pesan: Meter ID duplikat tidak diizinkan
-
INVALID_QUANTITY- Pemicu: Jumlah selain 1 untuk produk dengan harga berbasis penggunaan
- Pesan: Hanya jumlah 1 yang diizinkan pada produk dengan harga berbasis penggunaan
-
METER_IS_DELETED- Pemicu: Upaya menggunakan meter yang telah dihapus
- Pesan: Meter sudah dihapus
-
MISSING_METER_IDS- Pemicu: Daftar meter ID kosong atau berisi ID yang tidak valid
- Pesan: Satu atau beberapa meter ID tidak ada:
{id}
Credit-Based Billing
-
CREDIT_ENTITLEMENT_IS_DELETED- Pemicu: Mengoperasikan credit entitlement yang telah dihapus
- Pesan: Credit entitlement telah dihapus
-
CREDIT_ENTITLEMENT_NAME_ALREADY_EXISTS- Pemicu: Membuat credit entitlement dengan nama yang sudah ada
- Pesan: Credit entitlement dengan nama ini sudah ada
-
OVERAGE_LIMIT_EXCEEDED- Pemicu: Penggunaan atau pengurangan kredit akan melebihi batas overage yang dikonfigurasi
- Pesan: Batas overage terlampaui
Wallet
-
INSUFFICIENT_WALLET_FUNDS- Pemicu: Saldo wallet lebih rendah daripada jumlah debit
- Pesan: Dana dalam wallet tidak mencukupi
-
NEGATIVE_BALANCE_ADJUSTMENT- Pemicu: Upaya membuat saldo wallet menjadi negatif
- Pesan: Saldo wallet tidak boleh dibuat negatif
Mata Uang, Pajak & Wilayah
-
EXCHANGE_RATE_NOT_FOUND- Pemicu: Tidak ada nilai tukar untuk pasangan mata uang tersebut
- Pesan: Nilai tukar tidak ditemukan untuk mengonversi dari
{currency}ke{currency}
-
INVALID_TAX_ID- Pemicu: VAT, GST, atau TIN gagal divalidasi
- Pesan: Tax ID tidak valid
-
REQUEST_AMOUNT_BELOW_MINIMUM- Pemicu: Jumlah lebih rendah daripada minimum yang ditetapkan untuk produk
- Pesan: Jumlah tidak boleh kurang dari jumlah minimum yang ditentukan untuk produk
-
TOTAL_PAYMENT_AMOUNT_BELOW_MINIMUM_AMOUNT- Pemicu: Total gabungan cart lebih rendah daripada jumlah minimum yang diperlukan untuk memproses pembayaran
- Pesan: Jumlah minimum
{display_str}diperlukan untuk memproses pembayaran
-
UNSUPPORTED_BILLING_CURRENCY- Pemicu: Mata uang penagihan yang diminta tidak didukung untuk subscription ini
- Pesan: Mata uang penagihan selain USD tidak didukung untuk subscription
-
UNSUPPORTED_COUNTRY- Pemicu: Negara tidak didukung
- Pesan: Negara
{country_name}saat ini tidak didukung
-
UNSUPPORTED_CURRENCY- Pemicu: Mata uang produk atau add-on bukan mata uang yang dapat digunakan Dodo Payments untuk menagih. Harga dasar dapat ditetapkan dalam mata uang apa pun yang dapat ditagihkan, jadi error ini biasanya berarti kode mata uang tidak valid atau tidak didukung.
- Pesan: Mata uang saat ini tidak didukung (atau) Saat ini hanya produk USD dan INR yang didukung (atau) Saat ini hanya USD dan INR yang didukung untuk harga add-on (atau) Hanya dapat meminta USD atau INR untuk billing_currency (atau) Mata Uang Tidak Didukung (atau) Mata uang tidak terduga untuk subscription kartu India
-
UNSUPPORTED_TAX_CATEGORY- Pemicu: Kategori pajak bukan salah satu nilai yang didukung
- Pesan: Kategori
{category}saat ini tidak didukung
Validasi & Permintaan
-
DUPLICATE_LINE_ITEMS_IN_REQUEST- Pemicu:
item_idyang sama muncul lebih dari sekali dalamitems[] - Pesan: item_ids duplikat ditentukan dalam array items
- Pemicu:
-
INVALID_QUERY_PARAMS- Pemicu: Parameter query yang saling eksklusif atau memiliki format yang salah
- Pesan: Query params hanya boleh berisi time_frame atau (start, end) (atau) Awal rentang tidak boleh setelah akhir rentang
-
INVALID_REQUEST_BODY- Pemicu: JSON memiliki format yang salah atau melanggar schema
- Pesan: Body permintaan Anda tidak valid. Periksa headers permintaan dan object Anda.
-
INVALID_REQUEST_PARAMETERS- Pemicu: Nilai parameter valid dari segi format tetapi tidak valid dari segi makna, misalnya tanggal di masa lalu
- Pesan: Tidak dapat mengubah next_billing_date ke waktu yang telah berlalu
-
MAXIMUM_KEYS_REACHED- Pemicu: Metadata atau custom fields melebihi 50 pasangan key-value
- Pesan: Melebihi 50 pasangan key-value
Umum & Sistem
-
INTEGER_CONVERSION_FAILURE- Pemicu: Konversi sisi server antara integer dan string atau desimal gagal, misalnya ketika total cart terlalu besar untuk diproses
- Pesan: Kegagalan Konversi Integer (atau) Total cart terlalu besar untuk diproses. Kurangi jumlahnya, atau pilih mata uang penagihan lain.
-
INTERNAL_SERVER_ERROR- Pemicu: Error server yang tidak terduga. Catat detail permintaan di sisi Anda.
- Pesan: Tidak ada pesan publik (generic 500,
messagebiasanyanull)
-
NOT_FOUND- Pemicu: 404 umum untuk resource apa pun yang tidak ditemukan
- Pesan: Item tidak ditemukan (atau pesan yang lebih spesifik yang menyebutkan item yang hilang)
-
TOO_MANY_REQUESTS- Pemicu: Batas laju telah terlampaui (HTTP 429)
- Pesan: Tidak ada pesan
-
UNSUPPORTED_ACTION- Pemicu: Tindakan yang tidak didukung oleh jenis resource tersebut
- Pesan: Perubahan plan untuk subscription berbasis penggunaan tidak didukung
Praktik Terbaik
Ikuti praktik berikut saat menangani error API:- Tangani setiap respons error dalam aplikasi Anda, dan gunakan
codesebagai dasar, bukanmessage. - Catat status HTTP,
code, danmessagedari setiap permintaan yang gagal. - Tampilkan kepada pengguna akhir pesan yang ditulis untuk mereka, bukan
messagementah dari API. - Coba ulang hanya transient errors, seperti respons
429dan5xxatauDISCOUNT_CONCURRENT_REDEMPTION, setelah jeda. - Hubungi support untuk error yang tidak dapat Anda atasi.