Tự động cung cấp license key, tệp có thể tải xuống, feature flag và quyền truy cập vào Discord, GitHub, Telegram, Framer và Notion khi khách hàng thanh toán.
Entitlement chuyển một khoản thanh toán thành công hoặc subscription đang hoạt động thành quyền truy cập: license key trong hộp thư của khách hàng, feature flag mà ứng dụng của bạn kiểm tra, vai trò Discord, repository GitHub, template Notion, liên kết remix Framer, lời mời trò chuyện Telegram hoặc một gói tệp có thể tải xuống. Dodo Payments tự động cấp, theo dõi và thu hồi quyền truy cập đó khi vòng đời thanh toán thay đổi.
The Entitlements dashboard. Each entitlement is a reusable template; the right pane shows individual customer grants.
Entitlement là định nghĩa có thể tái sử dụng về một nội dung bạn cung cấp cho khách hàng, chẳng hạn như license key Pro, vai trò Discord “Patrons”, quyền truy cập vào repository GitHub riêng tư hoặc một gói sách điện tử có thể tải xuống. Bạn gắn entitlement vào product, và Dodo Payments cung cấp entitlement đó khi khách hàng thanh toán.Khi khách hàng mua product, Dodo Payments tạo một grant: một lần cấp entitlement cho một khách hàng. Grant có một trong bốn trạng thái: Pending trong khi quá trình cung cấp đang diễn ra, Delivered khi khách hàng đã có quyền truy cập, Failed nếu không thể hoàn tất việc cung cấp, và Revoked khi quyền truy cập bị thu hồi.
Entitlement kiểm soát việc cung cấp (khách hàng có quyền truy cập không?). Credit kiểm soát mức sử dụng (họ có thể sử dụng bao nhiêu?). Bạn có thể gắn cả hai vào cùng một product. Xem Credit-Based Billing để biết thêm về credit.
Mỗi entitlement được cung cấp thông qua một integration. Hãy chọn integration phù hợp với nội dung bạn bán.
License Keys
Tạo mã giấy phép duy nhất với giới hạn kích hoạt và thời hạn. Phù hợp nhất cho phần mềm, plugin, và CLI.
Digital Files
Cung cấp các tệp có thể tải xuống, chẳng hạn như sách điện tử, template và nội dung đa phương tiện, bằng URL tải xuống presigned và hướng dẫn tùy chọn.
Feature Flags
Kiểm soát các tính năng trong ứng dụng của riêng bạn dựa trên giao dịch mua. Được cung cấp khi tạo, kiểm tra thông qua API và thu hồi khi hủy.
Discord
Cấp cho khách hàng một vai trò trong server Discord của bạn khi họ mua hàng. Vai trò sẽ tự động bị xóa khi hủy.
GitHub
Thêm khách hàng làm người cộng tác vào kho lưu trữ riêng tư theo mức quyền bạn chọn.
Telegram
Thêm khách hàng vào trò chuyện hoặc kênh Telegram riêng tư sau khi mua.
Framer
Mở khóa một liên kết remix của mẫu Framer cho khách hàng thanh toán.
Notion
Nhân bản một mẫu Notion vào không gian làm việc của khách hàng khi mua.
Grant tuân theo cùng các sự kiện thanh toán và subscription mà bạn nhận được dưới dạng webhook. Dodo Payments tự động tạo và thu hồi grant cho các giao dịch mua dựa trên vòng đời thanh toán, vì vậy bạn không cần tự gọi grant API.
Dodo Payments tạo grant khi một khoản thanh toán hoàn tất hoặc một subscription trở nên hoạt động. Grant feature flag bắt đầu ở trạng thái Delivered. Grant license key cũng bắt đầu ở trạng thái Delivered khi entitlement sử dụng fulfillment_mode: auto (mặc định). Trong fulfillment_mode: manual, grant bắt đầu ở trạng thái Pending mà chưa có key, cho đến khi bạn cung cấp key bằng Fulfill License Key Grant. Mọi integration khác đều bắt đầu ở trạng thái Pending.Các integration dựa trên OAuth (Discord, GitHub, Notion) cung cấp một oauth_url mà khách hàng truy cập để đồng ý. Dodo Payments cố gắng tạo URL này khi tạo grant. Nếu không thành công, trường này giữ trạng thái null cho đến khi khách hàng bắt đầu quy trình chấp nhận từ email cung cấp hoặc Customer Portal. Các integration trực tiếp trên nền tảng (Telegram, Framer, Digital Files) chỉ giữ trạng thái Pending trong khi việc cung cấp đang được thiết lập, sau đó chuyển sang Delivered.
2
Delivered
Khi việc cung cấp hoàn tất, grant chuyển sang Delivered và delivered_at được thiết lập. Việc cung cấp hoàn tất khi license key được tạo, vai trò được gán, quyền truy cập repository được cấp, các liên kết tệp được xác định hoặc quy trình OAuth hoàn tất.
3
Failed
Nếu lệnh gọi integration trả về lỗi không thể retry, chẳng hạn như OAuth token đã bị thu hồi, quyền bị từ chối hoặc tệp không còn tồn tại, grant chuyển sang Failed. Các trường error_code và error_message ghi lại lý do.
4
Revoked
Khi quyền truy cập bị thu hồi, chẳng hạn do subscription bị hủy, khoản hoàn tiền được phát hành hoặc bạn thu hồi grant, grant chuyển sang Revoked. Trường revocation_reason ghi lại tác nhân.
Mỗi sự kiện thanh toán và subscription thay đổi grant như sau:
Sự kiện
Hành vi
payment.succeeded (thanh toán một lần)
Cấp một grant cho mỗi entitlement được gắn. Entitlement License Key cấp một grant cho mỗi key.
payment.succeeded (thanh toán liên kết với subscription)
Không thay đổi. Các sự kiện subscription bên dưới điều khiển những grant này.
subscription.active
Cấp grant cho mọi entitlement được gắn nhưng chưa có grant, đồng thời cấp lại các grant trước đó đã bị thu hồi cho cùng subscription. Các grant bị thu hồi bằng manual, refund hoặc platform_external sẽ không được cấp lại.
subscription.renewed
Không thay đổi. Grant hiện có vẫn tồn tại qua các lần gia hạn.
subscription.past_due
Không thay đổi. Grant vẫn được cung cấp trong toàn bộ thời gian gia hạn.
subscription.on_hold
Thu hồi mọi grant đã cung cấp và đang chờ với revocation_reason: subscription_on_hold.
subscription.paused
Thu hồi mọi grant đã cung cấp và đang chờ với revocation_reason: SubscriptionPaused. Không giống các lý do subscription khác, giá trị này sử dụng PascalCase, vì vậy hãy khớp chính xác.
subscription.unpaused
Cấp lại các grant trước đó đã bị thu hồi cho cùng subscription, giống như subscription.active.
subscription.cancelled
Thu hồi mọi grant với revocation_reason: subscription_cancelled.
subscription.expired
Thu hồi mọi grant với revocation_reason: subscription_expired.
subscription.plan_changed
Thu hồi mọi grant hiện tại với revocation_reason: plan_changed, sau đó cấp grant cho các entitlement của plan mới.
refund.succeeded (thanh toán một lần)
Thu hồi các grant của khoản thanh toán đó với revocation_reason: refund.
Thu hồi thủ công qua API
Thu hồi grant với revocation_reason: manual. Grant bị thu hồi thủ công sẽ không được tự động cấp lại khi subscription gia hạn.
License key bị vô hiệu hóa
Đối với grant license key, việc vô hiệu hóa key cơ sở sẽ thu hồi grant với revocation_reason: license_key_disabled. Việc bật lại key sẽ tự động khôi phục grant.
Phát hiện sai lệch nền tảng
Nếu phần nền tảng của integration bị lệch trạng thái, chẳng hạn vai trò Discord bị xóa thủ công, GitHub App mất quyền truy cập repository hoặc một lần đối soát phát hiện target bị thiếu, Dodo Payments sẽ thu hồi grant với revocation_reason: platform_external. Grant sẽ không được tự động cấp lại khi subscription gia hạn cho đến khi sự cố nền tảng được giải quyết.
Grant do subscription điều khiển là idempotent theo (entitlement, customer, subscription), vì vậy các lần gia hạn và kích hoạt lại không tạo grant trùng lặp. Grant một lần là idempotent theo (entitlement, customer, payment).
Đi tới Entitlements trong dashboard và nhấp vào + để tạo entitlement.
2
Pick an Integration
Chọn loại integration: License Key, Digital Files, Feature Flag, Discord, GitHub, Telegram, Figma, Framer hoặc Notion. Đối với integration nền tảng, trước tiên hãy kết nối tài khoản nếu bạn chưa thực hiện.
3
Configure Delivery
Điền các trường cho integration. Ví dụ: GitHub yêu cầu repository và mức quyền, Discord yêu cầu server và vai trò tùy chọn, còn License Key yêu cầu giới hạn activations và thời hạn license.
Creating a GitHub entitlement. Each integration shows the fields it needs.
4
Save
Nhấp vào Create Entitlement. Giờ đây bạn có thể gắn entitlement vào bất kỳ product nào.
Mở một product, đi tới phần Entitlements và chọn các entitlement cần cung cấp khi product được mua. Một product có thể cung cấp nhiều entitlement cùng lúc. Ví dụ: plan Pro có thể bao gồm license key, quyền truy cập GitHub và vai trò Discord.
Attaching entitlements to a product. Selected entitlements are delivered on every successful purchase or active subscription.
Sau khi mua hàng, khách hàng nhận được email cung cấp có license key, liên kết tải xuống, liên kết lời mời OAuth hoặc lời mời nền tảng tương ứng với các entitlement trên product. Những thông tin tương tự vẫn có trong Customer Portal, bên dưới lịch sử đơn hàng của họ, trong khi grant đang hoạt động.
Quyền truy cập subscriber vào Discord, GitHub và Notion yêu cầu khách hàng ủy quyền cho Dodo Payments cấp quyền truy cập đó. Các grant này giữ trạng thái Pending cho đến khi khách hàng hoàn tất quy trình OAuth từ liên kết trong email hoặc Customer Portal. Sau khi khách hàng ủy quyền, grant chuyển sang Delivered và Dodo Payments cấp quyền truy cập nền tảng.
Khi grant bị thu hồi, Dodo Payments xóa quyền truy cập trên nền tảng: xóa vai trò Discord, xóa cộng tác viên GitHub hoặc vô hiệu hóa license key. Khách hàng nhìn thấy thay đổi trong Customer Portal.
Đối với Digital Files, việc thu hồi sẽ ngăn tạo URL tải xuống presigned mới, nhưng không vô hiệu hóa các bản sao mà khách hàng đã tải xuống. Hãy tính đến điều này khi lập kế hoạch kiểm soát quyền truy cập nội dung.
Mở bất kỳ entitlement nào từ dashboard để xem các grant của entitlement đó. Bảng chi tiết hiển thị tổng số grant, bộ lọc trạng thái và một hàng cho mỗi grant, bao gồm khách hàng, ngày truy cập, trạng thái và thao tác Revoke.Để quản lý grant theo chương trình, hãy liệt kê chúng bằng bộ lọc status và thu hồi một grant theo 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',});
Dodo Payments gửi bốn sự kiện webhook trong vòng đời của grant. Hãy đăng ký các sự kiện này để giữ cho ứng dụng của bạn đồng bộ với những nội dung mỗi khách hàng có thể truy cập.
Sự kiện
Được kích hoạt khi
entitlement_grant.created
Grant được tạo. Grant license key được tự động hoàn tất và grant feature flag có trạng thái Delivered ngay khi nhận. Grant license key được hoàn tất thủ công và mọi integration khác có trạng thái Pending khi nhận, sau đó chuyển sang Delivered khi lệnh gọi nền tảng thành công hoặc, đối với integration dựa trên OAuth, khi khách hàng ủy quyền.
entitlement_grant.delivered
Grant hiện có chuyển sang Delivered, nghĩa là khách hàng đã có quyền truy cập. Grant có trạng thái Delivered ngay khi tạo chỉ kích hoạt created.
entitlement_grant.failed
Không thể cung cấp grant. Kiểm tra error_code và error_message.
entitlement_grant.revoked
Quyền truy cập đã bị thu hồi. Kiểm tra revocation_reason.
Entitlement Grant Webhook Payloads
Xem schema payload đầy đủ, các event mẫu và tài liệu tham chiếu revocation_reason.
Sử dụng một entitlement cho mỗi kênh cung cấp. Không dùng chung một entitlement Discord cho các product có mục đích vai trò khác nhau. Hãy tạo một entitlement cho mỗi vai trò để việc thu hồi luôn rõ ràng.
Trước tiên hãy kiểm thử ở test mode. Tạo entitlement, gắn entitlement vào một product kiểm thử, thực hiện checkout và theo dõi grant chuyển từ Pending sang Delivered. Sau đó hủy subscription kiểm thử và xác nhận grant đã bị thu hồi.
Lắng nghe entitlement_grant.delivered, không phải payment.succeeded. Một khoản thanh toán có thể thành công trước khi việc cung cấp hoàn tất, đặc biệt với các quy trình OAuth. Hãy chờ grant đạt Delivered trước khi mở khóa các tính năng phụ thuộc trong hệ thống của bạn. Grant được cung cấp ngay khi tạo, chẳng hạn license key tự động hoàn tất hoặc feature flag, sẽ đến dưới dạng entitlement_grant.created với status: "Delivered".
Xem entitlement_grant.failed là trạng thái cần xử lý. Grant thất bại nghĩa là khách hàng đã thanh toán nhưng chưa nhận được quyền truy cập. Hiển thị các grant này cho đội ngũ hỗ trợ hoặc kích hoạt việc cấp lại.
Ánh xạ revocation_reason vào các quy trình giữ chân khách hàng. Việc thu hồi subscription_on_hold có thể khôi phục vì khách hàng có thể cập nhật thẻ. Việc thu hồi manual là có chủ ý. Hãy xử lý chúng khác nhau trong thông báo gửi khách hàng.
Không thu hồi quyền truy cập khi có subscription.past_due. Sự kiện đó mở ra thời gian gia hạn, và khách hàng vẫn giữ quyền truy cập cho đến khi khoảng thời gian kết thúc. Hãy chờ subscription.on_hold hoặc subscription.cancelled.
Lần sửa đổi cuối 26 tháng 9, 2026
Trang này có hữu ích không?
⌘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":"6af4027c778b6a49d3c24d62","clientVersion":"0.0.4102","searchFilterCounts":[{"language":"en","tag":"API Reference","count":181},{"language":"en","tag":"Docs","count":176},{"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":86},{"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":74},{"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":23},{"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":"llms-txt-v2","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}],"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":"vi/features/entitlements/introduction","slug":"/vi/features/entitlements/introduction","pageMetadata":{"title":"Giới Thiệu","sidebarTitle":"Giới Thiệu","description":"Tự động cung cấp license key, tệp có thể tải xuống, feature flag và quyền truy cập vào Discord, GitHub, Telegram, Framer và Notion khi khách hàng thanh toán.","icon":"box-archive","keywords":["Dodo Payments","entitlements","fulfillment","license keys","digital delivery","platform access"],"href":"/vi/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: \"Tự động cung cấp license key, tệp có thể tải xuống, feature flag và quyền truy cập vào Discord, GitHub, Telegram, Framer và Notion khi khách hàng thanh toán.\"\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 chuyển một khoản thanh toán thành công hoặc subscription đang hoạt động thành quyền truy cập: license key trong hộp thư của khách hàng, feature flag mà ứng dụng của bạn kiểm tra, vai trò Discord, repository GitHub, template Notion, liên kết remix Framer, lời mời trò chuyện Telegram hoặc một gói tệp có thể tải xuống. Dodo Payments tự động cấp, theo dõi và thu hồi quyền truy cập đó khi vòng đời thanh toán thay đổi.`})}),`\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:`Bảng điều khiển Entitlements với danh sách entitlement ở bên trái và hoạt động grant ở bên phải`,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:`entitlement-là-gì`,children:`Entitlement là gì?`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Entitlement`}),` là định nghĩa có thể tái sử dụng về một nội dung bạn cung cấp cho khách hàng, chẳng hạn như license key Pro, vai trò Discord “Patrons”, quyền truy cập vào repository GitHub riêng tư hoặc một gói sách điện tử có thể tải xuống. Bạn gắn entitlement vào product, và Dodo Payments cung cấp entitlement đó khi khách hàng thanh toán.`]}),`\n`,_jsxs(_components.p,{children:[`Khi khách hàng mua product, Dodo Payments tạo một `,_jsx(_components.strong,{children:`grant`}),`: một lần cấp entitlement cho một khách hàng. Grant có một trong bốn trạng thái: `,_jsx(_components.code,{children:`Pending`}),` trong khi quá trình cung cấp đang diễn ra, `,_jsx(_components.code,{children:`Delivered`}),` khi khách hàng đã có quyền truy cập, `,_jsx(_components.code,{children:`Failed`}),` nếu không thể hoàn tất việc cung cấp, và `,_jsx(_components.code,{children:`Revoked`}),` khi quyền truy cập bị thu hồi.`]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`Entitlement kiểm soát `,_jsx(_components.strong,{children:`việc cung cấp`}),` (khách hàng có quyền truy cập không?). Credit kiểm soát `,_jsx(_components.strong,{children:`mức sử dụng`}),` (họ có thể sử dụng bao nhiêu?). Bạn có thể gắn cả hai vào cùng một product. Xem `,_jsx(_components.a,{href:`/features/credit-based-billing`,children:`Credit-Based Billing`}),` để biết thêm về credit.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`các-tích-hợp-có-sẵn`,children:`Các Tích Hợp Có Sẵn`}),`\n`,_jsx(_components.p,{children:`Mỗi entitlement được cung cấp thông qua một integration. Hãy chọn integration phù hợp với nội dung bạn bán.`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`License Keys`,icon:`key`,href:`/features/license-keys`,children:_jsx(_components.p,{children:`Tạo mã giấy phép duy nhất với giới hạn kích hoạt và thời hạn. Phù hợp nhất cho phần mềm, plugin, và CLI.`})}),_jsx(Card,{title:`Digital Files`,icon:`download`,href:`/features/digital-product-delivery`,children:_jsx(_components.p,{children:`Cung cấp các tệp có thể tải xuống, chẳng hạn như sách điện tử, template và nội dung đa phương tiện, bằng URL tải xuống presigned và hướng dẫn tùy chọn.`})}),_jsx(Card,{title:`Feature Flags`,icon:`flag`,href:`/features/entitlements/feature-flags`,children:_jsx(_components.p,{children:`Kiểm soát các tính năng trong ứng dụng của riêng bạn dựa trên giao dịch mua. Được cung cấp khi tạo, kiểm tra thông qua API và thu hồi khi hủy.`})}),_jsx(Card,{title:`Discord`,icon:`discord`,href:`/features/entitlements/discord`,children:_jsx(_components.p,{children:`Cấp cho khách hàng một vai trò trong server Discord của bạn khi họ mua hàng. Vai trò sẽ tự động bị xóa khi hủy.`})}),_jsx(Card,{title:`GitHub`,icon:`github`,href:`/features/entitlements/github`,children:_jsx(_components.p,{children:`Thêm khách hàng làm người cộng tác vào kho lưu trữ riêng tư theo mức quyền bạn chọn.`})}),_jsx(Card,{title:`Telegram`,icon:`telegram`,href:`/features/entitlements/telegram`,children:_jsx(_components.p,{children:`Thêm khách hàng vào trò chuyện hoặc kênh Telegram riêng tư sau khi mua.`})}),_jsx(Card,{title:`Framer`,icon:`puzzle-piece`,href:`/features/entitlements/framer`,children:_jsx(_components.p,{children:`Mở khóa một liên kết remix của mẫu Framer cho khách hàng thanh toán.`})}),_jsx(Card,{title:`Notion`,icon:`book`,href:`/features/entitlements/notion`,children:_jsx(_components.p,{children:`Nhân bản một mẫu Notion vào không gian làm việc của khách hàng khi mua.`})})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`cách-thức-hoạt-động-của-grants`,children:`Cách thức hoạt động của Grants`}),`\n`,_jsx(_components.p,{children:`Grant tuân theo cùng các sự kiện thanh toán và subscription mà bạn nhận được dưới dạng webhook. Dodo Payments tự động tạo và thu hồi grant cho các giao dịch mua dựa trên vòng đời thanh toán, vì vậy bạn không cần tự gọi grant API.`}),`\n`,_jsx(Heading,{level:`3`,id:`vòng-đời-của-grant`,children:`Vòng đời của Grant`}),`\n`,_jsx(_components.p,{children:`Grant trải qua các trạng thái sau:`}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Created`,children:[_jsxs(_components.p,{children:[`Dodo Payments tạo grant khi một khoản thanh toán hoàn tất hoặc một subscription trở nên hoạt động. Grant feature flag bắt đầu ở trạng thái `,_jsx(_components.code,{children:`Delivered`}),`. Grant license key cũng bắt đầu ở trạng thái `,_jsx(_components.code,{children:`Delivered`}),` khi entitlement sử dụng `,_jsx(_components.code,{children:`fulfillment_mode: auto`}),` (mặc định). Trong `,_jsx(_components.code,{children:`fulfillment_mode: manual`}),`, grant bắt đầu ở trạng thái `,_jsx(_components.code,{children:`Pending`}),` mà chưa có key, cho đến khi bạn cung cấp key bằng `,_jsx(_components.a,{href:`/api-reference/entitlements/fulfill-license-key`,children:`Fulfill License Key Grant`}),`. Mọi integration khác đều bắt đầu ở trạng thái `,_jsx(_components.code,{children:`Pending`}),`.`]}),_jsxs(_components.p,{children:[`Các integration dựa trên OAuth (Discord, GitHub, Notion) cung cấp một `,_jsx(_components.code,{children:`oauth_url`}),` mà khách hàng truy cập để đồng ý. Dodo Payments cố gắng tạo URL này khi tạo grant. Nếu không thành công, trường này giữ trạng thái `,_jsx(_components.code,{children:`null`}),` cho đến khi khách hàng bắt đầu quy trình chấp nhận từ email cung cấp hoặc Customer Portal. Các integration trực tiếp trên nền tảng (Telegram, Framer, Digital Files) chỉ giữ trạng thái `,_jsx(_components.code,{children:`Pending`}),` trong khi việc cung cấp đang được thiết lập, sau đó chuyển sang `,_jsx(_components.code,{children:`Delivered`}),`.`]})]}),_jsx(Step,{title:`Delivered`,children:_jsxs(_components.p,{children:[`Khi việc cung cấp hoàn tất, grant chuyển sang `,_jsx(_components.code,{children:`Delivered`}),` và `,_jsx(_components.code,{children:`delivered_at`}),` được thiết lập. Việc cung cấp hoàn tất khi license key được tạo, vai trò được gán, quyền truy cập repository được cấp, các liên kết tệp được xác định hoặc quy trình OAuth hoàn tất.`]})}),_jsx(Step,{title:`Failed`,children:_jsxs(_components.p,{children:[`Nếu lệnh gọi integration trả về lỗi không thể retry, chẳng hạn như OAuth token đã bị thu hồi, quyền bị từ chối hoặc tệp không còn tồn tại, grant chuyển sang `,_jsx(_components.code,{children:`Failed`}),`. Các trường `,_jsx(_components.code,{children:`error_code`}),` và `,_jsx(_components.code,{children:`error_message`}),` ghi lại lý do.`]})}),_jsx(Step,{title:`Revoked`,children:_jsxs(_components.p,{children:[`Khi quyền truy cập bị thu hồi, chẳng hạn do subscription bị hủy, khoản hoàn tiền được phát hành hoặc bạn thu hồi grant, grant chuyển sang `,_jsx(_components.code,{children:`Revoked`}),`. Trường `,_jsx(_components.code,{children:`revocation_reason`}),` ghi lại tác nhân.`]})})]}),`\n`,_jsx(Heading,{level:`3`,id:`hành-vi-của-grant-theo-sự-kiện`,children:`Hành vi của Grant theo Sự kiện`}),`\n`,_jsx(_components.p,{children:`Mỗi sự kiện thanh toán và subscription thay đổi grant như sau:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Sự kiện`}),_jsx(_components.th,{children:`Hành vi`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`payment.succeeded`}),` (thanh toán một lần)`]}),_jsx(_components.td,{children:`Cấp một grant cho mỗi entitlement được gắn. Entitlement License Key cấp một grant cho mỗi key.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`payment.succeeded`}),` (thanh toán liên kết với subscription)`]}),_jsx(_components.td,{children:`Không thay đổi. Các sự kiện subscription bên dưới điều khiển những grant này.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`subscription.active`})}),_jsxs(_components.td,{children:[`Cấp grant cho mọi entitlement được gắn nhưng chưa có grant, đồng thời cấp lại các grant trước đó đã bị thu hồi cho cùng subscription. Các grant bị thu hồi bằng `,_jsx(_components.code,{children:`manual`}),`, `,_jsx(_components.code,{children:`refund`}),` hoặc `,_jsx(_components.code,{children:`platform_external`}),` sẽ không được cấp lại.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`subscription.renewed`})}),_jsx(_components.td,{children:`Không thay đổi. Grant hiện có vẫn tồn tại qua các lần gia hạn.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`subscription.past_due`})}),_jsxs(_components.td,{children:[`Không thay đổi. Grant vẫn được cung cấp trong toàn bộ `,_jsx(_components.a,{href:`/features/subscription#grace-period`,children:`thời gian gia hạn`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`subscription.on_hold`})}),_jsxs(_components.td,{children:[`Thu hồi mọi grant đã cung cấp và đang chờ với `,_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:[`Thu hồi mọi grant đã cung cấp và đang chờ với `,_jsx(_components.code,{children:`revocation_reason: SubscriptionPaused`}),`. Không giống các lý do subscription khác, giá trị này sử dụng PascalCase, vì vậy hãy khớp chính xác.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`subscription.unpaused`})}),_jsxs(_components.td,{children:[`Cấp lại các grant trước đó đã bị thu hồi cho cùng subscription, giống như `,_jsx(_components.code,{children:`subscription.active`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`subscription.cancelled`})}),_jsxs(_components.td,{children:[`Thu hồi mọi grant với `,_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:[`Thu hồi mọi grant với `,_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:[`Thu hồi mọi grant hiện tại với `,_jsx(_components.code,{children:`revocation_reason: plan_changed`}),`, sau đó cấp grant cho các entitlement của plan mới.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`refund.succeeded`}),` (thanh toán một lần)`]}),_jsxs(_components.td,{children:[`Thu hồi các grant của khoản thanh toán đó với `,_jsx(_components.code,{children:`revocation_reason: refund`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Thu hồi thủ công qua API`}),_jsxs(_components.td,{children:[`Thu hồi grant với `,_jsx(_components.code,{children:`revocation_reason: manual`}),`. Grant bị thu hồi thủ công sẽ không được tự động cấp lại khi subscription gia hạn.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`License key bị vô hiệu hóa`}),_jsxs(_components.td,{children:[`Đối với grant license key, việc vô hiệu hóa key cơ sở sẽ thu hồi grant với `,_jsx(_components.code,{children:`revocation_reason: license_key_disabled`}),`. Việc bật lại key sẽ tự động khôi phục grant.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Phát hiện sai lệch nền tảng`}),_jsxs(_components.td,{children:[`Nếu phần nền tảng của integration bị lệch trạng thái, chẳng hạn vai trò Discord bị xóa thủ công, GitHub App mất quyền truy cập repository hoặc một lần đối soát phát hiện target bị thiếu, Dodo Payments sẽ thu hồi grant với `,_jsx(_components.code,{children:`revocation_reason: platform_external`}),`. Grant sẽ không được tự động cấp lại khi subscription gia hạn cho đến khi sự cố nền tảng được giải quyết.`]})]})]})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`Grant do subscription điều khiển là idempotent theo `,_jsx(_components.code,{children:`(entitlement, customer, subscription)`}),`, vì vậy các lần gia hạn và kích hoạt lại không tạo grant trùng lặp. Grant một lần là idempotent theo `,_jsx(_components.code,{children:`(entitlement, customer, payment)`}),`.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`tạo-entitlement-đầu-tiên`,children:`Tạo Entitlement Đầu tiên`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Open Entitlements`,children:_jsxs(_components.p,{children:[`Đi tới `,_jsx(_components.strong,{children:`Entitlements`}),` trong dashboard và nhấp vào `,_jsx(_components.strong,{children:`+`}),` để tạo entitlement.`]})}),_jsx(Step,{title:`Pick an Integration`,children:_jsx(_components.p,{children:`Chọn loại integration: License Key, Digital Files, Feature Flag, Discord, GitHub, Telegram, Figma, Framer hoặc Notion. Đối với integration nền tảng, trước tiên hãy kết nối tài khoản nếu bạn chưa thực hiện.`})}),_jsxs(Step,{title:`Configure Delivery`,children:[_jsx(_components.p,{children:`Điền các trường cho integration. Ví dụ: GitHub yêu cầu repository và mức quyền, Discord yêu cầu server và vai trò tùy chọn, còn License Key yêu cầu giới hạn activations và thời hạn 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:`New Entitlement form with integration selector and configuration fields`,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:[`Nhấp vào `,_jsx(_components.strong,{children:`Create Entitlement`}),`. Giờ đây bạn có thể gắn entitlement vào bất kỳ product nào.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`gắn-entitlement-vào-product`,children:`Gắn Entitlement vào Product`}),`\n`,_jsxs(_components.p,{children:[`Mở một product, đi tới phần `,_jsx(_components.strong,{children:`Entitlements`}),` và chọn các entitlement cần cung cấp khi product được mua. Một product có thể cung cấp nhiều entitlement cùng lúc. Ví dụ: plan Pro có thể bao gồm license key, quyền truy cập GitHub và vai trò 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:`Product entitlement selection panel showing checkboxes for each available entitlement`,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:`trải-nghiệm-khách-hàng`,children:`Trải nghiệm Khách hàng`}),`\n`,_jsx(Heading,{level:`3`,id:`email-và-customer-portal`,children:`Email và Customer Portal`}),`\n`,_jsxs(_components.p,{children:[`Sau khi mua hàng, khách hàng nhận được email cung cấp có license key, liên kết tải xuống, liên kết lời mời OAuth hoặc lời mời nền tảng tương ứng với các entitlement trên product. Những thông tin tương tự vẫn có trong `,_jsx(_components.a,{href:`/features/customer-portal`,children:`Customer Portal`}),`, bên dưới lịch sử đơn hàng của họ, trong khi grant đang hoạt động.`]}),`\n`,_jsx(Heading,{level:`3`,id:`cung-cấp-dựa-trên-oauth`,children:`Cung cấp dựa trên OAuth`}),`\n`,_jsxs(_components.p,{children:[`Quyền truy cập subscriber vào Discord, GitHub và Notion yêu cầu khách hàng ủy quyền cho Dodo Payments cấp quyền truy cập đó. Các grant này giữ trạng thái `,_jsx(_components.code,{children:`Pending`}),` cho đến khi khách hàng hoàn tất quy trình OAuth từ liên kết trong email hoặc Customer Portal. Sau khi khách hàng ủy quyền, grant chuyển sang `,_jsx(_components.code,{children:`Delivered`}),` và Dodo Payments cấp quyền truy cập nền tảng.`]}),`\n`,_jsx(Heading,{level:`3`,id:`thu-hồi`,children:`Thu hồi`}),`\n`,_jsx(_components.p,{children:`Khi grant bị thu hồi, Dodo Payments xóa quyền truy cập trên nền tảng: xóa vai trò Discord, xóa cộng tác viên GitHub hoặc vô hiệu hóa license key. Khách hàng nhìn thấy thay đổi trong Customer Portal.`}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Đối với Digital Files, việc thu hồi sẽ ngăn tạo URL tải xuống presigned mới, nhưng không vô hiệu hóa các bản sao mà khách hàng đã tải xuống. Hãy tính đến điều này khi lập kế hoạch kiểm soát quyền truy cập nội dung.`})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`quản-lý-grant`,children:`Quản lý Grant`}),`\n`,_jsxs(_components.p,{children:[`Mở bất kỳ entitlement nào từ dashboard để xem các grant của entitlement đó. Bảng chi tiết hiển thị tổng số grant, bộ lọc trạng thái và một hàng cho mỗi grant, bao gồm khách hàng, ngày truy cập, trạng thái và thao tác `,_jsx(_components.strong,{children:`Revoke`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`Để quản lý grant theo chương trình, hãy liệt kê chúng bằng bộ lọc `,_jsx(_components.code,{children:`status`}),` và thu hồi một grant theo 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:`quản-lý-api`,children:`Quản lý 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:`Tạo entitlement thuộc bất kỳ loại integration nào.`})}),_jsx(Card,{title:`List Entitlements`,icon:`list`,href:`/api-reference/entitlements/list-entitlements`,children:_jsx(_components.p,{children:`Liệt kê entitlement, lọc theo loại integration.`})}),_jsx(Card,{title:`Get Entitlement`,icon:`magnifying-glass`,href:`/api-reference/entitlements/get-entitlement`,children:_jsx(_components.p,{children:`Truy xuất entitlement và cấu hình đã được phân giải.`})}),_jsx(Card,{title:`Update Entitlement`,icon:`pen`,href:`/api-reference/entitlements/update-entitlement`,children:_jsx(_components.p,{children:`Cập nhật tên, mô tả hoặc cấu hình integration.`})}),_jsx(Card,{title:`Delete Entitlement`,icon:`trash`,href:`/api-reference/entitlements/delete-entitlement`,children:_jsx(_components.p,{children:`Xóa mềm một entitlement. Các grant hiện có không bị thu hồi, nhưng Dodo Payments không còn quản lý chúng.`})}),_jsx(Card,{title:`Upload File`,icon:`upload`,href:`/api-reference/entitlements/upload-file`,children:_jsx(_components.p,{children:`Tải tệp có kích thước tối đa 500 MiB lên entitlement Digital Files.`})}),_jsx(Card,{title:`List Grants`,icon:`users`,href:`/api-reference/entitlements/list-grants`,children:_jsx(_components.p,{children:`Liệt kê các grant của entitlement, lọc theo trạng thái và khách hàng.`})}),_jsx(Card,{title:`Revoke Grant`,icon:`ban`,href:`/api-reference/entitlements/revoke-grant`,children:_jsx(_components.p,{children:`Thu hồi thủ công một grant.`})})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`webhook`,children:`Webhook`}),`\n`,_jsx(_components.p,{children:`Dodo Payments gửi bốn sự kiện webhook trong vòng đời của grant. Hãy đăng ký các sự kiện này để giữ cho ứng dụng của bạn đồng bộ với những nội dung mỗi khách hàng có thể truy cập.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Sự kiện`}),_jsx(_components.th,{children:`Được kích hoạt khi`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`entitlement_grant.created`})}),_jsxs(_components.td,{children:[`Grant được tạo. Grant license key được tự động hoàn tất và grant feature flag có trạng thái `,_jsx(_components.code,{children:`Delivered`}),` ngay khi nhận. Grant license key được hoàn tất thủ công và mọi integration khác có trạng thái `,_jsx(_components.code,{children:`Pending`}),` khi nhận, sau đó chuyển sang `,_jsx(_components.code,{children:`Delivered`}),` khi lệnh gọi nền tảng thành công hoặc, đối với integration dựa trên OAuth, khi khách hàng ủy quyền.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`entitlement_grant.delivered`})}),_jsxs(_components.td,{children:[`Grant hiện có chuyển sang `,_jsx(_components.code,{children:`Delivered`}),`, nghĩa là khách hàng đã có quyền truy cập. Grant có trạng thái `,_jsx(_components.code,{children:`Delivered`}),` ngay khi tạo chỉ kích hoạt `,_jsx(_components.code,{children:`created`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`entitlement_grant.failed`})}),_jsxs(_components.td,{children:[`Không thể cung cấp grant. Kiểm tra `,_jsx(_components.code,{children:`error_code`}),` và `,_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:[`Quyền truy cập đã bị thu hồi. Kiểm tra `,_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:[`Xem schema payload đầy đủ, các event mẫu và tài liệu tham chiếu `,_jsx(_components.code,{children:`revocation_reason`}),`.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`thực-hành-tốt-nhất`,children:`Thực hành Tốt nhất`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Sử dụng một entitlement cho mỗi kênh cung cấp.`}),` Không dùng chung một entitlement Discord cho các product có mục đích vai trò khác nhau. Hãy tạo một entitlement cho mỗi vai trò để việc thu hồi luôn rõ ràng.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Trước tiên hãy kiểm thử ở test mode.`}),` Tạo entitlement, gắn entitlement vào một product kiểm thử, thực hiện checkout và theo dõi grant chuyển từ `,_jsx(_components.code,{children:`Pending`}),` sang `,_jsx(_components.code,{children:`Delivered`}),`. Sau đó hủy subscription kiểm thử và xác nhận grant đã bị thu hồi.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Lắng nghe `,_jsx(_components.code,{children:`entitlement_grant.delivered`}),`, không phải `,_jsx(_components.code,{children:`payment.succeeded`}),`.`]}),` Một khoản thanh toán có thể thành công trước khi việc cung cấp hoàn tất, đặc biệt với các quy trình OAuth. Hãy chờ grant đạt `,_jsx(_components.code,{children:`Delivered`}),` trước khi mở khóa các tính năng phụ thuộc trong hệ thống của bạn. Grant được cung cấp ngay khi tạo, chẳng hạn license key tự động hoàn tất hoặc feature flag, sẽ đến dưới dạng `,_jsx(_components.code,{children:`entitlement_grant.created`}),` với `,_jsx(_components.code,{children:`status: \"Delivered\"`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Xem `,_jsx(_components.code,{children:`entitlement_grant.failed`}),` là trạng thái cần xử lý.`]}),` Grant thất bại nghĩa là khách hàng đã thanh toán nhưng chưa nhận được quyền truy cập. Hiển thị các grant này cho đội ngũ hỗ trợ hoặc kích hoạt việc cấp lại.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Ánh xạ `,_jsx(_components.code,{children:`revocation_reason`}),` vào các quy trình giữ chân khách hàng.`]}),` Việc thu hồi `,_jsx(_components.code,{children:`subscription_on_hold`}),` có thể khôi phục vì khách hàng có thể cập nhật thẻ. Việc thu hồi `,_jsx(_components.code,{children:`manual`}),` là có chủ ý. Hãy xử lý chúng khác nhau trong thông báo gửi khách hàng.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Không thu hồi quyền truy cập khi có `,_jsx(_components.code,{children:`subscription.past_due`}),`.`]}),` Sự kiện đó mở ra `,_jsx(_components.a,{href:`/features/subscription#grace-period`,children:`thời gian gia hạn`}),`, và khách hàng vẫn giữ quyền truy cập cho đến khi khoảng thời gian kết thúc. Hãy chờ `,_jsx(_components.code,{children:`subscription.on_hold`}),` hoặc `,_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":"Giới Thiệu","sidebarTitle":"Giới Thiệu","description":"Tự động cung cấp license key, tệp có thể tải xuống, feature flag và quyền truy cập vào Discord, GitHub, Telegram, Framer và Notion khi khách hàng thanh toán.","icon":"box-archive","keywords":["Dodo Payments","entitlements","fulfillment","license keys","digital delivery","platform access"],"href":"/vi/features/entitlements/introduction"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Entitlement là gì?","slug":"entitlement-là-gì","depth":2,"children":[]},{"title":"Các Tích Hợp Có Sẵn","slug":"các-tích-hợp-có-sẵn","depth":2,"children":[]},{"title":"Cách thức hoạt động của Grants","slug":"cách-thức-hoạt-động-của-grants","depth":2,"children":[{"title":"Vòng đời của Grant","slug":"vòng-đời-của-grant","depth":3,"children":[]},{"title":"Hành vi của Grant theo Sự kiện","slug":"hành-vi-của-grant-theo-sự-kiện","depth":3,"children":[]}]},{"title":"Tạo Entitlement Đầu tiên","slug":"tạo-entitlement-đầu-tiên","depth":2,"children":[]},{"title":"Gắn Entitlement vào Product","slug":"gắn-entitlement-vào-product","depth":2,"children":[]},{"title":"Trải nghiệm Khách hàng","slug":"trải-nghiệm-khách-hàng","depth":2,"children":[{"title":"Email và Customer Portal","slug":"email-và-customer-portal","depth":3,"children":[]},{"title":"Cung cấp dựa trên OAuth","slug":"cung-cấp-dựa-trên-oauth","depth":3,"children":[]},{"title":"Thu hồi","slug":"thu-hồi","depth":3,"children":[]}]},{"title":"Quản lý Grant","slug":"quản-lý-grant","depth":2,"children":[]},{"title":"Quản lý API","slug":"quản-lý-api","depth":2,"children":[]},{"title":"Webhook","slug":"webhook","depth":2,"children":[]},{"title":"Thực hành Tốt nhất","slug":"thực-hành-tốt-nhất","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":"Giới Thiệu - 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":1},"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":0},"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:27.012Z","gitLastModified":"2026-09-26T16:03:47.000Z","originalFileLocation":"vi/features/entitlements/introduction.mdx","locale":"vi"},"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=\"Tự động cung cấp license key, tệp có thể tải xuống, feature flag và quyền truy cập vào Discord, GitHub, Telegram, Framer và Notion khi khách hàng thanh toán.\">\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=\"Giới Thiệu - Dodo Payments Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Tự động cung cấp license key, tệp có thể tải xuống, feature flag và quyền truy cập vào Discord, GitHub, Telegram, Framer và Notion khi khách hàng thanh toán.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Dodo Payments Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.dodopayments.com/vi/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=Gi%E1%BB%9Bi+Thi%E1%BB%87u\u0026amp;description=T%E1%BB%B1+%C4%91%E1%BB%99ng+cung+c%E1%BA%A5p+license+key%2C+t%E1%BB%87p+c%C3%B3+th%E1%BB%83+t%E1%BA%A3i+xu%E1%BB%91ng%2C+feature+flag+v%C3%A0+quy%E1%BB%81n+truy+c%E1%BA%ADp+v%C3%A0o+Discord%2C+GitHub%2C+Telegram%2C+Framer+v%C3%A0+Notion+khi+kh%C3%A1ch+h%C3%A0ng+thanh+to%C3%A1n.\u0026amp;theme=fcc3a546490e883f7462a320\u0026amp;signature=822a974c3bad0af6bdcd06bbba192021d010a8901577e2b9ad26c57b7053a7f4\">\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=\"Giới Thiệu - Dodo Payments Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Tự động cung cấp license key, tệp có thể tải xuống, feature flag và quyền truy cập vào Discord, GitHub, Telegram, Framer và Notion khi khách hàng thanh toán.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://dodopayments.mintlify.site/_mintlify/api/og/v2?division=Entitlements\u0026amp;title=Gi%E1%BB%9Bi+Thi%E1%BB%87u\u0026amp;description=T%E1%BB%B1+%C4%91%E1%BB%99ng+cung+c%E1%BA%A5p+license+key%2C+t%E1%BB%87p+c%C3%B3+th%E1%BB%83+t%E1%BA%A3i+xu%E1%BB%91ng%2C+feature+flag+v%C3%A0+quy%E1%BB%81n+truy+c%E1%BA%ADp+v%C3%A0o+Discord%2C+GitHub%2C+Telegram%2C+Framer+v%C3%A0+Notion+khi+kh%C3%A1ch+h%C3%A0ng+thanh+to%C3%A1n.\u0026amp;theme=fcc3a546490e883f7462a320\u0026amp;signature=822a974c3bad0af6bdcd06bbba192021d010a8901577e2b9ad26c57b7053a7f4\">\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/vi/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=\"/vi/features/entitlements/introduction.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"vi\" href=\"https://docs.dodopayments.com/vi/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=\"id\" href=\"https://docs.dodopayments.com/id/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=\"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/vi/features/entitlements/introduction#webpage\",\"url\":\"https://docs.dodopayments.com/vi/features/entitlements/introduction\",\"name\":\"Giới Thiệu\",\"description\":\"Tự động cung cấp license key, tệp có thể tải xuống, feature flag và quyền truy cập vào Discord, GitHub, Telegram, Framer và Notion khi khách hàng thanh toán.\",\"dateModified\":\"2026-09-26T16:03:47.000Z\",\"isPartOf\":{\"@id\":\"https://docs.dodopayments.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.dodopayments.com/vi/features/entitlements/introduction#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.dodopayments.com/vi/features/entitlements/introduction#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Features\",\"item\":\"https://docs.dodopayments.com/vi/features/products\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Giới Thiệu\",\"item\":\"https://docs.dodopayments.com/vi/features/entitlements/introduction\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.dodopayments.com/vi/features/entitlements/introduction#article\",\"headline\":\"Giới Thiệu\",\"name\":\"Giới Thiệu\",\"description\":\"Tự động cung cấp license key, tệp có thể tải xuống, feature flag và quyền truy cập vào Discord, GitHub, Telegram, Framer và Notion khi khách hàng thanh toán.\",\"url\":\"https://docs.dodopayments.com/vi/features/entitlements/introduction\",\"mainEntityOfPage\":{\"@id\":\"https://docs.dodopayments.com/vi/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":"/vi/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","pages":[{"title":"id","href":"/id/features/entitlements/introduction"}]},{"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","tabs":[{"tab":"Docs","icon":"book","groups":[{"group":"Getting Started","pages":[{"title":"Welcome to Dodo Payments","sidebarTitle":"Introduction","icon":"rocket","href":"/vi/introduction"},{"title":"Xây dựng với AI Coding Agents","sidebarTitle":"AI Coding Agents","icon":"robot","href":"/vi/developer-resources/build-with-ai-coding-agents"},{"title":"Di chuyển sang Dodo Payments","icon":"arrow-right-arrow-left","href":"/vi/migrate-to-dodo"},{"title":"Xác minh tài khoản","icon":"id-card","href":"/vi/miscellaneous/verification-process"}]},{"group":"Features","pages":[{"sidebarTitle":"Sản phẩm","title":"Sản phẩm","icon":"box","href":"/vi/features/products"},{"sidebarTitle":"Product Collections","title":"Product Collections","icon":"layer-group","href":"/vi/features/product-collections"},{"sidebarTitle":"Thanh toán một lần","title":"Thanh toán một lần","icon":"credit-card","href":"/vi/features/one-time-payment-products"},{"group":"Subscriptions","icon":"infinity","pages":[{"sidebarTitle":"Subscriptions","title":"Subscriptions","icon":"repeat","href":"/vi/features/subscription"},{"sidebarTitle":"Add-ons","title":"Add-ons for Subscriptions","icon":"puzzle","href":"/vi/features/addons"},{"title":"On-Demand Subscriptions","icon":"bolt","href":"/vi/developer-resources/ondemand-subscriptions"}]},{"group":"Usage Based Billing","icon":"arrow-trend-up","pages":[{"sidebarTitle":"Giới thiệu","title":"Thanh toán dựa trên mức sử dụng","icon":"box","href":"/vi/features/usage-based-billing/introduction"},{"sidebarTitle":"Công tơ","title":"Công tơ","icon":"sliders","href":"/vi/features/usage-based-billing/meters"},{"sidebarTitle":"Tiếp Nhận Sự Kiện","title":"Tiếp Nhận Sự Kiện","icon":"bolt","href":"/vi/features/usage-based-billing/event-ingestion"},{"group":"Ingestion Blueprints","icon":"copy","pages":[{"sidebarTitle":"Giới thiệu","title":"Mô hình thu thập dữ liệu","icon":"box","href":"/vi/features/usage-based-billing/ingestion-blueprints"},{"title":"LLM Blueprint","icon":"brain-circuit","href":"/vi/developer-resources/ingestion-blueprints/llm"},{"title":"API Gateway Blueprint","icon":"cloud","href":"/vi/developer-resources/ingestion-blueprints/api-gateway"},{"title":"Kế Hoạch Lưu Trữ Đối Tượng","icon":"box-archive","href":"/vi/developer-resources/ingestion-blueprints/object-storage"},{"title":"Stream Blueprint","icon":"tower-broadcast","href":"/vi/developer-resources/ingestion-blueprints/stream"},{"title":"Mẫu Thời Gian","icon":"clock","href":"/vi/developer-resources/ingestion-blueprints/time-range"}]}]},{"sidebarTitle":"Credit-Based Billing","title":"Credit-Based Billing","icon":"coins","tag":"NEW","href":"/vi/features/credit-based-billing"},{"sidebarTitle":"Thanh Toán Theo Số Ghế","title":"Thanh Toán Theo Số Ghế","icon":"users","href":"/vi/features/seat-based-billing"},{"sidebarTitle":"Thanh Toán Lai","title":"Mô Hình Thanh Toán Lai","icon":"layer-group","href":"/vi/features/hybrid-billing"},{"title":"Upsells \u0026 Downsells","icon":"arrow-up-right-dots","href":"/vi/features/upsells-and-downsells"},{"group":"Customers","icon":"user-group","pages":[{"title":"Customer Management","icon":"user-group","href":"/vi/features/customers"},{"sidebarTitle":"Cổng Thông Tin Khách Hàng","title":"Cổng Thông Tin Khách Hàng","icon":"id-card","href":"/vi/features/customer-portal"},{"title":"Customer Wallets","icon":"wallet","tag":"NEW","href":"/vi/features/customer-wallet"},{"sidebarTitle":"Email đã gửi","title":"Nhật ký email khách hàng","icon":"envelope","tag":"NEW","href":"/vi/features/email-logs"},{"sidebarTitle":"Danh sách chặn khách hàng","title":"Danh sách chặn khách hàng","icon":"user-slash","tag":"NEW","href":"/vi/features/customer-blocklist"}]},{"sidebarTitle":"Giảm giá","title":"Giảm giá","icon":"percent","href":"/vi/features/discount-codes"},{"group":"Recovery","icon":"rotate","tag":"NEW","pages":[{"sidebarTitle":"Tổng quan","title":"Khôi phục Doanh thu","icon":"rotate","href":"/vi/features/recovery/overview"},{"sidebarTitle":"Khôi Phục Giỏ Hàng Bỏ Rơi","title":"Khôi Phục Giỏ Hàng Bỏ Rơi","icon":"cart-shopping","href":"/vi/features/recovery/abandoned-cart-recovery"},{"sidebarTitle":"Thu hồi Đăng ký","title":"Thu hồi Đăng ký","icon":"repeat","href":"/vi/features/recovery/subscription-dunning"},{"sidebarTitle":"Quá trình Lặp lại Thanh toán Đăng ký","title":"Quá trình Lặp lại Thanh toán Đăng ký","icon":"arrow-rotate-right","href":"/vi/features/recovery/payment-retries"},{"sidebarTitle":"Thử lại thủ công","title":"Thử lại thanh toán thủ công","icon":"hand-pointer","tag":"NEW","href":"/vi/features/recovery/manual-retry"}]},{"group":"Transactions","icon":"credit-card","pages":[{"title":"Thanh toán","icon":"money-bill-transfer","href":"/vi/features/transactions/payments"},{"title":"Hoàn tiền","icon":"rotate-left","href":"/vi/features/transactions/refunds"},{"title":"Disputes","description":"Xem và phản hồi các tranh chấp từ trang Transactions, đồng thời ngăn chargeback trước khi chúng được tạo bằng Visa RDR, Ethoca alerts và deflections.","icon":"circle-exclamation","href":"/vi/features/transactions/disputes"}]},{"group":"Entitlements","icon":"gift","tag":"NEW","pages":[{"title":"Giới Thiệu","sidebarTitle":"Giới Thiệu","icon":"box-archive","href":"/vi/features/entitlements/introduction"},{"title":"License Keys","description":"Phát hành license key với giới hạn kích hoạt và thời hạn thông qua entitlement License Key, sau đó kích hoạt, xác thực và hủy kích hoạt chúng từ phần mềm của bạn.","icon":"key","href":"/vi/features/license-keys"},{"title":"Digital Product Delivery","sidebarTitle":"Digital Products","icon":"download","href":"/vi/features/digital-product-delivery"},{"title":"Quyền cấp Feature Flag","sidebarTitle":"Feature Flags","icon":"flag","tag":"NEW","href":"/vi/features/entitlements/feature-flags"},{"title":"Quyền lợi trên Discord","sidebarTitle":"Discord","icon":"discord","href":"/vi/features/entitlements/discord"},{"title":"Quyền lợi GitHub","sidebarTitle":"GitHub","icon":"github","href":"/vi/features/entitlements/github"},{"title":"Quyền truy cập Telegram","sidebarTitle":"Telegram","icon":"telegram","href":"/vi/features/entitlements/telegram"},{"title":"Framer Entitlement","sidebarTitle":"Framer","icon":"puzzle-piece","href":"/vi/features/entitlements/framer"},{"title":"Quyền hạn Notion","sidebarTitle":"Notion","icon":"book","href":"/vi/features/entitlements/notion"}]},{"group":"Payouts and Balances","icon":"wallet","pages":[{"title":"Quy trình Thanh toán","icon":"money-bill","href":"/vi/features/payouts/payout-structure"},{"title":"Số dư","icon":"file-invoice-dollar","href":"/vi/features/account-summary-payout-wallet"}]},{"group":"Account Management","icon":"user","pages":[{"sidebarTitle":"Lưu trữ doanh nghiệp","title":"Lưu trữ doanh nghiệp","icon":"box-archive","tag":"NEW","href":"/vi/features/archive-business"},{"title":"Cài đặt Đa Thương Hiệu","icon":"building-columns","href":"/vi/features/multi-brands"},{"title":"Quản lý Hóa Đơn","icon":"file-invoice-dollar","href":"/vi/features/invoice-generation"},{"title":"Thành viên trong nhóm","icon":"user-gear","href":"/vi/features/team"},{"title":"Tùy chọn liên lạc","sidebarTitle":"Tùy chọn liên lạc","icon":"bell","tag":"NEW","href":"/vi/features/communication-preferences"},{"title":"Tài Khoản Của Tôi","icon":"user-gear","href":"/vi/miscellaneous/accounts"}]},{"group":"Pricing","icon":"dollar-sign","pages":[{"sidebarTitle":"Giá Bao Gồm Thuế","title":"Giá Bao Gồm Thuế","icon":"file-invoice","href":"/vi/features/tax-inclusive-pricing"},{"sidebarTitle":"Trả Theo Ý Muốn","title":"Giá Trả Theo Ý Muốn","icon":"dollar-sign","href":"/vi/features/pay-what-you-want"},{"title":"Thanh Toán B2B","icon":"money-bills","href":"/vi/features/b2b-payments"},{"title":"Định Giá Địa Phương","sidebarTitle":"Định Giá Địa Phương","icon":"earth-americas","href":"/vi/features/localized-pricing"},{"sidebarTitle":"Sức mua tương đương","title":"Purchasing Power Parity","tag":"NEW","icon":"money-bill-trend-up","href":"/vi/features/purchasing-power-parity"},{"sidebarTitle":"Charm Pricing","title":"Charm Pricing","tag":"NEW","icon":"tag","href":"/vi/features/charm-pricing"}]},{"sidebarTitle":"Thanh toán","title":"Tính năng Thanh toán","icon":"cart-shopping","href":"/vi/features/checkout"},{"sidebarTitle":"Thiết kế","title":"Tùy chỉnh Thiết kế \u0026 Chủ đề","icon":"palette","tag":"NEW","href":"/vi/features/design"},{"group":"Payment Methods","icon":"money-bill-wave","pages":[{"title":"Payment Methods","sidebarTitle":"Overview","icon":"layer-group","href":"/vi/features/payment-methods"},{"title":"Thẻ tín dụng \u0026 thẻ ghi nợ","sidebarTitle":"Thẻ","icon":"credit-card","href":"/vi/features/payment-methods/cards"},{"title":"Ví điện tử","sidebarTitle":"Ví điện tử","icon":"wallet","href":"/vi/features/payment-methods/digital-wallets"},{"title":"Mua Trước Trả Sau (BNPL)","sidebarTitle":"BNPL","icon":"calendar-days","href":"/vi/features/payment-methods/bnpl"},{"title":"ACH Direct Debit","sidebarTitle":"ACH Direct Debit","icon":"building-columns","href":"/vi/features/payment-methods/ach"},{"title":"Phương thức thanh toán tại India","sidebarTitle":"India","icon":"indian-rupee-sign","href":"/vi/features/payment-methods/india"},{"title":"Phương thức thanh toán tại châu Âu","sidebarTitle":"Châu Âu","icon":"euro-sign","href":"/vi/features/payment-methods/europe"},{"title":"Phương Thức Thanh Toán Hàn Quốc","sidebarTitle":"Hàn Quốc","icon":"won-sign","href":"/vi/features/payment-methods/south-korea"},{"title":"Phương thức thanh toán tại Châu Á - Thái Bình Dương","sidebarTitle":"Châu Á - Thái Bình Dương","icon":"earth-asia","href":"/vi/features/payment-methods/asia-pacific"},{"title":"Pix","sidebarTitle":"Pix","icon":"brazilian-real-sign","href":"/vi/features/payment-methods/pix"},{"title":"Stablecoins","sidebarTitle":"Stablecoins","icon":"dollar-sign","href":"/vi/features/payment-methods/stablecoins"},{"title":"WeChat Pay","sidebarTitle":"WeChat Pay","icon":"comment-dollar","href":"/vi/features/payment-methods/wechat"}]},{"title":"Phân tích của bên thứ ba","sidebarTitle":"Phân tích của bên thứ ba","icon":"chart-line","tag":"NEW","href":"/vi/features/analytics"},{"sidebarTitle":"Tiền Tệ Thích Ứng","title":"Tiền Tệ Thích Ứng","icon":"money-bill-transfer","href":"/vi/features/adaptive-currency"},{"group":"BYOP","icon":"shuffle","tag":"BETA","pages":[{"title":"Mang Theo Bộ Xử Lý Của Bạn (BYOP)","sidebarTitle":"Tổng Quan","tag":"BETA","icon":"boxes-stacked","href":"/vi/features/byop"},{"title":"Stripe - Kết nối \u0026 Raw Card API Access","sidebarTitle":"Stripe","icon":"stripe","href":"/vi/features/byop/stripe"},{"title":"Adyen - Truy cập API Kết nối \u0026 Raw Card","sidebarTitle":"Adyen","icon":"https://mintlify.s3.us-west-1.amazonaws.com/dodopayments/images/logos/adyen.svg","href":"/vi/features/byop/adyen"}]},{"title":"Cửa hàng trực tuyến","icon":"store","href":"/vi/features/storefront"},{"title":"Đối tác","icon":"users-line","href":"/vi/features/affiliates"},{"title":"Moderation API","icon":"shield-check","tag":"NEW","href":"/vi/features/moderation"},{"title":"Bán hàng hóa kỹ thuật số trên iOS","icon":"mobile","href":"/vi/features/appstore-digital-goods"},{"title":"Phân tích Bảng điều khiển","sidebarTitle":"Phân tích Bảng điều khiển","icon":"chart-line","href":"/vi/features/analytics-and-reporting"},{"title":"Báo cáo","sidebarTitle":"Báo cáo","icon":"file-invoice","href":"/vi/features/reports"}]},{"group":"Integrate","pages":[{"group":"SDKs","icon":"box-open","pages":[{"sidebarTitle":"Tổng quan","title":"SDK chính thức","icon":"box","href":"/vi/developer-resources/dodo-payments-sdks"},{"title":"TypeScript","icon":"js","href":"/vi/developer-resources/sdks/typescript"},{"title":"Python","icon":"python","href":"/vi/developer-resources/sdks/python"},{"title":"Go","icon":"golang","href":"/vi/developer-resources/sdks/go"},{"title":"Ruby","icon":"gem","href":"/vi/developer-resources/sdks/ruby"},{"title":"Java","icon":"java","href":"/vi/developer-resources/sdks/java"},{"title":"Kotlin","icon":"k","href":"/vi/developer-resources/sdks/kotlin"},{"title":"PHP","icon":"php","href":"/vi/developer-resources/sdks/php"},{"title":"C#","icon":"c","href":"/vi/developer-resources/sdks/csharp"},{"title":"Rust","icon":"rust","href":"/vi/developer-resources/sdks/rust"}]},{"group":"Mobile Checkout SDKs","icon":"mobile","pages":[{"title":"Mobile Integration Guide","sidebarTitle":"Integration Guide","icon":"mobile","href":"/vi/developer-resources/mobile-integration"},{"title":"Android","sidebarTitle":"Android","tag":"NEW","icon":"android","href":"/vi/developer-resources/sdks/android"},{"title":"iOS","sidebarTitle":"iOS","tag":"NEW","icon":"apple","href":"/vi/developer-resources/sdks/ios"},{"title":"React Native","sidebarTitle":"React Native","tag":"NEW","icon":"react","href":"/vi/developer-resources/sdks/react-native"},{"title":"Flutter","sidebarTitle":"Flutter","tag":"NEW","icon":"layer-group","href":"/vi/developer-resources/sdks/flutter"}]},{"group":"Framework Adaptors","icon":"frame","pages":[{"sidebarTitle":"Tổng quan","title":"Tổng quan về các bộ chuyển đổi Framework","icon":"box","href":"/vi/developer-resources/framework-adaptors"},{"title":"Next.js Adaptor","icon":"code-merge","href":"/vi/developer-resources/nextjs-adaptor"},{"title":"Adaptor Better Auth","icon":"code-merge","href":"/vi/developer-resources/better-auth-adaptor"},{"title":"Thành phần Convex","icon":"code-merge","href":"/vi/developer-resources/convex-component"},{"title":"Bộ chuyển đổi TanStack","icon":"code-merge","href":"/vi/developer-resources/tanstack-adaptor"},{"title":"Bộ chuyển đổi Nuxt","icon":"code-merge","href":"/vi/developer-resources/nuxt-adaptor"},{"title":"Express Adaptor","icon":"code-merge","href":"/vi/developer-resources/express-adaptor"},{"title":"Astro Adaptor","icon":"code-merge","href":"/vi/developer-resources/astro-adaptor"},{"title":"SvelteKit Adaptor","icon":"code-merge","href":"/vi/developer-resources/sveltekit-adaptor"},{"title":"Hono Adaptor","icon":"code-merge","href":"/vi/developer-resources/hono-adaptor"},{"title":"Bộ điều hợp Remix","icon":"code-merge","href":"/vi/developer-resources/remix-adaptor"},{"title":"Bộ chuyển đổi Fastify","icon":"code-merge","href":"/vi/developer-resources/fastify-adaptor"},{"title":"Bun Adaptor","icon":"code-merge","href":"/vi/developer-resources/bun-adaptor"}]},{"group":"Webhooks","icon":"webhook","pages":[{"sidebarTitle":"Overview","title":"Webhooks","icon":"webhook","href":"/vi/developer-resources/webhooks"},{"title":"Hướng dẫn về Webhook Events","icon":"bell","href":"/vi/developer-resources/webhooks/intents/webhook-events-guide"},{"group":"Webhook Payloads","icon":"code","pages":[{"title":"Thanh toán","icon":"credit-card","href":"/vi/developer-resources/webhooks/intents/payment"},{"sidebarTitle":"Gói đăng ký","title":"Webhook của gói đăng ký","icon":"repeat","href":"/vi/developer-resources/webhooks/intents/subscription"},{"title":"Hoàn tiền","icon":"rotate-left","href":"/vi/developer-resources/webhooks/intents/refund"},{"sidebarTitle":"Tranh chấp","title":"Webhook Tranh chấp","icon":"circle-exclamation","href":"/vi/developer-resources/webhooks/intents/dispute"},{"title":"Khóa Bản Quyền","icon":"key","href":"/vi/developer-resources/webhooks/intents/license-key"},{"title":"Trao Quyền","icon":"gift","href":"/vi/developer-resources/webhooks/intents/entitlement-grant"},{"sidebarTitle":"Thanh toán dựa trên credit","title":"Webhook Thanh toán dựa trên credit","icon":"coins","href":"/vi/developer-resources/webhooks/intents/credit"},{"title":"Khôi phục","icon":"rotate","href":"/vi/developer-resources/webhooks/intents/recovery"},{"sidebarTitle":"Chi trả","title":"Webhook chi trả","icon":"money-bill-transfer","href":"/vi/developer-resources/webhooks/intents/payout"}]},{"group":"Deploy to Cloud","icon":"rocket","pages":[{"title":"Vercel Functions","icon":"triangle","href":"/vi/developer-resources/webhooks/examples/vercel-example"},{"title":"Cloudflare Workers","icon":"cloud","href":"/vi/developer-resources/webhooks/examples/cloudflare-example"},{"title":"Supabase Edge Functions","icon":"bolt","href":"/vi/developer-resources/webhooks/examples/supabase-example"},{"title":"Netlify Functions","icon":"diamond","href":"/vi/developer-resources/webhooks/examples/netlify-example"}]}]},{"group":"Testing \u0026 Demo Tools","icon":"flask","pages":[{"title":"Chế độ Kiểm Tra vs Chế độ Trực Tiếp","icon":"toggle-on","href":"/vi/miscellaneous/test-mode-vs-live-mode"},{"title":"Testing Process","icon":"flask","href":"/vi/miscellaneous/testing-process"},{"title":"Sản phẩm Demo Atlas","icon":"palette","href":"/vi/features/atlas-demo-website"}]},{"group":"Boilerplates","icon":"box-open","pages":[{"sidebarTitle":"Expo","title":"Mẫu Expo","icon":"https://mintlify.s3.us-west-1.amazonaws.com/dodopayments/images/logos/expo.svg","tag":"NEW","href":"/vi/developer-resources/expo-boilerplate"},{"sidebarTitle":"Supabase","title":"Boilerplate Supabase","icon":"https://mintlify.s3.us-west-1.amazonaws.com/dodopayments/images/logos/supabase.svg","href":"/vi/developer-resources/supabase-boilerplate"},{"sidebarTitle":"Figma Plugin","title":"Plugin Figma","icon":"https://mintlify.s3.us-west-1.amazonaws.com/dodopayments/images/logos/figma.svg","href":"/vi/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":"/vi/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":"/vi/developer-resources/astro-boilerplate"},{"sidebarTitle":"FastAPI","title":"Mẫu FastAPI","icon":"https://mintlify.s3.us-west-1.amazonaws.com/dodopayments/images/logos/fastapi.svg","tag":"NEW","href":"/vi/developer-resources/fastapi-boilerplate"},{"sidebarTitle":"Go","title":"Go Boilerplate","icon":"golang","tag":"NEW","href":"/vi/developer-resources/go-boilerplate"}]},{"title":"Dodo CLI","icon":"terminal","tag":"NEW","href":"/vi/developer-resources/sdks/cli"},{"title":"Overlay Checkout","icon":"cart-shopping","href":"/vi/developer-resources/overlay-checkout"},{"title":"Thanh toán Inline","icon":"credit-card","href":"/vi/developer-resources/inline-checkout"},{"title":"Billing SDK","icon":"boxes-stacked","href":"/vi/developer-resources/billingsdk"},{"title":"Dodo Payments MCP Server","icon":"server","href":"/vi/developer-resources/mcp-server"},{"title":"Agent Skills","icon":"wand-magic-sparkles","href":"/vi/developer-resources/agent-skills"},{"sidebarTitle":"Đồng bộ cơ sở dữ liệu","title":"Đồng bộ với cơ sở dữ liệu của bạn","icon":"database","href":"/vi/developer-resources/dodo-sync"},{"sidebarTitle":"Di chuyển đăng ký","title":"Di chuyển đăng ký sang Dodo Payments","icon":"file-import","href":"/vi/miscellaneous/subscription-migration"}]},{"group":"Merchant of Record","pages":[{"sidebarTitle":"MoR là gì?","title":"Giới thiệu","icon":"building-columns","href":"/vi/features/mor-introduction"},{"title":"MoR vs PG","icon":"scale-balanced","href":"/vi/features/mor-vs-pg"},{"title":"Các quốc gia đủ điều kiện để chấp nhận merchant","icon":"globe","href":"/vi/miscellaneous/accepted-countries-and-territories"},{"title":"Chính sách Đánh giá \u0026 Giám sát","icon":"magnifying-glass","href":"/vi/miscellaneous/review-monitoring-policy"},{"sidebarTitle":"Bypass of App Store Fees","title":"Bỏ qua phí App Store \u0026 Play Store bằng Dodo Payments","icon":"shield-check","href":"/vi/features/bypassing-app-store-fees"}]},{"group":"Miscellaneous","pages":[{"group":"Support Channels","icon":"headset","pages":[{"title":"Trợ Giúp và Hỗ Trợ","icon":"headset","href":"/vi/miscellaneous/help-support"},{"title":"Yêu cầu Tính năng và Lịch trình","icon":"lightbulb","href":"/vi/features/feature-request"}]},{"title":"Ứng dụng Di động \u0026 Máy tính để bàn","icon":"mobile","href":"/vi/features/mobile-app"},{"title":"Chính Sách Báo Cáo Bảo Mật","icon":"shield","href":"/vi/miscellaneous/security-policy"}]}]},{"tab":"Guides","icon":"compass","pages":[{"title":"Guides","href":"/vi/developer-resources/integration-guide"}]},{"tab":"API Reference","icon":"rectangle-code","pages":[{"title":"API Reference","href":"/vi/api-reference/introduction"}]},{"tab":"External Integrations","icon":"plug","pages":[{"title":"External Integrations","href":"/vi/integrations/introduction"}]},{"tab":"Changelog","icon":"calendar-days","pages":[{"title":"Changelog","href":"/vi/changelog/introduction"}]},{"tab":"Community Projects","icon":"users","pages":[{"title":"Community Projects","href":"/vi/community/overview"}]}]},{"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":"Giới Thiệu - Dodo Payments Documentation","buildId":"dpl_596ePT575z4qnAFksq1biRW97aLY","deploymentId":"dpl_596ePT575z4qnAFksq1biRW97aLY","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-BXrZabKK.js","DynamicMarkdown-CtasenyM.js","zoom-image-lightbox-C5F0mVLH.js","lightbox-handle-r17bVUz3.js"]}