Subscriptions let you sell ongoing access with automated renewals. Use flexible billing cycles, free trials, plan changes, and add‑ons to tailor pricing for each customer.
Upgrade & Downgrade
Control plan changes with proration and quantity updates.
On‑Demand Subscriptions
Authorize a mandate now and charge later with custom amounts.
Customer Portal
Let customers manage plans, billing, and cancellations.
Subscription Webhooks
React to lifecycle events like created, renewed, and canceled.
What Are Subscriptions?
Subscriptions are recurring products customers purchase on a schedule. They’re ideal for:- SaaS licenses: Apps, APIs, or platform access
- Memberships: Communities, programs, or clubs
- Digital content: Courses, media, or premium content
- Support plans: SLAs, success packages, or maintenance
Key Benefits
- Predictable revenue: Recurring billing with automated renewals
- Flexible cycles: Monthly, annual, custom intervals, and trials
- Plan agility: Proration for upgrades and downgrades
- Add‑ons and seats: Attach optional, quantifiable upgrades
- Seamless checkout: Hosted checkout and customer portal
- Developer-first: Clear APIs for creation, changes, and usage tracking
Creating Subscriptions
Create subscription products in your Dodo Payments dashboard, then sell them through checkout or your API. Separating products from active subscriptions lets you version pricing, attach add‑ons, and track performance independently.Subscription product creation
Configure the fields in the dashboard to define how your subscription sells, renews, and bills. The sections below map directly to what you see in the creation form.Product details
- Product Name (required): The display name shown in checkout, customer portal, and invoices.
- Product Description (required): A clear value statement that appears in checkout and invoices.
- Product Image (required): PNG/JPG/WebP up to 3 MB. Used on checkout and invoices.
- Brand: Associate the product with a specific brand for theming and emails.
- Tax Category (required): Choose the category (for example, SaaS) to determine tax rules.
Pricing
- Pricing Type: Pilih Subscription (panduan ini). Alternatifnya adalah Single Payment dan Usage Based Billing.
- Price (wajib): Harga dasar berulang dengan mata uang. Harga harus sekurang-kurangnya $1 (atau setara dalam mata uang yang dipilih). Jumlah di bawah minimum ini tidak didukung dan subscription tidak akan berfungsi.
- Discount Applicable (%): Diskon persentase opsional yang diterapkan pada harga dasar; tercermin di checkout dan invoice.
- Repeat payment every (wajib): Interval untuk perpanjangan, misalnya setiap 1 Month. Pilih cadence (bulan atau tahun) dan jumlahnya.
- Subscription Period (wajib): Jangka waktu total subscription tetap aktif (misalnya 10 Years). Setelah periode ini berakhir, perpanjangan berhenti kecuali diperpanjang.
- Trial Period Days (wajib): Tetapkan durasi trial dalam hari. Gunakan 0 untuk menonaktifkan trial. Tagihan pertama dibuat secara otomatis saat trial berakhir.
- Trial Amount: Biaya awal opsional untuk paid trial. Biarkan tidak diisi untuk free trial. Lihat Paid Trials.
- Select add‑on: Lampirkan hingga 10 add-on yang dapat dibeli pelanggan bersama paket dasar.
Add‑ons are ideal for quantifiable extras such as seats or storage. You can control allowed quantities and proration behavior when customers change them.
Advanced settings
- Tax Inclusive Pricing: Display prices inclusive of applicable taxes. Final tax calculation still varies by customer location.
- Generate license keys: Issue a unique key to each customer after purchase. See the License Keys guide.
- Digital Product Delivery: Deliver files or content automatically after purchase. Learn more in Digital Product Delivery.
- Metadata: Attach custom key–value pairs for internal tagging or client integrations. See Metadata.
Subscription Trials
Trial memungkinkan pelanggan mengevaluasi subscription sebelum membayar harga berulang penuh. Trial dapat berupa free, ketika tidak ada biaya yang dikenakan hingga trial berakhir, atau paid, ketika jumlah yang lebih rendah dikenakan di muka. Dalam kedua kasus tersebut, harga penuh mulai berlaku pada perpanjangan pertama setelah trial berakhir.Configuring Trials
Set Trial Period Days in the product pricing section (use0 to disable). You can override this when creating subscriptions:
Paid Trials
Trial tidak harus gratis. Tetapkan Trial Amount pada harga berulang produk subscription untuk mengenakan biaya awal yang lebih rendah selama jendela trial. Harga berulang penuh kemudian mulai berlaku pada perpanjangan pertama.
trial_amount dan trial_period_days sehingga Anda dapat menampilkan jumlah yang harus dibayar hari ini sebelum subscription dibuat.
Free trial tidak berubah. Membiarkan Trial Amount kosong akan mempertahankan perilaku yang ada, yaitu biaya pertama adalah
0 dan harga penuh dikenakan saat trial berakhir.Mencegah Penyalahgunaan Trial
Prevent Trial Misuse mencegah pelanggan berulang kali mengklaim trial untuk bisnis yang sama. Saat diaktifkan, pelanggan yang sebelumnya telah menukarkan trial akan secara otomatis dialihkan ke paid, no-trial purchase, bukan menerima trial baru.
- Pelanggan dicocokkan berdasarkan normalized email, dengan plus-alias yang dihapus, sehingga
user+trial@example.comdanuser@example.comdianggap sebagai orang yang sama. - Penukaran dicatat saat trial activation, sehingga pelanggan yang membatalkan pada hari yang sama tetap dianggap telah menggunakan trial mereka.
- Pelanggan yang sudah ada di-backfill berdasarkan trial historis melalui email, sehingga pengguna trial sebelumnya langsung dikenali.
Pengaturan ini off by default. Lihat Subscription Settings untuk daftar lengkap kontrol subscription tingkat bisnis.
Mendeteksi Status Trial
Untuk menentukan apakah subscription free trial sedang dalam masa trial, ambil daftar payments untuk subscription tersebut. Jika terdapat tepat satu payment dengan amount 0, subscription berada dalam masa trial:Memperbarui Periode Trial
Perpanjang trial dengan memperbaruinext_billing_date:
Perubahan Paket Subscription
Perubahan paket memungkinkan Anda melakukan upgrade atau downgrade subscription, menyesuaikan jumlah, atau berpindah ke produk lain. Bergantung pada mode proration yang dipilih, perubahan dapat memicu biaya langsung, membuat kredit, atau tidak menerapkan penyesuaian billing.Product Collections
Kelompokkan produk terkait ke dalam collection untuk mengaktifkan alur upgrade/downgrade yang mulus di Customer Portal.
Mode Proration
Pilih cara pelanggan ditagih saat mengubah paket:Perbandingan singkat empat mode proration:
prorated_immediately
Mengenakan jumlah prorata berdasarkan sisa waktu dalam billing cycle saat ini. Cocok untuk billing yang adil dan memperhitungkan waktu yang belum digunakan.
difference_immediately
Menagihkan selisih harga secara langsung (upgrade) atau menambahkan kredit untuk perpanjangan mendatang (downgrade). Cocok untuk skenario upgrade/downgrade sederhana.
Kredit dari downgrade menggunakan
difference_immediately terkait dengan subscription dan otomatis diterapkan pada perpanjangan mendatang. Kredit ini berbeda dari entitlement Credit-Based Billing.difference_immediately, nilai yang belum digunakan menjadi kredit yang terkait dengan subscription dan otomatis mengimbangi perpanjangan mendatang:
full_immediately
Menagihkan jumlah penuh paket baru secara langsung, tanpa memperhitungkan sisa waktu. Cocok untuk mereset billing cycle.
do_not_bill
Beralih ke paket baru tanpa penyesuaian billing. Tidak ada biaya proration dan tidak ada kredit — pelanggan cukup berpindah ke paket baru. Cocok untuk migrasi sebagai bentuk layanan, perpindahan ke paket gratis, atau situasi ketika Anda ingin menanggung selisih biaya.
Example: Prorated upgrade calculation
Example: Prorated upgrade calculation
Skenario: Pelanggan pada Basic (80/month) pada hari ke-16 dari cycle 30 hari menggunakan Perpanjangan berikutnya pada 15 Februari (16 Januari + 30 hari): $80.00/month.
prorated_immediately.Example: Downgrade credit calculation
Example: Downgrade credit calculation
Skenario: Pelanggan pada Pro (20/month) menggunakan Kredit $60 otomatis diterapkan pada perpanjangan mendatang:
difference_immediately.- Perpanjangan 1: 20 (kredit) = **40)
- Perpanjangan 2: 20 (kredit) = **20)
- Perpanjangan 3: 20 (kredit) = $0.00 (kredit habis)
- Perpanjangan 4: $20.00 (harga penuh)
Pelajari selengkapnya tentang pengelolaan kredit di Upgrade & Downgrade Guide.
Mengubah Paket dengan Add-on
Ubah add-on saat mengubah paket. Add-on disertakan dalam perhitungan proration:Perubahan paket memicu biaya langsung. Biaya yang gagal dapat mengubah status subscription menjadi
on_hold. Lacak perubahan melalui event webhook subscription.plan_changed.Melihat Pratinjau Perubahan Paket
Sebelum menerapkan perubahan paket, lihat pratinjau biaya dan subscription yang dihasilkan secara tepat:Preview Change Plan API
Lihat pratinjau perubahan paket sebelum menerapkannya.
Status Subscription
Subscription berpindah melalui serangkaian status yang ditentukan selama masa berlakunya. Tabel ini menjadi referensi untuk setiap status, penyebabnya, serta cara (atau apakah) status tersebut dapat dipulihkan.State Machine
Status On Hold
Subscription memasuki statuson_hold ketika:
- Payment perpanjangan gagal (saldo tidak mencukupi, kartu kedaluwarsa, dan sebagainya)
- Biaya perubahan paket gagal
- Otorisasi payment method gagal
Mengaktifkan Kembali dari On Hold
Untuk mengaktifkan kembali subscription dari statuson_hold, perbarui payment method. Tindakan ini secara otomatis:
- Membuat biaya untuk kewajiban yang tersisa
- Membuat invoice
- Memproses payment menggunakan payment method baru
- Mengaktifkan kembali subscription ke status
activesetelah payment berhasil
Setelah berhasil memperbarui payment method untuk subscription
on_hold, Anda akan menerima event webhook payment.succeeded yang diikuti subscription.active.Event Webhook berdasarkan Transisi
Setiap transisi menghasilkan webhook sehingga Anda dapat menjalankan logika entitlement tanpa polling:Subscription Webhook Payloads
Lihat schema payload lengkap untuk event siklus hidup subscription.
Manajemen API
Create subscriptions
Create subscriptions
Gunakan
POST /subscriptions untuk membuat subscription secara terprogram dari produk, dengan trial dan add-on opsional.API Reference
Lihat create subscription API.
Update subscriptions
Update subscriptions
Gunakan
PATCH /subscriptions/{id} untuk memperbarui jumlah, membatalkan pada tanggal billing berikutnya, atau mengubah metadata.API Reference
Pelajari cara memperbarui detail subscription.
Change plans (proration)
Change plans (proration)
Ubah produk aktif dan jumlah dengan kontrol proration.
API Reference
Tinjau opsi perubahan paket.
On‑demand charges
On‑demand charges
Untuk subscription on-demand, kenakan jumlah tertentu sesuai permintaan.
API Reference
Kenakan biaya subscription on-demand.
List and retrieve
List and retrieve
Gunakan
GET /subscriptions untuk mencantumkan semua subscription dan GET /subscriptions/{id} untuk mengambil satu subscription.API Reference
Jelajahi API listing dan retrieval.
Usage history
Usage history
Ambil usage yang tercatat untuk model pricing metered atau hybrid.
API Reference
Lihat usage history API.
Update payment method
Update payment method
Perbarui payment method untuk subscription. Untuk subscription aktif, tindakan ini memperbarui payment method untuk perpanjangan mendatang. Untuk subscription dalam status
on_hold, tindakan ini mengaktifkan kembali subscription dengan membuat biaya untuk kewajiban yang tersisa.Saat membuat link payment method baru (request type New), Anda dapat meneruskan allowed_payment_method_types untuk membatasi payment method yang dilihat pelanggan di halaman tersebut. Pelanggan tidak akan pernah melihat method yang tidak ada dalam daftar, meskipun menyertakan suatu method tidak menjamin method tersebut ditampilkan (ketersediaannya tetap bergantung pada faktor seperti lokasi pelanggan dan pengaturan bisnis Anda).API Reference
Pelajari cara memperbarui payment method dan mengaktifkan kembali subscription.
Kasus Penggunaan Umum
- SaaS dan API: Akses bertingkat dengan add-on untuk seat atau usage
- Konten dan media: Akses bulanan dengan trial pengenalan
- Paket dukungan B2B: Kontrak tahunan dengan add-on dukungan premium
- Tools dan plugin: License key dan rilis berversi
Contoh Integrasi
Checkout Sessions (subscriptions)
Saat membuat checkout sessions, sertakan produk subscription dan add-on opsional:Perubahan paket dengan proration
Upgrade atau downgrade subscription dan kontrol perilaku proration:Membatalkan pada tanggal billing berikutnya
Jadwalkan pembatalan yang berlaku pada akhir billing period saat ini:Memperpanjang periode subscription
Perpanjang durasi subscription dengan meneruskansubscription_period_count dan subscription_period_interval ke PATCH /subscriptions/{id}. Masa berlaku subscription dihitung ulang berdasarkan jumlah dan interval baru — misalnya, untuk memberikan waktu tambahan kepada pelanggan pada paket mereka saat ini:
Periode subscription hanya dapat ditambah, tidak dapat dipersingkat.
Subscription on-demand
Buat subscription on-demand dan kenakan biaya nanti sesuai kebutuhan:Memperbarui payment method untuk subscription aktif
Perbarui payment method untuk subscription aktif:Mengaktifkan kembali subscription dari on_hold
Aktifkan kembali subscription yang berstatus on hold karena payment gagal:Subscription dengan Mandat yang Mematuhi RBI
Subscription UPI dan kartu India beroperasi berdasarkan regulasi RBI (Reserve Bank of India) dengan persyaratan mandat tertentu:Batas Mandat
Jenis dan jumlah mandat bergantung pada biaya berulang subscription Anda:- Biaya di bawah batas minimum mandat (default ₹15,000): Kami membuat mandat on-demand untuk jumlah batas minimum tersebut. Jumlah subscription ditagihkan secara berkala sesuai frekuensi subscription, hingga batas mandat.
- Biaya pada atau di atas batas minimum mandat: Kami membuat subscription mandate (atau on-demand mandate) untuk jumlah subscription yang tepat.
mandate_min_amount_inr_paise (paise INR). Jumlah yang didaftarkan ke bank adalah max(mandate_floor, billing_amount) — sehingga batas minimum tersebut secara efektif menjadi batas otorisasi yang dilihat pelanggan ketika billing lebih rendah.
Untuk informasi terperinci tentang mandat yang mematuhi RBI dan batas minimum mandat yang dapat dikonfigurasi untuk payment method India, lihat halaman India Payment Methods.
Pertimbangan Upgrade dan Downgrade
Penting: Saat melakukan upgrade atau downgrade subscription, pertimbangkan batas mandat dengan cermat:- Jika upgrade/downgrade menghasilkan jumlah biaya yang melebihi Rs 15,000 dan melampaui batas payment on-demand yang ada, biaya transaksi dapat gagal.
- Dalam kasus tersebut, pelanggan mungkin perlu memperbarui payment method atau mengubah subscription lagi untuk membuat mandat baru dengan batas yang benar.
Otorisasi untuk Biaya Bernilai Tinggi
Untuk biaya subscription sebesar Rs 15,000 atau lebih:- Bank pelanggan akan meminta pelanggan mengotorisasi transaksi.
- Jika pelanggan gagal mengotorisasi transaksi, transaksi akan gagal dan subscription akan berstatus on hold.
Penundaan Pemrosesan 48 Jam
Timeline Pemrosesan: Biaya berulang pada kartu India dan subscription UPI mengikuti pola pemrosesan yang unik:- Biaya diinisiasi pada tanggal yang dijadwalkan sesuai frekuensi subscription Anda.
- Pemotongan aktual dari rekening pelanggan hanya terjadi setelah 48 jam sejak payment diinisiasi.
- Jendela 48 jam ini dapat bertambah hingga 2-3 jam tambahan, bergantung pada respons API bank.
Jendela Pembatalan Mandat
Selama jendela pemrosesan 48 jam:- Pelanggan dapat membatalkan mandat melalui aplikasi perbankan mereka.
- Jika pelanggan membatalkan mandat selama periode ini, subscription akan tetap active (ini adalah kasus khusus yang hanya berlaku untuk subscription Indian card dan UPI AutoPay).
- Namun, pemotongan aktual dapat gagal dan dalam kasus tersebut kami akan menempatkan subscription on hold.
- Menunda aktivasi benefit hingga payment dikonfirmasi
- Menerapkan grace period atau akses sementara
- Memantau status subscription untuk pembatalan mandat
- Menangani status subscription on hold dalam logika aplikasi
Praktik Terbaik
- Mulai dengan tier yang jelas: 2–3 paket dengan perbedaan yang mudah dipahami
- Komunikasikan harga: Tampilkan total, proration, dan perpanjangan berikutnya
- Gunakan trial secara bijak: Tingkatkan konversi melalui onboarding, bukan sekadar durasi
- Manfaatkan add-on: Buat paket dasar tetap sederhana dan tawarkan tambahan
- Uji perubahan: Validasi perubahan paket dan proration dalam test mode
Subscription adalah fondasi yang fleksibel untuk pendapatan berulang. Mulailah dengan sederhana, lakukan pengujian secara menyeluruh, lalu iterasikan berdasarkan metrik adopsi, churn, dan ekspansi.