Skip to main content

Ikhtisar

Dodo Payments API menggunakan kode status HTTP standar dan kode kesalahan kustom untuk menunjukkan keberhasilan atau kegagalan permintaan API. Ketika terjadi kesalahan, API mengembalikan kode status HTTP yang sesuai dan respons JSON yang berisi informasi rinci tentang kesalahan tersebut. Setiap respons kesalahan mencakup:
  • Kode status HTTP yang menunjukkan kategori umum dari kesalahan
  • Kode kesalahan spesifik yang mengidentifikasi sifat tepat dari kesalahan
  • Pesan kesalahan yang dapat dibaca manusia yang menjelaskan apa yang salah
  • Rincian tambahan tentang kesalahan jika berlaku
Memahami kode kesalahan ini dan artinya sangat penting untuk:
  • Memecahkan masalah integrasi
  • Menerapkan penanganan kesalahan yang tepat dalam aplikasi Anda
  • Memberikan umpan balik yang berarti kepada pengguna akhir
  • Mempertahankan sistem pemrosesan pembayaran yang kuat
Ini adalah kesalahan API dan logika bisnis. Untuk alasan penolakan kartu yang dikembalikan pada pembayaran yang gagal (seperti INSUFFICIENT_FUNDS atau CARD_DECLINED), lihat referensi Kegagalan Transaksi sebagai gantinya.

Kode Kesalahan API Standar

Format Respons Kesalahan

Ketika terjadi kesalahan, API mengembalikan respons JSON dengan struktur berikut:

Referensi Kode Kesalahan

Kode kesalahan di bawah ini dikelompokkan berdasarkan area API yang mereka kaitkan. Setiap entri mencantumkan kondisi yang memicu dan pesan yang dikembalikan API.

Autentikasi & Akun

  • UNAUTHORIZED
    • Pemicu: Tidak ada kunci API atau token/scope tidak valid
    • Pesan: Anda tidak diizinkan untuk melakukan tindakan ini
  • MERCHANT_NOT_LIVE
    • Pemicu: Bisnis masih dalam Test Mode
    • Pesan: Merchant belum live
  • BUSINESS_ARCHIVED
    • Pemicu: Permintaan apa pun yang menghadap pelanggan (checkout, payment link, storefront, Customer Portal, atau license key) untuk bisnis yang telah diarsipkan
    • Pesan: Bisnis ini telah diarsipkan dan tidak lagi menerima permintaan

Payments & Checkout

  • CHECKOUT_SESSION_CONSUMED
    • Pemicu: Sesi checkout telah menghasilkan pembayaran
    • Pesan: Sesi checkout telah digunakan
  • NO_ELIGIBLE_PAYMENT_METHODS
    • Pemicu: Tidak ada yang tersisa setelah pemfilteran
    • Pesan: Tidak ditemukan metode pembayaran yang memenuhi syarat
  • PAYMENT_NOT_SUCCEEDED
    • Pemicu: Upaya untuk mengembalikan dana/memproses pembayaran yang tidak berhasil
    • Pesan: Pembayaran yang diberikan belum berhasil
  • PREVIOUS_PAYMENT_PENDING
    • Pemicu: Upaya membuat charge saat charge sebelumnya berada dalam status non-terminal
    • Pesan: Tidak dapat membuat charge baru karena pembayaran sebelumnya belum berhasil
  • UNSUCCESSFUL_PAYMENT_ID
    • Pemicu: Payment ID merujuk ke pembayaran yang tidak berhasil
    • Pesan: Payment ID memiliki status tidak berhasil.

Connectors & BYOP

Error ini berkaitan dengan payment connector milik merchant (Bring Your Own Processor).
  • BYOP_CONNECTOR_DISABLED
    • Pemicu: Memperbarui metode pembayaran pada subscription yang diarahkan melalui connector BYOP yang dinonaktifkan
    • Pesan: Subscription diarahkan melalui connector milik merchant (BYOP) yang saat ini dinonaktifkan
  • BYOP_CUSTOM_INVOICE_ADDRESS_MISSING
    • Pemicu: Pembayaran BYOP yang diarahkan melalui merchant tidak memiliki alamat invoice kustom yang diperlukan
    • Pesan: Alamat invoice kustom BYOP diperlukan ketika pembayaran diarahkan melalui connector milik merchant
  • CONNECTOR_LABEL_ALREADY_EXISTS
    • Pemicu: Membuat connector dengan label yang sudah ada
    • Pesan: Connector dengan label ini sudah ada. Silakan pilih label lain.

Refunds

  • 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 pada line item yang sudah sepenuhnya di-refund
    • Pesan: Line item telah sepenuhnya di-refund dan tidak dapat di-refund lagi.
  • LINE_ITEM_NOT_FOUND
    • Pemicu: Item ID bukan bagian dari payment yang dirujuk
    • Pesan: Line item tidak ditemukan dalam payment
  • LINE_ITEM_PRORATED
    • Pemicu: Refund atau pembaruan dicoba pada line prorata
    • Pesan: Line item tidak dapat di-refund karena bersifat prorata
  • LINE_ITEM_REFUND_AMOUNT_TOO_HIGH
    • Pemicu: Jumlah refund > jumlah yang dibayar (termasuk pajak)
    • Pesan: Jumlah refund yang diminta untuk line item , termasuk pajak, adalah , melebihi jumlah yang dibayar
  • LINE_ITEM_REFUND_AMOUNT_TOO_LOW
    • Pemicu: Jumlah refund di bawah ambang minimum
    • Pesan: Jumlah refund yang diminta untuk line item adalah , terlalu rendah
  • NOTHING_TO_REFUND
    • Pemicu: Tidak ada jumlah yang dapat di-refund; semua line item positif telah sepenuhnya di-refund
    • Pesan: Tidak ada jumlah yang tersisa untuk di-refund. Semua line item positif telah sepenuhnya di-refund.
  • PARTIAL_REFUND_NOT_ALLOWED
    • Pemicu: Upaya melakukan refund sebagian pada metode pembayaran yang hanya mendukung refund penuh
    • Pesan: Refund sebagian tidak diizinkan untuk metode pembayaran ini
  • PAYMENT_ALREADY_REFUNDED
    • Pemicu: Refund duplikat
    • Pesan: Payment ini sudah di-refund
  • PAYMENT_HAS_BEEN_REFUNDED
    • Pemicu: Payment telah sepenuhnya di-refund
    • Pesan: Payment ID telah sepenuhnya di-refund.
  • REFUND_AMOUNT_EXCEEDS_PAID_AMOUNT
    • Pemicu: Jumlah refund agregat > jumlah yang dibayar
    • Pesan: Jumlah refund yang dihitung lebih besar daripada jumlah yang dibayar
  • REFUND_WINDOW_EXPIRED
    • Pemicu: Di luar periode refund yang diizinkan
    • Pesan: Refund tidak dapat dimulai hari setelah pembuatan payment. Hubungi support@dodopayments.com.
  • ZERO_AMOUNT_PAYMENT_REFUND_NOT_ALLOWED
    • Pemicu: Upaya melakukan refund pada payment dengan jumlah mata uang nol
    • Pesan: Tidak dapat melakukan refund pada payment dengan jumlah mata uang nol

Subscriptions & Add-ons

  • ADDONS_IN_USAGE_BASED_BILLING_NOT_SUPPORTED
    • Pemicu: Upaya menambahkan addon ke subscription berbasis penggunaan
    • Pesan: Addon dalam Subscription tidak didukung untuk Usage Based Billing
  • ADDONS_NOT_ALLOWED_FOR_ON_DEMAND
    • Pemicu: Upaya menambahkan addon ke subscription on-demand
    • Pesan: Addon tidak diizinkan untuk subscription on-demand
  • CANCEL_SCHEDULED_PLAN_CHANGE_FOR_CUSTOMER_PORTAL_DISABLED
    • Pemicu: Customer Portal mencoba membatalkan perubahan paket terjadwal saat bisnis menonaktifkan tindakan tersebut
    • Pesan: Pembatalan perubahan paket 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 customer yang sudah memilikinya, ketika beberapa subscription per customer tidak diizinkan
    • Pesan: Customer sudah memiliki subscription. Untuk mengizinkan beberapa subscription per customer, ubah pengaturan bisnis
  • DO_NOT_BILL_NOT_ALLOWED_IN_CUSTOMER_PORTAL
    • Pemicu: Mode proration do_not_bill digunakan dalam perubahan paket Customer Portal
    • Pesan: Mode proration do_not_bill tidak diizinkan di customer portal
  • DUPLICATE_ADDON_IDS_IN_REQUEST
    • Pemicu: addon_id yang sama muncul lebih dari sekali dalam request
    • Pesan: ID addon duplikat tidak diizinkan
  • INACTIVE_SUBSCRIPTION_PLAN_CHANGE_NOT_SUPPORTED
    • Pemicu: Perubahan paket pada subscription yang tidak aktif
    • Pesan: Perubahan paket tidak didukung untuk subscription yang tidak aktif
  • INVALID_PRORATION_MODE_WITH_NEXT_BILLING_DATE
    • Pemicu: Mode proration selain full_immediately digunakan dengan effective_at: next_billing_date
    • Pesan: Hanya mode proration full_immediately yang diizinkan dengan effective_at: next_billing_date
  • MISSING_ADDON_IDS
    • Pemicu: Daftar addon_id kosong atau berisi ID yang tidak dikenal
    • Pesan: Satu atau beberapa product ID tidak ada:
  • ON_DEMAND_PLAN_CHANGE_NOT_SUPPORTED
    • Pemicu: Pergantian paket tidak diizinkan untuk on-demand
    • Pesan: Perubahan paket tidak didukung untuk subscription on-demand
  • ON_DEMAND_USAGE_BASED_BILLING_NOT_SUPPORTED
    • Pemicu: Upaya menggunakan 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 paket baru diminta saat perubahan sebelumnya masih menunggu pembayaran
    • Pesan: Perubahan paket yang tertunda sudah ada untuk subscription ini. Silakan tunggu hingga pembayaran saat ini selesai.
  • PLAN_CHANGE_FOR_CUSTOMER_PORTAL_DISABLED
    • Pemicu: Perubahan paket melalui Customer Portal saat bisnis menonaktifkannya
    • Pesan: Perubahan paket subscription untuk customer portal dinonaktifkan.
  • PLAN_CHANGE_NOT_ALLOWED_FOR_SCHEDULED_CANCELLATION
    • Pemicu: Perubahan paket dicoba pada subscription yang dijadwalkan untuk dibatalkan
    • Pesan: Subscription dijadwalkan untuk dibatalkan
  • SCHEDULE_PLAN_CHANGE_FOR_CUSTOMER_PORTAL_DISABLED
    • Pemicu: Menjadwalkan perubahan paket melalui Customer Portal saat bisnis menonaktifkannya
    • Pesan: Penjadwalan perubahan paket dinonaktifkan untuk bisnis ini.
  • SCHEDULED_PLAN_CHANGE_EXISTS
    • Pemicu: Membuat perubahan paket terjadwal saat perubahan sudah ada
    • Pesan: Perubahan paket terjadwal sudah ada untuk subscription ini. Batalkan perubahan terjadwal yang ada sebelum membuat perubahan baru.
  • SCHEDULED_PLAN_CHANGE_NOT_FOUND
    • Pemicu: Merujuk atau membatalkan perubahan paket terjadwal yang tidak ada
    • Pesan: Tidak ditemukan perubahan paket terjadwal untuk subscription ini.
  • SUBSCRIPTION_EXPIRED
    • Pemicu: Penagihan melewati expires_at
    • Pesan: Subscription telah kedaluwarsa; tidak dapat membuat charge baru
  • SUBSCRIPTION_INACTIVE
    • Pemicu: Status ≠ active
    • Pesan: Subscription tidak aktif
  • SUBSCRIPTION_NOT_ON_DEMAND
    • Pemicu: Mengharapkan on-demand, tetapi mendapatkan interval tetap
    • Pesan: Subscription sudah bukan on-demand
  • SUBSCRIPTION_PAYMENT_RETRY_LIMIT_EXCEEDED
    • Pemicu: Percobaan pembayaran subscription melebihi jumlah maksimum
    • Pesan: Batas maksimum 10 kali percobaan telah terlampaui untuk subscription ini

Products, Cart & Brands

  • 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 dalamnya
    • Pesan: Brand telah diarsipkan dan tidak dapat diperbarui
  • BRAND_ARCHIVE_TARGET_REQUIRED
    • Pemicu: Mengarsipkan brand yang masih memiliki produk, subscription aktif, atau koleksi produk tanpa target move_products_to
    • Pesan: Brand memiliki 12 produk. Atur move_products_to ke brand target untuk memberi tag ulang pada produk tersebut.
  • 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: Pengiriman ulang verifikasi brand tidak diaktifkan
  • 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 grant entitlement aktif
    • Pesan: File digital dirujuk oleh grant aktif
  • INVALID_BRAND_ARCHIVE_TARGET
    • Pemicu: move_products_to menyebutkan brand yang sedang diarsipkan, brand yang telah diarsipkan, atau brand dari bisnis lain
    • Pesan: move_products_to harus berupa brand dari bisnis ini yang belum diarsipkan
  • INVALID_SUGGESTED_PRICE
    • Pemicu: Harga PWYW < harga minimum yang diizinkan
    • Pesan: Suggested Price tidak boleh lebih rendah daripada harga minimum. Dalam kasus pay what you want, harga dianggap sebagai jumlah minimum yang diterima
  • LOCALIZED_PRICE_ALREADY_EXISTS
    • Pemicu: Harga terlokalisasi sudah ada untuk produk dan negara/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/negara dasar produk
    • Pesan: Harga terlokalisasi menduplikasi mata uang/negara dasar produk
  • LOCALIZED_PRICE_SHAPE_MISMATCH
    • Pemicu: Bentuk harga terlokalisasi tidak sesuai dengan pricing_mode produk
    • Pesan: Bentuk harga terlokalisasi tidak sesuai dengan pricing_mode produk
  • MISSING_PRODUCT_INFORMATION
    • Pemicu: Produk ada, tetapi informasi wajib tidak lengkap
    • Pesan: Produk ada, tetapi informasi wajib lainnya tidak lengkap atau tidak valid
  • PAY_AS_YOU_WANT_AMOUNT_REQUIRED
    • Pemicu: Harga tidak ada untuk produk PWYW
    • Pesan: Amount wajib diisi untuk produk pay as you want
  • PRODUCT_CART_EMTPY
    • Pemicu: Product cart kosong dikirimkan
    • Pesan: product_cart kosong (kode error sengaja dieja EMTPY agar 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.
  • PRODUCT_IS_DELETED
    • Pemicu: Produk dihapus secara lunak
    • Pesan: Tidak ada pesan
  • PRODUCT_PRICING_MODE_REQUIRED
    • Pemicu: Menambahkan harga terlokalisasi sebelum pricing_mode produk ditetapkan
    • Pesan: pricing_mode produk harus ditetapkan sebelum menambahkan harga terlokalisasi
  • SLUG_ALREADY_TAKEN
    • Pemicu: Slug produk / URL singkat yang diminta sudah digunakan
    • Pesan: Slug sudah digunakan
  • UNABLE_TO_EDIT_PRIMARY_BRAND
    • Pemicu: Upaya memperbarui brand utama melalui API biasa
    • Pesan: Brand utama tidak dapat diperbarui melalui API endpoint ini.

Discounts

  • 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 duplikat
    • Pesan: Discount Code sudah ada
  • DISCOUNT_CODE_EXPIRED
    • Pemicu: Kode diskon melewati tanggal expires_at
    • Pesan: Kode diskon kedaluwarsa
  • DISCOUNT_CODE_USAGE_LIMIT_EXCEEDED
    • Pemicu: Diskon digunakan kembali setelah usage_limit tercapai
    • Pesan: Batas penggunaan tidak boleh kurang dari times_used / Kode diskon telah mencapai batas penggunaan
    • Catatan: Terminal — kode telah habis. Jangan coba lagi.
  • DISCOUNT_CONCURRENT_REDEMPTION
    • Pemicu: Penukaran kode yang sama lainnya menahan row lock batas penggunaan terlalu lama
    • Pesan: Diskon sedang ditukarkan secara bersamaan; silakan coba lagi
    • Catatan: Sementara. Kode mungkin masih memiliki kapasitas, sehingga request aman untuk dicoba lagi. Jangan tampilkan ini kepada customer sebagai “kode habis”.
  • DISCOUNT_CURRENCY_OPTION_INVALID
    • Pemicu: currency_options tidak valid saat create atau update
    • Pesan: Diskon flat memerlukan setidaknya satu opsi mata uang dengan default yang dapat ditentukan / Opsi mata uang duplikat tidak diizinkan / Hanya satu opsi mata uang yang dapat ditandai sebagai default
  • DISCOUNT_CUSTOMER_NOT_ELIGIBLE
    • Pemicu: Customer tidak memenuhi customer_eligibility kode (first_time, existing, atau tidak tercantum dalam daftar izin kode specific)
    • Pesan: Customer tidak memenuhi syarat untuk kode diskon ini
  • DISCOUNT_MINIMUM_SUBTOTAL_NOT_MET
    • Pemicu: Subtotal cart berada di bawah minimum_subtotal yang dikonfigurasi untuk mata uang checkout
    • Pesan: Subtotal cart berada di bawah subtotal minimum yang diperlukan diskon
  • DISCOUNT_NOT_YET_ACTIVE
    • Pemicu: Kode digunakan sebelum tanggal starts_at
    • Pesan: Kode diskon belum aktif (starts_at berada di masa mendatang)
  • DISCOUNT_PER_CUSTOMER_USAGE_LIMIT_EXCEEDED
    • Pemicu: Customer telah menukarkan kode sebanyak per_customer_usage_limit kali
    • Pesan: Batas penggunaan per customer terlampaui untuk kode diskon ini
  • DISCOUNT_NOT_APPLICABLE_TO_NEW_PRODUCT
    • Pemicu: Perubahan paket ke produk yang tidak berlaku untuk diskon yang ada
    • Pesan: Diskon tidak berlaku untuk produk paket baru
  • DISCOUNT_NOT_AVAILABLE_FOR_ON_DEMAND
    • Pemicu: Kode diterapkan pada subscription on-demand
    • Pesan: Discount coupon tidak tersedia untuk subscription on-demand
  • DISCOUNT_NOT_AVAILABLE_FOR_PRODUCT
    • Pemicu: Kode diterapkan pada produk yang tidak terkait
    • Pesan: Discount coupon tidak tersedia untuk produk ini
  • INVALID_DISCOUNT_CODE
    • Pemicu: Kode tidak ada / tidak berlaku
    • Pesan: Discount Code tidak valid / Discount Code tidak dapat diterapkan ke produk mana pun dalam cart
  • INVALID_PERCENTAGE
    • Pemicu: Nilai persentase > 100% (atau 10.000 basis points)
    • Pesan: Nilai persentase tidak boleh lebih dari 10000 / Jumlah kode diskon tidak boleh lebih dari 100%
  • UNSUPPORTED_DISCOUNT_TYPE
    • Pemicu: Jenis diskon yang tidak didukung. percentage dan flat didukung; diskon jumlah per unit tidak didukung.
    • Pesan: Hanya kode diskon persentase dan flat yang didukung

License Keys

  • ACTIVATION_LIMIT_LESS_THAN_CURRENT_AMOUNT
    • Pemicu: Aktivasi license key: limit baru < jumlah instance saat ini
    • Pesan: Limit aktivasi baru tidak boleh kurang dari jumlah instance saat ini
  • INACTIVE_LICENSE_KEY
    • Pemicu: Status key ≠ active
    • Pesan: License key tidak aktif
  • LICENSE_KEY_LIMIT_REACHED
    • Pemicu: Aktivasi = limit
    • Pesan: Limit aktivasi license key telah tercapai
  • LICENSE_KEY_NOT_FOUND
    • Pemicu: Instance ID atau 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 masa berlaku pada key berbasis subscription
    • Pesan: Tidak dapat menetapkan tanggal kedaluwarsa untuk license key berbasis subscription

Usage-Based Billing & Meters

  • DUPLICATE_METER_IDS_IN_REQUEST
    • Pemicu: Meter ID yang sama muncul beberapa kali dalam request
    • Pesan: Meter ID duplikat tidak diizinkan
  • INVALID_QUANTITY
    • Pemicu: Kuantitas tidak valid ditentukan untuk pricing berbasis penggunaan
    • Pesan: Hanya 1 kuantitas yang diizinkan dalam produk 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 tidak valid
    • Pesan: Satu atau beberapa meter ID tidak ada:

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 < 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

Currency, Tax & Region

  • EXCHANGE_RATE_NOT_FOUND
    • Pemicu: Tidak ada nilai tukar FX untuk pasangan mata uang from → to
    • Pesan: Nilai tukar tidak ditemukan untuk mengonversi dari Currency ke Currency
  • INVALID_TAX_ID
    • Pemicu: Validasi VAT/GST/TIN gagal
    • Pesan: Tax Id tidak valid
  • REQUEST_AMOUNT_BELOW_MINIMUM
    • Pemicu: Jumlah < minimum produk
    • Pesan: Jumlah tidak boleh kurang dari jumlah minimum yang ditentukan untuk produk
  • TOTAL_PAYMENT_AMOUNT_BELOW_MINIMUM_AMOUNT
    • Pemicu: Total cart gabungan < minimum gateway
    • Pesan: Jumlah minimum diperlukan untuk memproses pembayaran
  • UNSUPPORTED_BILLING_CURRENCY
    • Pemicu: Mata uang billing yang diminta tidak didukung untuk subscription ini
    • Pesan: Mata uang billing selain USD tidak didukung untuk subscription
  • UNSUPPORTED_COUNTRY
    • Pemicu: Geo belum didukung
    • Pesan: Negara saat ini tidak didukung
  • UNSUPPORTED_CURRENCY
    • Pemicu: Mata uang produk atau addon bukan mata uang yang dapat digunakan Dodo Payments untuk melakukan charge. Harga dasar dapat ditetapkan dalam mata uang apa pun yang dapat digunakan untuk charge, sehingga biasanya ini berarti kode mata uang tidak valid atau belum didukung.
    • Pesan: Mata uang saat ini tidak didukung / Saat ini hanya produk USD dan INR yang didukung / Hanya USD dan INR yang didukung untuk harga addon / Hanya dapat meminta USD atau INR untuk billing_currency / Mata Uang Tidak Didukung / Mata uang tidak terduga untuk subscription kartu India
  • UNSUPPORTED_TAX_CATEGORY
    • Pemicu: String kategori pajak tidak terdapat dalam enum
    • Pesan: Kategori saat ini tidak didukung

Validation & Requests

  • DUPLICATE_LINE_ITEMS_IN_REQUEST
    • Pemicu: item_id yang sama muncul dua kali dalam items[]
    • Pesan: item_ids duplikat ditentukan dalam array items
  • INVALID_QUERY_PARAMS
    • Pemicu: Parameter query yang saling eksklusif / tidak valid
    • Pesan: Query params hanya boleh berisi time_frame atau (start, end)
  • INVALID_REQUEST_BODY
    • Pemicu: JSON tidak valid atau pelanggaran schema
    • Pesan: Body request Anda tidak valid. Periksa header request dan object Anda.
  • INVALID_REQUEST_PARAMETERS
    • Pemicu: Semantik salah (misalnya tanggal di masa lalu)
    • Pesan: Tidak dapat mengubah next_billing_date ke waktu yang telah berlalu
  • MAXIMUM_KEYS_REACHED
    • Pemicu: Metadata / custom-fields melebihi 50 pasangan
    • Pesan: Melebihi 50 pasangan key-value

General & System

  • INTEGER_CONVERSION_FAILURE
    • Pemicu: Konversi integer ↔ string/desimal apa pun yang gagal di sisi server
    • Pesan: Kegagalan Konversi Integer
  • INTERNAL_SERVER_ERROR
    • Pemicu: Exception yang tidak tertangani; Anda harus mencatat detailnya di sisi server
    • Pesan: Tidak ada pesan publik (generic 500)
  • NOT_FOUND
    • Pemicu: 404 umum untuk resource apa pun yang tidak ditemukan
    • Pesan: Item tidak ditemukan (atau pesan yang lebih spesifik)
  • TOO_MANY_REQUESTS
    • Pemicu: Batas laju 429
    • Pesan: Tidak ada pesan
  • UNSUPPORTED_ACTION
    • Pemicu: Tindakan tidak didukung untuk jenis resource
    • Pesan: Perubahan paket untuk subscription berbasis penggunaan tidak didukung

Praktik Terbaik

  1. Selalu tangani error dengan baik dalam aplikasi Anda
  2. Terapkan logging error yang tepat
  3. Gunakan pesan error yang sesuai untuk pengguna akhir
  4. Terapkan logika retry untuk error sementara
  5. Hubungi support untuk masalah yang belum terselesaikan

Support

Untuk bantuan tambahan terkait kode error atau masalah integrasi, silakan hubungi tim support kami di support@dodopayments.com.
Terakhir diubah pada 21 Agustus 2026