고객이 결제하면 라이선스 키, 다운로드 가능한 파일, feature flag, Discord, GitHub, Telegram, Framer, Notion에 대한 액세스를 자동으로 제공합니다.
Entitlement는 성공한 결제 또는 활성 구독을 액세스로 전환합니다. 고객의 받은편지함으로 전달되는 라이선스 키, 앱에서 확인하는 feature flag, Discord 역할, GitHub repository, Notion 템플릿, Framer remix 링크, Telegram 채팅 초대 또는 다운로드 가능한 파일 번들이 이에 해당합니다. Dodo Payments는 결제 lifecycle이 변경될 때 이러한 액세스를 자동으로 발급하고 추적하며 철회합니다.
The Entitlements dashboard. Each entitlement is a reusable template; the right pane shows individual customer grants.
Entitlement는 고객에게 제공하는 항목을 재사용 가능한 형태로 정의한 것입니다. 예를 들어 Pro 라이선스 키, “Patrons” Discord 역할, 비공개 GitHub repository 액세스 또는 다운로드 가능한 e-book 번들이 있습니다. Entitlement를 product에 연결하면 고객이 결제할 때 Dodo Payments가 이를 제공합니다.고객이 product를 구매하면 Dodo Payments는 grant를 생성합니다. Grant는 한 고객에게 해당 entitlement를 발급한 것을 의미합니다. Grant에는 네 가지 상태가 있습니다. 전달이 진행 중일 때는 Pending, 고객이 액세스할 수 있게 되면 Delivered, 전달을 완료할 수 없으면 Failed, 액세스가 철회되면 Revoked입니다.
Entitlement는 fulfillment(고객이 액세스할 수 있는가?)을 제어하고, Credit은 consumption(얼마나 사용할 수 있는가?)을 제어합니다. 하나의 product에 둘 다 연결할 수 있습니다. Credit에 대한 자세한 내용은 Credit-Based Billing을 참고하세요.
Dodo Payments는 결제가 완료되거나 구독이 활성화되면 grant를 생성합니다. Feature flag grant는 Delivered 상태로 시작합니다. Entitlement가 fulfillment_mode: auto(기본값)를 사용하는 경우 License Key grant도 Delivered 상태로 시작합니다. fulfillment_mode: manual에서는 키가 없는 Pending 상태로 시작하며, Fulfill License Key Grant를 통해 키를 제공해야 합니다. 그 외 모든 integration은 Pending 상태로 시작합니다.OAuth 기반 integration(Discord, GitHub, Notion)은 고객이 방문하여 동의할 수 있는 oauth_url를 제공합니다. Dodo Payments는 grant를 생성할 때 이 URL을 생성하려고 시도합니다. 실패하면 고객이 delivery email 또는 Customer Portal에서 accept flow를 시작할 때까지 필드는 null 상태로 유지됩니다. Platform-direct integration(Telegram, Framer, Digital Files)은 전달이 provision되는 동안에만 Pending 상태로 유지되고, 이후 Delivered 상태로 변경됩니다.
2
Delivered
전달이 완료되면 grant는 Delivered 상태로 변경되고 delivered_at가 설정됩니다. 라이선스 키가 생성되거나, 역할이 할당되거나, repository 액세스가 부여되거나, 파일 링크가 확인되거나, OAuth flow가 완료되면 전달이 완료된 것입니다.
3
Failed
Integration 호출에서 철회된 OAuth token, 거부된 permission 또는 더 이상 존재하지 않는 파일과 같은 재시도할 수 없는 오류가 반환되면 grant는 Failed 상태로 변경됩니다. error_code 및 error_message 필드에 그 이유가 기록됩니다.
4
Revoked
구독 취소, 환불 처리 또는 grant 직접 철회 등으로 액세스가 철회되면 grant는 Revoked 상태로 변경됩니다. revocation_reason 필드에 해당 trigger가 기록됩니다.
revocation_reason: subscription_on_hold인 전달 완료 및 대기 중 grant를 모두 철회합니다.
subscription.paused
revocation_reason: SubscriptionPaused인 전달 완료 및 대기 중 grant를 모두 철회합니다. 다른 구독 reason과 달리 이 값은 PascalCase를 사용하므로 정확히 일치시켜야 합니다.
subscription.unpaused
subscription.active와 동일한 방식으로 동일한 구독에 대해 이전에 철회된 grant를 다시 발급합니다.
subscription.cancelled
revocation_reason: subscription_cancelled인 모든 grant를 철회합니다.
subscription.expired
revocation_reason: subscription_expired인 모든 grant를 철회합니다.
subscription.plan_changed
revocation_reason: plan_changed인 현재 grant를 모두 철회한 다음 새 plan의 entitlement에 대한 grant를 발급합니다.
refund.succeeded (one-time payment)
해당 결제의 grant를 revocation_reason: refund로 철회합니다.
Manual API revoke
revocation_reason: manual인 grant를 철회합니다. 수동 철회는 구독 renewal 시 자동으로 다시 발급되지 않습니다.
License key disabled
License-key grant의 경우 기본 키를 비활성화하면 revocation_reason: license_key_disabled로 grant가 철회됩니다. 키를 다시 활성화하면 grant가 자동으로 복원됩니다.
Platform drift detected
수동으로 Discord 역할이 제거되거나, GitHub App이 repository 액세스를 잃거나, reconciliation pass에서 누락된 target을 찾는 등 integration의 platform 측 상태가 동기화되지 않으면 Dodo Payments는 revocation_reason: platform_external로 grant를 철회합니다. Platform 문제가 해결될 때까지 구독 renewal 시 자동으로 다시 발급되지 않습니다.
구독 기반 grant는 (entitlement, customer, subscription)별로 idempotent하므로 renewal 및 재활성화로 인해 중복 grant가 생성되지 않습니다. One-time grant는 (entitlement, customer, payment)별로 idempotent합니다.
Dashboard에서 Entitlements로 이동한 다음 **+**를 클릭하여 entitlement를 생성합니다.
2
Pick an Integration
Integration type을 선택합니다: License Key, Digital Files, Feature Flag, Discord, GitHub, Telegram, Figma, Framer 또는 Notion. Platform integration의 경우 아직 연결하지 않았다면 먼저 계정을 연결하세요.
3
Configure Delivery
Integration에 필요한 필드를 입력합니다. 예를 들어 GitHub는 repository와 permission level을 요구하고, Discord는 server와 선택적 role을 요구하며, License Key는 activations limit과 license length를 요구합니다.
Creating a GitHub entitlement. Each integration shows the fields it needs.
4
Save
Create Entitlement를 클릭합니다. 이제 모든 product에 entitlement를 연결할 수 있습니다.
Product를 열고 Entitlements 섹션으로 이동한 다음 product 구매 시 전달할 entitlement를 선택합니다. 하나의 product에서 여러 entitlement를 동시에 전달할 수 있습니다. 예를 들어 Pro plan에는 라이선스 키, GitHub 액세스 및 Discord 역할을 포함할 수 있습니다.
Attaching entitlements to a product. Selected entitlements are delivered on every successful purchase or active subscription.
구매 후 고객은 product의 entitlement에 해당하는 라이선스 키, 다운로드 링크, OAuth 초대 링크 또는 platform 초대가 포함된 delivery email을 받습니다. Grant가 활성 상태인 동안에는 Customer Portal의 주문 기록에서도 동일한 세부 정보를 확인할 수 있습니다.
Grant가 철회되면 Dodo Payments는 platform에서 액세스를 제거합니다. Discord 역할을 제거하고, GitHub collaborator를 제거하거나, 라이선스 키를 비활성화합니다. 고객은 Customer Portal에서 변경 사항을 확인할 수 있습니다.
Digital Files의 경우 철회하면 새로운 presigned download URL이 발급되지 않지만 고객이 이미 다운로드한 사본이 무효화되지는 않습니다. 이 점을 고려하여 content gating을 계획하세요.
Dashboard에서 entitlement를 열어 grant를 확인합니다. Detail panel에는 총 grant 수, status filter, 고객, 액세스한 날짜, 상태 및 Revoke action이 포함된 grant별 행이 표시됩니다.Grant를 programmatically 관리하려면 status filter로 목록을 조회하고 ID로 단일 grant를 철회합니다:
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는 grant lifecycle에 대해 네 가지 webhook event를 전송합니다. 이를 subscribe하여 각 고객이 액세스할 수 있는 항목과 애플리케이션의 상태를 동기화하세요.
Event
발생 시점
entitlement_grant.created
Grant가 생성될 때 발생합니다. 자동으로 fulfilled된 license-key grant와 feature-flag grant는 Delivered 상태로 도착합니다. 수동으로 fulfilled된 license-key grant 및 그 외 모든 integration은 Pending 상태로 도착한 뒤, platform 호출이 성공하거나 OAuth 기반 integration의 경우 고객이 승인하면 Delivered 상태로 변경됩니다.
entitlement_grant.delivered
기존 grant가 Delivered 상태로 변경되어 고객이 액세스할 수 있게 될 때 발생합니다. 생성 시 Delivered 상태인 grant는 created만 발생시킵니다.
entitlement_grant.failed
Grant를 전달할 수 없을 때 발생합니다. error_code 및 error_message를 확인하세요.
entitlement_grant.revoked
액세스가 철회되었을 때 발생합니다. revocation_reason를 확인하세요.
Entitlement Grant Webhook Payloads
전체 payload schema, sample event 및 revocation_reason reference를 확인하세요.
전달 채널마다 entitlement 하나를 사용하세요. 역할 의도가 서로 다른 product 간에 하나의 Discord entitlement를 공유하지 마세요. 역할마다 entitlement를 하나씩 만들어 철회가 깔끔하게 처리되도록 하세요.
먼저 test mode에서 테스트하세요. Entitlement를 생성하고 test product에 연결한 다음 checkout을 실행하여 grant가 Pending에서 Delivered로 변경되는지 확인하세요. 그런 다음 test subscription을 취소하고 grant가 철회되는지 확인하세요.
payment.succeeded가 아니라 entitlement_grant.delivered를 수신하세요. 특히 OAuth flow에서는 fulfillment가 완료되기 전에 결제가 성공할 수 있습니다. 자체 system에서 종속 feature를 unlock하기 전에 grant가 Delivered 상태가 될 때까지 기다리세요. 자동으로 fulfilled된 license key 또는 feature flag처럼 생성 시 전달되는 grant는 대신 entitlement_grant.created와 status: "Delivered"로 도착합니다.
entitlement_grant.failed를 조치가 필요한 상태로 처리하세요. Failed grant는 고객이 결제했지만 액세스하지 못했다는 의미입니다. 이러한 grant를 support team에 표시하거나 re-grant를 trigger하세요.
revocation_reason를 retention flow에 매핑하세요.subscription_on_hold revoke는 고객이 카드를 업데이트할 수 있으므로 복구할 수 있습니다. manual revoke는 의도적인 철회입니다. 고객 메시지에서 이 둘을 다르게 처리하세요.
subscription.past_due에서 액세스를 철회하지 마세요. 이 event는 grace period를 시작하며 해당 기간이 끝날 때까지 고객이 액세스를 유지합니다. subscription.on_hold 또는 subscription.cancelled를 기다리세요.
마지막 수정일 2026년 9월 26일
이 페이지가 도움이 되었나요?
⌘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.4111","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":"ko/features/entitlements/introduction","slug":"/ko/features/entitlements/introduction","pageMetadata":{"title":"소개","sidebarTitle":"소개","description":"고객이 결제하면 라이선스 키, 다운로드 가능한 파일, feature flag, Discord, GitHub, Telegram, Framer, Notion에 대한 액세스를 자동으로 제공합니다.","icon":"box-archive","keywords":["Dodo Payments","entitlements","fulfillment","license keys","digital delivery","platform access"],"href":"/ko/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: \"고객이 결제하면 라이선스 키, 다운로드 가능한 파일, feature flag, Discord, GitHub, Telegram, Framer, Notion에 대한 액세스를 자동으로 제공합니다.\"\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는 성공한 결제 또는 활성 구독을 액세스로 전환합니다. 고객의 받은편지함으로 전달되는 라이선스 키, 앱에서 확인하는 feature flag, Discord 역할, GitHub repository, Notion 템플릿, Framer remix 링크, Telegram 채팅 초대 또는 다운로드 가능한 파일 번들이 이에 해당합니다. Dodo Payments는 결제 lifecycle이 변경될 때 이러한 액세스를 자동으로 발급하고 추적하며 철회합니다.`})}),`\n`,_jsx(Frame,{caption:`The Entitlements dashboard. Each entitlement is a reusable template; the right pane shows individual customer grants.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/list.png?fit=max\u0026auto=format\u0026n=do-W-dMDGVB_xzr_\u0026q=85\u0026s=12a326205f64d1e71485bce46114d296`,alt:`Entitlements 대시보드, 왼쪽에는 Entitlements 목록이, 오른쪽에는 부여 활동이 표시됨`,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란-무엇인가요`,children:`Entitlement란 무엇인가요?`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Entitlement`}),`는 고객에게 제공하는 항목을 재사용 가능한 형태로 정의한 것입니다. 예를 들어 Pro 라이선스 키, “Patrons” Discord 역할, 비공개 GitHub repository 액세스 또는 다운로드 가능한 e-book 번들이 있습니다. Entitlement를 product에 연결하면 고객이 결제할 때 Dodo Payments가 이를 제공합니다.`]}),`\n`,_jsxs(_components.p,{children:[`고객이 product를 구매하면 Dodo Payments는 `,_jsx(_components.strong,{children:`grant`}),`를 생성합니다. Grant는 한 고객에게 해당 entitlement를 발급한 것을 의미합니다. Grant에는 네 가지 상태가 있습니다. 전달이 진행 중일 때는 `,_jsx(_components.code,{children:`Pending`}),`, 고객이 액세스할 수 있게 되면 `,_jsx(_components.code,{children:`Delivered`}),`, 전달을 완료할 수 없으면 `,_jsx(_components.code,{children:`Failed`}),`, 액세스가 철회되면 `,_jsx(_components.code,{children:`Revoked`}),`입니다.`]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`Entitlement는 `,_jsx(_components.strong,{children:`fulfillment`}),`(고객이 액세스할 수 있는가?)을 제어하고, Credit은 `,_jsx(_components.strong,{children:`consumption`}),`(얼마나 사용할 수 있는가?)을 제어합니다. 하나의 product에 둘 다 연결할 수 있습니다. Credit에 대한 자세한 내용은 `,_jsx(_components.a,{href:`/features/credit-based-billing`,children:`Credit-Based Billing`}),`을 참고하세요.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`사용-가능한-통합`,children:`사용 가능한 통합`}),`\n`,_jsx(_components.p,{children:`각 entitlement는 하나의 integration을 통해 전달됩니다. 판매하는 항목에 맞는 integration을 선택하세요.`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`License Keys`,icon:`key`,href:`/features/license-keys`,children:_jsx(_components.p,{children:`고유한 라이선스 키를 생성하고 활성화 제한 및 만료를 설정할 수 있습니다. 소프트웨어, 플러그인 및 CLI에 최적입니다.`})}),_jsx(Card,{title:`Digital Files`,icon:`download`,href:`/features/digital-product-delivery`,children:_jsx(_components.p,{children:`e-book, 템플릿, 미디어 등의 다운로드 가능한 파일을 presigned download URL 및 선택적 안내와 함께 제공합니다.`})}),_jsx(Card,{title:`Feature Flags`,icon:`flag`,href:`/features/entitlements/feature-flags`,children:_jsx(_components.p,{children:`구매에 따라 자체 앱의 feature를 제한합니다. 생성 시 전달되고, API를 통해 확인하며, 취소 시 철회됩니다.`})}),_jsx(Card,{title:`Discord`,icon:`discord`,href:`/features/entitlements/discord`,children:_jsx(_components.p,{children:`고객이 구매하면 Discord server의 역할을 부여합니다. 취소 시 역할은 자동으로 제거됩니다.`})}),_jsx(Card,{title:`GitHub`,icon:`github`,href:`/features/entitlements/github`,children:_jsx(_components.p,{children:`선택한 권한 수준으로 고객을 비공개 저장소의 협력자로 추가하세요.`})}),_jsx(Card,{title:`Telegram`,icon:`telegram`,href:`/features/entitlements/telegram`,children:_jsx(_components.p,{children:`구매 후 고객을 비공개 Telegram 채팅 또는 채널에 추가하세요.`})}),_jsx(Card,{title:`Framer`,icon:`puzzle-piece`,href:`/features/entitlements/framer`,children:_jsx(_components.p,{children:`지불 고객을 위한 Framer 템플릿 리믹스 링크를 잠금 해제하세요.`})}),_jsx(Card,{title:`Notion`,icon:`book`,href:`/features/entitlements/notion`,children:_jsx(_components.p,{children:`구매 시 고객의 워크스페이스에 Notion 템플릿 복제.`})})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`승인-방식`,children:`승인 방식`}),`\n`,_jsx(_components.p,{children:`Grant는 webhook으로 수신하는 것과 동일한 결제 및 구독 event를 따릅니다. Dodo Payments는 결제 lifecycle에 따라 구매에 대한 grant를 자동으로 생성하고 철회하므로, 직접 grant API를 호출할 필요가 없습니다.`}),`\n`,_jsx(Heading,{level:`3`,id:`승인-생명주기`,children:`승인 생명주기`}),`\n`,_jsx(_components.p,{children:`Grant는 다음 상태를 거칩니다:`}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Created`,children:[_jsxs(_components.p,{children:[`Dodo Payments는 결제가 완료되거나 구독이 활성화되면 grant를 생성합니다. Feature flag grant는 `,_jsx(_components.code,{children:`Delivered`}),` 상태로 시작합니다. Entitlement가 `,_jsx(_components.code,{children:`fulfillment_mode: auto`}),`(기본값)를 사용하는 경우 License Key grant도 `,_jsx(_components.code,{children:`Delivered`}),` 상태로 시작합니다. `,_jsx(_components.code,{children:`fulfillment_mode: manual`}),`에서는 키가 없는 `,_jsx(_components.code,{children:`Pending`}),` 상태로 시작하며, `,_jsx(_components.a,{href:`/api-reference/entitlements/fulfill-license-key`,children:`Fulfill License Key Grant`}),`를 통해 키를 제공해야 합니다. 그 외 모든 integration은 `,_jsx(_components.code,{children:`Pending`}),` 상태로 시작합니다.`]}),_jsxs(_components.p,{children:[`OAuth 기반 integration(Discord, GitHub, Notion)은 고객이 방문하여 동의할 수 있는 `,_jsx(_components.code,{children:`oauth_url`}),`를 제공합니다. Dodo Payments는 grant를 생성할 때 이 URL을 생성하려고 시도합니다. 실패하면 고객이 delivery email 또는 Customer Portal에서 accept flow를 시작할 때까지 필드는 `,_jsx(_components.code,{children:`null`}),` 상태로 유지됩니다. Platform-direct integration(Telegram, Framer, Digital Files)은 전달이 provision되는 동안에만 `,_jsx(_components.code,{children:`Pending`}),` 상태로 유지되고, 이후 `,_jsx(_components.code,{children:`Delivered`}),` 상태로 변경됩니다.`]})]}),_jsx(Step,{title:`Delivered`,children:_jsxs(_components.p,{children:[`전달이 완료되면 grant는 `,_jsx(_components.code,{children:`Delivered`}),` 상태로 변경되고 `,_jsx(_components.code,{children:`delivered_at`}),`가 설정됩니다. 라이선스 키가 생성되거나, 역할이 할당되거나, repository 액세스가 부여되거나, 파일 링크가 확인되거나, OAuth flow가 완료되면 전달이 완료된 것입니다.`]})}),_jsx(Step,{title:`Failed`,children:_jsxs(_components.p,{children:[`Integration 호출에서 철회된 OAuth token, 거부된 permission 또는 더 이상 존재하지 않는 파일과 같은 재시도할 수 없는 오류가 반환되면 grant는 `,_jsx(_components.code,{children:`Failed`}),` 상태로 변경됩니다. `,_jsx(_components.code,{children:`error_code`}),` 및 `,_jsx(_components.code,{children:`error_message`}),` 필드에 그 이유가 기록됩니다.`]})}),_jsx(Step,{title:`Revoked`,children:_jsxs(_components.p,{children:[`구독 취소, 환불 처리 또는 grant 직접 철회 등으로 액세스가 철회되면 grant는 `,_jsx(_components.code,{children:`Revoked`}),` 상태로 변경됩니다. `,_jsx(_components.code,{children:`revocation_reason`}),` 필드에 해당 trigger가 기록됩니다.`]})})]}),`\n`,_jsx(Heading,{level:`3`,id:`event별-grant-동작`,children:`Event별 Grant 동작`}),`\n`,_jsx(_components.p,{children:`각 결제 및 구독 event에 따라 grant가 다음과 같이 변경됩니다:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Event`}),_jsx(_components.th,{children:`동작`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`payment.succeeded`}),` (one-time payment)`]}),_jsx(_components.td,{children:`연결된 각 entitlement에 대해 grant 하나를 발급합니다. License Key entitlement는 키마다 grant 하나를 발급합니다.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`payment.succeeded`}),` (subscription-linked payment)`]}),_jsx(_components.td,{children:`변경 없음. 아래의 구독 event가 해당 grant를 관리합니다.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`subscription.active`})}),_jsxs(_components.td,{children:[`아직 grant가 없는 연결된 entitlement에 대해 grant를 발급하고, 동일한 구독에 대해 이전에 철회된 grant를 다시 발급합니다. `,_jsx(_components.code,{children:`manual`}),`, `,_jsx(_components.code,{children:`refund`}),` 또는 `,_jsx(_components.code,{children:`platform_external`}),`로 철회된 grant는 다시 발급하지 않습니다.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`subscription.renewed`})}),_jsx(_components.td,{children:`변경 없음. 기존 grant는 renewal 중에도 유지됩니다.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`subscription.past_due`})}),_jsxs(_components.td,{children:[`변경 없음. Grant는 전체 `,_jsx(_components.a,{href:`/features/subscription#grace-period`,children:`grace period`}),` 동안 전달된 상태로 유지됩니다.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`subscription.on_hold`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`revocation_reason: subscription_on_hold`}),`인 전달 완료 및 대기 중 grant를 모두 철회합니다.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`subscription.paused`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`revocation_reason: SubscriptionPaused`}),`인 전달 완료 및 대기 중 grant를 모두 철회합니다. 다른 구독 reason과 달리 이 값은 PascalCase를 사용하므로 정확히 일치시켜야 합니다.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`subscription.unpaused`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`subscription.active`}),`와 동일한 방식으로 동일한 구독에 대해 이전에 철회된 grant를 다시 발급합니다.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`subscription.cancelled`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`revocation_reason: subscription_cancelled`}),`인 모든 grant를 철회합니다.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`subscription.expired`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`revocation_reason: subscription_expired`}),`인 모든 grant를 철회합니다.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`subscription.plan_changed`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`revocation_reason: plan_changed`}),`인 현재 grant를 모두 철회한 다음 새 plan의 entitlement에 대한 grant를 발급합니다.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`refund.succeeded`}),` (one-time payment)`]}),_jsxs(_components.td,{children:[`해당 결제의 grant를 `,_jsx(_components.code,{children:`revocation_reason: refund`}),`로 철회합니다.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Manual API revoke`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`revocation_reason: manual`}),`인 grant를 철회합니다. 수동 철회는 구독 renewal 시 자동으로 다시 발급되지 않습니다.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`License key disabled`}),_jsxs(_components.td,{children:[`License-key grant의 경우 기본 키를 비활성화하면 `,_jsx(_components.code,{children:`revocation_reason: license_key_disabled`}),`로 grant가 철회됩니다. 키를 다시 활성화하면 grant가 자동으로 복원됩니다.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Platform drift detected`}),_jsxs(_components.td,{children:[`수동으로 Discord 역할이 제거되거나, GitHub App이 repository 액세스를 잃거나, reconciliation pass에서 누락된 target을 찾는 등 integration의 platform 측 상태가 동기화되지 않으면 Dodo Payments는 `,_jsx(_components.code,{children:`revocation_reason: platform_external`}),`로 grant를 철회합니다. Platform 문제가 해결될 때까지 구독 renewal 시 자동으로 다시 발급되지 않습니다.`]})]})]})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`구독 기반 grant는 `,_jsx(_components.code,{children:`(entitlement, customer, subscription)`}),`별로 idempotent하므로 renewal 및 재활성화로 인해 중복 grant가 생성되지 않습니다. One-time grant는 `,_jsx(_components.code,{children:`(entitlement, customer, payment)`}),`별로 idempotent합니다.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`첫-entitlement-만들기`,children:`첫 Entitlement 만들기`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Open Entitlements`,children:_jsxs(_components.p,{children:[`Dashboard에서 `,_jsx(_components.strong,{children:`Entitlements`}),`로 이동한 다음 **+**를 클릭하여 entitlement를 생성합니다.`]})}),_jsx(Step,{title:`Pick an Integration`,children:_jsx(_components.p,{children:`Integration type을 선택합니다: License Key, Digital Files, Feature Flag, Discord, GitHub, Telegram, Figma, Framer 또는 Notion. Platform integration의 경우 아직 연결하지 않았다면 먼저 계정을 연결하세요.`})}),_jsxs(Step,{title:`Configure Delivery`,children:[_jsx(_components.p,{children:`Integration에 필요한 필드를 입력합니다. 예를 들어 GitHub는 repository와 permission level을 요구하고, Discord는 server와 선택적 role을 요구하며, License Key는 activations limit과 license length를 요구합니다.`}),_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:`integration selector와 configuration field가 표시된 New Entitlement 양식`,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:[_jsx(_components.strong,{children:`Create Entitlement`}),`를 클릭합니다. 이제 모든 product에 entitlement를 연결할 수 있습니다.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`product에-entitlement-연결하기`,children:`Product에 Entitlement 연결하기`}),`\n`,_jsxs(_components.p,{children:[`Product를 열고 `,_jsx(_components.strong,{children:`Entitlements`}),` 섹션으로 이동한 다음 product 구매 시 전달할 entitlement를 선택합니다. 하나의 product에서 여러 entitlement를 동시에 전달할 수 있습니다. 예를 들어 Pro plan에는 라이선스 키, GitHub 액세스 및 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:`사용 가능한 각 entitlement의 checkbox가 표시된 product entitlement 선택 panel`,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:`고객-경험`,children:`고객 경험`}),`\n`,_jsx(Heading,{level:`3`,id:`email-및-customer-portal`,children:`Email 및 Customer Portal`}),`\n`,_jsxs(_components.p,{children:[`구매 후 고객은 product의 entitlement에 해당하는 라이선스 키, 다운로드 링크, OAuth 초대 링크 또는 platform 초대가 포함된 delivery email을 받습니다. Grant가 활성 상태인 동안에는 `,_jsx(_components.a,{href:`/features/customer-portal`,children:`Customer Portal`}),`의 주문 기록에서도 동일한 세부 정보를 확인할 수 있습니다.`]}),`\n`,_jsx(Heading,{level:`3`,id:`oauth-기반-전달`,children:`OAuth 기반 전달`}),`\n`,_jsxs(_components.p,{children:[`Discord, GitHub 및 Notion subscriber 액세스를 제공하려면 고객이 Dodo Payments에 해당 액세스 권한 부여를 승인해야 합니다. 고객이 email 또는 Customer Portal의 링크에서 OAuth flow를 완료할 때까지 이러한 grant는 `,_jsx(_components.code,{children:`Pending`}),` 상태로 유지됩니다. 고객이 승인하면 grant는 `,_jsx(_components.code,{children:`Delivered`}),` 상태로 변경되고 Dodo Payments가 platform 액세스를 provision합니다.`]}),`\n`,_jsx(Heading,{level:`3`,id:`철회`,children:`철회`}),`\n`,_jsx(_components.p,{children:`Grant가 철회되면 Dodo Payments는 platform에서 액세스를 제거합니다. Discord 역할을 제거하고, GitHub collaborator를 제거하거나, 라이선스 키를 비활성화합니다. 고객은 Customer Portal에서 변경 사항을 확인할 수 있습니다.`}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Digital Files의 경우 철회하면 새로운 presigned download URL이 발급되지 않지만 고객이 이미 다운로드한 사본이 무효화되지는 않습니다. 이 점을 고려하여 content gating을 계획하세요.`})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`grant-관리`,children:`Grant 관리`}),`\n`,_jsxs(_components.p,{children:[`Dashboard에서 entitlement를 열어 grant를 확인합니다. Detail panel에는 총 grant 수, status filter, 고객, 액세스한 날짜, 상태 및 `,_jsx(_components.strong,{children:`Revoke`}),` action이 포함된 grant별 행이 표시됩니다.`]}),`\n`,_jsxs(_components.p,{children:[`Grant를 programmatically 관리하려면 `,_jsx(_components.code,{children:`status`}),` filter로 목록을 조회하고 ID로 단일 grant를 철회합니다:`]}),`\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:`api-관리`,children:`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:`모든 integration type의 entitlement를 생성합니다.`})}),_jsx(Card,{title:`List Entitlements`,icon:`list`,href:`/api-reference/entitlements/list-entitlements`,children:_jsx(_components.p,{children:`Integration type으로 필터링하여 entitlement 목록을 조회합니다.`})}),_jsx(Card,{title:`Get Entitlement`,icon:`magnifying-glass`,href:`/api-reference/entitlements/get-entitlement`,children:_jsx(_components.p,{children:`Entitlement와 resolved configuration을 조회합니다.`})}),_jsx(Card,{title:`Update Entitlement`,icon:`pen`,href:`/api-reference/entitlements/update-entitlement`,children:_jsx(_components.p,{children:`이름, 설명 또는 integration configuration을 업데이트합니다.`})}),_jsx(Card,{title:`Delete Entitlement`,icon:`trash`,href:`/api-reference/entitlements/delete-entitlement`,children:_jsx(_components.p,{children:`Entitlement를 soft-delete합니다. 기존 grant는 철회되지 않지만 Dodo Payments는 더 이상 이를 관리하지 않습니다.`})}),_jsx(Card,{title:`Upload File`,icon:`upload`,href:`/api-reference/entitlements/upload-file`,children:_jsx(_components.p,{children:`Digital Files entitlement에 최대 500 MiB의 파일을 업로드합니다.`})}),_jsx(Card,{title:`List Grants`,icon:`users`,href:`/api-reference/entitlements/list-grants`,children:_jsx(_components.p,{children:`status와 고객으로 필터링하여 entitlement의 grant 목록을 조회합니다.`})}),_jsx(Card,{title:`Revoke Grant`,icon:`ban`,href:`/api-reference/entitlements/revoke-grant`,children:_jsx(_components.p,{children:`단일 grant를 수동으로 철회합니다.`})})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`webhook`,children:`Webhook`}),`\n`,_jsx(_components.p,{children:`Dodo Payments는 grant lifecycle에 대해 네 가지 webhook event를 전송합니다. 이를 subscribe하여 각 고객이 액세스할 수 있는 항목과 애플리케이션의 상태를 동기화하세요.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Event`}),_jsx(_components.th,{children:`발생 시점`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`entitlement_grant.created`})}),_jsxs(_components.td,{children:[`Grant가 생성될 때 발생합니다. 자동으로 fulfilled된 license-key grant와 feature-flag grant는 `,_jsx(_components.code,{children:`Delivered`}),` 상태로 도착합니다. 수동으로 fulfilled된 license-key grant 및 그 외 모든 integration은 `,_jsx(_components.code,{children:`Pending`}),` 상태로 도착한 뒤, platform 호출이 성공하거나 OAuth 기반 integration의 경우 고객이 승인하면 `,_jsx(_components.code,{children:`Delivered`}),` 상태로 변경됩니다.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`entitlement_grant.delivered`})}),_jsxs(_components.td,{children:[`기존 grant가 `,_jsx(_components.code,{children:`Delivered`}),` 상태로 변경되어 고객이 액세스할 수 있게 될 때 발생합니다. 생성 시 `,_jsx(_components.code,{children:`Delivered`}),` 상태인 grant는 `,_jsx(_components.code,{children:`created`}),`만 발생시킵니다.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`entitlement_grant.failed`})}),_jsxs(_components.td,{children:[`Grant를 전달할 수 없을 때 발생합니다. `,_jsx(_components.code,{children:`error_code`}),` 및 `,_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:[`액세스가 철회되었을 때 발생합니다. `,_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:[`전체 payload schema, sample event 및 `,_jsx(_components.code,{children:`revocation_reason`}),` reference를 확인하세요.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`best-practices`,children:`Best Practices`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`전달 채널마다 entitlement 하나를 사용하세요.`}),` 역할 의도가 서로 다른 product 간에 하나의 Discord entitlement를 공유하지 마세요. 역할마다 entitlement를 하나씩 만들어 철회가 깔끔하게 처리되도록 하세요.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`먼저 test mode에서 테스트하세요.`}),` Entitlement를 생성하고 test product에 연결한 다음 checkout을 실행하여 grant가 `,_jsx(_components.code,{children:`Pending`}),`에서 `,_jsx(_components.code,{children:`Delivered`}),`로 변경되는지 확인하세요. 그런 다음 test subscription을 취소하고 grant가 철회되는지 확인하세요.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[_jsx(_components.code,{children:`payment.succeeded`}),`가 아니라 `,_jsx(_components.code,{children:`entitlement_grant.delivered`}),`를 수신하세요.`]}),` 특히 OAuth flow에서는 fulfillment가 완료되기 전에 결제가 성공할 수 있습니다. 자체 system에서 종속 feature를 unlock하기 전에 grant가 `,_jsx(_components.code,{children:`Delivered`}),` 상태가 될 때까지 기다리세요. 자동으로 fulfilled된 license key 또는 feature flag처럼 생성 시 전달되는 grant는 대신 `,_jsx(_components.code,{children:`entitlement_grant.created`}),`와 `,_jsx(_components.code,{children:`status: \"Delivered\"`}),`로 도착합니다.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[_jsx(_components.code,{children:`entitlement_grant.failed`}),`를 조치가 필요한 상태로 처리하세요.`]}),` Failed grant는 고객이 결제했지만 액세스하지 못했다는 의미입니다. 이러한 grant를 support team에 표시하거나 re-grant를 trigger하세요.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[_jsx(_components.code,{children:`revocation_reason`}),`를 retention flow에 매핑하세요.`]}),` `,_jsx(_components.code,{children:`subscription_on_hold`}),` revoke는 고객이 카드를 업데이트할 수 있으므로 복구할 수 있습니다. `,_jsx(_components.code,{children:`manual`}),` revoke는 의도적인 철회입니다. 고객 메시지에서 이 둘을 다르게 처리하세요.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[_jsx(_components.code,{children:`subscription.past_due`}),`에서 액세스를 철회하지 마세요.`]}),` 이 event는 `,_jsx(_components.a,{href:`/features/subscription#grace-period`,children:`grace period`}),`를 시작하며 해당 기간이 끝날 때까지 고객이 액세스를 유지합니다. `,_jsx(_components.code,{children:`subscription.on_hold`}),` 또는 `,_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":"소개","sidebarTitle":"소개","description":"고객이 결제하면 라이선스 키, 다운로드 가능한 파일, feature flag, Discord, GitHub, Telegram, Framer, Notion에 대한 액세스를 자동으로 제공합니다.","icon":"box-archive","keywords":["Dodo Payments","entitlements","fulfillment","license keys","digital delivery","platform access"],"href":"/ko/features/entitlements/introduction"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Entitlement란 무엇인가요?","slug":"entitlement란-무엇인가요","depth":2,"children":[]},{"title":"사용 가능한 통합","slug":"사용-가능한-통합","depth":2,"children":[]},{"title":"승인 방식","slug":"승인-방식","depth":2,"children":[{"title":"승인 생명주기","slug":"승인-생명주기","depth":3,"children":[]},{"title":"Event별 Grant 동작","slug":"event별-grant-동작","depth":3,"children":[]}]},{"title":"첫 Entitlement 만들기","slug":"첫-entitlement-만들기","depth":2,"children":[]},{"title":"Product에 Entitlement 연결하기","slug":"product에-entitlement-연결하기","depth":2,"children":[]},{"title":"고객 경험","slug":"고객-경험","depth":2,"children":[{"title":"Email 및 Customer Portal","slug":"email-및-customer-portal","depth":3,"children":[]},{"title":"OAuth 기반 전달","slug":"oauth-기반-전달","depth":3,"children":[]},{"title":"철회","slug":"철회","depth":3,"children":[]}]},{"title":"Grant 관리","slug":"grant-관리","depth":2,"children":[]},{"title":"API 관리","slug":"api-관리","depth":2,"children":[]},{"title":"Webhook","slug":"webhook","depth":2,"children":[]},{"title":"Best Practices","slug":"best-practices","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":"소개 - 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":0},"pt-BR":{"href":"/pt-BR/features/entitlements/introduction","matchLevel":1},"vi":{"href":"/vi/features/entitlements/introduction","matchLevel":1},"cn":{"href":"/cn/features/entitlements/introduction","matchLevel":1},"hi":{"href":"/hi/features/entitlements/introduction","matchLevel":1},"it":{"href":"/it/features/entitlements/introduction","matchLevel":1},"sv":{"href":"/sv/features/entitlements/introduction","matchLevel":1}}},"lastModified":"2026-09-26T16:06:29.004Z","gitLastModified":"2026-09-26T16:03:47.000Z","originalFileLocation":"ko/features/entitlements/introduction.mdx","locale":"ko"},"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=\"고객이 결제하면 라이선스 키, 다운로드 가능한 파일, feature flag, Discord, GitHub, Telegram, Framer, Notion에 대한 액세스를 자동으로 제공합니다.\">\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=\"소개 - Dodo Payments Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"고객이 결제하면 라이선스 키, 다운로드 가능한 파일, feature flag, Discord, GitHub, Telegram, Framer, Notion에 대한 액세스를 자동으로 제공합니다.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Dodo Payments Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.dodopayments.com/ko/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=%EC%86%8C%EA%B0%9C\u0026amp;description=%EA%B3%A0%EA%B0%9D%EC%9D%B4+%EA%B2%B0%EC%A0%9C%ED%95%98%EB%A9%B4+%EB%9D%BC%EC%9D%B4%EC%84%A0%EC%8A%A4+%ED%82%A4%2C+%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C+%EA%B0%80%EB%8A%A5%ED%95%9C+%ED%8C%8C%EC%9D%BC%2C+feature+flag%2C+Discord%2C+GitHub%2C+Telegram%2C+Framer%2C+Notion%EC%97%90+%EB%8C%80%ED%95%9C+%EC%95%A1%EC%84%B8%EC%8A%A4%EB%A5%BC+%EC%9E%90%EB%8F%99%EC%9C%BC%EB%A1%9C+%EC%A0%9C%EA%B3%B5%ED%95%A9%EB%8B%88%EB%8B%A4.\u0026amp;theme=fcc3a546490e883f7462a320\u0026amp;signature=15d67e68828fd1f92e5f918d10e15b8e6bb5c3c7dfa8748f38bd065703652fa1\">\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=\"소개 - Dodo Payments Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"고객이 결제하면 라이선스 키, 다운로드 가능한 파일, feature flag, Discord, GitHub, Telegram, Framer, Notion에 대한 액세스를 자동으로 제공합니다.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://dodopayments.mintlify.site/_mintlify/api/og/v2?division=Entitlements\u0026amp;title=%EC%86%8C%EA%B0%9C\u0026amp;description=%EA%B3%A0%EA%B0%9D%EC%9D%B4+%EA%B2%B0%EC%A0%9C%ED%95%98%EB%A9%B4+%EB%9D%BC%EC%9D%B4%EC%84%A0%EC%8A%A4+%ED%82%A4%2C+%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C+%EA%B0%80%EB%8A%A5%ED%95%9C+%ED%8C%8C%EC%9D%BC%2C+feature+flag%2C+Discord%2C+GitHub%2C+Telegram%2C+Framer%2C+Notion%EC%97%90+%EB%8C%80%ED%95%9C+%EC%95%A1%EC%84%B8%EC%8A%A4%EB%A5%BC+%EC%9E%90%EB%8F%99%EC%9C%BC%EB%A1%9C+%EC%A0%9C%EA%B3%B5%ED%95%A9%EB%8B%88%EB%8B%A4.\u0026amp;theme=fcc3a546490e883f7462a320\u0026amp;signature=15d67e68828fd1f92e5f918d10e15b8e6bb5c3c7dfa8748f38bd065703652fa1\">\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/ko/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=\"/ko/features/entitlements/introduction.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ko\" href=\"https://docs.dodopayments.com/ko/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=\"pt-BR\" href=\"https://docs.dodopayments.com/pt-BR/features/entitlements/introduction\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"vi\" href=\"https://docs.dodopayments.com/vi/features/entitlements/introduction\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"zh\" href=\"https://docs.dodopayments.com/cn/features/entitlements/introduction\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"hi\" href=\"https://docs.dodopayments.com/hi/features/entitlements/introduction\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"it\" href=\"https://docs.dodopayments.com/it/features/entitlements/introduction\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"sv\" href=\"https://docs.dodopayments.com/sv/features/entitlements/introduction\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://docs.dodopayments.com/features/entitlements/introduction\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.dodopayments.com/#organization\",\"name\":\"Dodo Payments Documentation\",\"url\":\"https://docs.dodopayments.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/dodopayments/nM_mJfYkri-OpC5M/logo/light.svg?fit=max\u0026auto=format\u0026n=nM_mJfYkri-OpC5M\u0026q=85\u0026s=23f7a052f7ecb9d6570b7c95ee359a97\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.dodopayments.com#website\",\"name\":\"Dodo Payments Documentation\",\"url\":\"https://docs.dodopayments.com\",\"publisher\":{\"@id\":\"https://docs.dodopayments.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.dodopayments.com/ko/features/entitlements/introduction#webpage\",\"url\":\"https://docs.dodopayments.com/ko/features/entitlements/introduction\",\"name\":\"소개\",\"description\":\"고객이 결제하면 라이선스 키, 다운로드 가능한 파일, feature flag, Discord, GitHub, Telegram, Framer, Notion에 대한 액세스를 자동으로 제공합니다.\",\"dateModified\":\"2026-09-26T16:03:47.000Z\",\"isPartOf\":{\"@id\":\"https://docs.dodopayments.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.dodopayments.com/ko/features/entitlements/introduction#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.dodopayments.com/ko/features/entitlements/introduction#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Features\",\"item\":\"https://docs.dodopayments.com/ko/features/products\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"소개\",\"item\":\"https://docs.dodopayments.com/ko/features/entitlements/introduction\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.dodopayments.com/ko/features/entitlements/introduction#article\",\"headline\":\"소개\",\"name\":\"소개\",\"description\":\"고객이 결제하면 라이선스 키, 다운로드 가능한 파일, feature flag, Discord, GitHub, Telegram, Framer, Notion에 대한 액세스를 자동으로 제공합니다.\",\"url\":\"https://docs.dodopayments.com/ko/features/entitlements/introduction\",\"mainEntityOfPage\":{\"@id\":\"https://docs.dodopayments.com/ko/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":"/ko/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","tabs":[{"tab":"Docs","icon":"book","groups":[{"group":"Getting Started","pages":[{"title":"Dodo Payments에 오신 것을 환영합니다","sidebarTitle":"소개","icon":"rocket","href":"/ko/introduction"},{"title":"AI 코딩 에이전트와 함께 구축하기","sidebarTitle":"AI 코딩 에이전트","icon":"robot","href":"/ko/developer-resources/build-with-ai-coding-agents"},{"title":"Dodo Payments로 마이그레이션하기","icon":"arrow-right-arrow-left","href":"/ko/migrate-to-dodo"},{"title":"계정 인증","icon":"id-card","href":"/ko/miscellaneous/verification-process"}]},{"group":"Features","pages":[{"sidebarTitle":"제품","title":"제품","icon":"box","href":"/ko/features/products"},{"sidebarTitle":"제품 컬렉션","title":"제품 컬렉션","icon":"layer-group","href":"/ko/features/product-collections"},{"sidebarTitle":"일회성 결제","title":"일회성 결제","icon":"credit-card","href":"/ko/features/one-time-payment-products"},{"group":"Subscriptions","icon":"infinity","pages":[{"sidebarTitle":"Subscriptions","title":"Subscriptions","icon":"repeat","href":"/ko/features/subscription"},{"sidebarTitle":"추가 기능","title":"구독을 위한 추가 기능","icon":"puzzle","href":"/ko/features/addons"},{"title":"주문형 구독","icon":"bolt","href":"/ko/developer-resources/ondemand-subscriptions"}]},{"group":"Usage Based Billing","icon":"arrow-trend-up","pages":[{"sidebarTitle":"소개","title":"사용량 기반 결제","icon":"box","href":"/ko/features/usage-based-billing/introduction"},{"sidebarTitle":"미터","title":"미터","icon":"sliders","href":"/ko/features/usage-based-billing/meters"},{"sidebarTitle":"이벤트 수집","title":"이벤트 수집","icon":"bolt","href":"/ko/features/usage-based-billing/event-ingestion"},{"group":"Ingestion Blueprints","icon":"copy","pages":[{"sidebarTitle":"소개","title":"수집 청사진","icon":"box","href":"/ko/features/usage-based-billing/ingestion-blueprints"},{"title":"LLM Blueprint","icon":"brain-circuit","href":"/ko/developer-resources/ingestion-blueprints/llm"},{"title":"API Gateway Blueprint","icon":"cloud","href":"/ko/developer-resources/ingestion-blueprints/api-gateway"},{"title":"객체 저장소 청사진","icon":"box-archive","href":"/ko/developer-resources/ingestion-blueprints/object-storage"},{"title":"스트림 블루프린트","icon":"tower-broadcast","href":"/ko/developer-resources/ingestion-blueprints/stream"},{"title":"시간 범위 청사진","icon":"clock","href":"/ko/developer-resources/ingestion-blueprints/time-range"}]}]},{"sidebarTitle":"Credit-Based Billing","title":"Credit-Based Billing","icon":"coins","tag":"NEW","href":"/ko/features/credit-based-billing"},{"sidebarTitle":"좌석 기반 청구","title":"좌석 기반 청구","icon":"users","href":"/ko/features/seat-based-billing"},{"sidebarTitle":"하이브리드 결제","title":"하이브리드 결제 모델","icon":"layer-group","href":"/ko/features/hybrid-billing"},{"title":"업셀 \u0026 다운셀","icon":"arrow-up-right-dots","href":"/ko/features/upsells-and-downsells"},{"group":"Customers","icon":"user-group","pages":[{"title":"Customer Management","icon":"user-group","href":"/ko/features/customers"},{"sidebarTitle":"고객 포털","title":"고객 포털","icon":"id-card","href":"/ko/features/customer-portal"},{"title":"고객 지갑","icon":"wallet","tag":"NEW","href":"/ko/features/customer-wallet"},{"sidebarTitle":"발송된 이메일","title":"고객 이메일 로그","icon":"envelope","tag":"NEW","href":"/ko/features/email-logs"},{"sidebarTitle":"Customer Blocklist","title":"Customer Blocklist","icon":"user-slash","tag":"NEW","href":"/ko/features/customer-blocklist"}]},{"sidebarTitle":"할인","title":"할인","icon":"percent","href":"/ko/features/discount-codes"},{"group":"Recovery","icon":"rotate","tag":"NEW","pages":[{"sidebarTitle":"개요","title":"수익 회복","icon":"rotate","href":"/ko/features/recovery/overview"},{"sidebarTitle":"장바구니 복구","title":"장바구니 복구","icon":"cart-shopping","href":"/ko/features/recovery/abandoned-cart-recovery"},{"sidebarTitle":"구독 추심","title":"구독 추심","icon":"repeat","href":"/ko/features/recovery/subscription-dunning"},{"sidebarTitle":"구독 결제 재시도","title":"구독 결제 재시도","icon":"arrow-rotate-right","href":"/ko/features/recovery/payment-retries"},{"sidebarTitle":"수동 재시도","title":"수동 결제 재시도","icon":"hand-pointer","tag":"NEW","href":"/ko/features/recovery/manual-retry"}]},{"group":"Transactions","icon":"credit-card","pages":[{"title":"결제","icon":"money-bill-transfer","href":"/ko/features/transactions/payments"},{"title":"환불","icon":"rotate-left","href":"/ko/features/transactions/refunds"},{"title":"분쟁","description":"Transactions 페이지에서 분쟁을 확인하고 대응하며, Visa RDR, Ethoca alerts 및 deflections를 사용해 chargeback이 접수되기 전에 중지하세요.","icon":"circle-exclamation","href":"/ko/features/transactions/disputes"}]},{"group":"Entitlements","icon":"gift","tag":"NEW","pages":[{"title":"소개","sidebarTitle":"소개","icon":"box-archive","href":"/ko/features/entitlements/introduction"},{"title":"License Keys","description":"License Key entitlement를 통해 활성화 제한 및 만료가 적용된 라이선스 키를 발급한 다음, 소프트웨어에서 이를 활성화, 검증 및 비활성화하세요.","icon":"key","href":"/ko/features/license-keys"},{"title":"Digital Product Delivery","sidebarTitle":"Digital Products","icon":"download","href":"/ko/features/digital-product-delivery"},{"title":"기능 플래그 권한","sidebarTitle":"기능 플래그","icon":"flag","tag":"NEW","href":"/ko/features/entitlements/feature-flags"},{"title":"Discord Entitlement","sidebarTitle":"Discord","icon":"discord","href":"/ko/features/entitlements/discord"},{"title":"GitHub Entitlement","sidebarTitle":"GitHub","icon":"github","href":"/ko/features/entitlements/github"},{"title":"Telegram 자격 부여","sidebarTitle":"Telegram","icon":"telegram","href":"/ko/features/entitlements/telegram"},{"title":"Framer 권한","sidebarTitle":"Framer","icon":"puzzle-piece","href":"/ko/features/entitlements/framer"},{"title":"Notion 권한","sidebarTitle":"Notion","icon":"book","href":"/ko/features/entitlements/notion"}]},{"group":"Payouts and Balances","icon":"wallet","pages":[{"title":"지급 프로세스","icon":"money-bill","href":"/ko/features/payouts/payout-structure"},{"title":"잔액","icon":"file-invoice-dollar","href":"/ko/features/account-summary-payout-wallet"}]},{"group":"Account Management","icon":"user","pages":[{"sidebarTitle":"비즈니스 보관","title":"비즈니스 보관","icon":"box-archive","tag":"NEW","href":"/ko/features/archive-business"},{"title":"다중 브랜드 설정","icon":"building-columns","href":"/ko/features/multi-brands"},{"title":"청구서 관리","icon":"file-invoice-dollar","href":"/ko/features/invoice-generation"},{"title":"팀 구성원","icon":"user-gear","href":"/ko/features/team"},{"title":"커뮤니케이션 환경설정","sidebarTitle":"커뮤니케이션 환경설정","icon":"bell","tag":"NEW","href":"/ko/features/communication-preferences"},{"title":"내 계정","icon":"user-gear","href":"/ko/miscellaneous/accounts"}]},{"group":"Pricing","icon":"dollar-sign","pages":[{"sidebarTitle":"세금 포함 가격","title":"세금 포함 가격","icon":"file-invoice","href":"/ko/features/tax-inclusive-pricing"},{"sidebarTitle":"원하는 만큼 지불하기","title":"원하는 만큼 지불하기 가격 책정","icon":"dollar-sign","href":"/ko/features/pay-what-you-want"},{"title":"B2B 결제","icon":"money-bills","href":"/ko/features/b2b-payments"},{"title":"현지화된 가격","sidebarTitle":"현지화된 가격","icon":"earth-americas","href":"/ko/features/localized-pricing"},{"sidebarTitle":"구매력 평가 (PPP)","title":"구매력 평형","tag":"NEW","icon":"money-bill-trend-up","href":"/ko/features/purchasing-power-parity"},{"sidebarTitle":"Charm Pricing","title":"Charm Pricing","tag":"NEW","icon":"tag","href":"/ko/features/charm-pricing"}]},{"sidebarTitle":"결제","title":"결제 기능","icon":"cart-shopping","href":"/ko/features/checkout"},{"sidebarTitle":"디자인","title":"디자인 및 테마 커스터마이징","icon":"palette","tag":"NEW","href":"/ko/features/design"},{"group":"Payment Methods","icon":"money-bill-wave","pages":[{"title":"Payment Methods","sidebarTitle":"Overview","icon":"layer-group","href":"/ko/features/payment-methods"},{"title":"신용카드 및 직불카드","sidebarTitle":"카드","icon":"credit-card","href":"/ko/features/payment-methods/cards"},{"title":"Digital Wallets","sidebarTitle":"Digital Wallets","icon":"wallet","href":"/ko/features/payment-methods/digital-wallets"},{"title":"지금 구매 나중에 결제 (BNPL)","sidebarTitle":"BNPL","icon":"calendar-days","href":"/ko/features/payment-methods/bnpl"},{"title":"ACH Direct Debit","sidebarTitle":"ACH Direct Debit","icon":"building-columns","href":"/ko/features/payment-methods/ach"},{"title":"인도 결제 방법","sidebarTitle":"인도","icon":"indian-rupee-sign","href":"/ko/features/payment-methods/india"},{"title":"유럽 결제 수단","sidebarTitle":"유럽","icon":"euro-sign","href":"/ko/features/payment-methods/europe"},{"title":"대한민국 결제 방법","sidebarTitle":"대한민국","icon":"won-sign","href":"/ko/features/payment-methods/south-korea"},{"title":"아시아 태평양 결제 수단","sidebarTitle":"아시아 태평양","icon":"earth-asia","href":"/ko/features/payment-methods/asia-pacific"},{"title":"Pix","sidebarTitle":"Pix","icon":"brazilian-real-sign","href":"/ko/features/payment-methods/pix"},{"title":"스테이블코인","sidebarTitle":"스테이블코인","icon":"dollar-sign","href":"/ko/features/payment-methods/stablecoins"},{"title":"WeChat Pay","sidebarTitle":"WeChat Pay","icon":"comment-dollar","href":"/ko/features/payment-methods/wechat"}]},{"title":"타사 분석","sidebarTitle":"타사 분석","icon":"chart-line","tag":"NEW","href":"/ko/features/analytics"},{"sidebarTitle":"적응형 통화","title":"적응형 통화","icon":"money-bill-transfer","href":"/ko/features/adaptive-currency"},{"group":"BYOP","icon":"shuffle","tag":"BETA","pages":[{"title":"Bring Your Own Processor (BYOP)","sidebarTitle":"개요","tag":"BETA","icon":"boxes-stacked","href":"/ko/features/byop"},{"title":"Stripe - Connect \u0026 Raw Card API Access","sidebarTitle":"Stripe","icon":"stripe","href":"/ko/features/byop/stripe"},{"title":"Adyen - 연결 및 Raw Card API 접근","sidebarTitle":"Adyen","icon":"https://mintlify.s3.us-west-1.amazonaws.com/dodopayments/images/logos/adyen.svg","href":"/ko/features/byop/adyen"}]},{"title":"스토어프론트","icon":"store","href":"/ko/features/storefront"},{"title":"제휴사","icon":"users-line","href":"/ko/features/affiliates"},{"title":"Moderation API","icon":"shield-check","tag":"NEW","href":"/ko/features/moderation"},{"title":"iOS에서 디지털 상품 판매하기","icon":"mobile","href":"/ko/features/appstore-digital-goods"},{"title":"대시보드 분석","sidebarTitle":"대시보드 분석","icon":"chart-line","href":"/ko/features/analytics-and-reporting"},{"title":"보고서","sidebarTitle":"보고서","icon":"file-invoice","href":"/ko/features/reports"}]},{"group":"Integrate","pages":[{"group":"SDKs","icon":"box-open","pages":[{"sidebarTitle":"개요","title":"공식 SDK","icon":"box","href":"/ko/developer-resources/dodo-payments-sdks"},{"title":"TypeScript","icon":"js","href":"/ko/developer-resources/sdks/typescript"},{"title":"Python","icon":"python","href":"/ko/developer-resources/sdks/python"},{"title":"Go","icon":"golang","href":"/ko/developer-resources/sdks/go"},{"title":"루비","icon":"gem","href":"/ko/developer-resources/sdks/ruby"},{"title":"자바","icon":"java","href":"/ko/developer-resources/sdks/java"},{"title":"Kotlin","icon":"k","href":"/ko/developer-resources/sdks/kotlin"},{"title":"PHP","icon":"php","href":"/ko/developer-resources/sdks/php"},{"title":"C#","icon":"c","href":"/ko/developer-resources/sdks/csharp"},{"title":"Rust","icon":"rust","href":"/ko/developer-resources/sdks/rust"}]},{"group":"Mobile Checkout SDKs","icon":"mobile","pages":[{"title":"Mobile Integration Guide","sidebarTitle":"Integration Guide","icon":"mobile","href":"/ko/developer-resources/mobile-integration"},{"title":"Android","sidebarTitle":"Android","tag":"NEW","icon":"android","href":"/ko/developer-resources/sdks/android"},{"title":"iOS","sidebarTitle":"iOS","tag":"NEW","icon":"apple","href":"/ko/developer-resources/sdks/ios"},{"title":"React Native","sidebarTitle":"React Native","tag":"NEW","icon":"react","href":"/ko/developer-resources/sdks/react-native"},{"title":"Flutter","sidebarTitle":"Flutter","tag":"NEW","icon":"layer-group","href":"/ko/developer-resources/sdks/flutter"}]},{"group":"Framework Adaptors","icon":"frame","pages":[{"sidebarTitle":"개요","title":"프레임워크 어댑터 개요","icon":"box","href":"/ko/developer-resources/framework-adaptors"},{"title":"Next.js Adaptor","icon":"code-merge","href":"/ko/developer-resources/nextjs-adaptor"},{"title":"Better Auth 어댑터","icon":"code-merge","href":"/ko/developer-resources/better-auth-adaptor"},{"title":"Convex Component","icon":"code-merge","href":"/ko/developer-resources/convex-component"},{"title":"TanStack Adaptor","icon":"code-merge","href":"/ko/developer-resources/tanstack-adaptor"},{"title":"Nuxt 어댑터","icon":"code-merge","href":"/ko/developer-resources/nuxt-adaptor"},{"title":"Express 어댑터","icon":"code-merge","href":"/ko/developer-resources/express-adaptor"},{"title":"Astro Adaptor","icon":"code-merge","href":"/ko/developer-resources/astro-adaptor"},{"title":"SvelteKit Adaptor","icon":"code-merge","href":"/ko/developer-resources/sveltekit-adaptor"},{"title":"Hono Adaptor","icon":"code-merge","href":"/ko/developer-resources/hono-adaptor"},{"title":"Remix Adaptor","icon":"code-merge","href":"/ko/developer-resources/remix-adaptor"},{"title":"Fastify 어댑터","icon":"code-merge","href":"/ko/developer-resources/fastify-adaptor"},{"title":"Bun Adaptor","icon":"code-merge","href":"/ko/developer-resources/bun-adaptor"}]},{"group":"Webhooks","icon":"webhook","pages":[{"sidebarTitle":"개요","title":"Webhooks","icon":"webhook","href":"/ko/developer-resources/webhooks"},{"title":"Webhook Events Guide","icon":"bell","href":"/ko/developer-resources/webhooks/intents/webhook-events-guide"},{"group":"Webhook Payloads","icon":"code","pages":[{"title":"결제","icon":"credit-card","href":"/ko/developer-resources/webhooks/intents/payment"},{"sidebarTitle":"구독","title":"구독 웹훅","icon":"repeat","href":"/ko/developer-resources/webhooks/intents/subscription"},{"title":"환불","icon":"rotate-left","href":"/ko/developer-resources/webhooks/intents/refund"},{"sidebarTitle":"분쟁","title":"분쟁 Webhooks","icon":"circle-exclamation","href":"/ko/developer-resources/webhooks/intents/dispute"},{"title":"라이센스 키","icon":"key","href":"/ko/developer-resources/webhooks/intents/license-key"},{"title":"자격 부여","icon":"gift","href":"/ko/developer-resources/webhooks/intents/entitlement-grant"},{"sidebarTitle":"크레딧 기반 청구","title":"크레딧 기반 청구 웹훅","icon":"coins","href":"/ko/developer-resources/webhooks/intents/credit"},{"title":"Recovery","icon":"rotate","href":"/ko/developer-resources/webhooks/intents/recovery"},{"sidebarTitle":"Payout","title":"Payout Webhooks","icon":"money-bill-transfer","href":"/ko/developer-resources/webhooks/intents/payout"}]},{"group":"Deploy to Cloud","icon":"rocket","pages":[{"title":"Vercel Functions","icon":"triangle","href":"/ko/developer-resources/webhooks/examples/vercel-example"},{"title":"Cloudflare Workers","icon":"cloud","href":"/ko/developer-resources/webhooks/examples/cloudflare-example"},{"title":"Supabase Edge Functions","icon":"bolt","href":"/ko/developer-resources/webhooks/examples/supabase-example"},{"title":"Netlify Functions","icon":"diamond","href":"/ko/developer-resources/webhooks/examples/netlify-example"}]}]},{"group":"Testing \u0026 Demo Tools","icon":"flask","pages":[{"title":"테스트 모드 vs 라이브 모드","icon":"toggle-on","href":"/ko/miscellaneous/test-mode-vs-live-mode"},{"title":"테스트 프로세스","icon":"flask","href":"/ko/miscellaneous/testing-process"},{"title":"Atlas Demo Product","icon":"palette","href":"/ko/features/atlas-demo-website"}]},{"group":"Boilerplates","icon":"box-open","pages":[{"sidebarTitle":"Expo","title":"Expo Boilerplate","icon":"https://mintlify.s3.us-west-1.amazonaws.com/dodopayments/images/logos/expo.svg","tag":"NEW","href":"/ko/developer-resources/expo-boilerplate"},{"sidebarTitle":"Supabase","title":"Supabase 보일러플레이트","icon":"https://mintlify.s3.us-west-1.amazonaws.com/dodopayments/images/logos/supabase.svg","href":"/ko/developer-resources/supabase-boilerplate"},{"sidebarTitle":"피그마 플러그인","title":"Figma 플러그인","icon":"https://mintlify.s3.us-west-1.amazonaws.com/dodopayments/images/logos/figma.svg","href":"/ko/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":"/ko/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":"/ko/developer-resources/astro-boilerplate"},{"sidebarTitle":"FastAPI","title":"FastAPI 보일러플레이트","icon":"https://mintlify.s3.us-west-1.amazonaws.com/dodopayments/images/logos/fastapi.svg","tag":"NEW","href":"/ko/developer-resources/fastapi-boilerplate"},{"sidebarTitle":"Go","title":"Go 보일러플레이트","icon":"golang","tag":"NEW","href":"/ko/developer-resources/go-boilerplate"}]},{"title":"Dodo CLI","icon":"terminal","tag":"NEW","href":"/ko/developer-resources/sdks/cli"},{"title":"오버레이 체크아웃","icon":"cart-shopping","href":"/ko/developer-resources/overlay-checkout"},{"title":"인라인 체크아웃","icon":"credit-card","href":"/ko/developer-resources/inline-checkout"},{"title":"청구 SDK","icon":"boxes-stacked","href":"/ko/developer-resources/billingsdk"},{"title":"Dodo Payments MCP Server","icon":"server","href":"/ko/developer-resources/mcp-server"},{"title":"Agent Skills","icon":"wand-magic-sparkles","href":"/ko/developer-resources/agent-skills"},{"sidebarTitle":"데이터베이스 동기화","title":"데이터베이스와 동기화","icon":"database","href":"/ko/developer-resources/dodo-sync"},{"sidebarTitle":"구독 마이그레이션","title":"Dodo Payments로의 구독 마이그레이션","icon":"file-import","href":"/ko/miscellaneous/subscription-migration"}]},{"group":"Merchant of Record","pages":[{"sidebarTitle":"MoR이란 무엇인가요?","title":"소개","icon":"building-columns","href":"/ko/features/mor-introduction"},{"title":"MoR vs PG","icon":"scale-balanced","href":"/ko/features/mor-vs-pg"},{"title":"가맹점 등록이 가능한 국가","icon":"globe","href":"/ko/miscellaneous/accepted-countries-and-territories"},{"title":"검토 및 모니터링 정책","icon":"magnifying-glass","href":"/ko/miscellaneous/review-monitoring-policy"},{"sidebarTitle":"App Store 수수료 우회","title":"Dodo Payments를 사용하여 App Store 및 Play Store 수수료 우회하기","icon":"shield-check","href":"/ko/features/bypassing-app-store-fees"}]},{"group":"Miscellaneous","pages":[{"group":"Support Channels","icon":"headset","pages":[{"title":"도움 및 지원","icon":"headset","href":"/ko/miscellaneous/help-support"},{"title":"기능 요청 및 로드맵","icon":"lightbulb","href":"/ko/features/feature-request"}]},{"title":"모바일 및 데스크톱 앱","icon":"mobile","href":"/ko/features/mobile-app"},{"title":"보안 보고 정책","icon":"shield","href":"/ko/miscellaneous/security-policy"}]}]},{"tab":"Guides","icon":"compass","pages":[{"title":"Guides","href":"/ko/developer-resources/integration-guide"}]},{"tab":"API Reference","icon":"rectangle-code","pages":[{"title":"API Reference","href":"/ko/api-reference/introduction"}]},{"tab":"External Integrations","icon":"plug","pages":[{"title":"External Integrations","href":"/ko/integrations/introduction"}]},{"tab":"Changelog","icon":"calendar-days","pages":[{"title":"Changelog","href":"/ko/changelog/introduction"}]},{"tab":"Community Projects","icon":"users","pages":[{"title":"Community Projects","href":"/ko/community/overview"}]}]},{"language":"pt-BR","pages":[{"title":"pt-BR","href":"/pt-BR/features/entitlements/introduction"}]},{"language":"vi","pages":[{"title":"vi","href":"/vi/features/entitlements/introduction"}]},{"language":"cn","pages":[{"title":"cn","href":"/cn/features/entitlements/introduction"}]},{"language":"hi","pages":[{"title":"hi","href":"/hi/features/entitlements/introduction"}]},{"language":"it","pages":[{"title":"it","href":"/it/features/entitlements/introduction"}]},{"language":"sv","pages":[{"title":"sv","href":"/sv/features/entitlements/introduction"}]}]},"basePath":"","title":"소개 - Dodo Payments Documentation","buildId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","deploymentId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-u3J1-UOn.js","DynamicMarkdown-B-f2cqXQ.js","zoom-image-lightbox-DTFzvaXJ.js","lightbox-handle-r17bVUz3.js"]}