Exact-beneficiary application monetization audit
get_application_entitlement, audit_application_entitlements, audit_application_subscriptions, and review_application_monetization belong only to the independent application-monetization toolset. They remain disabled unless capabilities.applicationMonetizationAudit is true, scopes.applicationMonetizationSkuIds contains at least one exact current-application SKU ID, and at least one exact subject appears in scopes.applicationEntitlementGuildIds, scopes.applicationEntitlementUserIds, or scopes.applicationSubscriptionUserIds. Guild entitlement beneficiaries must also satisfy the outer guild read policy. Each subject list accepts at most 100 IDs and the SKU list accepts at most 50; one entitlement page accepts one through ten configured SKU IDs, one exact entitlement lookup accepts one configured SKU ID, and one subscription call accepts exactly one configured subscription SKU. Entitlement user scope never grants subscription-lifecycle access, and subscription user scope never grants entitlement access.
Every call enforces policy before contacting Discord, freshly verifies the pinned application and bot, and audits the complete current SKU catalog before reading monetization evidence. Requested SKUs must belong to that application. A subscription audit additionally requires the exact requested SKU to remain a documented subscription type. Callers cannot select another application, enumerate SKUs through these tools, or use stale local SKU state.
The entitlement tool calls Discord's List Entitlements route for exactly one configured guild or user beneficiary, the exact configured SKU filter, one mutually exclusive snowflake cursor, and a bounded page of 1 through 100 records, defaulting to 25. It always requests exclude_ended=true and exclude_deleted=true. Each projected record must match the pinned application, requested SKU set, and exact beneficiary. A user-beneficiary result must have the exact user_id and no guild_id, which prevents a guild subscription purchaser from being misclassified as the beneficiary. A guild-beneficiary result must carry the exact guild_id; an accompanying purchaser user_id is validated but omitted.
Entitlement results contain only exact entitlement and SKU IDs, normalized documented type, optional canonical start and end times, optional consumed state, bounded cursor and page evidence, count-only unknown evidence, fixed warnings, and the requested beneficiary identity. This is a present-access view, not history: Discord has excluded ended and deleted records, pagination may continue, and consumed state and application product rules still require caller interpretation. An empty bounded page is not proof that no historical entitlement existed.
The exact entitlement tool requires the caller to supply an exact entitlement ID together with its expected configured beneficiary and configured SKU before Discord access. After the same identity and complete SKU checks, it calls Get Entitlement and rejects any application, entitlement, SKU, or beneficiary mismatch. Its strict projection can report deleted records and returns normalized entitlement lifecycle, selected SKU type, availability and purchase scope, and count-only future evidence. It is one exact snapshot rather than beneficiary inventory and grants no mutation authority.
The subscription tool calls Discord's List SKU Subscriptions route with its required exact user filter, exactly one configured subscription SKU, one mutually exclusive cursor, and the same bounded page contract. Every record must match the exact user and include the requested SKU. Results retain only exact subscription IDs, normalized lifecycle status, canonical current period, optional cancellation time, entitlement count, configured related or renewal SKU IDs, count-only omitted unconfigured relationships, page evidence, and count-only future evidence. Country, entitlement IDs, and unconfigured SKU IDs never leave the projection. Discord's subscription implementation guidance makes entitlements the source of truth for access, so active, inactive, or ending subscription state is reporting evidence only and never authority to grant a benefit.
All three tools omit subject profiles, guild-entitlement purchaser identities, country and payment source, payment and revenue data, product names, benefits, prices, media, entitlement-to-subscription links, raw payloads, and unknown values. The read-only toolset creates no activity record, cache, Gateway state, persistent file, entitlement consumption, test grant, deletion, subscription change, or SKU change and grants no authority to the independent entitlement-change toolset. Strict object, field, response-byte, record-count, timestamp, snowflake, duplication, cursor, and relationship checks fail closed without returning raw evidence. The guided prompt exposes policy-backed subject and SKU completion, calls exactly one selected audit, distinguishes present entitlement access from subscription lifecycle, reports every limitation, and stops before any write.
Canonical source: docs/reference.md
Documentation generated for guildcontrol@0.0.0. Canonical source and edit history remain in the public repository. GuildControl is an independent project and is not affiliated with or endorsed by Discord Inc. Discord is used only to identify the platform that GuildControl connects to.