Skip to main content
Entitlement feature flag mengubah Dodo Payments menjadi penyimpanan feature flag yang memahami penagihan. Lampirkan flag seperti advanced_reports ke produk, dan setiap pelanggan yang membayar akan mendapatkan grant yang diperiksa aplikasi Anda melalui API atau tetap disinkronkan dengan webhook. Tidak ada platform eksternal, langkah OAuth, atau langkah pengiriman: grant itu sendiri adalah kapabilitasnya.

Apa yang Dikirimkan

Tidak ada yang keluar dari Dodo Payments. Grant adalah deliverable-nya:
  • Saat pembelian, Dodo Payments membuat grant langsung di Delivered. Grant tidak pernah masuk ke Pending, tidak memerlukan tindakan pelanggan, dan tidak memiliki langkah pengiriman yang dapat gagal.
  • Grant membawa payload feature bertipe: { "feature_type": "boolean", "feature_id": "advanced_reports" }. Aplikasi Anda membaca feature_id untuk menentukan fitur yang akan dibuka.
  • Pembatalan, pengembalian dana, atau pencabutan manual memindahkan grant ke Revoked, dan flag tersebut menghilang dari grant yang dikirimkan kepada pelanggan.
Penggunaan umum termasuk pembatasan fitur berdasarkan rencana (Pro membuka analitik), kemampuan tambahan (peningkatan “akses API”), dan program akses awal yang dijual sebagai pembelian satu kali.
feature_id adalah identifier yang Anda pilih, dan tidak unik di antara entitlement. Dua entitlement dapat memberikan feature_id yang sama, misalnya paket Pro bulanan dan tahunan yang sama-sama memberikan advanced_reports.

Membuat Feature Flag

1

Open Entitlements

Di dashboard Dodo Payments, buka Entitlements dan klik + untuk memulai entitlement baru, lalu pilih Feature Flags.
2

Name the Flag

Masukkan Display Name untuk dashboard dan laporan Anda, serta Description agar tim Anda mengetahui fungsi flag tersebut. Feature ID adalah nilai yang diperiksa aplikasi Anda. Dashboard mengisinya berdasarkan nama tampilan (misalnya, “API access” menjadi api_access), dan Anda dapat mengeditnya. Nilai ini tidak boleh berisi spasi.
Form Fitur Bendera Baru dengan nama tampilan, ID fitur, deskripsi, dan entri kunci-nilai metadata

Creating a feature flag. The Feature ID is what your application checks; Meta Data attaches limits alongside the flag.

3

Add Metadata (Optional)

Aktifkan Meta Data untuk melampirkan konfigurasi key-value, seperti batas, nama tingkatan, atau kuota, yang diterima aplikasi Anda bersama flag. Klik Add Entry untuk setiap pasangan. Lihat Melampirkan batas dengan metadata.
4

Confirm

Klik Confirm. Bendera muncul di daftar hak Anda, siap dilampirkan ke produk.
Dasbor Entitlements menampilkan bendera fitur Advanced Reports dengan panel aktivitas haknya

The created feature flag. The right pane tracks every customer grant issued from it.

Melampirkan ke Produk

Buka produk atau buat produk baru, lalu cari kartu Entitlements. Klik + untuk melampirkan entitlement yang sudah ada, pilih feature flag Anda, lalu klik Done.
Panel lampiran Entitlements dengan bendera fitur Advanced Reports dipilih

Attaching the feature flag to a product. One product can deliver multiple entitlements.

Bendera yang dilampirkan ditampilkan pada formulir produk, dan pratinjau checkout mencantumkannya di bawah Includes.
Formulir produk dengan bendera fitur Advanced Reports dilampirkan di kartu Entitlements

The product now includes the feature flag. Every successful purchase or active subscription grants it.

Konfigurasi yang Diperlukan

Buat melalui API


Melampirkan Batas dengan Metadata

Flag boolean menjawab “Apakah pelanggan ini memiliki fitur tersebut?” Metadata menjawab “Dengan konfigurasi apa?” Metadata entitlement menerima nilai string, integer, number, dan boolean. Setiap grant mengambil snapshot beku dari metadata entitlement saat grant dibuat. Snapshot inilah yang membuat metadata aman digunakan untuk batas paket:
  • Mengedit metadata entitlement setelahnya hanya memengaruhi grant di masa mendatang. Pelanggan tetap menggunakan batas yang mereka beli.
  • Setiap grant mengembalikan snapshot-nya di field metadata, sehingga satu panggilan API memberi Anda flag beserta konfigurasinya.
Misalnya, flag advanced_reports dengan { "tier": "pro", "monthly_report_limit": 100 } memungkinkan aplikasi Anda membuka dashboard dan menerapkan kuota 100 laporan tanpa pencarian kedua. Jika kemudian Anda menaikkan batas menjadi 250, pelanggan yang sudah ada tetap memiliki batas 100 sampai mereka menerima grant baru, misalnya setelah perubahan paket.
Gunakan metadata untuk batas dan konfigurasi, dan gunakan feature_id hanya untuk identitas. Menyandikan batas dalam ID (advanced_reports_100) memaksa Anda membuat flag baru untuk setiap perubahan batas dan merusak pemeriksaan aplikasi Anda.

Memeriksa Fitur Pelanggan

Untuk membuat kumpulan fitur yang dimiliki pelanggan, tampilkan daftar grant feature flag yang dikirimkan kepada mereka. Endpoint ini mengembalikan satu baris per grant di seluruh entitlement, dan Anda dapat memfilternya berdasarkan integration_type dan status. Contoh-contoh ini menggunakan client dari Membuat melalui API.
Payload feature hanya diisi pada grant feature_flag. Payload ini bernilai null untuk setiap jenis integrasi lainnya. Lihat referensi API List Customer Grants untuk bentuk respons lengkap.
Memanggil API pada setiap request menambah latensi ke jalur utama Anda. Cache kumpulan fitur setiap pelanggan dengan TTL singkat (menit, bukan jam), dan invalidasi cache dari handler webhook Anda saat status grant berubah. Keduanya menjaga pemeriksaan tetap cepat dan membuat pencabutan berlaku pada request berikutnya.

Siklus hidup

Grant feature flag mengikuti siklus hidup grant standar dengan satu penyederhanaan: tidak ada langkah pengiriman, sehingga grant tidak pernah berada di Pending dan tidak pernah berpindah ke Failed. Grant bersifat idempoten per entitlement dan pelanggan. Selama pelanggan memiliki grant yang tidak dicabut untuk suatu flag, pembelian berulang dan perpanjangan tidak membuat duplikat.

Webhooks

Untuk mencerminkan flag ke database Anda sendiri alih-alih melakukan polling, berlangganan ke event entitlement_grant.*:
  • entitlement_grant.created tiba dalam keadaan sudah Delivered, dengan payload feature. Aktifkan fitur tersebut.
  • entitlement_grant.delivered dipicu saat grant yang sebelumnya dicabut dipulihkan. Aktifkan kembali fitur tersebut.
  • entitlement_grant.revoked berarti akses telah ditarik. Nonaktifkan fitur tersebut, dan periksa revocation_reason untuk menentukan pesan Anda.
Handler Express ini memverifikasi signature webhook dengan SDK, lalu menyimpan status flag:
TypeScript
Feature flag tidak pernah memicu entitlement_grant.failed, karena pengiriman berlangsung sepenuhnya di dalam Dodo Payments.

Contoh: Paket Pro Membuka Laporan Lanjutan

  1. Buat flag. Tetapkan feature_id: advanced_reports dengan metadata { "tier": "pro", "monthly_report_limit": 100 }.
  2. Lampirkan flag tersebut ke produk subscription Pro Plan Anda.
  3. Pelanggan berlangganan. Dodo Payments membuat grant Delivered dan memicu entitlement_grant.created. Handler webhook Anda mengaktifkan advanced_reports untuk pelanggan dengan batas 100.
  4. Aplikasi Anda membatasi fitur tersebut. Saat dashboard dimuat, periksa kumpulan fitur yang di-cache (atau panggil listEntitlementGrants) dan tampilkan tab laporan hanya ketika advanced_reports tersedia.
  5. Pelanggan membatalkan subscription. Dodo Payments mencabut grant dan memicu entitlement_grant.revoked, lalu handler Anda menonaktifkan fitur tersebut. Jika subscription kemudian pulih melalui dunning, entitlement_grant.delivered memulihkan fitur tanpa perubahan kode.

Praktik Terbaik

  • Gunakan ID fitur yang stabil di snake_case. Kode aplikasi Anda memeriksa string ini, sehingga mengganti namanya merupakan perubahan yang merusak di kedua sisi.
  • Gunakan satu flag per kapabilitas. Pilih advanced_reports dan api_access sebagai dua entitlement daripada satu pro_bundle, agar pencabutan dan kombinasi paket tetap rapi.
  • Dorong status dari webhook, lalu verifikasi dengan API. Webhook menjaga database Anda tetap terkini. Endpoint daftar merupakan sumber kebenaran untuk pekerjaan rekonsiliasi dan cache miss.
  • Perlakukan Revoked sebagai tindakan segera. Flag yang dicabut berarti pelanggan tidak lagi membayar fitur tersebut. Terapkan pembatasan pada request berikutnya, bukan sesi berikutnya.
  • Tempatkan batas di metadata, bukan di kode. Mengubah kuota kemudian hanya memerlukan pengeditan entitlement. Pelanggan baru mendapatkan nilai baru, dan grant yang sudah ada tetap menyimpan snapshot yang mereka beli.
Terakhir diubah pada 26 September 2026