Kirim license keys, file yang dapat diunduh, feature flags, serta akses ke Discord, GitHub, Telegram, Framer, dan Notion secara otomatis saat pelanggan membayar.
Entitlement mengubah pembayaran yang berhasil atau subscription aktif menjadi akses: license key di inbox pelanggan, feature flag yang diperiksa oleh aplikasi Anda, role Discord, repository GitHub, template Notion, link remix Framer, undangan chat Telegram, atau kumpulan file yang dapat diunduh. Dodo Payments menerbitkan, melacak, dan mencabut akses tersebut secara otomatis saat lifecycle pembayaran berubah.
The Entitlements dashboard. Each entitlement is a reusable template; the right pane shows individual customer grants.
Apa Itu Entitlement?
Entitlement adalah definisi yang dapat digunakan kembali untuk sesuatu yang Anda berikan kepada pelanggan, seperti license key Pro, role Discord “Patrons”, akses ke repository GitHub privat, atau kumpulan e-book yang dapat diunduh. Anda mengaitkan entitlement ke produk, lalu Dodo Payments mengirimkannya saat pelanggan membayar.Saat pelanggan membeli produk, Dodo Payments membuat grant: penerbitan entitlement tersebut untuk satu pelanggan. Grant memiliki salah satu dari empat status: Pending saat delivery sedang berlangsung, Delivered setelah pelanggan mendapatkan akses, Failed jika delivery tidak dapat diselesaikan, dan Revoked saat akses dicabut.
Entitlement mengatur fulfillment (apakah pelanggan memiliki akses?). Credits mengatur consumption (berapa banyak yang dapat mereka gunakan?). Anda dapat mengaitkan keduanya ke produk yang sama. Lihat Credit-Based Billing untuk credits.
Available Integrations
Setiap entitlement dikirim melalui satu integration. Pilih integration yang sesuai dengan apa yang Anda jual.
License Keys
Generate unique license keys with activation limits and expiry. Best for software, plugins, and CLIs.
Digital Files
Kirim file yang dapat diunduh, seperti e-book, template, dan media, dengan URL download yang telah ditandatangani serta instruksi opsional.
Feature Flags
Batasi feature di aplikasi Anda sendiri berdasarkan pembelian. Dikirim saat pembuatan, diperiksa melalui API, dan dicabut saat pembatalan.
Discord
Berikan role kepada pelanggan di server Discord Anda saat mereka membeli. Role tersebut dihapus secara otomatis saat pembatalan.
GitHub
Add customers as collaborators to a private repository at the permission level you choose.
Telegram
Add customers to a private Telegram chat or channel after purchase.
Framer
Unlock a Framer template remix link for paying customers.
Notion
Duplicate a Notion template into the customer’s workspace on purchase.
How Grants Work
Grant mengikuti event pembayaran dan subscription yang sama dengan yang Anda terima sebagai webhook. Dodo Payments membuat dan mencabut grant untuk pembelian secara otomatis berdasarkan lifecycle pembayaran, sehingga Anda tidak perlu memanggil grant API sendiri.
Grant Lifecycle
Grant berpindah melalui status berikut:
1
Created
Dodo Payments membuat grant saat pembayaran selesai atau subscription menjadi aktif. Grant feature flag dimulai sebagai Delivered. Grant license key juga dimulai sebagai Delivered saat entitlement menggunakan fulfillment_mode: auto (default). Dalam fulfillment_mode: manual, grant dimulai sebagai Pending tanpa key sampai Anda memberikannya melalui Fulfill License Key Grant. Setiap integration lainnya dimulai sebagai Pending.Integration berbasis OAuth (Discord, GitHub, Notion) menyediakan oauth_url yang dikunjungi pelanggan untuk memberikan persetujuan. Dodo Payments mencoba membuat URL ini saat membuat grant. Jika gagal, field tetap null sampai pelanggan memulai accept flow dari email delivery atau Customer Portal. Integration platform-direct (Telegram, Framer, Digital Files) tetap Pending hanya selama delivery disiapkan, lalu berpindah ke Delivered.
2
Delivered
Saat delivery selesai, grant berpindah ke Delivered dan delivered_at ditetapkan. Delivery selesai saat license key dibuat, role ditetapkan, akses repository diberikan, link file ditemukan, atau OAuth flow selesai.
3
Failed
Jika pemanggilan integration menghasilkan error yang tidak dapat dicoba ulang, seperti token OAuth yang dicabut, izin yang ditolak, atau file yang sudah tidak ada, grant berpindah ke Failed. Field error_code dan error_message mencatat alasannya.
4
Revoked
Saat akses dicabut, misalnya karena subscription dibatalkan, refund diterbitkan, atau Anda mencabut grant, grant berpindah ke Revoked. Field revocation_reason mencatat pemicunya.
Perilaku Grant Berdasarkan Event
Setiap event pembayaran dan subscription mengubah grant sebagai berikut:
Event
Perilaku
payment.succeeded (pembayaran satu kali)
Menerbitkan satu grant untuk setiap entitlement yang dikaitkan. Entitlement License Key menerbitkan satu grant untuk setiap key.
Tidak ada perubahan. Event subscription di bawah ini mengatur grant tersebut.
subscription.active
Menerbitkan grant untuk setiap entitlement terkait yang belum memilikinya, serta menerbitkan kembali grant yang sebelumnya dicabut untuk subscription yang sama. Grant yang dicabut dengan manual, refund, atau platform_external tidak diterbitkan kembali.
subscription.renewed
Tidak ada perubahan. Grant yang ada tetap bertahan selama renewal.
subscription.past_due
Tidak ada perubahan. Grant tetap terkirim selama grace period.
subscription.on_hold
Mencabut semua grant yang telah dikirim dan yang masih tertunda dengan revocation_reason: subscription_on_hold.
subscription.paused
Mencabut semua grant yang telah dikirim dan yang masih tertunda dengan revocation_reason: SubscriptionPaused. Tidak seperti alasan subscription lainnya, nilai ini menggunakan PascalCase, jadi cocokkan persis.
subscription.unpaused
Menerbitkan kembali grant yang sebelumnya dicabut untuk subscription yang sama, dengan cara yang sama seperti subscription.active.
subscription.cancelled
Mencabut semua grant dengan revocation_reason: subscription_cancelled.
subscription.expired
Mencabut semua grant dengan revocation_reason: subscription_expired.
subscription.plan_changed
Mencabut semua grant saat ini dengan revocation_reason: plan_changed, lalu menerbitkan grant untuk entitlement pada plan baru.
refund.succeeded (pembayaran satu kali)
Mencabut grant untuk pembayaran tersebut dengan revocation_reason: refund.
Pencabutan API manual
Mencabut grant dengan revocation_reason: manual. Pencabutan manual tidak diterbitkan kembali secara otomatis saat subscription diperbarui.
License key dinonaktifkan
Untuk grant license key, menonaktifkan key yang mendasarinya mencabut grant dengan revocation_reason: license_key_disabled. Mengaktifkan kembali key akan memulihkan grant secara otomatis.
Drift platform terdeteksi
Jika sisi platform dari suatu integration tidak lagi sinkron, misalnya role Discord dihapus secara manual, GitHub App kehilangan akses repository, atau proses rekonsiliasi menemukan target yang hilang, Dodo Payments mencabut grant dengan revocation_reason: platform_external. Grant tidak diterbitkan kembali secara otomatis saat subscription diperbarui sampai masalah platform diselesaikan.
Grant yang digerakkan oleh subscription bersifat idempotent berdasarkan (entitlement, customer, subscription), sehingga renewal dan reaktivasi tidak membuat grant duplikat. Grant satu kali bersifat idempotent berdasarkan (entitlement, customer, payment).
Buat Entitlement Pertama Anda
1
Open Entitlements
Buka Entitlements di dashboard lalu klik + untuk membuat entitlement.
2
Pick an Integration
Pilih jenis integration: License Key, Digital Files, Feature Flag, Discord, GitHub, Telegram, Figma, Framer, atau Notion. Untuk integration platform, hubungkan akun Anda terlebih dahulu jika belum melakukannya.
3
Configure Delivery
Isi field untuk integration tersebut. Misalnya, GitHub meminta repository dan tingkat izin, Discord meminta server dan role opsional, sedangkan License Key meminta batas aktivasi dan durasi license.
Creating a GitHub entitlement. Each integration shows the fields it needs.
4
Save
Klik Create Entitlement. Sekarang Anda dapat mengaitkan entitlement ke produk apa pun.
Kaitkan Entitlement ke Produk
Buka produk, masuk ke bagian Entitlements, lalu pilih entitlement yang akan dikirim saat produk dibeli. Satu produk dapat mengirim beberapa entitlement sekaligus. Misalnya, plan Pro dapat mencakup license key, akses GitHub, dan role Discord.
Attaching entitlements to a product. Selected entitlements are delivered on every successful purchase or active subscription.
Pengalaman Pelanggan
Email dan Customer Portal
Setelah pembelian, pelanggan menerima email delivery berisi license key, link download, link undangan OAuth, atau undangan platform yang berlaku untuk entitlement pada produk. Detail yang sama tetap tersedia di Customer Portal, di bagian riwayat pesanan mereka, selama grant masih aktif.
Delivery Berbasis OAuth
Akses subscriber Discord, GitHub, dan Notion mengharuskan pelanggan mengotorisasi Dodo Payments untuk memberikan akses tersebut. Grant ini tetap Pending sampai pelanggan menyelesaikan OAuth flow dari link di email atau Customer Portal. Setelah pelanggan memberikan otorisasi, grant berpindah ke Delivered dan Dodo Payments menyediakan akses platform.
Pencabutan
Saat grant dicabut, Dodo Payments menghapus akses di platform: menghapus role Discord, menghapus collaborator GitHub, atau menonaktifkan license key. Pelanggan melihat perubahan tersebut di Customer Portal.
Untuk Digital Files, pencabutan menghentikan URL download baru yang telah ditandatangani, tetapi tidak membatalkan salinan yang sudah diunduh pelanggan. Rencanakan pembatasan konten Anda dengan mempertimbangkan hal ini.
Kelola Grant
Buka entitlement apa pun dari dashboard untuk melihat grant-nya. Panel detail menampilkan jumlah total yang diberikan, filter status, dan satu baris untuk setiap grant berisi pelanggan, tanggal akses, status, serta tindakan Revoke.Untuk mengelola grant secara programatis, buat daftar grant dengan filter status dan cabut satu grant berdasarkan ID:
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('entg_xyz789', { id: 'ent_abc123',});
Buat entitlement dengan jenis integration apa pun.
List Entitlements
Buat daftar entitlement yang difilter berdasarkan jenis integration.
Get Entitlement
Ambil entitlement beserta konfigurasi yang telah diselesaikan.
Update Entitlement
Perbarui nama, deskripsi, atau konfigurasi integration.
Delete Entitlement
Hapus entitlement secara soft-delete. Grant yang ada tidak dicabut, tetapi Dodo Payments tidak lagi mengelolanya.
Upload File
Unggah file berukuran hingga 500 MiB ke entitlement Digital Files.
List Grants
Buat daftar grant entitlement yang difilter berdasarkan status dan pelanggan.
Revoke Grant
Cabut satu grant secara manual.
Webhook
Dodo Payments mengirim empat event webhook untuk lifecycle grant. Subscribe ke event tersebut agar aplikasi Anda tetap sinkron dengan hal yang dapat diakses setiap pelanggan.
Event
Terjadi saat
entitlement_grant.created
Grant dibuat. Grant license key yang dipenuhi otomatis dan grant feature flag tiba dalam status Delivered. Grant license key yang dipenuhi secara manual dan setiap integration lainnya tiba dalam status Pending, lalu berpindah ke Delivered setelah pemanggilan platform berhasil atau, untuk integration berbasis OAuth, setelah pelanggan memberikan otorisasi.
entitlement_grant.delivered
Grant yang ada berpindah ke Delivered, sehingga pelanggan kini memiliki akses. Grant yang berstatus Delivered saat dibuat hanya memicu created.
entitlement_grant.failed
Grant tidak dapat dikirim. Periksa error_code dan error_message.
entitlement_grant.revoked
Akses telah dicabut. Periksa revocation_reason.
Entitlement Grant Webhook Payloads
Lihat schema payload lengkap, contoh event, dan referensi revocation_reason.
Praktik Terbaik
Gunakan satu entitlement untuk setiap channel delivery. Jangan gunakan satu entitlement Discord bersama beberapa produk dengan tujuan role yang berbeda. Buat satu entitlement untuk setiap role agar pencabutan tetap rapi.
Uji terlebih dahulu dalam test mode. Buat entitlement, kaitkan ke produk pengujian, lakukan checkout, lalu amati grant berpindah dari Pending ke Delivered. Kemudian batalkan subscription pengujian dan pastikan grant dicabut.
Dengarkan entitlement_grant.delivered, bukan payment.succeeded. Pembayaran dapat berhasil sebelum fulfillment selesai, terutama untuk OAuth flow. Tunggu hingga grant mencapai Delivered sebelum membuka feature yang bergantung padanya di sistem Anda sendiri. Grant yang dikirim saat pembuatan, seperti license key yang dipenuhi otomatis atau feature flag, tiba sebagai entitlement_grant.created dengan status: "Delivered".
Anggap entitlement_grant.failed sebagai tindakan yang perlu ditangani. Grant yang gagal berarti pelanggan sudah membayar tetapi belum mendapatkan akses. Tampilkan grant ini kepada tim support Anda atau picu penerbitan ulang grant.
Petakan revocation_reason ke flow retensi Anda. Pencabutan subscription_on_hold dapat dipulihkan karena pelanggan mungkin memperbarui kartunya. Pencabutan manual disengaja. Perlakukan keduanya secara berbeda dalam pesan kepada pelanggan.
Jangan cabut akses pada subscription.past_due. Event tersebut membuka grace period, dan pelanggan tetap memiliki akses sampai periode tersebut berakhir. Tunggu subscription.on_hold atau subscription.cancelled.
Terakhir diubah pada 26 September 2026
Apakah halaman ini membantu?
⌘I
{"docsConfig":{"theme":"maple","$schema":"https://mintlify.com/docs.json","name":"Dodo Payments Documentation","description":"Documentation for Dodo Payments — the all-in-one payments, billing, and merchant of record platform for SaaS, AI, and digital products.","colors":{"primary":"#779812","light":"#C6FE1E","dark":"#166534"},"logo":{"light":"https://mintcdn.com/dodopayments/nM_mJfYkri-OpC5M/logo/light.svg?fit=max\u0026auto=format\u0026n=nM_mJfYkri-OpC5M\u0026q=85\u0026s=23f7a052f7ecb9d6570b7c95ee359a97","dark":"https://mintcdn.com/dodopayments/nM_mJfYkri-OpC5M/logo/dark.svg?fit=max\u0026auto=format\u0026n=nM_mJfYkri-OpC5M\u0026q=85\u0026s=cd6c20238a54526436f21c43fee51b26"},"favicon":"https://mintcdn.com/dodopayments/doYQc9oUE-WNz0cs/favicon.svg?fit=max\u0026auto=format\u0026n=doYQc9oUE-WNz0cs\u0026q=85\u0026s=271c6cc8ce7d6bf4d7f2b9cca029e004","background":{"color":{"light":"#FFFFFF","dark":"#0D0D0D"}},"navbar":{"links":[{"icon":"link","href":"https://docs.dodopayments.com/llms-full.txt","label":"llms-full.txt"},{"icon":"discord","href":"https://discord.gg/bYqAp4ayYh","label":"Community"},{"icon":"house","href":"https://app.dodopayments.com/","label":"Dashboard"}]},"footer":{"socials":{"x":"https://x.com/dodopayments","linkedin":"https://linkedin.com/company/dodopayments","website":"https://dodopayments.com","discord":"https://discord.gg/bYqAp4ayYh","github":"https://github.com/dodopayments","instagram":"https://www.instagram.com/dodo.payments","facebook":"https://www.facebook.com/profile.php?id=61565515607280"}},"seo":{"metatags":{"og:site_name":"Dodo Payments Documentation","twitter:card":"summary_large_image"},"indexing":"navigable"},"fonts":{"heading":{"family":"ApfelGrotezk","weight":400,"source":"fonts/ApfelGrotezk-Regular.woff2","format":"woff2"},"body":{"family":"Inter","weight":400,"source":"fonts/Inter-Variable.woff2","format":"woff2"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","cursor"],"display":"header"},"metadata":{"timestamp":true},"styling":{"latex":true},"navigation":{"languages":[{"language":"en","href":"introduction"},{"language":"es","href":"es/introduction"},{"language":"ar","href":"ar/introduction"},{"language":"fr","href":"fr/introduction"},{"language":"de","href":"de/introduction"},{"language":"id","href":"id/introduction"},{"language":"ja","href":"ja/introduction"},{"language":"ko","href":"ko/introduction"},{"language":"pt-BR","href":"pt-BR/introduction"},{"language":"vi","href":"vi/introduction"},{"language":"cn","href":"cn/introduction"},{"language":"hi","href":"hi/introduction"},{"language":"it","href":"it/introduction"},{"language":"sv","href":"sv/introduction"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"dodopayments","hasAudioNarration":false,"actualSubdomain":"dodopayments","customDomains":["docs.dodopayments.com"],"gitSource":{"type":"github","owner":"dodopayments","repo":"dodo-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true,"edits":false,"issues":false},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af61516aad23a11c9aa58ca","clientVersion":"0.0.4128","searchFilterCounts":[{"language":"en","tag":"API Reference","count":181},{"language":"en","tag":"Docs","count":178},{"language":"ar","tag":"Docs","count":153},{"language":"cn","tag":"Docs","count":153},{"language":"de","tag":"Docs","count":153},{"language":"es","tag":"Docs","count":153},{"language":"fr","tag":"Docs","count":153},{"language":"hi","tag":"Docs","count":153},{"language":"id","tag":"Docs","count":153},{"language":"it","tag":"Docs","count":153},{"language":"ja","tag":"Docs","count":153},{"language":"ko","tag":"Docs","count":153},{"language":"pt-BR","tag":"Docs","count":153},{"language":"sv","tag":"Docs","count":153},{"language":"vi","tag":"Docs","count":153},{"language":"ar","tag":"API Reference","count":151},{"language":"cn","tag":"API Reference","count":151},{"language":"de","tag":"API Reference","count":151},{"language":"es","tag":"API Reference","count":151},{"language":"fr","tag":"API Reference","count":151},{"language":"hi","tag":"API Reference","count":151},{"language":"id","tag":"API Reference","count":151},{"language":"it","tag":"API Reference","count":151},{"language":"ja","tag":"API Reference","count":151},{"language":"ko","tag":"API Reference","count":151},{"language":"pt-BR","tag":"API Reference","count":151},{"language":"sv","tag":"API Reference","count":151},{"language":"vi","tag":"API Reference","count":151},{"language":"en","tag":"Features","count":87},{"language":"ar","tag":"Features","count":81},{"language":"cn","tag":"Features","count":81},{"language":"de","tag":"Features","count":81},{"language":"es","tag":"Features","count":81},{"language":"fr","tag":"Features","count":81},{"language":"hi","tag":"Features","count":81},{"language":"id","tag":"Features","count":81},{"language":"it","tag":"Features","count":81},{"language":"ja","tag":"Features","count":81},{"language":"ko","tag":"Features","count":81},{"language":"pt-BR","tag":"Features","count":81},{"language":"sv","tag":"Features","count":81},{"language":"vi","tag":"Features","count":81},{"language":"en","tag":"Integrate","count":75},{"language":"en","tag":"Changelog","count":66},{"language":"ar","tag":"Changelog","count":65},{"language":"cn","tag":"Changelog","count":65},{"language":"de","tag":"Changelog","count":65},{"language":"es","tag":"Changelog","count":65},{"language":"fr","tag":"Changelog","count":65},{"language":"hi","tag":"Changelog","count":65},{"language":"id","tag":"Changelog","count":65},{"language":"it","tag":"Changelog","count":65},{"language":"ja","tag":"Changelog","count":65},{"language":"ko","tag":"Changelog","count":65},{"language":"pt-BR","tag":"Changelog","count":65},{"language":"sv","tag":"Changelog","count":65},{"language":"vi","tag":"Changelog","count":65},{"language":"ar","tag":"Integrate","count":59},{"language":"cn","tag":"Integrate","count":59},{"language":"de","tag":"Integrate","count":59},{"language":"es","tag":"Integrate","count":59},{"language":"fr","tag":"Integrate","count":59},{"language":"hi","tag":"Integrate","count":59},{"language":"id","tag":"Integrate","count":59},{"language":"it","tag":"Integrate","count":59},{"language":"ja","tag":"Integrate","count":59},{"language":"ko","tag":"Integrate","count":59},{"language":"pt-BR","tag":"Integrate","count":59},{"language":"sv","tag":"Integrate","count":59},{"language":"vi","tag":"Integrate","count":59},{"language":"en","tag":"External Integrations","count":33},{"language":"ar","tag":"External Integrations","count":30},{"language":"cn","tag":"External Integrations","count":30},{"language":"de","tag":"External Integrations","count":30},{"language":"es","tag":"External Integrations","count":30},{"language":"fr","tag":"External Integrations","count":30},{"language":"hi","tag":"External Integrations","count":30},{"language":"id","tag":"External Integrations","count":30},{"language":"it","tag":"External Integrations","count":30},{"language":"ja","tag":"External Integrations","count":30},{"language":"ko","tag":"External Integrations","count":30},{"language":"pt-BR","tag":"External Integrations","count":30},{"language":"sv","tag":"External Integrations","count":30},{"language":"vi","tag":"External Integrations","count":30},{"language":"en","tag":"Webhooks","count":24},{"language":"ar","tag":"Webhooks","count":23},{"language":"cn","tag":"Webhooks","count":23},{"language":"de","tag":"Webhooks","count":23},{"language":"es","tag":"Webhooks","count":23},{"language":"fr","tag":"Webhooks","count":23},{"language":"hi","tag":"Webhooks","count":23},{"language":"id","tag":"Webhooks","count":23},{"language":"it","tag":"Webhooks","count":23},{"language":"ja","tag":"Webhooks","count":23},{"language":"ko","tag":"Webhooks","count":23},{"language":"pt-BR","tag":"Webhooks","count":23},{"language":"sv","tag":"Webhooks","count":23},{"language":"vi","tag":"Webhooks","count":23},{"language":"en","tag":"Guides","count":22},{"language":"ar","tag":"Guides","count":22},{"language":"cn","tag":"Guides","count":22},{"language":"de","tag":"Guides","count":22},{"language":"es","tag":"Guides","count":22},{"language":"fr","tag":"Guides","count":22},{"language":"hi","tag":"Guides","count":22},{"language":"id","tag":"Guides","count":22},{"language":"it","tag":"Guides","count":22},{"language":"ja","tag":"Guides","count":22},{"language":"ko","tag":"Guides","count":22},{"language":"pt-BR","tag":"Guides","count":22},{"language":"sv","tag":"Guides","count":22},{"language":"vi","tag":"Guides","count":22},{"language":"en","tag":"Entitlements","count":20},{"language":"ar","tag":"Entitlements","count":20},{"language":"cn","tag":"Entitlements","count":20},{"language":"de","tag":"Entitlements","count":20},{"language":"es","tag":"Entitlements","count":20},{"language":"fr","tag":"Entitlements","count":20},{"language":"hi","tag":"Entitlements","count":20},{"language":"id","tag":"Entitlements","count":20},{"language":"it","tag":"Entitlements","count":20},{"language":"ja","tag":"Entitlements","count":20},{"language":"ko","tag":"Entitlements","count":20},{"language":"pt-BR","tag":"Entitlements","count":20},{"language":"sv","tag":"Entitlements","count":20},{"language":"vi","tag":"Entitlements","count":20},{"language":"en","tag":"Invoices","count":17},{"language":"ar","tag":"Customers","count":16},{"language":"cn","tag":"Customers","count":16},{"language":"de","tag":"Customers","count":16},{"language":"es","tag":"Customers","count":16},{"language":"fr","tag":"Customers","count":16},{"language":"hi","tag":"Customers","count":16},{"language":"id","tag":"Customers","count":16},{"language":"it","tag":"Customers","count":16},{"language":"ja","tag":"Customers","count":16},{"language":"ko","tag":"Customers","count":16},{"language":"pt-BR","tag":"Customers","count":16},{"language":"sv","tag":"Customers","count":16},{"language":"vi","tag":"Customers","count":16}]},"assistantConfig":{"deflection":{"enabled":false,"email":"support@dodopayments.com","showHelpButton":true}},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"styles.css","content":"#content-area{max-width:60rem}h1,h2,h3,h4,h5,h6{letter-spacing:0.05em!important}.welcome-page .card-group{margin:3rem auto 8rem;max-width:70rem;padding-left:1.25rem;padding-right:1.25rem}.welcome-page .card-group .card{padding:1rem}.welcome-hero{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:20vh;text-align:center;margin-top:3rem;margin-bottom:2.5rem}.welcome-hero h1{font-size:2.5rem;font-weight:700;margin-bottom:1rem;line-height:1.2;color:#fff}.welcome-hero p{font-size:1.25rem;max-width:600px;margin:0 auto}.welcome-hero h1{color:rgb(41 42 37 / 1)}.dark .welcome-hero h1{color:rgb(255 255 255 / 1)}.welcome-hero p{color:rgb(83 85 79 / 1)}.dark .welcome-hero p{color:rgb(162 164 158 / 1)}"}],"page":{"pagePath":"id/features/entitlements/introduction","slug":"/id/features/entitlements/introduction","pageMetadata":{"title":"Introduction","sidebarTitle":"Introduction","description":"Kirim license keys, file yang dapat diunduh, feature flags, serta akses ke Discord, GitHub, Telegram, Framer, dan Notion secara otomatis saat pelanggan membayar.","icon":"box-archive","keywords":["Dodo Payments","entitlements","fulfillment","license keys","digital delivery","platform access"],"href":"/id/features/entitlements/introduction"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Kirim license keys, file yang dapat diunduh, feature flags, serta akses ke Discord, GitHub, Telegram, Framer, dan Notion secara otomatis saat pelanggan membayar.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,hr:`hr`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Card,CardGroup,CodeBlock,CodeGroup,Frame,Heading,Info,Note,OptimizedImage,Step,Steps,Table,Tip,Warning}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!CodeGroup)_missingMdxReference(`CodeGroup`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Info,{children:_jsx(_components.p,{children:`Entitlement mengubah pembayaran yang berhasil atau subscription aktif menjadi akses: license key di inbox pelanggan, feature flag yang diperiksa oleh aplikasi Anda, role Discord, repository GitHub, template Notion, link remix Framer, undangan chat Telegram, atau kumpulan file yang dapat diunduh. Dodo Payments menerbitkan, melacak, dan mencabut akses tersebut secara otomatis saat lifecycle pembayaran berubah.`})}),`\n`,_jsx(Frame,{caption:`The Entitlements dashboard. Each entitlement is a reusable template; the right pane shows individual customer grants.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/list.png?fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=12a326205f64d1e71485bce46114d296`,alt:`Entitlements dashboard with a list of entitlements on the left and grant activity on the right`,style:{maxHeight:`500px`,width:`auto`},\"data-og-width\":`2000`,width:`2000`,\"data-og-height\":`1195`,height:`1195`,\"data-path\":`images/entitlements/list.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/list.png?w=280\u0026fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=d12b37e6f3daedbb84e544d08513207e 280w, https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/list.png?w=560\u0026fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=70afcf57fcdd38039179d3054a5eb73f 560w, https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/list.png?w=840\u0026fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=b1cb6ba70f564db87c9bd19f50b21f44 840w, https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/list.png?w=1100\u0026fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=463a9ba560357d16a43e39c23ea5a042 1100w, https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/list.png?w=1650\u0026fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=8b695099d64c9bc75bef9fa1bef28541 1650w, https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/list.png?w=2500\u0026fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=9e86c8dff013279ce9c94de2b5d48338 2500w`})}),`\n`,_jsx(Heading,{level:`2`,id:`apa-itu-entitlement`,children:`Apa Itu Entitlement?`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Entitlement`}),` adalah definisi yang dapat digunakan kembali untuk sesuatu yang Anda berikan kepada pelanggan, seperti license key Pro, role Discord “Patrons”, akses ke repository GitHub privat, atau kumpulan e-book yang dapat diunduh. Anda mengaitkan entitlement ke produk, lalu Dodo Payments mengirimkannya saat pelanggan membayar.`]}),`\n`,_jsxs(_components.p,{children:[`Saat pelanggan membeli produk, Dodo Payments membuat `,_jsx(_components.strong,{children:`grant`}),`: penerbitan entitlement tersebut untuk satu pelanggan. Grant memiliki salah satu dari empat status: `,_jsx(_components.code,{children:`Pending`}),` saat delivery sedang berlangsung, `,_jsx(_components.code,{children:`Delivered`}),` setelah pelanggan mendapatkan akses, `,_jsx(_components.code,{children:`Failed`}),` jika delivery tidak dapat diselesaikan, dan `,_jsx(_components.code,{children:`Revoked`}),` saat akses dicabut.`]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`Entitlement mengatur `,_jsx(_components.strong,{children:`fulfillment`}),` (apakah pelanggan memiliki akses?). Credits mengatur `,_jsx(_components.strong,{children:`consumption`}),` (berapa banyak yang dapat mereka gunakan?). Anda dapat mengaitkan keduanya ke produk yang sama. Lihat `,_jsx(_components.a,{href:`/features/credit-based-billing`,children:`Credit-Based Billing`}),` untuk credits.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`available-integrations`,children:`Available Integrations`}),`\n`,_jsx(_components.p,{children:`Setiap entitlement dikirim melalui satu integration. Pilih integration yang sesuai dengan apa yang Anda jual.`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`License Keys`,icon:`key`,href:`/features/license-keys`,children:_jsx(_components.p,{children:`Generate unique license keys with activation limits and expiry. Best for software, plugins, and CLIs.`})}),_jsx(Card,{title:`Digital Files`,icon:`download`,href:`/features/digital-product-delivery`,children:_jsx(_components.p,{children:`Kirim file yang dapat diunduh, seperti e-book, template, dan media, dengan URL download yang telah ditandatangani serta instruksi opsional.`})}),_jsx(Card,{title:`Feature Flags`,icon:`flag`,href:`/features/entitlements/feature-flags`,children:_jsx(_components.p,{children:`Batasi feature di aplikasi Anda sendiri berdasarkan pembelian. Dikirim saat pembuatan, diperiksa melalui API, dan dicabut saat pembatalan.`})}),_jsx(Card,{title:`Discord`,icon:`discord`,href:`/features/entitlements/discord`,children:_jsx(_components.p,{children:`Berikan role kepada pelanggan di server Discord Anda saat mereka membeli. Role tersebut dihapus secara otomatis saat pembatalan.`})}),_jsx(Card,{title:`GitHub`,icon:`github`,href:`/features/entitlements/github`,children:_jsx(_components.p,{children:`Add customers as collaborators to a private repository at the permission level you choose.`})}),_jsx(Card,{title:`Telegram`,icon:`telegram`,href:`/features/entitlements/telegram`,children:_jsx(_components.p,{children:`Add customers to a private Telegram chat or channel after purchase.`})}),_jsx(Card,{title:`Framer`,icon:`puzzle-piece`,href:`/features/entitlements/framer`,children:_jsx(_components.p,{children:`Unlock a Framer template remix link for paying customers.`})}),_jsx(Card,{title:`Notion`,icon:`book`,href:`/features/entitlements/notion`,children:_jsx(_components.p,{children:`Duplicate a Notion template into the customer’s workspace on purchase.`})})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`how-grants-work`,children:`How Grants Work`}),`\n`,_jsx(_components.p,{children:`Grant mengikuti event pembayaran dan subscription yang sama dengan yang Anda terima sebagai webhook. Dodo Payments membuat dan mencabut grant untuk pembelian secara otomatis berdasarkan lifecycle pembayaran, sehingga Anda tidak perlu memanggil grant API sendiri.`}),`\n`,_jsx(Heading,{level:`3`,id:`grant-lifecycle`,children:`Grant Lifecycle`}),`\n`,_jsx(_components.p,{children:`Grant berpindah melalui status berikut:`}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Created`,children:[_jsxs(_components.p,{children:[`Dodo Payments membuat grant saat pembayaran selesai atau subscription menjadi aktif. Grant feature flag dimulai sebagai `,_jsx(_components.code,{children:`Delivered`}),`. Grant license key juga dimulai sebagai `,_jsx(_components.code,{children:`Delivered`}),` saat entitlement menggunakan `,_jsx(_components.code,{children:`fulfillment_mode: auto`}),` (default). Dalam `,_jsx(_components.code,{children:`fulfillment_mode: manual`}),`, grant dimulai sebagai `,_jsx(_components.code,{children:`Pending`}),` tanpa key sampai Anda memberikannya melalui `,_jsx(_components.a,{href:`/api-reference/entitlements/fulfill-license-key`,children:`Fulfill License Key Grant`}),`. Setiap integration lainnya dimulai sebagai `,_jsx(_components.code,{children:`Pending`}),`.`]}),_jsxs(_components.p,{children:[`Integration berbasis OAuth (Discord, GitHub, Notion) menyediakan `,_jsx(_components.code,{children:`oauth_url`}),` yang dikunjungi pelanggan untuk memberikan persetujuan. Dodo Payments mencoba membuat URL ini saat membuat grant. Jika gagal, field tetap `,_jsx(_components.code,{children:`null`}),` sampai pelanggan memulai accept flow dari email delivery atau Customer Portal. Integration platform-direct (Telegram, Framer, Digital Files) tetap `,_jsx(_components.code,{children:`Pending`}),` hanya selama delivery disiapkan, lalu berpindah ke `,_jsx(_components.code,{children:`Delivered`}),`.`]})]}),_jsx(Step,{title:`Delivered`,children:_jsxs(_components.p,{children:[`Saat delivery selesai, grant berpindah ke `,_jsx(_components.code,{children:`Delivered`}),` dan `,_jsx(_components.code,{children:`delivered_at`}),` ditetapkan. Delivery selesai saat license key dibuat, role ditetapkan, akses repository diberikan, link file ditemukan, atau OAuth flow selesai.`]})}),_jsx(Step,{title:`Failed`,children:_jsxs(_components.p,{children:[`Jika pemanggilan integration menghasilkan error yang tidak dapat dicoba ulang, seperti token OAuth yang dicabut, izin yang ditolak, atau file yang sudah tidak ada, grant berpindah ke `,_jsx(_components.code,{children:`Failed`}),`. Field `,_jsx(_components.code,{children:`error_code`}),` dan `,_jsx(_components.code,{children:`error_message`}),` mencatat alasannya.`]})}),_jsx(Step,{title:`Revoked`,children:_jsxs(_components.p,{children:[`Saat akses dicabut, misalnya karena subscription dibatalkan, refund diterbitkan, atau Anda mencabut grant, grant berpindah ke `,_jsx(_components.code,{children:`Revoked`}),`. Field `,_jsx(_components.code,{children:`revocation_reason`}),` mencatat pemicunya.`]})})]}),`\n`,_jsx(Heading,{level:`3`,id:`perilaku-grant-berdasarkan-event`,children:`Perilaku Grant Berdasarkan Event`}),`\n`,_jsx(_components.p,{children:`Setiap event pembayaran dan subscription mengubah grant sebagai berikut:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Event`}),_jsx(_components.th,{children:`Perilaku`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`payment.succeeded`}),` (pembayaran satu kali)`]}),_jsx(_components.td,{children:`Menerbitkan satu grant untuk setiap entitlement yang dikaitkan. Entitlement License Key menerbitkan satu grant untuk setiap key.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`payment.succeeded`}),` (pembayaran terkait subscription)`]}),_jsx(_components.td,{children:`Tidak ada perubahan. Event subscription di bawah ini mengatur grant tersebut.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`subscription.active`})}),_jsxs(_components.td,{children:[`Menerbitkan grant untuk setiap entitlement terkait yang belum memilikinya, serta menerbitkan kembali grant yang sebelumnya dicabut untuk subscription yang sama. Grant yang dicabut dengan `,_jsx(_components.code,{children:`manual`}),`, `,_jsx(_components.code,{children:`refund`}),`, atau `,_jsx(_components.code,{children:`platform_external`}),` tidak diterbitkan kembali.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`subscription.renewed`})}),_jsx(_components.td,{children:`Tidak ada perubahan. Grant yang ada tetap bertahan selama renewal.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`subscription.past_due`})}),_jsxs(_components.td,{children:[`Tidak ada perubahan. Grant tetap terkirim selama `,_jsx(_components.a,{href:`/features/subscription#grace-period`,children:`grace period`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`subscription.on_hold`})}),_jsxs(_components.td,{children:[`Mencabut semua grant yang telah dikirim dan yang masih tertunda dengan `,_jsx(_components.code,{children:`revocation_reason: subscription_on_hold`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`subscription.paused`})}),_jsxs(_components.td,{children:[`Mencabut semua grant yang telah dikirim dan yang masih tertunda dengan `,_jsx(_components.code,{children:`revocation_reason: SubscriptionPaused`}),`. Tidak seperti alasan subscription lainnya, nilai ini menggunakan PascalCase, jadi cocokkan persis.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`subscription.unpaused`})}),_jsxs(_components.td,{children:[`Menerbitkan kembali grant yang sebelumnya dicabut untuk subscription yang sama, dengan cara yang sama seperti `,_jsx(_components.code,{children:`subscription.active`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`subscription.cancelled`})}),_jsxs(_components.td,{children:[`Mencabut semua grant dengan `,_jsx(_components.code,{children:`revocation_reason: subscription_cancelled`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`subscription.expired`})}),_jsxs(_components.td,{children:[`Mencabut semua grant dengan `,_jsx(_components.code,{children:`revocation_reason: subscription_expired`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`subscription.plan_changed`})}),_jsxs(_components.td,{children:[`Mencabut semua grant saat ini dengan `,_jsx(_components.code,{children:`revocation_reason: plan_changed`}),`, lalu menerbitkan grant untuk entitlement pada plan baru.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`refund.succeeded`}),` (pembayaran satu kali)`]}),_jsxs(_components.td,{children:[`Mencabut grant untuk pembayaran tersebut dengan `,_jsx(_components.code,{children:`revocation_reason: refund`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Pencabutan API manual`}),_jsxs(_components.td,{children:[`Mencabut grant dengan `,_jsx(_components.code,{children:`revocation_reason: manual`}),`. Pencabutan manual tidak diterbitkan kembali secara otomatis saat subscription diperbarui.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`License key dinonaktifkan`}),_jsxs(_components.td,{children:[`Untuk grant license key, menonaktifkan key yang mendasarinya mencabut grant dengan `,_jsx(_components.code,{children:`revocation_reason: license_key_disabled`}),`. Mengaktifkan kembali key akan memulihkan grant secara otomatis.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Drift platform terdeteksi`}),_jsxs(_components.td,{children:[`Jika sisi platform dari suatu integration tidak lagi sinkron, misalnya role Discord dihapus secara manual, GitHub App kehilangan akses repository, atau proses rekonsiliasi menemukan target yang hilang, Dodo Payments mencabut grant dengan `,_jsx(_components.code,{children:`revocation_reason: platform_external`}),`. Grant tidak diterbitkan kembali secara otomatis saat subscription diperbarui sampai masalah platform diselesaikan.`]})]})]})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`Grant yang digerakkan oleh subscription bersifat idempotent berdasarkan `,_jsx(_components.code,{children:`(entitlement, customer, subscription)`}),`, sehingga renewal dan reaktivasi tidak membuat grant duplikat. Grant satu kali bersifat idempotent berdasarkan `,_jsx(_components.code,{children:`(entitlement, customer, payment)`}),`.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`buat-entitlement-pertama-anda`,children:`Buat Entitlement Pertama Anda`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Open Entitlements`,children:_jsxs(_components.p,{children:[`Buka `,_jsx(_components.strong,{children:`Entitlements`}),` di dashboard lalu klik `,_jsx(_components.strong,{children:`+`}),` untuk membuat entitlement.`]})}),_jsx(Step,{title:`Pick an Integration`,children:_jsx(_components.p,{children:`Pilih jenis integration: License Key, Digital Files, Feature Flag, Discord, GitHub, Telegram, Figma, Framer, atau Notion. Untuk integration platform, hubungkan akun Anda terlebih dahulu jika belum melakukannya.`})}),_jsxs(Step,{title:`Configure Delivery`,children:[_jsx(_components.p,{children:`Isi field untuk integration tersebut. Misalnya, GitHub meminta repository dan tingkat izin, Discord meminta server dan role opsional, sedangkan License Key meminta batas aktivasi dan durasi license.`}),_jsx(Frame,{caption:`Creating a GitHub entitlement. Each integration shows the fields it needs.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/github/create.png?fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=722e925ec5158a5d16c58213132ccb9d`,alt:`Formulir Entitlement Baru dengan selector integration dan field konfigurasi`,style:{maxHeight:`500px`,width:`auto`},\"data-og-width\":`2000`,width:`2000`,\"data-og-height\":`1130`,height:`1130`,\"data-path\":`images/entitlements/github/create.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/github/create.png?w=280\u0026fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=27f80ec98d393359ca3136524a0ad9d8 280w, https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/github/create.png?w=560\u0026fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=6cf0a907fa86298b9ad896b1a604fa0b 560w, https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/github/create.png?w=840\u0026fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=a34a563dad17160d3c13067e3a349f3c 840w, https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/github/create.png?w=1100\u0026fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=fc893072e5f07d021b962b0bdd87933c 1100w, https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/github/create.png?w=1650\u0026fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=222cfaf3c0ac63f69d8494d7387d3e22 1650w, https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/github/create.png?w=2500\u0026fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=f6b547a74f61c76b6735d3e92c4960d8 2500w`})})]}),_jsx(Step,{title:`Save`,children:_jsxs(_components.p,{children:[`Klik `,_jsx(_components.strong,{children:`Create Entitlement`}),`. Sekarang Anda dapat mengaitkan entitlement ke produk apa pun.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`kaitkan-entitlement-ke-produk`,children:`Kaitkan Entitlement ke Produk`}),`\n`,_jsxs(_components.p,{children:[`Buka produk, masuk ke bagian `,_jsx(_components.strong,{children:`Entitlements`}),`, lalu pilih entitlement yang akan dikirim saat produk dibeli. Satu produk dapat mengirim beberapa entitlement sekaligus. Misalnya, plan Pro dapat mencakup license key, akses GitHub, dan role Discord.`]}),`\n`,_jsx(Frame,{caption:`Attaching entitlements to a product. Selected entitlements are delivered on every successful purchase or active subscription.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/attach-to-product.png?fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=965ad78262791fa8dbb712b4fdf89538`,alt:`Panel pemilihan entitlement produk yang menampilkan checkbox untuk setiap entitlement yang tersedia`,style:{maxHeight:`500px`,width:`auto`},\"data-og-width\":`2000`,width:`2000`,\"data-og-height\":`1197`,height:`1197`,\"data-path\":`images/entitlements/attach-to-product.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/attach-to-product.png?w=280\u0026fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=4b98785a408414890f3247f318c96740 280w, https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/attach-to-product.png?w=560\u0026fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=64f89fb68e337ec53ff48c75f0c4dc4e 560w, https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/attach-to-product.png?w=840\u0026fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=2c289e402cf161b27d7c0f90b81ccd6f 840w, https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/attach-to-product.png?w=1100\u0026fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=0632a046cb6d1c5e6529f3d63911f5d8 1100w, https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/attach-to-product.png?w=1650\u0026fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=7e9d6f96690fcd3e53eebef77df2d279 1650w, https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/attach-to-product.png?w=2500\u0026fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=adbc6c5a189350107f9faf43b2a47224 2500w`})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`pengalaman-pelanggan`,children:`Pengalaman Pelanggan`}),`\n`,_jsx(Heading,{level:`3`,id:`email-dan-customer-portal`,children:`Email dan Customer Portal`}),`\n`,_jsxs(_components.p,{children:[`Setelah pembelian, pelanggan menerima email delivery berisi license key, link download, link undangan OAuth, atau undangan platform yang berlaku untuk entitlement pada produk. Detail yang sama tetap tersedia di `,_jsx(_components.a,{href:`/features/customer-portal`,children:`Customer Portal`}),`, di bagian riwayat pesanan mereka, selama grant masih aktif.`]}),`\n`,_jsx(Heading,{level:`3`,id:`delivery-berbasis-oauth`,children:`Delivery Berbasis OAuth`}),`\n`,_jsxs(_components.p,{children:[`Akses subscriber Discord, GitHub, dan Notion mengharuskan pelanggan mengotorisasi Dodo Payments untuk memberikan akses tersebut. Grant ini tetap `,_jsx(_components.code,{children:`Pending`}),` sampai pelanggan menyelesaikan OAuth flow dari link di email atau Customer Portal. Setelah pelanggan memberikan otorisasi, grant berpindah ke `,_jsx(_components.code,{children:`Delivered`}),` dan Dodo Payments menyediakan akses platform.`]}),`\n`,_jsx(Heading,{level:`3`,id:`pencabutan`,children:`Pencabutan`}),`\n`,_jsx(_components.p,{children:`Saat grant dicabut, Dodo Payments menghapus akses di platform: menghapus role Discord, menghapus collaborator GitHub, atau menonaktifkan license key. Pelanggan melihat perubahan tersebut di Customer Portal.`}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Untuk Digital Files, pencabutan menghentikan URL download baru yang telah ditandatangani, tetapi tidak membatalkan salinan yang sudah diunduh pelanggan. Rencanakan pembatasan konten Anda dengan mempertimbangkan hal ini.`})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`kelola-grant`,children:`Kelola Grant`}),`\n`,_jsxs(_components.p,{children:[`Buka entitlement apa pun dari dashboard untuk melihat grant-nya. Panel detail menampilkan jumlah total yang diberikan, filter status, dan satu baris untuk setiap grant berisi pelanggan, tanggal akses, status, serta tindakan `,_jsx(_components.strong,{children:`Revoke`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`Untuk mengelola grant secara programatis, buat daftar grant dengan filter `,_jsx(_components.code,{children:`status`}),` dan cabut satu grant berdasarkan ID:`]}),`\n`,_jsxs(CodeGroup,{children:[_jsx(CodeBlock,{filename:`TypeScript`,expandable:`true`,numberOfLines:`15`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`15`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` DodoPayments`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'dodopayments'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` client`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` DodoPayments`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` bearerToken:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` process`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`env`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'DODO_PAYMENTS_API_KEY'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// List grants for an entitlement`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` grants`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` client`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`entitlements`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`grants`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`list`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'ent_abc123'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` status:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'Delivered'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Revoke a single grant`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` client`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`entitlements`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`grants`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`revoke`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'entg_xyz789'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` id:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'ent_abc123'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Python`,expandable:`true`,numberOfLines:`10`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`10`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Assumes client = DodoPayments(bearer_token=os.environ[\"DODO_PAYMENTS_API_KEY\"])`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`grants `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` client.entitlements.grants.list(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"ent_abc123\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` status`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Delivered\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`client.entitlements.grants.revoke(`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"entg_xyz789\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` id`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"ent_abc123\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Go`,expandable:`true`,numberOfLines:`13`,language:`go`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`go`,children:_jsxs(_components.code,{language:`go`,numberOfLines:`13`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Assumes client := dodopayments.NewClient() and ctx := context.Background().`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`grants`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`err`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` :=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` client`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`Entitlements`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`Grants`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`List`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` ctx`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"ent_abc123\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` dodopayments`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:`EntitlementGrantListParams`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` Status`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`dodopayments`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`F`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`dodopayments`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`EntitlementGrantListParamsStatusDelivered`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`),`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` err`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` !=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` nil`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` panic`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`err`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`Error`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`())`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`fmt`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`Println`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`len`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`grants`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`Items`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`))`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`_`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`err`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` client`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`Entitlements`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`Grants`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`Revoke`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`ctx`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"ent_abc123\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"entg_xyz789\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`]})})})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`pengelolaan-api`,children:`Pengelolaan API`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Create Entitlement`,icon:`plus`,href:`/api-reference/entitlements/create-entitlement`,children:_jsx(_components.p,{children:`Buat entitlement dengan jenis integration apa pun.`})}),_jsx(Card,{title:`List Entitlements`,icon:`list`,href:`/api-reference/entitlements/list-entitlements`,children:_jsx(_components.p,{children:`Buat daftar entitlement yang difilter berdasarkan jenis integration.`})}),_jsx(Card,{title:`Get Entitlement`,icon:`magnifying-glass`,href:`/api-reference/entitlements/get-entitlement`,children:_jsx(_components.p,{children:`Ambil entitlement beserta konfigurasi yang telah diselesaikan.`})}),_jsx(Card,{title:`Update Entitlement`,icon:`pen`,href:`/api-reference/entitlements/update-entitlement`,children:_jsx(_components.p,{children:`Perbarui nama, deskripsi, atau konfigurasi integration.`})}),_jsx(Card,{title:`Delete Entitlement`,icon:`trash`,href:`/api-reference/entitlements/delete-entitlement`,children:_jsx(_components.p,{children:`Hapus entitlement secara soft-delete. Grant yang ada tidak dicabut, tetapi Dodo Payments tidak lagi mengelolanya.`})}),_jsx(Card,{title:`Upload File`,icon:`upload`,href:`/api-reference/entitlements/upload-file`,children:_jsx(_components.p,{children:`Unggah file berukuran hingga 500 MiB ke entitlement Digital Files.`})}),_jsx(Card,{title:`List Grants`,icon:`users`,href:`/api-reference/entitlements/list-grants`,children:_jsx(_components.p,{children:`Buat daftar grant entitlement yang difilter berdasarkan status dan pelanggan.`})}),_jsx(Card,{title:`Revoke Grant`,icon:`ban`,href:`/api-reference/entitlements/revoke-grant`,children:_jsx(_components.p,{children:`Cabut satu grant secara manual.`})})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`webhook`,children:`Webhook`}),`\n`,_jsx(_components.p,{children:`Dodo Payments mengirim empat event webhook untuk lifecycle grant. Subscribe ke event tersebut agar aplikasi Anda tetap sinkron dengan hal yang dapat diakses setiap pelanggan.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Event`}),_jsx(_components.th,{children:`Terjadi saat`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`entitlement_grant.created`})}),_jsxs(_components.td,{children:[`Grant dibuat. Grant license key yang dipenuhi otomatis dan grant feature flag tiba dalam status `,_jsx(_components.code,{children:`Delivered`}),`. Grant license key yang dipenuhi secara manual dan setiap integration lainnya tiba dalam status `,_jsx(_components.code,{children:`Pending`}),`, lalu berpindah ke `,_jsx(_components.code,{children:`Delivered`}),` setelah pemanggilan platform berhasil atau, untuk integration berbasis OAuth, setelah pelanggan memberikan otorisasi.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`entitlement_grant.delivered`})}),_jsxs(_components.td,{children:[`Grant yang ada berpindah ke `,_jsx(_components.code,{children:`Delivered`}),`, sehingga pelanggan kini memiliki akses. Grant yang berstatus `,_jsx(_components.code,{children:`Delivered`}),` saat dibuat hanya memicu `,_jsx(_components.code,{children:`created`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`entitlement_grant.failed`})}),_jsxs(_components.td,{children:[`Grant tidak dapat dikirim. Periksa `,_jsx(_components.code,{children:`error_code`}),` dan `,_jsx(_components.code,{children:`error_message`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`entitlement_grant.revoked`})}),_jsxs(_components.td,{children:[`Akses telah dicabut. Periksa `,_jsx(_components.code,{children:`revocation_reason`}),`.`]})]})]})]}),`\n`,_jsx(Card,{title:`Entitlement Grant Webhook Payloads`,icon:`bell`,href:`/developer-resources/webhooks/intents/entitlement-grant`,children:_jsxs(_components.p,{children:[`Lihat schema payload lengkap, contoh event, dan referensi `,_jsx(_components.code,{children:`revocation_reason`}),`.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`praktik-terbaik`,children:`Praktik Terbaik`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Gunakan satu entitlement untuk setiap channel delivery.`}),` Jangan gunakan satu entitlement Discord bersama beberapa produk dengan tujuan role yang berbeda. Buat satu entitlement untuk setiap role agar pencabutan tetap rapi.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Uji terlebih dahulu dalam test mode.`}),` Buat entitlement, kaitkan ke produk pengujian, lakukan checkout, lalu amati grant berpindah dari `,_jsx(_components.code,{children:`Pending`}),` ke `,_jsx(_components.code,{children:`Delivered`}),`. Kemudian batalkan subscription pengujian dan pastikan grant dicabut.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Dengarkan `,_jsx(_components.code,{children:`entitlement_grant.delivered`}),`, bukan `,_jsx(_components.code,{children:`payment.succeeded`}),`.`]}),` Pembayaran dapat berhasil sebelum fulfillment selesai, terutama untuk OAuth flow. Tunggu hingga grant mencapai `,_jsx(_components.code,{children:`Delivered`}),` sebelum membuka feature yang bergantung padanya di sistem Anda sendiri. Grant yang dikirim saat pembuatan, seperti license key yang dipenuhi otomatis atau feature flag, tiba sebagai `,_jsx(_components.code,{children:`entitlement_grant.created`}),` dengan `,_jsx(_components.code,{children:`status: \"Delivered\"`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Anggap `,_jsx(_components.code,{children:`entitlement_grant.failed`}),` sebagai tindakan yang perlu ditangani.`]}),` Grant yang gagal berarti pelanggan sudah membayar tetapi belum mendapatkan akses. Tampilkan grant ini kepada tim support Anda atau picu penerbitan ulang grant.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Petakan `,_jsx(_components.code,{children:`revocation_reason`}),` ke flow retensi Anda.`]}),` Pencabutan `,_jsx(_components.code,{children:`subscription_on_hold`}),` dapat dipulihkan karena pelanggan mungkin memperbarui kartunya. Pencabutan `,_jsx(_components.code,{children:`manual`}),` disengaja. Perlakukan keduanya secara berbeda dalam pesan kepada pelanggan.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Jangan cabut akses pada `,_jsx(_components.code,{children:`subscription.past_due`}),`.`]}),` Event tersebut membuka `,_jsx(_components.a,{href:`/features/subscription#grace-period`,children:`grace period`}),`, dan pelanggan tetap memiliki akses sampai periode tersebut berakhir. Tunggu `,_jsx(_components.code,{children:`subscription.on_hold`}),` atau `,_jsx(_components.code,{children:`subscription.cancelled`}),`.`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Introduction","sidebarTitle":"Introduction","description":"Kirim license keys, file yang dapat diunduh, feature flags, serta akses ke Discord, GitHub, Telegram, Framer, dan Notion secara otomatis saat pelanggan membayar.","icon":"box-archive","keywords":["Dodo Payments","entitlements","fulfillment","license keys","digital delivery","platform access"],"href":"/id/features/entitlements/introduction"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Apa Itu Entitlement?","slug":"apa-itu-entitlement","depth":2,"children":[]},{"title":"Available Integrations","slug":"available-integrations","depth":2,"children":[]},{"title":"How Grants Work","slug":"how-grants-work","depth":2,"children":[{"title":"Grant Lifecycle","slug":"grant-lifecycle","depth":3,"children":[]},{"title":"Perilaku Grant Berdasarkan Event","slug":"perilaku-grant-berdasarkan-event","depth":3,"children":[]}]},{"title":"Buat Entitlement Pertama Anda","slug":"buat-entitlement-pertama-anda","depth":2,"children":[]},{"title":"Kaitkan Entitlement ke Produk","slug":"kaitkan-entitlement-ke-produk","depth":2,"children":[]},{"title":"Pengalaman Pelanggan","slug":"pengalaman-pelanggan","depth":2,"children":[{"title":"Email dan Customer Portal","slug":"email-dan-customer-portal","depth":3,"children":[]},{"title":"Delivery Berbasis OAuth","slug":"delivery-berbasis-oauth","depth":3,"children":[]},{"title":"Pencabutan","slug":"pencabutan","depth":3,"children":[]}]},{"title":"Kelola Grant","slug":"kelola-grant","depth":2,"children":[]},{"title":"Pengelolaan API","slug":"pengelolaan-api","depth":2,"children":[]},{"title":"Webhook","slug":"webhook","depth":2,"children":[]},{"title":"Praktik Terbaik","slug":"praktik-terbaik","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/dodopayments/0ee82a08f7b65bcb/seo.js","/_mintlify/custom/dodopayments/6f88c9bbee313616/assistant-loader.js"],"subdomain":"dodopayments","siteName":"Dodo Payments Documentation","title":"Introduction - Dodo Payments Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/features/entitlements/introduction","matchLevel":1},"es":{"href":"/es/features/entitlements/introduction","matchLevel":1},"ar":{"href":"/ar/features/entitlements/introduction","matchLevel":1},"fr":{"href":"/fr/features/entitlements/introduction","matchLevel":1},"de":{"href":"/de/features/entitlements/introduction","matchLevel":1},"id":{"href":"/id/features/entitlements/introduction","matchLevel":0},"ja":{"href":"/ja/features/entitlements/introduction","matchLevel":1},"ko":{"href":"/ko/features/entitlements/introduction","matchLevel":1},"pt-BR":{"href":"/pt-BR/features/entitlements/introduction","matchLevel":1},"vi":{"href":"/vi/features/entitlements/introduction","matchLevel":1},"cn":{"href":"/cn/features/entitlements/introduction","matchLevel":1},"hi":{"href":"/hi/features/entitlements/introduction","matchLevel":1},"it":{"href":"/it/features/entitlements/introduction","matchLevel":1},"sv":{"href":"/sv/features/entitlements/introduction","matchLevel":1}}},"lastModified":"2026-09-26T16:06:31.966Z","gitLastModified":"2026-09-26T16:03:47.000Z","originalFileLocation":"id/features/entitlements/introduction.mdx","locale":"id"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Kirim license keys, file yang dapat diunduh, feature flags, serta akses ke Discord, GitHub, Telegram, Framer, dan Notion secara otomatis saat pelanggan membayar.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Dodo Payments Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/dodopayments/KuV_TozyHuGHOyyc/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/dodopayments/KuV_TozyHuGHOyyc/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/dodopayments/KuV_TozyHuGHOyyc/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/dodopayments/KuV_TozyHuGHOyyc/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/dodopayments/KuV_TozyHuGHOyyc/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/dodopayments/KuV_TozyHuGHOyyc/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/dodopayments/KuV_TozyHuGHOyyc/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/dodopayments/KuV_TozyHuGHOyyc/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/dodopayments/KuV_TozyHuGHOyyc/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Introduction - Dodo Payments Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Kirim license keys, file yang dapat diunduh, feature flags, serta akses ke Discord, GitHub, Telegram, Framer, dan Notion secara otomatis saat pelanggan membayar.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Dodo Payments Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.dodopayments.com/id/features/entitlements/introduction\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://dodopayments.mintlify.site/_mintlify/api/og/v2?division=Entitlements\u0026amp;title=Introduction\u0026amp;description=Kirim+license+keys%2C+file+yang+dapat+diunduh%2C+feature+flags%2C+serta+akses+ke+Discord%2C+GitHub%2C+Telegram%2C+Framer%2C+dan+Notion+secara+otomatis+saat+pelanggan+membayar\u0026amp;theme=fcc3a546490e883f7462a320\u0026amp;signature=eceb6ca029f1e1776f06c6095afb3ac263053dee69d7e345c11f1687b8325edf\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Introduction - Dodo Payments Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Kirim license keys, file yang dapat diunduh, feature flags, serta akses ke Discord, GitHub, Telegram, Framer, dan Notion secara otomatis saat pelanggan membayar.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://dodopayments.mintlify.site/_mintlify/api/og/v2?division=Entitlements\u0026amp;title=Introduction\u0026amp;description=Kirim+license+keys%2C+file+yang+dapat+diunduh%2C+feature+flags%2C+serta+akses+ke+Discord%2C+GitHub%2C+Telegram%2C+Framer%2C+dan+Notion+secara+otomatis+saat+pelanggan+membayar\u0026amp;theme=fcc3a546490e883f7462a320\u0026amp;signature=eceb6ca029f1e1776f06c6095afb3ac263053dee69d7e345c11f1687b8325edf\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/dodopayments/KuV_TozyHuGHOyyc/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Dodo Payments Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#779812\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.dodopayments.com/id/features/entitlements/introduction\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/id/features/entitlements/introduction.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"id\" href=\"https://docs.dodopayments.com/id/features/entitlements/introduction\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://docs.dodopayments.com/features/entitlements/introduction\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"es\" href=\"https://docs.dodopayments.com/es/features/entitlements/introduction\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ar\" href=\"https://docs.dodopayments.com/ar/features/entitlements/introduction\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"fr\" href=\"https://docs.dodopayments.com/fr/features/entitlements/introduction\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"de\" href=\"https://docs.dodopayments.com/de/features/entitlements/introduction\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ja\" href=\"https://docs.dodopayments.com/ja/features/entitlements/introduction\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ko\" href=\"https://docs.dodopayments.com/ko/features/entitlements/introduction\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"pt-BR\" href=\"https://docs.dodopayments.com/pt-BR/features/entitlements/introduction\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"vi\" href=\"https://docs.dodopayments.com/vi/features/entitlements/introduction\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"zh\" href=\"https://docs.dodopayments.com/cn/features/entitlements/introduction\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"hi\" href=\"https://docs.dodopayments.com/hi/features/entitlements/introduction\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"it\" href=\"https://docs.dodopayments.com/it/features/entitlements/introduction\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"sv\" href=\"https://docs.dodopayments.com/sv/features/entitlements/introduction\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://docs.dodopayments.com/features/entitlements/introduction\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.dodopayments.com/#organization\",\"name\":\"Dodo Payments Documentation\",\"url\":\"https://docs.dodopayments.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/dodopayments/nM_mJfYkri-OpC5M/logo/light.svg?fit=max\u0026auto=format\u0026n=nM_mJfYkri-OpC5M\u0026q=85\u0026s=23f7a052f7ecb9d6570b7c95ee359a97\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.dodopayments.com#website\",\"name\":\"Dodo Payments Documentation\",\"url\":\"https://docs.dodopayments.com\",\"publisher\":{\"@id\":\"https://docs.dodopayments.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.dodopayments.com/id/features/entitlements/introduction#webpage\",\"url\":\"https://docs.dodopayments.com/id/features/entitlements/introduction\",\"name\":\"Introduction\",\"description\":\"Kirim license keys, file yang dapat diunduh, feature flags, serta akses ke Discord, GitHub, Telegram, Framer, dan Notion secara otomatis saat pelanggan membayar.\",\"dateModified\":\"2026-09-26T16:03:47.000Z\",\"isPartOf\":{\"@id\":\"https://docs.dodopayments.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.dodopayments.com/id/features/entitlements/introduction#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.dodopayments.com/id/features/entitlements/introduction#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Features\",\"item\":\"https://docs.dodopayments.com/id/features/products\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Introduction\",\"item\":\"https://docs.dodopayments.com/id/features/entitlements/introduction\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.dodopayments.com/id/features/entitlements/introduction#article\",\"headline\":\"Introduction\",\"name\":\"Introduction\",\"description\":\"Kirim license keys, file yang dapat diunduh, feature flags, serta akses ke Discord, GitHub, Telegram, Framer, dan Notion secara otomatis saat pelanggan membayar.\",\"url\":\"https://docs.dodopayments.com/id/features/entitlements/introduction\",\"mainEntityOfPage\":{\"@id\":\"https://docs.dodopayments.com/id/features/entitlements/introduction#webpage\"},\"dateModified\":\"2026-09-26T16:03:47.000Z\",\"keywords\":\"Dodo Payments, entitlements, fulfillment, license keys, digital delivery, platform access\",\"publisher\":{\"@id\":\"https://docs.dodopayments.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.dodopayments.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Dodo Payments Documentation\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Dodo Payments Documentation\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/id/features/entitlements/introduction.md","siteName":"Dodo Payments Documentation","nav":{"global":null,"languages":[{"language":"en","pages":[{"title":"en","href":"/features/entitlements/introduction"}]},{"language":"es","pages":[{"title":"es","href":"/es/features/entitlements/introduction"}]},{"language":"ar","pages":[{"title":"ar","href":"/ar/features/entitlements/introduction"}]},{"language":"fr","pages":[{"title":"fr","href":"/fr/features/entitlements/introduction"}]},{"language":"de","pages":[{"title":"de","href":"/de/features/entitlements/introduction"}]},{"language":"id","tabs":[{"tab":"Docs","icon":"book","groups":[{"group":"Getting Started","pages":[{"title":"Welcome to Dodo Payments","sidebarTitle":"Introduction","icon":"rocket","href":"/id/introduction"},{"title":"Membangun dengan AI Coding Agents","sidebarTitle":"AI Coding Agents","icon":"robot","href":"/id/developer-resources/build-with-ai-coding-agents"},{"title":"Migrasi ke Dodo Payments","icon":"arrow-right-arrow-left","href":"/id/migrate-to-dodo"},{"title":"Account Verification","icon":"id-card","href":"/id/miscellaneous/verification-process"}]},{"group":"Features","pages":[{"sidebarTitle":"Produk","title":"Produk","icon":"box","href":"/id/features/products"},{"sidebarTitle":"Product Collections","title":"Product Collections","icon":"layer-group","href":"/id/features/product-collections"},{"sidebarTitle":"Pembayaran Sekali Bayar","title":"Pembayaran Sekali Bayar","icon":"credit-card","href":"/id/features/one-time-payment-products"},{"group":"Subscriptions","icon":"infinity","pages":[{"sidebarTitle":"Subscriptions","title":"Subscriptions","icon":"repeat","href":"/id/features/subscription"},{"sidebarTitle":"Add-ons","title":"Add-ons untuk Langganan","icon":"puzzle","href":"/id/features/addons"},{"title":"On-Demand Subscriptions","icon":"bolt","href":"/id/developer-resources/ondemand-subscriptions"}]},{"group":"Usage Based Billing","icon":"arrow-trend-up","pages":[{"sidebarTitle":"Pendahuluan","title":"Penagihan Berbasis Penggunaan","icon":"box","href":"/id/features/usage-based-billing/introduction"},{"sidebarTitle":"Meter","title":"Meter","icon":"sliders","href":"/id/features/usage-based-billing/meters"},{"sidebarTitle":"Event Ingestion","title":"Event Ingestion","icon":"bolt","href":"/id/features/usage-based-billing/event-ingestion"},{"group":"Ingestion Blueprints","icon":"copy","pages":[{"sidebarTitle":"Pendahuluan","title":"Blueprint Ingesti","icon":"box","href":"/id/features/usage-based-billing/ingestion-blueprints"},{"title":"LLM Blueprint","icon":"brain-circuit","href":"/id/developer-resources/ingestion-blueprints/llm"},{"title":"API Gateway Blueprint","icon":"cloud","href":"/id/developer-resources/ingestion-blueprints/api-gateway"},{"title":"Blueprint Penyimpanan Objek","icon":"box-archive","href":"/id/developer-resources/ingestion-blueprints/object-storage"},{"title":"Blueprint Streaming","icon":"tower-broadcast","href":"/id/developer-resources/ingestion-blueprints/stream"},{"title":"Blueprint Rentang Waktu","icon":"clock","href":"/id/developer-resources/ingestion-blueprints/time-range"}]}]},{"sidebarTitle":"Credit-Based Billing","title":"Credit-Based Billing","icon":"coins","tag":"NEW","href":"/id/features/credit-based-billing"},{"sidebarTitle":"Seat-Based Billing","title":"Seat-Based Billing","icon":"users","href":"/id/features/seat-based-billing"},{"sidebarTitle":"Penagihan Hibrida","title":"Model Penagihan Hibrida","icon":"layer-group","href":"/id/features/hybrid-billing"},{"title":"Upsells \u0026 Downsells","icon":"arrow-up-right-dots","href":"/id/features/upsells-and-downsells"},{"group":"Customers","icon":"user-group","pages":[{"title":"Manajemen Pelanggan","icon":"user-group","href":"/id/features/customers"},{"sidebarTitle":"Portal Pelanggan","title":"Portal Pelanggan","icon":"id-card","href":"/id/features/customer-portal"},{"title":"Dompet Pelanggan","icon":"wallet","tag":"NEW","href":"/id/features/customer-wallet"},{"sidebarTitle":"Email Terkirim","title":"Log Email Pelanggan","icon":"envelope","tag":"NEW","href":"/id/features/email-logs"},{"sidebarTitle":"Daftar Blokir Pelanggan","title":"Daftar Blokir Pelanggan","icon":"user-slash","tag":"NEW","href":"/id/features/customer-blocklist"}]},{"sidebarTitle":"Diskon","title":"Diskon","icon":"percent","href":"/id/features/discount-codes"},{"group":"Recovery","icon":"rotate","tag":"NEW","pages":[{"sidebarTitle":"Ikhtisar","title":"Pemulihan Pendapatan","icon":"rotate","href":"/id/features/recovery/overview"},{"sidebarTitle":"Pemulihan Keranjang Terbengkalai","title":"Pemulihan Keranjang Terbengkalai","icon":"cart-shopping","href":"/id/features/recovery/abandoned-cart-recovery"},{"sidebarTitle":"Subscription Dunning","title":"Subscription Dunning","icon":"repeat","href":"/id/features/recovery/subscription-dunning"},{"sidebarTitle":"Percobaan Ulang Pembayaran Langganan","title":"Percobaan Ulang Pembayaran Langganan","icon":"arrow-rotate-right","href":"/id/features/recovery/payment-retries"},{"sidebarTitle":"Coba Lagi Manual","title":"Coba Lagi Pembayaran Manual","icon":"hand-pointer","tag":"NEW","href":"/id/features/recovery/manual-retry"}]},{"group":"Transactions","icon":"credit-card","pages":[{"title":"Pembayaran","icon":"money-bill-transfer","href":"/id/features/transactions/payments"},{"title":"Pengembalian Dana","icon":"rotate-left","href":"/id/features/transactions/refunds"},{"title":"Disputes","description":"Lihat dan tanggapi sengketa dari halaman Transactions, serta hentikan chargeback sebelum diajukan dengan Visa RDR, Ethoca alerts, dan deflections.","icon":"circle-exclamation","href":"/id/features/transactions/disputes"}]},{"group":"Entitlements","icon":"gift","tag":"NEW","pages":[{"title":"Introduction","sidebarTitle":"Introduction","icon":"box-archive","href":"/id/features/entitlements/introduction"},{"title":"License Keys","description":"Terbitkan license key dengan batas aktivasi dan masa berlaku melalui entitlement License Key, lalu aktifkan, validasi, dan nonaktifkan dari software Anda.","icon":"key","href":"/id/features/license-keys"},{"title":"Digital Product Delivery","sidebarTitle":"Produk Digital","icon":"download","href":"/id/features/digital-product-delivery"},{"title":"Hak Fitur Bendera","sidebarTitle":"Feature Flags","icon":"flag","tag":"NEW","href":"/id/features/entitlements/feature-flags"},{"title":"Discord Entitlement","sidebarTitle":"Discord","icon":"discord","href":"/id/features/entitlements/discord"},{"title":"GitHub Entitlement","sidebarTitle":"GitHub","icon":"github","href":"/id/features/entitlements/github"},{"title":"Hak Telegram","sidebarTitle":"Telegram","icon":"telegram","href":"/id/features/entitlements/telegram"},{"title":"Entitlement Framer","sidebarTitle":"Framer","icon":"puzzle-piece","href":"/id/features/entitlements/framer"},{"title":"Notion Entitlement","sidebarTitle":"Notion","icon":"book","href":"/id/features/entitlements/notion"}]},{"group":"Payouts and Balances","icon":"wallet","pages":[{"title":"Proses Payout","icon":"money-bill","href":"/id/features/payouts/payout-structure"},{"title":"Saldo","icon":"file-invoice-dollar","href":"/id/features/account-summary-payout-wallet"}]},{"group":"Account Management","icon":"user","pages":[{"sidebarTitle":"Arsipkan Bisnis","title":"Mengarsipkan Bisnis","icon":"box-archive","tag":"NEW","href":"/id/features/archive-business"},{"title":"Pengaturan Multi-Merek","icon":"building-columns","href":"/id/features/multi-brands"},{"title":"Manajemen Faktur","icon":"file-invoice-dollar","href":"/id/features/invoice-generation"},{"title":"Anggota Tim","icon":"user-gear","href":"/id/features/team"},{"title":"Preferensi Komunikasi","sidebarTitle":"Preferensi Komunikasi","icon":"bell","tag":"NEW","href":"/id/features/communication-preferences"},{"title":"Akun Saya","icon":"user-gear","href":"/id/miscellaneous/accounts"}]},{"group":"Pricing","icon":"dollar-sign","pages":[{"sidebarTitle":"Harga Termasuk Pajak","title":"Harga Termasuk Pajak","icon":"file-invoice","href":"/id/features/tax-inclusive-pricing"},{"sidebarTitle":"Bayar Sesuai Keinginan Anda","title":"Harga Bayar Sesuai Keinginan Anda","icon":"dollar-sign","href":"/id/features/pay-what-you-want"},{"title":"Pembayaran B2B","icon":"money-bills","href":"/id/features/b2b-payments"},{"title":"Harga Terlokalisasi","sidebarTitle":"Harga Terlokalisasi","icon":"earth-americas","href":"/id/features/localized-pricing"},{"sidebarTitle":"Purchasing Power Parity","title":"Purchasing Power Parity","tag":"NEW","icon":"money-bill-trend-up","href":"/id/features/purchasing-power-parity"},{"sidebarTitle":"Charm Pricing","title":"Charm Pricing","tag":"NEW","icon":"tag","href":"/id/features/charm-pricing"}]},{"sidebarTitle":"Checkout","title":"Fitur Checkout","icon":"cart-shopping","href":"/id/features/checkout"},{"sidebarTitle":"Desain","title":"Kustomisasi Desain \u0026 Tema","icon":"palette","tag":"NEW","href":"/id/features/design"},{"group":"Payment Methods","icon":"money-bill-wave","pages":[{"title":"Payment Methods","sidebarTitle":"Overview","icon":"layer-group","href":"/id/features/payment-methods"},{"title":"Kartu Kredit \u0026 Debit","sidebarTitle":"Kartu","icon":"credit-card","href":"/id/features/payment-methods/cards"},{"title":"Dompet Digital","sidebarTitle":"Dompet Digital","icon":"wallet","href":"/id/features/payment-methods/digital-wallets"},{"title":"Beli Sekarang Bayar Nanti (BNPL)","sidebarTitle":"BNPL","icon":"calendar-days","href":"/id/features/payment-methods/bnpl"},{"title":"ACH Direct Debit","sidebarTitle":"ACH Direct Debit","icon":"building-columns","href":"/id/features/payment-methods/ach"},{"title":"Metode Pembayaran India","sidebarTitle":"India","icon":"indian-rupee-sign","href":"/id/features/payment-methods/india"},{"title":"Metode Pembayaran Eropa","sidebarTitle":"Eropa","icon":"euro-sign","href":"/id/features/payment-methods/europe"},{"title":"Metode Pembayaran Korea Selatan","sidebarTitle":"Korea Selatan","icon":"won-sign","href":"/id/features/payment-methods/south-korea"},{"title":"Metode Pembayaran Asia-Pasifik","sidebarTitle":"Asia-Pasifik","icon":"earth-asia","href":"/id/features/payment-methods/asia-pacific"},{"title":"Pix","sidebarTitle":"Pix","icon":"brazilian-real-sign","href":"/id/features/payment-methods/pix"},{"title":"Stablecoins","sidebarTitle":"Stablecoins","icon":"dollar-sign","href":"/id/features/payment-methods/stablecoins"},{"title":"WeChat Pay","sidebarTitle":"WeChat Pay","icon":"comment-dollar","href":"/id/features/payment-methods/wechat"}]},{"title":"Analitik Pihak Ketiga","sidebarTitle":"Analitik Pihak Ketiga","icon":"chart-line","tag":"NEW","href":"/id/features/analytics"},{"sidebarTitle":"Mata Uang Adaptif","title":"Mata Uang Adaptif","icon":"money-bill-transfer","href":"/id/features/adaptive-currency"},{"group":"BYOP","icon":"shuffle","tag":"BETA","pages":[{"title":"Bring Your Own Processor (BYOP)","sidebarTitle":"Ikhtisar","tag":"BETA","icon":"boxes-stacked","href":"/id/features/byop"},{"title":"Stripe - Akses API Connect \u0026 Raw Card","sidebarTitle":"Stripe","icon":"stripe","href":"/id/features/byop/stripe"},{"title":"Adyen - Koneksi \u0026 Akses API Kartu Mentah","sidebarTitle":"Adyen","icon":"https://mintlify.s3.us-west-1.amazonaws.com/dodopayments/images/logos/adyen.svg","href":"/id/features/byop/adyen"}]},{"title":"Tampilan Toko","icon":"store","href":"/id/features/storefront"},{"title":"Afiliasi","icon":"users-line","href":"/id/features/affiliates"},{"title":"Moderation API","icon":"shield-check","tag":"NEW","href":"/id/features/moderation"},{"title":"Menjual Barang Digital di iOS","icon":"mobile","href":"/id/features/appstore-digital-goods"},{"title":"Analitik Dasbor","sidebarTitle":"Analitik Dasbor","icon":"chart-line","href":"/id/features/analytics-and-reporting"},{"title":"Laporan","sidebarTitle":"Laporan","icon":"file-invoice","href":"/id/features/reports"}]},{"group":"Integrate","pages":[{"group":"SDKs","icon":"box-open","pages":[{"sidebarTitle":"Ikhtisar","title":"SDK Resmi","icon":"box","href":"/id/developer-resources/dodo-payments-sdks"},{"title":"TypeScript","icon":"js","href":"/id/developer-resources/sdks/typescript"},{"title":"Python","icon":"python","href":"/id/developer-resources/sdks/python"},{"title":"Go","icon":"golang","href":"/id/developer-resources/sdks/go"},{"title":"Ruby","icon":"gem","href":"/id/developer-resources/sdks/ruby"},{"title":"Java","icon":"java","href":"/id/developer-resources/sdks/java"},{"title":"Kotlin","icon":"k","href":"/id/developer-resources/sdks/kotlin"},{"title":"PHP","icon":"php","href":"/id/developer-resources/sdks/php"},{"title":"C#","icon":"c","href":"/id/developer-resources/sdks/csharp"},{"title":"Rust","icon":"rust","href":"/id/developer-resources/sdks/rust"}]},{"group":"Mobile Checkout SDKs","icon":"mobile","pages":[{"title":"Mobile Integration Guide","sidebarTitle":"Integration Guide","icon":"mobile","href":"/id/developer-resources/mobile-integration"},{"title":"Android","sidebarTitle":"Android","tag":"NEW","icon":"android","href":"/id/developer-resources/sdks/android"},{"title":"iOS","sidebarTitle":"iOS","tag":"NEW","icon":"apple","href":"/id/developer-resources/sdks/ios"},{"title":"React Native","sidebarTitle":"React Native","tag":"NEW","icon":"react","href":"/id/developer-resources/sdks/react-native"},{"title":"Flutter","sidebarTitle":"Flutter","tag":"NEW","icon":"layer-group","href":"/id/developer-resources/sdks/flutter"}]},{"group":"Framework Adaptors","icon":"frame","pages":[{"sidebarTitle":"Ikhtisar","title":"Ikhtisar Adaptor Framework","icon":"box","href":"/id/developer-resources/framework-adaptors"},{"title":"Adaptor Next.js","icon":"code-merge","href":"/id/developer-resources/nextjs-adaptor"},{"title":"Adaptor Better Auth","icon":"code-merge","href":"/id/developer-resources/better-auth-adaptor"},{"title":"Komponen Convex","icon":"code-merge","href":"/id/developer-resources/convex-component"},{"title":"TanStack Adaptor","icon":"code-merge","href":"/id/developer-resources/tanstack-adaptor"},{"title":"Nuxt Adaptor","icon":"code-merge","href":"/id/developer-resources/nuxt-adaptor"},{"title":"Adaptor Express","icon":"code-merge","href":"/id/developer-resources/express-adaptor"},{"title":"Adaptor Astro","icon":"code-merge","href":"/id/developer-resources/astro-adaptor"},{"title":"Adaptor SvelteKit","icon":"code-merge","href":"/id/developer-resources/sveltekit-adaptor"},{"title":"Hono Adaptor","icon":"code-merge","href":"/id/developer-resources/hono-adaptor"},{"title":"Remix Adaptor","icon":"code-merge","href":"/id/developer-resources/remix-adaptor"},{"title":"Fastify Adaptor","icon":"code-merge","href":"/id/developer-resources/fastify-adaptor"},{"title":"Bun Adaptor","icon":"code-merge","href":"/id/developer-resources/bun-adaptor"}]},{"group":"Webhooks","icon":"webhook","pages":[{"sidebarTitle":"Overview","title":"Webhooks","icon":"webhook","href":"/id/developer-resources/webhooks"},{"title":"Panduan Webhook Events","icon":"bell","href":"/id/developer-resources/webhooks/intents/webhook-events-guide"},{"group":"Webhook Payloads","icon":"code","pages":[{"title":"Pembayaran","icon":"credit-card","href":"/id/developer-resources/webhooks/intents/payment"},{"sidebarTitle":"Langganan","title":"Webhook Langganan","icon":"repeat","href":"/id/developer-resources/webhooks/intents/subscription"},{"title":"Pengembalian Dana","icon":"rotate-left","href":"/id/developer-resources/webhooks/intents/refund"},{"sidebarTitle":"Sengketa","title":"Webhook Sengketa","icon":"circle-exclamation","href":"/id/developer-resources/webhooks/intents/dispute"},{"title":"Kunci Lisensi","icon":"key","href":"/id/developer-resources/webhooks/intents/license-key"},{"title":"Entitlement Grant","icon":"gift","href":"/id/developer-resources/webhooks/intents/entitlement-grant"},{"sidebarTitle":"Penagihan Berbasis Kredit","title":"Webhook Penagihan Berbasis Kredit","icon":"coins","href":"/id/developer-resources/webhooks/intents/credit"},{"title":"Pemulihan","icon":"rotate","href":"/id/developer-resources/webhooks/intents/recovery"},{"sidebarTitle":"Payout","title":"Webhook Payout","icon":"money-bill-transfer","href":"/id/developer-resources/webhooks/intents/payout"}]},{"group":"Deploy to Cloud","icon":"rocket","pages":[{"title":"Fungsi Vercel","icon":"triangle","href":"/id/developer-resources/webhooks/examples/vercel-example"},{"title":"Cloudflare Workers","icon":"cloud","href":"/id/developer-resources/webhooks/examples/cloudflare-example"},{"title":"Supabase Edge Functions","icon":"bolt","href":"/id/developer-resources/webhooks/examples/supabase-example"},{"title":"Fungsi Netlify","icon":"diamond","href":"/id/developer-resources/webhooks/examples/netlify-example"}]}]},{"group":"Testing \u0026 Demo Tools","icon":"flask","pages":[{"title":"Mode Uji vs Mode Langsung","icon":"toggle-on","href":"/id/miscellaneous/test-mode-vs-live-mode"},{"title":"Testing Process","icon":"flask","href":"/id/miscellaneous/testing-process"},{"title":"Produk Demo Atlas","icon":"palette","href":"/id/features/atlas-demo-website"}]},{"group":"Boilerplates","icon":"box-open","pages":[{"sidebarTitle":"Expo","title":"Expo Boilerplate","icon":"https://mintlify.s3.us-west-1.amazonaws.com/dodopayments/images/logos/expo.svg","tag":"NEW","href":"/id/developer-resources/expo-boilerplate"},{"sidebarTitle":"Supabase","title":"Boilerplate Supabase","icon":"https://mintlify.s3.us-west-1.amazonaws.com/dodopayments/images/logos/supabase.svg","href":"/id/developer-resources/supabase-boilerplate"},{"sidebarTitle":"Plugin Figma","title":"Figma Plugin","icon":"https://mintlify.s3.us-west-1.amazonaws.com/dodopayments/images/logos/figma.svg","href":"/id/integrations/figma-plugin"},{"sidebarTitle":"Next.js","title":"Next.js Minimal Boilerplate","icon":"https://mintlify.s3.us-west-1.amazonaws.com/dodopayments/images/logos/nextjs.svg","href":"/id/developer-resources/nextjs-boilerplate"},{"sidebarTitle":"Astro","title":"Astro Minimal Boilerplate","icon":"https://mintlify.s3.us-west-1.amazonaws.com/dodopayments/images/logos/astro.svg","href":"/id/developer-resources/astro-boilerplate"},{"sidebarTitle":"FastAPI","title":"FastAPI Boilerplate","icon":"https://mintlify.s3.us-west-1.amazonaws.com/dodopayments/images/logos/fastapi.svg","tag":"NEW","href":"/id/developer-resources/fastapi-boilerplate"},{"sidebarTitle":"Go","title":"Go Boilerplate","icon":"golang","tag":"NEW","href":"/id/developer-resources/go-boilerplate"}]},{"title":"Dodo CLI","icon":"terminal","tag":"NEW","href":"/id/developer-resources/sdks/cli"},{"title":"Overlay Checkout","icon":"cart-shopping","href":"/id/developer-resources/overlay-checkout"},{"title":"Checkout Inline","icon":"credit-card","href":"/id/developer-resources/inline-checkout"},{"title":"Billing SDK","icon":"boxes-stacked","href":"/id/developer-resources/billingsdk"},{"title":"Dodo Payments MCP Server","icon":"server","href":"/id/developer-resources/mcp-server"},{"title":"Agent Skills","icon":"wand-magic-sparkles","href":"/id/developer-resources/agent-skills"},{"sidebarTitle":"Sinkronisasi Database","title":"Sinkronkan dengan Database Anda","icon":"database","href":"/id/developer-resources/dodo-sync"},{"sidebarTitle":"Migrasi Langganan","title":"Migrasi Langganan ke Dodo Payments","icon":"file-import","href":"/id/miscellaneous/subscription-migration"}]},{"group":"Merchant of Record","pages":[{"sidebarTitle":"Apa itu MoR?","title":"Pendahuluan","icon":"building-columns","href":"/id/features/mor-introduction"},{"title":"MoR vs PG","icon":"scale-balanced","href":"/id/features/mor-vs-pg"},{"title":"Negara yang Memenuhi Syarat untuk Penerimaan Merchant","icon":"globe","href":"/id/miscellaneous/accepted-countries-and-territories"},{"title":"Kebijakan Tinjauan \u0026 Pemantauan","icon":"magnifying-glass","href":"/id/miscellaneous/review-monitoring-policy"},{"sidebarTitle":"Bypass of App Store Fees","title":"Menghindari Biaya App Store \u0026 Play Store Menggunakan Dodo Payments","icon":"shield-check","href":"/id/features/bypassing-app-store-fees"}]},{"group":"Miscellaneous","pages":[{"group":"Support Channels","icon":"headset","pages":[{"title":"Bantuan dan Dukungan","icon":"headset","href":"/id/miscellaneous/help-support"},{"title":"Permintaan Fitur dan Peta Jalan","icon":"lightbulb","href":"/id/features/feature-request"}]},{"title":"Aplikasi Mobile \u0026 Desktop","icon":"mobile","href":"/id/features/mobile-app"},{"title":"Kebijakan Pelaporan Keamanan","icon":"shield","href":"/id/miscellaneous/security-policy"}]}]},{"tab":"Guides","icon":"compass","pages":[{"title":"Guides","href":"/id/developer-resources/integration-guide"}]},{"tab":"API Reference","icon":"rectangle-code","pages":[{"title":"API Reference","href":"/id/api-reference/introduction"}]},{"tab":"External Integrations","icon":"plug","pages":[{"title":"External Integrations","href":"/id/integrations/introduction"}]},{"tab":"Changelog","icon":"calendar-days","pages":[{"title":"Changelog","href":"/id/changelog/introduction"}]},{"tab":"Community Projects","icon":"users","pages":[{"title":"Community Projects","href":"/id/community/overview"}]}]},{"language":"ja","pages":[{"title":"ja","href":"/ja/features/entitlements/introduction"}]},{"language":"ko","pages":[{"title":"ko","href":"/ko/features/entitlements/introduction"}]},{"language":"pt-BR","pages":[{"title":"pt-BR","href":"/pt-BR/features/entitlements/introduction"}]},{"language":"vi","pages":[{"title":"vi","href":"/vi/features/entitlements/introduction"}]},{"language":"cn","pages":[{"title":"cn","href":"/cn/features/entitlements/introduction"}]},{"language":"hi","pages":[{"title":"hi","href":"/hi/features/entitlements/introduction"}]},{"language":"it","pages":[{"title":"it","href":"/it/features/entitlements/introduction"}]},{"language":"sv","pages":[{"title":"sv","href":"/sv/features/entitlements/introduction"}]}]},"basePath":"","title":"Introduction - Dodo Payments Documentation","buildId":"dpl_5tKr6cUUeuVJdEZ9JAEY3h4soMJ8","deploymentId":"dpl_5tKr6cUUeuVJdEZ9JAEY3h4soMJ8","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-B90Qhg8r.js","DynamicMarkdown-DpAS3GCb.js","zoom-image-lightbox-9bQKnClW.js","lightbox-handle-r17bVUz3.js"]}