Secara otomatis mengirimkan kunci lisensi, file yang dapat diunduh, dan akses ke platform seperti Discord, GitHub, Telegram, Framer, dan Notion saat pelanggan membayar.
Entitlements mengubah pembayaran yang berhasil atau langganan aktif menjadi akses nyata: kunci lisensi di kotak masuk pelanggan Anda, peran Discord, repositori GitHub, template Notion, tautan remix Framer, undangan obrolan Telegram, atau bundel file yang dapat diunduh. Dodo Payments menerbitkan, melacak, dan mencabut akses tersebut secara otomatis seiring perubahan siklus pembayaran.
The Entitlements dashboard. Each entitlement is a reusable template; the right pane shows individual customer grants.
Entitlement adalah definisi yang dapat digunakan kembali dari sesuatu yang Anda berikan kepada pelanggan: kunci lisensi Pro, peran Discord “Patrons”, akses ke repositori GitHub pribadi Anda, bundel e-book yang dapat diunduh. Anda melampirkan entitlements ke produk, dan Dodo Payments menangani sisanya.Ketika seorang pelanggan membeli produk, Dodo Payments membuat grant, penerbitan entitlement untuk satu pelanggan. Grant bergerak melalui beberapa status: pending saat pengiriman sedang berlangsung, delivered setelah pelanggan memiliki akses, failed jika pengiriman tidak dapat diselesaikan, dan revoked ketika akses dicabut.
Entitlements mengatur fulfillment (apakah pelanggan memiliki akses?). Kredit mengatur consumption (seberapa banyak yang dapat mereka gunakan?). Keduanya dapat dilampirkan ke produk yang sama. Lihat Credit-Based Billing untuk kredit.
Grant digerakkan oleh acara pembayaran dan langganan yang sama yang sudah Anda terima sebagai webhook. Anda tidak perlu memanggil grant API sendiri untuk pembelian. Dodo Payments membuat dan mencabut grant secara otomatis berdasarkan siklus pembayaran yang mendasarinya.
A grant dibuat ketika pembayaran selesai atau langganan menjadi aktif. Kunci lisensi langsung beralih ke delivered. Setiap integrasi lainnya dimulai di pending. Integrasi berbasis OAuth (Discord, GitHub, Notion) menyertakan oauth_url yang harus dikunjungi pelanggan untuk menyelesaikan persetujuan. Integrasi langsung dari platform (Telegram, Framer, File Digital) hanya sebentar berada di pending sambil menunggu pengiriman, kemudian beralih ke delivered.
2
Delivered
Setelah pengiriman selesai (kunci lisensi dihasilkan, peran diberikan, akses repositori diberikan, tautan file diselesaikan, OAuth selesai), grant bergerak ke delivered dan delivered_at ditetapkan.
3
Failed
Jika panggilan integrasi mengembalikan kesalahan yang tidak dapat diulang (token OAuth dicabut, izin ditolak, file tidak lagi ada), grant bergerak ke failed. Bidang error_code dan error_message menangkap alasannya.
4
Revoked
Ketika akses dicabut (langganan dibatalkan, pengembalian dana diberikan, atau pencabutan yang dimulai pedagang), grant bergerak ke revoked. Bidang revocation_reason mencatat pemicunya.
Keluarkan satu grant untuk setiap entitlement yang dilampirkan.
payment.succeeded (pembayaran yang terhubung langganan)
Tidak ada operasi. Grant digerakkan oleh acara langganan di bawah.
subscription.active
Keluarkan grant untuk setiap entitlements yang dilampirkan yang belum memiliki satu. Keluarkan kembali setiap grant yang sebelumnya dicabut untuk langganan yang sama.
subscription.renewed
Tidak ada operasi. Grant yang ada tetap ada saat perpanjangan.
subscription.on_hold
Cabut semua grant yang dikirimkan dan tertunda. revocation_reason: subscription_on_hold.
Cabut semua grant saat ini, kemudian keluarkan grant untuk entitlements rencana baru. revocation_reason: plan_changed.
refund.succeeded (pembayaran satu kali)
Cabut grant untuk pembayaran tersebut. revocation_reason: refund.
Manual API revoke
Cabut dengan revocation_reason: manual. Pencabutan manual tidak secara otomatis dikeluarkan ulang saat perpanjangan langganan.
License key disabled
Untuk grant dengan kunci lisensi, menonaktifkan kunci yang mendasari mencabut grant dengan revocation_reason: license_key_disabled. Grant secara otomatis diaktifkan kembali jika kunci diaktifkan ulang.
Platform drift detected
Jika sisi platform dari integrasi keluar dari sinkronisasi (peran Discord dihapus secara manual, Aplikasi GitHub kehilangan akses ke repositori, atau proses rekonsiliasi mendeteksi target yang hilang), grant dicabut dengan revocation_reason: platform_external. Tidak secara otomatis dikeluarkan ulang saat perpanjangan langganan hingga masalah platform yang mendasari diselesaikan.
Grant yang digerakkan oleh langganan adalah idempoten per (entitlement, customer, subscription); pembaruan dan reaktivasi tidak membuat grant duplikat. Grant satu kali adalah idempoten per (entitlement, customer, payment).
Pergi ke Entitlements di dasbor Dodo Payments Anda dan klik + untuk membuat entitlement baru.
2
Pick an integration
Pilih jenis integrasi: License Key, Digital Files, Discord, GitHub, Telegram, Framer, atau Notion. Untuk integrasi platform, hubungkan akun Anda terlebih dahulu jika Anda belum melakukannya.
3
Configure delivery
Isi kolom yang spesifik untuk integrasi. Misalnya, GitHub meminta repositori dan tingkat izin; Discord meminta server dan peran opsional; License Key meminta batas aktivasi dan kedaluwarsa.
Creating a GitHub entitlement. Each integration shows the fields it needs.
4
Save
Simpan entitlement. Sekarang Anda dapat melampirkannya ke produk apa pun.
Buka produk, perluas Advanced Settings → Entitlements & Credits, dan pilih entitlements yang harus dikirimkan saat produk dibeli. Satu produk dapat mengirimkan beberapa entitlements sekaligus. Misalnya, rencana Pro dapat mencakup kunci lisensi, akses GitHub, dan peran Discord.
Attaching entitlements to a product. Selected entitlements are delivered on every successful purchase or active subscription.
Pelanggan menerima email pengiriman setelah pembelian yang berisi kunci lisensi, tautan unduhan, tautan undangan OAuth, atau undangan platform, mana yang berlaku untuk entitlements pada produk. Rincian yang sama tetap tersedia tanpa batas dari Customer Portal di bawah riwayat pesanan mereka.
Akses pelanggan Discord, GitHub, dan Notion memerlukan pelanggan untuk mengotorisasi Dodo Payments untuk memberikan akses kepada mereka. Grant ini tetap dalam status pending sampai pelanggan menyelesaikan alur OAuth menggunakan tautan dari email mereka atau portal pelanggan. Setelah mereka mengotorisasi, grant bergerak ke delivered dan akses platform segera disediakan.
Grant yang dicabut dihapus di tingkat platform: peran Discord dihapus, kolaborator GitHub dihapus, kunci lisensi dinonaktifkan. Pelanggan melihat perubahan ini tercermin di portal pelanggan.
Untuk File Digital, pencabutan menghapus akses ke URL yang telah ditandatangani ke depan tetapi tidak membatalkan salinan yang sudah diunduh pelanggan. Rencanakan konten Anda dengan cara ini.
Buka salah satu entitlement dari dasbor untuk melihat grant-nya. Panel detail grant menunjukkan total grant, filter status, informasi pelanggan, tanggal pengiriman, dan tindakan pencabutan.Anda juga dapat mengelola grant secara programatis:
import DodoPayments from 'dodopayments';const client = new DodoPayments({ bearerToken: process.env['DODO_PAYMENTS_API_KEY'],});// List grants for an entitlementconst grants = await client.entitlements.grants.list('ent_abc123', { status: 'delivered',});// Revoke a single grantawait client.entitlements.grants.revoke('grant_xyz789', { path_id: 'ent_abc123',});
Dodo Payments memicu empat acara webhook untuk siklus hidup grant. Berlangganan ke acara-acara ini untuk menjaga aplikasi Anda tetap sinkron dengan apa yang dapat diakses setiap pelanggan.
Event
Dipicu ketika
entitlement_grant.created
Grant baru dibuat. Grant kunci lisensi tiba di delivered; setiap integrasi lainnya tiba di pending dan beralih ke delivered setelah panggilan platform berhasil (atau, untuk integrasi berbasis OAuth, setelah pelanggan mengotorisasi).
entitlement_grant.delivered
Grant beralih ke dikirim. Pelanggan sekarang memiliki akses.
entitlement_grant.failed
Grant tidak dapat dikirimkan. Periksa error_code dan error_message.
entitlement_grant.revoked
Akses telah dicabut. Periksa revocation_reason.
Entitlement Grant Webhook Payloads
Lihat skema payload lengkap, contoh acara, dan referensi revocation_reason.
Gunakan satu entitlement per saluran pengiriman. Jangan bagikan satu entitlements Discord di seluruh produk dengan maksud peran yang berbeda; buat satu per peran untuk pencabutan yang bersih.
Uji terlebih dahulu dalam mode uji. Buat entitlement, lampirkan ke produk uji, jalankan checkout, dan pantau transisi grant melalui pending → delivered. Konfirmasi bahwa pembatalan langganan uji mencabut grant.
Dengarkan entitlement_grant.delivered, bukan payment.succeeded. Pembayaran bisa berhasil sebelum penyelesaian selesai (terutama untuk alur OAuth). Tunggu acara dikirim sebelum membuka fitur yang bergantung pada sistem Anda sendiri.
Anggap entitlement_grant.failed sebagai tindakan yang bisa dilakukan. Grant yang gagal berarti pelanggan membayar tetapi tidak mendapatkan akses. Tampilkan ini ke tim dukungan Anda atau aktifkan regrant.
Petakan revocation_reason ke alur retensi Anda. Pencabutan subscription_on_hold dapat dipulihkan (pelanggan mungkin memperbarui kartu mereka). Pencabutan manual bersifat disengaja. Perlakukan mereka berbeda dalam komunikasi pelanggan.