Documentation Index
Fetch the complete documentation index at: https://docs.dodopayments.com/llms.txt
Use this file to discover all available pages before exploring further.
Fitur Baru
1. Hak Akses
Dodo Payments sekarang dilengkapi dengan Hak Akses terpadu — satu lapisan yang mendukung pengiriman otomatis untuk setiap integrasi pemenuhan. Satu produk dapat mengirimkan beberapa hak akses pada setiap pembelian yang berhasil atau langganan aktif.
Lima integrasi platform baru
Sampai sekarang, Dodo Payments mengirimkan kunci lisensi dan file digital secara otomatis saat pembelian. Hak akses memperluas cakupan tersebut ke lima platform tambahan — sehingga pelanggan yang membayar dapat diberikan akses ke komunitas Anda, kode Anda, atau konten Anda begitu pembayaran berhasil, tanpa pemenuhan manual di pihak Anda:
| Integrasi | Apa yang dikirim | Perilaku pembatalan |
|---|
| Discord | Memberikan peran yang dipilih di server Discord Anda setelah pelanggan menyelesaikan OAuth | Peran dihapus pada pembatalan/pengembalian dana |
| GitHub | Menambahkan pelanggan sebagai kolaborator ke repository pribadi dengan tingkat izin yang Anda pilih | Kolaborator dihapus pada pembatalan/pengembalian dana |
| Telegram | Mengeluarkan tautan undangan permintaan bergabung satu kali untuk obrolan pribadi atau saluran via bot Telegram Anda | Pelanggan dikeluarkan dari obrolan pada pembatalan/pengembalian dana |
| Framer | Membuka tautan remix template Framer yang dibatasi oleh kode akses | Kode akses dinonaktifkan pada pembatalan/pengembalian dana |
| Notion | Menduplicate halaman template Notion ke dalam workspace pelanggan setelah mereka mengotorisasi melalui OAuth | Halaman yang dikirim diarsipkan pada pembatalan/pengembalian dana |
Ini bergabung dengan integrasi Kunci Lisensi yang sudah ada (kunci unik dengan batas aktivasi dan kedaluwarsa) dan File Digital (URL unduhan yang ditandatangani sebelumnya untuk e-book, template, media), semuanya sekarang dikelola melalui siklus hidup pemberian yang sama.
Apa yang Anda dapatkan dari dalam kotak
| Kemampuan | Deskripsi |
|---|
| Template yang dapat digunakan kembali | Definisikan sekali hak akses (batas aktivasi, bundel file, peran Discord, izin repo, dll.) dan lampirkan ke produk apa pun |
| Pemberian otomatis | Dikeluarkan pada payment.succeeded dan subscription.active, idempotent atas pembaruan dan reaktivasi |
| Pencabutan yang sadar siklus hidup | Dicabut pada subscription.cancelled, subscription.on_hold, subscription.expired, refund.succeeded, subscription.plan_changed, atau pencabutan manual API/dashboard — dengan revocation_reason terisi |
| OAuth + arus langsung platform | OAuth untuk izin pelanggan Discord, GitHub, dan Notion; panggilan langsung platform untuk Telegram, Framer, dan File Digital |
| Deteksi Drift | Mendeteksi ketika peran Discord, kolaborator GitHub, atau halaman Notion tidak sinkron di tingkat platform dan dicabut dengan revocation_reason: platform_external |
| Enkripsi saat tidak aktif | Semua token platform (OAuth, bot, instalasi aplikasi) disimpan dengan AES-256-GCM |
Webhooks
Empat acara siklus hidup baru dipicu untuk setiap pemberian:
| Acara | Dipicu ketika |
|---|
entitlement_grant.created | Pemberian baru dibuat untuk pelanggan |
entitlement_grant.delivered | Pemberian akses pelanggan |
entitlement_grant.failed | Pengiriman tidak dapat diselesaikan; periksa error_code dan error_message |
entitlement_grant.revoked | Akses dicabut; periksa revocation_reason |
Untuk integrasi baru, dengarkan entitlement_grant.delivered daripada payment.succeeded. Keberhasilan pembayaran tidak berarti pengiriman selesai, terutama untuk integrasi berbasis OAuth.
Pelajari lebih lanjut: Entitlements | Entitlement Grant Webhooks
2. Alasan Pembatalan Langganan di Portal Pelanggan
Saat pelanggan membatalkan langganan dari Portal Pelanggan, mereka sekarang diminta untuk berbagi mengapa mereka membatalkan sebelum mengonfirmasi. Alasan yang ditangkap disimpan di langganan sebagai cancellation_feedback, muncul di payload API dan webhook, dan tersedia di dasbor sehingga Anda dapat melihat pola churn secara sekilas.
Opsi alasan
| Nilai | Label yang dihadapi pelanggan |
|---|
too_expensive | Terlalu mahal |
missing_features | Fitur yang hilang |
switched_service | Beralih ke layanan lain |
unused | Tidak menggunakannya cukup sering |
customer_service | Layanan pelanggan yang buruk |
low_quality | Kualitas rendah |
too_complex | Terlalu kompleks |
other | Lainnya |
Di mana itu muncul
- Objek Langganan: Field baru
cancellation_feedback (salah satu nilai di atas) dan cancellation_comment (teks bebas opsional), diisi ketika pelanggan membatalkan
subscription.cancelled webhook: Kedua field disertakan dalam payload
- API: Lulus
cancellation_feedback dan cancellation_comment ke PATCH /subscriptions/{id} saat menjadwalkan atau menjalankan pembatalan secara programatik
// Reading the captured feedback
const subscription = await client.subscriptions.retrieve('sub_123');
console.log(subscription.cancellation_feedback); // e.g., "too_expensive"
console.log(subscription.cancellation_comment); // e.g., "Switching to a competitor"
Gabungkan cancellation_feedback dengan Subscription Dunning untuk menyesuaikan email win-back Anda — misalnya, kirim kode diskon ke too_expensive pembatal dan survei “apa yang hilang?” ke missing_features pembatal.
Pelajari lebih lanjut: Portal Pelanggan | Subscription Webhooks
3. Jumlah Minimum Mandate yang Dapat Dikonfigurasi untuk E-Mandates INR
Anda sekarang dapat mengonfigurasi mandate floor untuk e-mandate INR pada langganan berulang kartu India. Sebelumnya, setiap langganan kartu India di bawah ₹15,000 menggunakan mandate on-demand tetap ₹15,000. Sekarang Anda dapat mengesampingkan lantai ini di tingkat pedagang — dan per sesi checkout atau langganan jika diperlukan.
Jumlah mandate yang terdaftar dengan bank pelanggan adalah max(mandate_min_amount_inr_paise, billing_amount), jadi nilai ini bertindak sebagai plafon otorisasi yang dihadapi pelanggan setiap kali penagihan lebih rendah dari floor.
// Per-subscription override
const subscription = await client.subscriptions.create({
product_id: 'prod_inr_monthly',
customer: { email: 'customer@example.in' },
billing: { country: 'IN' /* ... */ },
mandate_min_amount_inr_paise: 2_000_000 // ₹20,000 ceiling for this subscription
});
// Or via a checkout session
const session = await client.checkoutSessions.create({
product_cart: [{ product_id: 'prod_inr_monthly', quantity: 1 }],
mandate_min_amount_inr_paise: 2_000_000,
return_url: 'https://yoursite.com/return'
});
Prioritas resolusi
- Override per permintaan (
mandate_min_amount_inr_paise pada sesi checkout, pembayaran, atau langganan)
- Pengaturan tingkat pedagang dalam pengaturan bisnis
- Sistem default sebesar ₹15,000 (1,500,000 paise)
| Field | Jenis | Rentang | Berlaku untuk |
|---|
mandate_min_amount_inr_paise | integer (INR paise) | >= 1 | Langganan INR kartu India pada konektor non-Airwallex |
Pengaturan ini hanya memengaruhi e-mandate yang terdaftar untuk kartu yang diterbitkan di India (Visa, Mastercard, RuPay) pada langganan INR. Langganan UPI mengikuti aliran AutoPay mereka sendiri dan tidak terpengaruh.
Pelajari lebih lanjut: Metode Pembayaran India | Langganan dengan Mandate RBI
4. Pengaturan Bisnis Inklusif Biaya Mata Uang Adaptif
Mata Uang Adaptif adalah fitur yang memungkinkan Anda mengenakan biaya kepada pelanggan dalam mata uang lokal mereka. Secara default, 2–4% biaya mata uang adaptif ditanggung oleh pelanggan dan ditambahkan di atas harga yang ditampilkan. Dengan pengaturan baru Biaya Inklusif, Anda dapat membalik ini: menjaga harga yang ditampilkan tidak berubah untuk pelanggan dan menanggung biaya sendiri.
Di mana mengonfigurasinya
Pergi ke Pengaturan → Bisnis, pastikan Penetapan Harga Adaptif diaktifkan, dan toggle Biaya Inklusif di bagian Mata Uang Adaptif.
Override per permintaan
Anda juga dapat menimpa default pedagang untuk checkout, pembayaran, dan langganan on-demand menggunakan boolean adaptive_currency_fees_inclusive :
const session = await client.checkoutSessions.create({
product_cart: [{ product_id: 'prod_abc', quantity: 1 }],
adaptive_currency_fees_inclusive: true, // override business default
return_url: 'https://yoursite.com/return'
});
| Mode | Yang dilihat pelanggan | Pedagang menyelesaikan |
|------|-------------- ---|------------------|
| Eksklusif (default) | Harga lokal + biaya 2–4% di atasnya | Harga dasar penuh |
| Inklusif | Harga lokal (tidak berubah) | Harga dasar dikurangi biaya 2–4% |
Transaksi INR → INR selalu diperlakukan sebagai inklusif terlepas dari pengaturan bisnis atau override per permintaan.
Pelajari lebih lanjut: Mata Uang Adaptif
5. Aplikasi Dodo Payments Desktop
Aplikasi resmi Dodo Payments Desktop sekarang tersedia secara umum untuk macOS, Windows, dan Linux. Jalankan dasbor pembayaran Anda sebagai aplikasi asli yang cepat — tidak diperlukan tab peramban.
| Platform | Download |
|---|
| macOS (Apple Silicon) | Dodo.Payments_<version>_aarch64.dmg |
| macOS (Intel) | Dodo.Payments_<version>_x64.dmg |
| Windows | Dodo.Payments_<version>_x64-setup.exe (atau .msi) |
| Linux (Debian/Ubuntu) | Dodo.Payments_<version>_amd64.deb |
| Linux (Fedora/RHEL) | Dodo.Payments-<version>-1.x86_64.rpm |
| Linux (AppImage, pembaruan otomatis) | Dodo.Payments_<version>_amd64.AppImage |
Apa yang ada di dalamnya
- Binary asli kecil — dibangun dengan Tauri pada tampilan web asli sistem, total ~5 MB (tidak ada Chromium yang disertakan)
- Ditandatangani dan dinotariskan — build macOS ditandatangani dengan Apple Developer ID dan dinotariskan, jadi tidak ada peringatan Gatekeeper
- Pembaruan otomatis — memeriksa setiap 4 jam dan menerapkan pembaruan yang ditandatangani secara otomatis dari GitHub Releases (berfungsi di macOS, Windows, dan Linux AppImage)
- System tray + menu bar — hide-to-tray di macOS, menu penuh File/Edit/View/Help dengan pintasan keyboard (
⌘⇧H pergi ke dasbor, ⌘L salin URL saat ini, ⌘⌥I alat dev)
- Dukungan deep-link — tautan otentikasi magic-link terbuka langsung di aplikasi
- Multi-window — buka beberapa dasbor berdampingan
Ambil installer terbaru untuk platform Anda dari halaman Desktop App Releases. Reponya sepenuhnya open source.
6. Pembayaran Stablecoin (USDC, USDP, USDG)
Terima pembayaran stablecoin secara global dengan penyelesaian USD. Pelanggan membayar dari dompet stablecoin pilihan mereka di jaringan pilihan mereka; Anda menerima fiat USD tanpa eksposur ke volatilitas kripto, tidak ada chargeback, dan tidak ada infrastruktur perbankan yang diperlukan di pihak pelanggan.
Mata uang dan jaringan yang didukung
| Stablecoin | Jaringan |
|---|
| USDC | Ethereum, Solana, Polygon, Base |
| USDP | Ethereum, Solana |
| USDG | Ethereum |
Cakupan
| Detail | Nilai |
|---|
| Mata uang penagihan | USD |
| Negara yang didukung | Global (tidak termasuk India) |
| Langganan | Tidak didukung (hanya pembayaran satu kali) |
| Jumlah minimum | $0.50 |
| Penyelesaian | USD |
Konfigurasi
Lulus crypto di allowed_payment_method_types saat membuat sesi checkout:
const session = await client.checkoutSessions.create({
product_cart: [{ product_id: 'prod_123', quantity: 1 }],
allowed_payment_method_types: ['crypto', 'credit', 'debit'],
return_url: 'https://example.com/success'
});
Pelanggan ditunjukkan alamat dompet dan kode QR dengan jumlah stablecoin yang dihitung pada kurs real-time; setelah transaksi dikonfirmasi oleh blockchain, webhook payment.succeeded Anda dipicu dan pelanggan diarahkan ke halaman sukses Anda.
Pembayaran stablecoin tidak dapat dibatalkan secara desain — tidak ada chargeback. Kami merekomendasikan selalu menawarkan credit dan debit sebagai metode cadangan untuk pelanggan tanpa dompet stablecoin.
Pelajari lebih lanjut: Pembayaran Stablecoin
7. Impor Kunci Lisensi yang Ada
Anda sekarang dapat mengimpor kunci lisensi dari sistem lain ke Dodo Payments menggunakan Create License Key API. Ini membuka migrasi tanpa gangguan dari penyedia kunci lisensi eksternal mana pun, sehingga pelanggan Anda yang ada dapat terus mengaktifkan, memvalidasi, dan menonaktifkan kunci mereka di Dodo Payments tanpa penerbitan ulang.
const licenseKey = await client.licenseKeys.create({
customer_id: 'cus_abc123',
product_id: 'prod_456',
key: 'YOUR-EXISTING-LICENSE-KEY',
activations_limit: 5,
expires_at: '2026-12-31T23:59:59Z',
});
Kunci yang diimpor diberi tag dengan source: "import" (dibandingkan dengan source: "auto" untuk kunci yang dihasilkan secara otomatis saat pembayaran), sehingga Anda dapat membedakan inventaris yang dimigrasi dari kunci yang dikeluarkan secara organik saat mengquery GET /license_keys. payment_id pada kunci yang diimpor adalah null karena mereka tidak terikat pada transaksi Dodo Payments.
Kunci lisensi yang dibuat atau diperbarui melalui API tidak memicu notifikasi email kepada pelanggan. Jika Anda perlu memberi tahu pelanggan tentang kunci yang diimpor, tangani itu secara terpisah dalam aplikasi Anda.
Bermigrasi dari Polar.sh atau Lemon Squeezy? dodo-migrate CLI mengotomatiskan impor produk, pelanggan, diskon, dan kunci lisensi secara massal dalam satu perintah.
Pelajari lebih lanjut: Kunci Lisensi | Create License Key API
8. require_phone_number untuk Sesi Checkout
Memaksa pelanggan untuk memberikan nomor telepon saat checkout dengan mengatur feature_flags.require_phone_number: true saat membuat sesi checkout. Nomor telepon menjadi field wajib di formulir checkout, dengan validasi formulir yang menampilkan “Nomor telepon diperlukan” jika pelanggan membiarkannya kosong.
const session = await client.checkoutSessions.create({
product_cart: [{ product_id: 'prod_abc', quantity: 1 }],
feature_flags: {
allow_phone_number_collection: true,
require_phone_number: true
},
return_url: 'https://yoursite.com/return'
});
| Flag | Default | Perilaku |
|---|
allow_phone_number_collection | true | Menampilkan field nomor telepon saat checkout |
require_phone_number | false | Membuat field nomor telepon wajib |
require_phone_number: true memerlukan allow_phone_number_collection: true. API menolak sesi di mana require_phone_number true saat pengumpulan nomor telepon dinonaktifkan.
Berguna untuk SaaS B2B, industri yang diatur, atau aliran apa pun di mana Anda memerlukan saluran kontak yang terverifikasi untuk dukungan, tinjauan penipuan, atau kepatuhan.
Pelajari lebih lanjut: Fitur Checkout | Create Checkout Session API
Perbaikan Bug & Peningkatan
- Perbaikan bug minor dan peningkatan stabilitas di seluruh platform