기능 플래그 권한은 Dodo Payments를 결제 인식 기능 플래그 저장소로 전환합니다. 기능 플래그
advanced_reports를 제품에 연결하면, 모든 결제 고객이 API를 통해 확인하거나 웹훅과 동기화하여 애플리케이션이 확인할 수 있는 권한을 부여받습니다. 외부 플랫폼, OAuth, 전달 단계가 필요 없습니다 — 권한 자체가 기능입니다.전달 내용
Dodo Payments를 벗어나지 않습니다 — 권한 자체가 전달물입니다:- 구매 시, 권한이 생성되어 즉시
delivered로 이동합니다.pending단계가 없으며, 고객 행동도 없고 전달 실패 위험이 없습니다. - 권한은 유형화된
feature페이로드를 가집니다:{ "feature_type": "boolean", "feature_id": "advanced_reports" }. 애플리케이션은feature_id를 읽어 어떤 기능을 해제할지 결정합니다. - 취소, 환불 또는 수동 해지는 권한을
revoked로 이동시키며, 애플리케이션에서 플래그가 사라지는 것을 봅니다.
feature_id는 권한 전반에서 고유하지 않은 상인이 선택한 식별자입니다. 예를 들어, 월간 및 연간 프로 플랜이 동일한 advanced_reports를 제공하는 두 개의 권한이 있을 수 있습니다.기능 플래그 생성
Optionally add metadata
메타 데이터를 전환하여 플래그와 함께 애플리케이션에 전달될 키 값 구성을 첨부하세요 — 제한, 등급 이름, 할당량 등. Attach limits with metadata를 참조하세요.
제품에 첨부
제품을 열거나 하나를 생성한 후, 권한 카드를 찾아서 **+**를 클릭하여 기존 권한을 첨부하세요. 기능 플래그를 선택하고 완료를 클릭합니다.

필수 구성
| 필드 | 필수 | 설명 |
|---|---|---|
feature_id | 예 | 애플리케이션이 확인하는 식별자, 예: advanced_reports. 권한 간 고유하지 않음. |
feature_type | 예 | 부여된 기능 유형. 현재는 boolean만 지원됨. |
API를 통한 생성
메타데이터로 제한 부착
부울 플래그는 “이 고객이 기능을 가지고 있는가?”를 답합니다. 메타데이터는 “어떤 구성으로?”를 답합니다. 권한 메타데이터는 문자열, 정수, 숫자 및 부울 값을 수용하며, 각 권한은 생성 순간에 권한의 메타데이터를 동결 스냅샷으로 받아들입니다. 이 스냅샷 동작은 메타데이터가 플랜 제한에 안전하게 사용될 수 있게 합니다:- 나중에 권한 메타데이터를 수정해도 미래 권한에만 영향을 미칩니다. 고객은 구매한 한도치를 유지합니다.
- 스냅샷은 권한의
metadata필드로 반환됩니다. 따라서 하나의 API 호출은 플래그 및 그 구성을 모두 제공합니다.
advanced_reports 플래그가 { "tier": "pro", "monthly_report_limit": 100 }와 함께 있으면 애플리케이션은 대시보드를 잠금 해제하고 100 보고 한도를 적용할 수 있습니다. 이후에 한도를 250으로 상향 조정하면 기존 고객은 새로운 권한을 받을 때까지 100에 머물러 있습니다(예: 플랜 변경 후).
고객의 기능 확인
고객의 제공된 기능 플래그 권한을 나열하고 활성화된 기능 세트를 만듭니다. 엔드포인트는 모든 권한에 걸쳐 권한당 한 행을 반환하며integration_type 및 status로 필터링할 수 있습니다.
feature 페이로드는 feature_flag 권한에만 할당됩니다. 이는 다른 모든 통합 유형에 대해 null입니다. 전체 응답 형태는 List Customer Grants API 참조를 확인하세요.라이프사이클
기능 플래그 권한은 권한 라이프사이클 표준을 따르며 한 가지 단순화가 있습니다: 전달 단계가 없으므로 권한은pending에 멈추지 않으며 failed로 이동하지 않습니다.
| 트리거 | 효과 |
|---|---|
| 일회성 지불 성공 / 구독 활성화 | 권한이 status: delivered 및 delivered_at 설정으로 생성됩니다. |
| 구독 보류, 취소 또는 만료 | 권한이 일치하는 revocation_reason로 해지됩니다. |
| 일회성 지불 환불 | 권한이 revocation_reason: refund로 해지됩니다. |
| 구독 복구(예: 비용 추심 성공) | 해지된 권한이 delivered로 복구됩니다. 동일한 권한 id, 해지 필드가 지워집니다. |
| 수동 API 해지 | 권한이 revocation_reason: manual로 해지됩니다. 갱신 시 자동 복구되지 않습니다. |
웹훅
entitlement_grant.* 이벤트에 구독하여 기능 플래그를 자체 데이터베이스에 반영하십시오. :
entitlement_grant.created— 이미delivered상태로feature페이로드와 함께 도착합니다. 기능을 활성화합니다.entitlement_grant.delivered— 이전에 해지된 권한이 복구될 때 실행됩니다. 기능을 다시 활성화합니다.entitlement_grant.revoked— 접근이 철회되었습니다. 기능을 비활성화하고revocation_reason을 확인하여 메시지를 결정합니다.
TypeScript
entitlement_grant.failed가 없습니다. 전달은 완전히 Dodo Payments 내에서 이루어지며 실패할 수 없습니다.
예제: 프로 플랜이 고급 보고서 해제
- 플래그 생성.
feature_id: advanced_reports과 메타데이터{ "tier": "pro", "monthly_report_limit": 100 }. - 프로 플랜 구독 제품에 첨부합니다.
- 고객이 구독합니다. Dodo Payments가
delivered권한을 생성하고entitlement_grant.created를 실행합니다. 웹훅 핸들러는 100의 한도로 고객을 위해advanced_reports을 활성화합니다. - 앱이 기능을 제어합니다. 대시보드가 로드될 때 캐시된 기능 세트를 확인하고(
listEntitlementGrants호출)advanced_reports가 있을 때만 보고서 탭을 렌더링합니다. - 고객이 취소합니다. Dodo Payments가 권한을 해지하고
entitlement_grant.revoked를 실행하여 핸들러가 기능을 비활성화합니다. 나중에 고객이 비용 추심을 통해 복구되면,entitlement_grant.delivered가 이를 복원합니다 — 코드 변경 필요 없음.
모범 사례
- 안정적인 snake_case 기능 ID를 사용하세요. 애플리케이션 코드가 이 문자열을 확인합니다; 이름 변경은 양쪽에 걸쳐 파괴적인 변경입니다.
-
기능당 하나의 플래그. 단일
pro_bundle보다는advanced_reports+api_access을 두 개의 권한으로 사용하는 것이 좋습니다 — 해지 및 계획 혼합이 깨끗하게 유지됩니다. - 상태를 웹훅에서 구동하고 API로 확인하세요. 웹훅은 데이터베이스를 최신 상태로 유지하고, 목록 엔드포인트는 조정 작업 및 캐시 누락에 대한 진실의 출처입니다.
-
revoked를 즉시 처리합니다. 해지된 플래그는 고객이 더 이상 기능에 비용을 지불하지 않음을 의미합니다. 다음 세션이 아닌 다음 요청에서 제한하십시오. - 제한을 코드가 아닌 메타데이터에 넣습니다. 할당량을 변경하는 것은 권한을 편집하는 것만 필요합니다 — 새로운 고객은 자동으로 이를 수용하고 기존 권한은 구매한 스냅샷을 유지합니다.
- Use stable, snake_case feature ids. Your application code checks these strings; renaming one is a breaking change on both sides.
-
One flag per capability. Prefer
advanced_reports+api_accessas two entitlements over a singlepro_bundle— revocation and plan mixes stay clean. - Drive state from webhooks, verify with the API. Webhooks keep your database current; the list endpoint is the source of truth for reconciliation jobs and cache misses.
-
Treat
revokedas immediate. A revoked flag means the customer is no longer paying for the feature. Gate on the next request, not the next session. - Put limits in metadata, not in code. Changing a quota then only requires editing the entitlement — new customers pick it up automatically while existing grants keep their purchased snapshot.

