> ## Documentation Index
> Fetch the complete documentation index at: https://autumn-b9b4c0fb-dev.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# List Entities

> Lists entities across the organization with pagination and optional filters.

Use this to page through entities globally, including filtering by plans inherited from parent customers or attached directly to entities.

### Body Parameters

<DynamicParamField body="start_cursor" type="string">
  Opaque pagination cursor. Empty string (default) requests the first page; use next\_cursor from a prior response for subsequent pages.
</DynamicParamField>

<DynamicParamField body="limit" type="integer">
  Number of items to return. Default 50, hard ceiling 5000.
</DynamicParamField>

<DynamicParamField body="plans" type="object[]">
  Filter by plan ID and version. Returns entities with active subscriptions to this plan, including plans inherited from the parent customer.

  <Expandable title="properties">
    <DynamicParamField body="id" type="string" required />

    <DynamicParamField body="versions" type="number[]" />
  </Expandable>
</DynamicParamField>

<DynamicParamField body="subscription_status" type="'active' | 'scheduled'">
  Filter customer products used for entity hydration and plan matching. Defaults to active and scheduled.
</DynamicParamField>

<DynamicParamField body="search" type="string">
  Search entities by id or name.
</DynamicParamField>

<DynamicParamField body="processors" type="('stripe' | 'revenuecat' | 'vercel')[]">
  Filter by parent customer processor type (stripe, revenuecat, vercel).
</DynamicParamField>

<DynamicParamField body="customer_id" type="string">
  Restrict the response to entities owned by this customer id. Use to bulk-fetch all entities for one customer in a single paginated call instead of iterating entities.get.
</DynamicParamField>

### Response

<DynamicResponseField name="list" type="object[]">
  Items for current page.

  <Expandable title="properties">
    <DynamicResponseField name="id" type="string | null">
      The unique identifier of the entity
    </DynamicResponseField>

    <DynamicResponseField name="name" type="string | null">
      The name of the entity
    </DynamicResponseField>

    <DynamicResponseField name="customer_id" type="string | null">
      The customer ID this entity belongs to
    </DynamicResponseField>

    <DynamicResponseField name="feature_id" type="string | null">
      The feature ID this entity belongs to
    </DynamicResponseField>

    <DynamicResponseField name="created_at" type="number">
      Unix timestamp when the entity was created
    </DynamicResponseField>

    <DynamicResponseField name="env" type="'sandbox' | 'live'">
      The environment (sandbox/live)
    </DynamicResponseField>

    <DynamicResponseField name="subscriptions" type="object[]">
      <Expandable title="properties">
        <DynamicResponseField name="id" type="string">
          The unique identifier of this subscription. If a subscription\_id was provided at attach time, it is used; otherwise, falls back to the internal ID.
        </DynamicResponseField>

        <DynamicResponseField name="plan" type="object">
          The full plan object if expanded.

          <Expandable title="properties">
            <DynamicResponseField name="id" type="string">
              Unique identifier for the plan.
            </DynamicResponseField>

            <DynamicResponseField name="name" type="string">
              Display name of the plan.
            </DynamicResponseField>

            <DynamicResponseField name="description" type="string | null">
              Optional description of the plan.
            </DynamicResponseField>

            <DynamicResponseField name="group" type="string | null">
              Group identifier for organizing related plans. Plans in the same group are mutually exclusive.
            </DynamicResponseField>

            <DynamicResponseField name="version" type="number">
              Version number of the plan. Incremented when plan configuration changes.
            </DynamicResponseField>

            <DynamicResponseField name="version_slug" type="string | null">
              User-facing version identity. Defaults to v\{n} when the version is minted.
            </DynamicResponseField>

            <DynamicResponseField name="active" type="boolean">
              Whether this is the active version of the plan. At most one version is active.
            </DynamicResponseField>

            <DynamicResponseField name="add_on" type="boolean">
              Whether this is an add-on plan that can be attached alongside a main plan.
            </DynamicResponseField>

            <DynamicResponseField name="auto_enable" type="boolean">
              If true, this plan is automatically attached when a customer is created. Used for free plans.
            </DynamicResponseField>

            <DynamicResponseField name="price" type="object | null">
              Base recurring price for the plan. Null for free plans or usage-only plans.

              <Expandable title="properties">
                <DynamicResponseField name="amount" type="number">
                  Base price amount for the plan, in major currency units (e.g. dollars).
                </DynamicResponseField>

                <DynamicResponseField name="additional_currencies" type="object[]">
                  Base price amounts in additional currencies. The base 'amount' is in the org's default currency.

                  <Expandable title="properties">
                    <DynamicResponseField name="currency" type="string">
                      Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').
                    </DynamicResponseField>

                    <DynamicResponseField name="amount" type="number">
                      Price amount in this currency. Set explicitly per currency, not converted from the base amount.
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>

                <DynamicResponseField name="interval" type="'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'">
                  Billing interval (e.g. 'month', 'year').
                </DynamicResponseField>

                <DynamicResponseField name="interval_count" type="number">
                  Number of intervals per billing cycle. Defaults to 1.
                </DynamicResponseField>

                <DynamicResponseField name="display" type="object">
                  Display text for showing this price in pricing pages.

                  <Expandable title="properties">
                    <DynamicResponseField name="primary_text" type="string">
                      Main display text (e.g. '\$10' or '100 messages').
                    </DynamicResponseField>

                    <DynamicResponseField name="secondary_text" type="string">
                      Secondary display text (e.g. 'per month' or 'then \$0.5 per 100').
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>

                <DynamicResponseField name="processors" type="object">
                  Payment processors this base price is connected to. Omitted when unset.

                  <Expandable title="properties">
                    <DynamicResponseField name="stripe" type="object | null">
                      <Expandable title="properties">
                        <DynamicResponseField name="price_id" type="string">
                          Stripe price ID. For prepaid with included > 0 this is the V2 price.
                        </DynamicResponseField>
                      </Expandable>
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>
              </Expandable>
            </DynamicResponseField>

            <DynamicResponseField name="items" type="object[]">
              Feature configurations included in this plan. Each item defines included units, pricing, and reset behavior for a feature.

              <Expandable title="properties">
                <DynamicResponseField name="feature_id" type="string">
                  The ID of the feature this item configures.
                </DynamicResponseField>

                <DynamicResponseField name="feature" type="object">
                  The full feature object if expanded.

                  <Expandable title="properties">
                    <DynamicResponseField name="id" type="string">
                      The ID of the feature, used to refer to it in other API calls like /track or /check.
                    </DynamicResponseField>

                    <DynamicResponseField name="name" type="string | null">
                      The name of the feature.
                    </DynamicResponseField>

                    <DynamicResponseField name="type" type="'static' | 'boolean' | 'single_use' | 'continuous_use' | 'credit_system' | 'ai_credit_system'">
                      The type of the feature
                    </DynamicResponseField>

                    <DynamicResponseField name="display" type="object | null">
                      Singular and plural display names for the feature.

                      <Expandable title="properties">
                        <DynamicResponseField name="singular" type="string">
                          The singular display name for the feature.
                        </DynamicResponseField>

                        <DynamicResponseField name="plural" type="string">
                          The plural display name for the feature.
                        </DynamicResponseField>
                      </Expandable>
                    </DynamicResponseField>

                    <DynamicResponseField name="credit_schema" type="object[] | null">
                      Credit cost schema for credit system features.

                      <Expandable title="properties">
                        <DynamicResponseField name="metered_feature_id" type="string">
                          The ID of the metered feature (should be a single\_use feature).
                        </DynamicResponseField>

                        <DynamicResponseField name="credit_cost" type="number">
                          The credit cost of the metered feature.
                        </DynamicResponseField>
                      </Expandable>
                    </DynamicResponseField>

                    <DynamicResponseField name="archived" type="boolean | null">
                      Whether or not the feature is archived.
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>

                <DynamicResponseField name="included" type="number">
                  Number of free units included. For consumable features, balance resets to this number each interval.
                </DynamicResponseField>

                <DynamicResponseField name="unlimited" type="boolean">
                  Whether the customer has unlimited access to this feature.
                </DynamicResponseField>

                <DynamicResponseField name="pooled" type="boolean">
                  Whether entity-level grants contribute to a shared customer balance.
                </DynamicResponseField>

                <DynamicResponseField name="reset" type="object | null">
                  Reset configuration for consumable features. Null for non-consumable features like seats where usage persists across billing cycles.

                  <Expandable title="properties">
                    <DynamicResponseField name="interval" type="'one_off' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'">
                      The interval at which the feature balance resets (e.g. 'month', 'year'). For consumable features, usage resets to 0 and included units are restored.
                    </DynamicResponseField>

                    <DynamicResponseField name="interval_count" type="number">
                      Number of intervals between resets. Defaults to 1.
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>

                <DynamicResponseField name="price" type="object | null">
                  Pricing configuration for usage beyond included units. Null if feature is entirely free.

                  <Expandable title="properties">
                    <DynamicResponseField name="amount" type="number">
                      Price per billing\_units after included usage is consumed. Mutually exclusive with tiers.
                    </DynamicResponseField>

                    <DynamicResponseField name="additional_currencies" type="object[]">
                      Amounts in additional currencies for this flat price. The base 'amount' is in the org's default currency. Only valid with 'amount', not 'tiers' (tiered prices carry per-currency amounts on each tier).

                      <Expandable title="properties">
                        <DynamicResponseField name="currency" type="string">
                          Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').
                        </DynamicResponseField>

                        <DynamicResponseField name="amount" type="number">
                          Price amount in this currency. Set explicitly per currency, not converted from the base amount.
                        </DynamicResponseField>
                      </Expandable>
                    </DynamicResponseField>

                    <DynamicResponseField name="tiers" type="object[]">
                      Tiered pricing configuration. Each tier's 'to' INCLUDES the included amount. Either 'tiers' or 'amount' is required.

                      <Expandable title="properties">
                        <DynamicResponseField name="to" type="number" />

                        <DynamicResponseField name="amount" type="number" />

                        <DynamicResponseField name="flat_amount" type="number" />

                        <DynamicResponseField name="additional_currencies" type="object[]">
                          <Expandable title="properties">
                            <DynamicResponseField name="currency" type="string">
                              Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').
                            </DynamicResponseField>

                            <DynamicResponseField name="amount" type="number">
                              Per-unit amount for this tier in this currency.
                            </DynamicResponseField>

                            <DynamicResponseField name="flat_amount" type="number">
                              Flat amount for this tier in this currency, if the tier uses one.
                            </DynamicResponseField>
                          </Expandable>
                        </DynamicResponseField>
                      </Expandable>
                    </DynamicResponseField>

                    <DynamicResponseField name="tier_behavior" type="'graduated' | 'volume'" />

                    <DynamicResponseField name="interval" type="'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'">
                      Billing interval for this price. For consumable features, should match reset.interval.
                    </DynamicResponseField>

                    <DynamicResponseField name="interval_count" type="number">
                      Number of intervals per billing cycle. Defaults to 1.
                    </DynamicResponseField>

                    <DynamicResponseField name="billing_units" type="number">
                      Number of units per price increment. Usage is rounded UP to the nearest billing\_units when billed (e.g. billing\_units=100 means 101 usage rounds to 200).
                    </DynamicResponseField>

                    <DynamicResponseField name="billing_method" type="'prepaid' | 'usage_based'">
                      'prepaid' for features like seats where customers pay upfront, 'usage\_based' for pay-as-you-go after included usage.
                    </DynamicResponseField>

                    <DynamicResponseField name="max_purchase" type="number | null">
                      Maximum units a customer can purchase beyond included. E.g. if included=100 and max\_purchase=300, customer can use up to 400 total before usage is capped. Null for no limit.
                    </DynamicResponseField>

                    <DynamicResponseField name="processors" type="object">
                      Payment processors this item price is connected to. Omitted when unset.

                      <Expandable title="properties">
                        <DynamicResponseField name="stripe" type="object | null">
                          <Expandable title="properties">
                            <DynamicResponseField name="price_id" type="string">
                              Stripe price ID. For prepaid with included > 0 this is the V2 price.
                            </DynamicResponseField>
                          </Expandable>
                        </DynamicResponseField>
                      </Expandable>
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>

                <DynamicResponseField name="display" type="object">
                  Display text for showing this item in pricing pages.

                  <Expandable title="properties">
                    <DynamicResponseField name="primary_text" type="string">
                      Main display text (e.g. '\$10' or '100 messages').
                    </DynamicResponseField>

                    <DynamicResponseField name="secondary_text" type="string">
                      Secondary display text (e.g. 'per month' or 'then \$0.5 per 100').
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>

                <DynamicResponseField name="rollover" type="object">
                  Rollover configuration for unused units. If set, unused included units roll over to the next period.

                  <Expandable title="properties">
                    <DynamicResponseField name="max" type="number | null">
                      Maximum rollover units. Null for unlimited rollover.
                    </DynamicResponseField>

                    <DynamicResponseField name="max_percentage" type="number | null">
                      Maximum rollover as a percentage (0-100) of included + prepaid grant. Mutually exclusive with max.
                    </DynamicResponseField>

                    <DynamicResponseField name="expiry_duration_type" type="'month' | 'forever'">
                      When rolled over units expire.
                    </DynamicResponseField>

                    <DynamicResponseField name="expiry_duration_length" type="number">
                      Number of periods before expiry.
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>

                <DynamicResponseField name="feature_override" type="object">
                  Overrides fields of this item's feature for customers on this plan (e.g. a credit system's credit\_schema).

                  <Expandable title="properties">
                    <DynamicResponseField name="credit_schema" type="object | object[]">
                      For credit system features: replaces the feature's credit\_schema entirely for customers on this plan.

                      <Expandable title="properties">
                        <DynamicResponseField name="metered_feature_id" type="string">
                          ID of the metered feature that draws from this credit system.
                        </DynamicResponseField>

                        <DynamicResponseField name="billing_units" type="number">
                          Number of metered-feature units priced together. Defaults to one when omitted.
                        </DynamicResponseField>

                        <DynamicResponseField name="dimensions.{key}" type="object">
                          Named rates chosen by event properties. The most specific match sets the rate; with no match the item's own rate applies.

                          <Expandable title="properties">
                            <DynamicResponseField name="match.{key}" type="string">
                              Event properties this entry applies to. Every key must equal the tracked property, compared as strings.
                            </DynamicResponseField>

                            <DynamicResponseField name="priority" type="integer">
                              Breaks ties between dimensions that match the same number of keys. Higher wins.
                            </DynamicResponseField>

                            <DynamicResponseField name="tier_behavior" type="any" />

                            <DynamicResponseField name="tiers" type="object[]">
                              <Expandable title="properties">
                                <DynamicResponseField name="to" type="number">
                                  Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.
                                </DynamicResponseField>

                                <DynamicResponseField name="credit_cost" type="number">
                                  Credits consumed per billing-unit group within this tier.
                                </DynamicResponseField>
                              </Expandable>
                            </DynamicResponseField>
                          </Expandable>
                        </DynamicResponseField>

                        <DynamicResponseField name="multipliers.{key}" type="object">
                          Named adjustments chosen by event properties. Every match applies: factors multiply, then adds are summed.

                          <Expandable title="properties">
                            <DynamicResponseField name="match.{key}" type="string">
                              Event properties this entry applies to. Every key must equal the tracked property, compared as strings.
                            </DynamicResponseField>

                            <DynamicResponseField name="factor" type="number">
                              Multiplies the matched rate. All matching multipliers stack.
                            </DynamicResponseField>

                            <DynamicResponseField name="add" type="number">
                              Added to the rate after every factor is applied, in credits per billing-unit group.
                            </DynamicResponseField>
                          </Expandable>
                        </DynamicResponseField>

                        <DynamicResponseField name="tier_behavior" type="any" />

                        <DynamicResponseField name="tiers" type="object[]">
                          <Expandable title="properties">
                            <DynamicResponseField name="to" type="number">
                              Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.
                            </DynamicResponseField>

                            <DynamicResponseField name="credit_cost" type="number">
                              Credits consumed per billing-unit group within this tier.
                            </DynamicResponseField>
                          </Expandable>
                        </DynamicResponseField>

                        <DynamicResponseField name="credit_cost" type="number">
                          Credits consumed per billing-unit group.
                        </DynamicResponseField>
                      </Expandable>
                    </DynamicResponseField>

                    <DynamicResponseField name="markups" type="object">
                      For AI credit system features: replaces the feature's markup chain entirely for customers on this plan. An unset level means no markup at that level rather than inheriting the feature's.

                      <Expandable title="properties">
                        <DynamicResponseField name="default_markup" type="number">
                          Default percentage markup for customers on this plan. Use -100 to make usage free.
                        </DynamicResponseField>

                        <DynamicResponseField name="provider_markups.{key}" type="object | null">
                          Per-provider markup percentages for customers on this plan.

                          <Expandable title="properties">
                            <DynamicResponseField name="markup" type="number" />
                          </Expandable>
                        </DynamicResponseField>

                        <DynamicResponseField name="model_markups.{key}" type="object | null">
                          Per-model markup overrides for customers on this plan.

                          <Expandable title="properties">
                            <DynamicResponseField name="markup" type="number" />

                            <DynamicResponseField name="input_cost" type="number" />

                            <DynamicResponseField name="output_cost" type="number" />
                          </Expandable>
                        </DynamicResponseField>
                      </Expandable>
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>
              </Expandable>
            </DynamicResponseField>

            <DynamicResponseField name="processors" type="object">
              Payment processors this plan is connected to. Omitted when unset.

              <Expandable title="properties">
                <DynamicResponseField name="stripe" type="object | null">
                  <Expandable title="properties">
                    <DynamicResponseField name="product_id" type="string">
                      Stripe product ID this plan is billed under.
                    </DynamicResponseField>

                    <DynamicResponseField name="additional_product_ids" type="string[]">
                      Extra Stripe product IDs aliased to this plan.
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>

                <DynamicResponseField name="revenuecat" type="object | null">
                  <Expandable title="properties">
                    <DynamicResponseField name="products" type="object[]">
                      Every RevenueCat product that maps to this plan. Replaces the current set.

                      <Expandable title="properties">
                        <DynamicResponseField name="product_id" type="string">
                          RevenueCat product ID that grants this plan when purchased.
                        </DynamicResponseField>

                        <DynamicResponseField name="feature_quantities" type="object[]">
                          Prepaid quantities granted when this specific RevenueCat product is purchased, in feature units.

                          <Expandable title="properties">
                            <DynamicResponseField name="feature_id" type="string" />

                            <DynamicResponseField name="quantity" type="number" />
                          </Expandable>
                        </DynamicResponseField>
                      </Expandable>
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>
              </Expandable>
            </DynamicResponseField>

            <DynamicResponseField name="free_trial" type="object">
              Free trial configuration. If set, new customers can try this plan before being charged.

              <Expandable title="properties">
                <DynamicResponseField name="duration_length" type="number">
                  Number of duration\_type periods the trial lasts.
                </DynamicResponseField>

                <DynamicResponseField name="duration_type" type="'day' | 'month' | 'year'">
                  Unit of time for the trial duration ('day', 'month', 'year').
                </DynamicResponseField>

                <DynamicResponseField name="card_required" type="boolean">
                  Whether a payment method is required to start the trial. If true, customer will be charged after trial ends.
                </DynamicResponseField>

                <DynamicResponseField name="on_end" type="'bill' | 'revert'">
                  Behavior when the trial ends. 'bill' charges the customer (default). 'revert' expires the trial and restores the customer's previous plan.
                </DynamicResponseField>
              </Expandable>
            </DynamicResponseField>

            <DynamicResponseField name="created_at" type="number">
              Unix timestamp (ms) when the plan was created.
            </DynamicResponseField>

            <DynamicResponseField name="env" type="'sandbox' | 'live'">
              Environment this plan belongs to ('sandbox' or 'live').
            </DynamicResponseField>

            <DynamicResponseField name="archived" type="boolean">
              Whether the plan is archived. Archived plans cannot be attached to new customers.
            </DynamicResponseField>

            <DynamicResponseField name="config" type="object">
              Miscellaneous plan-level configuration flags.

              <Expandable title="properties">
                <DynamicResponseField name="ignore_past_due" type="boolean">
                  If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past\_due state.
                </DynamicResponseField>
              </Expandable>
            </DynamicResponseField>

            <DynamicResponseField name="billing_controls" type="object">
              Plan-level billing controls used as customer defaults.

              <Expandable title="properties">
                <DynamicResponseField name="auto_topups" type="object[]">
                  List of auto top-up configurations per feature.

                  <Expandable title="properties">
                    <DynamicResponseField name="feature_id" type="string">
                      The ID of the feature (credit balance) to auto top-up.
                    </DynamicResponseField>

                    <DynamicResponseField name="enabled" type="boolean">
                      Whether auto top-up is enabled.
                    </DynamicResponseField>

                    <DynamicResponseField name="threshold" type="number">
                      When the balance drops below this threshold, an auto top-up will be purchased.
                    </DynamicResponseField>

                    <DynamicResponseField name="quantity" type="number">
                      Amount of credits to add per auto top-up.
                    </DynamicResponseField>

                    <DynamicResponseField name="purchase_limit" type="object">
                      Optional rate limit to cap how often auto top-ups occur.

                      <Expandable title="properties">
                        <DynamicResponseField name="interval" type="'hour' | 'day' | 'week' | 'month'">
                          The time interval for the purchase limit window.
                        </DynamicResponseField>

                        <DynamicResponseField name="interval_count" type="number">
                          Number of intervals in the purchase limit window.
                        </DynamicResponseField>

                        <DynamicResponseField name="limit" type="number">
                          Maximum number of auto top-ups allowed within the interval.
                        </DynamicResponseField>
                      </Expandable>
                    </DynamicResponseField>

                    <DynamicResponseField name="invoice_mode" type="boolean">
                      When true, auto top-up creates a send\_invoice invoice instead of auto-charging.
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>

                <DynamicResponseField name="spend_limits" type="object[]">
                  List of overage spend limits per feature (caps overage spend).

                  <Expandable title="properties">
                    <DynamicResponseField name="feature_id" type="string">
                      Optional feature ID this spend limit applies to.
                    </DynamicResponseField>

                    <DynamicResponseField name="enabled" type="boolean">
                      Whether the overage spend limit is enabled.
                    </DynamicResponseField>

                    <DynamicResponseField name="limit_type" type="'absolute' | 'usage_percentage'">
                      How overage\_limit is interpreted: an absolute overage cap (default) or a percentage of the main-plan allowance.
                    </DynamicResponseField>

                    <DynamicResponseField name="overage_limit" type="number">
                      Overage cap for the feature: absolute units, or a percent (e.g. 120) when limit\_type is usage\_percentage.
                    </DynamicResponseField>

                    <DynamicResponseField name="skip_overage_billing" type="boolean">
                      When true, overage for this feature is not posted to Stripe. Usage tracking and balance resets still behave normally.
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>

                <DynamicResponseField name="usage_limits" type="object[]">
                  List of hard usage caps per feature (max units per interval).

                  <Expandable title="properties">
                    <DynamicResponseField name="feature_id" type="string">
                      The feature this usage limit applies to.
                    </DynamicResponseField>

                    <DynamicResponseField name="enabled" type="boolean">
                      Whether this usage limit is enabled.
                    </DynamicResponseField>

                    <DynamicResponseField name="limit" type="number">
                      Maximum units allowed per interval.
                    </DynamicResponseField>

                    <DynamicResponseField name="interval" type="'day' | 'week' | 'month' | 'year'">
                      Interval for the cap, aligned to the customer's billing cycle.
                    </DynamicResponseField>

                    <DynamicResponseField name="anchor" type="'billing_cycle' | 'utc'">
                      Window alignment. 'billing\_cycle' phases the interval to the customer's renewal time; 'utc' aligns to the UTC calendar.
                    </DynamicResponseField>

                    <DynamicResponseField name="filter" type="object">
                      When set, only usage from events whose properties match counts toward this cap. Omit to count all usage of the feature.

                      <Expandable title="properties">
                        <DynamicResponseField name="properties.{key}" type="string" />
                      </Expandable>
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>

                <DynamicResponseField name="usage_alerts" type="object[]">
                  List of usage alert configurations per feature.

                  <Expandable title="properties">
                    <DynamicResponseField name="feature_id" type="string">
                      The feature ID this alert applies to.
                    </DynamicResponseField>

                    <DynamicResponseField name="enabled" type="boolean">
                      Whether this usage alert is enabled.
                    </DynamicResponseField>

                    <DynamicResponseField name="threshold" type="number">
                      The threshold value that triggers the alert. For usage or remaining, this is an absolute count. For usage\_percentage or remaining\_percentage, this is a percentage (0-100).
                    </DynamicResponseField>

                    <DynamicResponseField name="threshold_type" type="'usage' | 'usage_percentage' | 'remaining' | 'remaining_percentage'">
                      Whether the threshold is an absolute count or a percentage of the usage allowance or remaining balance.
                    </DynamicResponseField>

                    <DynamicResponseField name="basis" type="'balance' | 'included' | 'recurring' | 'usage_limit'">
                      What 100% means. balance: every grant on the feature. included: the plan allowance only. recurring: grants that reset. usage\_limit: the cap of the usage limit with the same feature and filter.
                    </DynamicResponseField>

                    <DynamicResponseField name="filter" type="object">
                      Only valid with basis usage\_limit. Points the alert at the usage limit carrying the same filter.

                      <Expandable title="properties">
                        <DynamicResponseField name="properties.{key}" type="string" />
                      </Expandable>
                    </DynamicResponseField>

                    <DynamicResponseField name="name" type="string">
                      Optional user-defined label to distinguish multiple alerts on the same feature.
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>

                <DynamicResponseField name="overage_allowed" type="object[]">
                  List of overage allowed controls per feature. When enabled, usage can exceed balance.

                  <Expandable title="properties">
                    <DynamicResponseField name="feature_id" type="string">
                      The feature ID this overage allowed control applies to.
                    </DynamicResponseField>

                    <DynamicResponseField name="enabled" type="boolean">
                      Whether overage is allowed for this feature.
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>
              </Expandable>
            </DynamicResponseField>

            <DynamicResponseField name="metadata" type="object">
              Arbitrary key-value metadata defined by you for your own use. Shared across all versions of the plan.
            </DynamicResponseField>

            <DynamicResponseField name="customer_eligibility" type="object">
              <Expandable title="properties">
                <DynamicResponseField name="trial_available" type="boolean">
                  Whether the trial on this plan is available to this customer. For example, if the customer used the trial in the past, this will be false.
                </DynamicResponseField>

                <DynamicResponseField name="status" type="'active' | 'scheduled'">
                  The customer's current status with this plan. 'active' if attached, 'scheduled' if pending activation.
                </DynamicResponseField>

                <DynamicResponseField name="canceling" type="boolean">
                  Whether the customer's active instance of this plan is set to cancel.
                </DynamicResponseField>

                <DynamicResponseField name="trialing" type="boolean">
                  Whether the customer is currently on a free trial of this plan.
                </DynamicResponseField>

                <DynamicResponseField name="attach_action" type="'activate' | 'upgrade' | 'downgrade' | 'none' | 'purchase'">
                  The action that would occur if this plan were attached to the customer.
                </DynamicResponseField>
              </Expandable>
            </DynamicResponseField>

            <DynamicResponseField name="base_variant_id" type="string | null">
              Deprecated. Use variant\_details.base\_plan\_id instead. If this is a variant, the ID of the base plan it was created from.
            </DynamicResponseField>

            <DynamicResponseField name="variant_details" type="object">
              Details about how this variant relates to its latest base plan.

              <Expandable title="properties">
                <DynamicResponseField name="base_plan_id" type="string">
                  The ID of the base plan this variant was derived from.
                </DynamicResponseField>

                <DynamicResponseField name="customize" type="object">
                  The customization that transforms the base plan into this variant.

                  <Expandable title="properties">
                    <DynamicResponseField name="price" type="object | null">
                      Base price configuration for a plan.

                      <Expandable title="properties">
                        <DynamicResponseField name="amount" type="number">
                          Base price amount for the plan, in major currency units (e.g. dollars).
                        </DynamicResponseField>

                        <DynamicResponseField name="interval" type="'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'">
                          Billing interval (e.g. 'month', 'year').
                        </DynamicResponseField>

                        <DynamicResponseField name="interval_count" type="number">
                          Number of intervals per billing cycle. Defaults to 1.
                        </DynamicResponseField>

                        <DynamicResponseField name="additional_currencies" type="object[]">
                          Base price amounts in additional currencies. The base 'amount' is in the org's default currency.

                          <Expandable title="properties">
                            <DynamicResponseField name="currency" type="string">
                              Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').
                            </DynamicResponseField>

                            <DynamicResponseField name="amount" type="number">
                              Price amount in this currency. Set explicitly per currency, not converted from the base amount.
                            </DynamicResponseField>
                          </Expandable>
                        </DynamicResponseField>
                      </Expandable>
                    </DynamicResponseField>

                    <DynamicResponseField name="add_items" type="object[]">
                      Items to add to the plan.

                      <Expandable title="properties">
                        <DynamicResponseField name="feature_id" type="string">
                          The ID of the feature to configure.
                        </DynamicResponseField>

                        <DynamicResponseField name="included" type="number">
                          Number of free units included. Balance resets to this each interval for consumable features.
                        </DynamicResponseField>

                        <DynamicResponseField name="unlimited" type="boolean">
                          If true, customer has unlimited access to this feature.
                        </DynamicResponseField>

                        <DynamicResponseField name="pooled" type="boolean">
                          Whether entity-level grants contribute to a shared customer balance.
                        </DynamicResponseField>

                        <DynamicResponseField name="reset" type="object">
                          Reset configuration for consumable features. Omit for non-consumable features like seats.

                          <Expandable title="properties">
                            <DynamicResponseField name="interval" type="'one_off' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'">
                              Interval at which balance resets (e.g. 'month', 'year'). For consumable features only.
                            </DynamicResponseField>

                            <DynamicResponseField name="interval_count" type="number">
                              Number of intervals between resets. Defaults to 1.
                            </DynamicResponseField>
                          </Expandable>
                        </DynamicResponseField>

                        <DynamicResponseField name="price" type="object">
                          Pricing for usage beyond included units. Omit for free features.

                          <Expandable title="properties">
                            <DynamicResponseField name="amount" type="number">
                              Price per billing\_units after included usage. Either 'amount' or 'tiers' is required.
                            </DynamicResponseField>

                            <DynamicResponseField name="additional_currencies" type="object[]">
                              Amounts in additional currencies for this flat price. The base 'amount' is in the org's default currency. Only valid with 'amount', not 'tiers'.

                              <Expandable title="properties">
                                <DynamicResponseField name="currency" type="string">
                                  Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').
                                </DynamicResponseField>

                                <DynamicResponseField name="amount" type="number">
                                  Price amount in this currency. Set explicitly per currency, not converted from the base amount.
                                </DynamicResponseField>
                              </Expandable>
                            </DynamicResponseField>

                            <DynamicResponseField name="tiers" type="object[]">
                              Tiered pricing. Either 'amount' or 'tiers' is required.

                              <Expandable title="properties">
                                <DynamicResponseField name="to" type="number" />

                                <DynamicResponseField name="amount" type="number" />

                                <DynamicResponseField name="flat_amount" type="number" />

                                <DynamicResponseField name="additional_currencies" type="object[]">
                                  <Expandable title="properties">
                                    <DynamicResponseField name="currency" type="string">
                                      Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').
                                    </DynamicResponseField>

                                    <DynamicResponseField name="amount" type="number">
                                      Per-unit amount for this tier in this currency.
                                    </DynamicResponseField>

                                    <DynamicResponseField name="flat_amount" type="number">
                                      Flat amount for this tier in this currency, if the tier uses one.
                                    </DynamicResponseField>
                                  </Expandable>
                                </DynamicResponseField>
                              </Expandable>
                            </DynamicResponseField>

                            <DynamicResponseField name="tier_behavior" type="'graduated' | 'volume'" />

                            <DynamicResponseField name="interval" type="'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'">
                              Billing interval. For consumable features, should match reset.interval.
                            </DynamicResponseField>

                            <DynamicResponseField name="interval_count" type="number">
                              Number of intervals per billing cycle. Defaults to 1.
                            </DynamicResponseField>

                            <DynamicResponseField name="billing_units" type="number">
                              Units per price increment. Usage is rounded UP when billed (e.g. billing\_units=100 means 101 rounds to 200).
                            </DynamicResponseField>

                            <DynamicResponseField name="billing_method" type="'prepaid' | 'usage_based'">
                              'prepaid' for upfront payment (seats), 'usage\_based' for pay-as-you-go.
                            </DynamicResponseField>

                            <DynamicResponseField name="max_purchase" type="number | null">
                              Max units purchasable beyond included. E.g. included=100, max\_purchase=300 allows 400 total. Null for no limit.
                            </DynamicResponseField>
                          </Expandable>
                        </DynamicResponseField>

                        <DynamicResponseField name="proration" type="object">
                          Proration settings for prepaid features. Controls mid-cycle quantity change billing.

                          <Expandable title="properties">
                            <DynamicResponseField name="on_increase" type="'bill_immediately' | 'prorate_immediately' | 'prorate_next_cycle' | 'bill_next_cycle'">
                              Billing behavior when quantity increases mid-cycle.
                            </DynamicResponseField>

                            <DynamicResponseField name="on_decrease" type="'prorate' | 'prorate_immediately' | 'prorate_next_cycle' | 'none' | 'no_prorations'">
                              Credit behavior when quantity decreases mid-cycle.
                            </DynamicResponseField>
                          </Expandable>
                        </DynamicResponseField>

                        <DynamicResponseField name="rollover" type="object">
                          Rollover config for unused units. If set, unused included units carry over.

                          <Expandable title="properties">
                            <DynamicResponseField name="max" type="number">
                              Max rollover units. Omit for unlimited rollover.
                            </DynamicResponseField>

                            <DynamicResponseField name="max_percentage" type="number">
                              Maximum rollover as a percentage (0-100) of included + prepaid grant. Mutually exclusive with max.
                            </DynamicResponseField>

                            <DynamicResponseField name="expiry_duration_type" type="'month' | 'forever'">
                              When rolled over units expire.
                            </DynamicResponseField>

                            <DynamicResponseField name="expiry_duration_length" type="number">
                              Number of periods before expiry.
                            </DynamicResponseField>
                          </Expandable>
                        </DynamicResponseField>

                        <DynamicResponseField name="feature_override" type="object">
                          Overrides fields of this item's feature for customers on this plan (e.g. a credit system's credit\_schema).

                          <Expandable title="properties">
                            <DynamicResponseField name="credit_schema" type="object | object[]">
                              For credit system features: replaces the feature's credit\_schema entirely for customers on this plan.

                              <Expandable title="properties">
                                <DynamicResponseField name="metered_feature_id" type="string">
                                  ID of the metered feature that draws from this credit system.
                                </DynamicResponseField>

                                <DynamicResponseField name="billing_units" type="number">
                                  Number of metered-feature units priced together. Defaults to one when omitted.
                                </DynamicResponseField>

                                <DynamicResponseField name="dimensions.{key}" type="object">
                                  Named rates chosen by event properties. The most specific match sets the rate; with no match the item's own rate applies.

                                  <Expandable title="properties">
                                    <DynamicResponseField name="match.{key}" type="string">
                                      Event properties this entry applies to. Every key must equal the tracked property, compared as strings.
                                    </DynamicResponseField>

                                    <DynamicResponseField name="priority" type="integer">
                                      Breaks ties between dimensions that match the same number of keys. Higher wins.
                                    </DynamicResponseField>

                                    <DynamicResponseField name="tier_behavior" type="any" />

                                    <DynamicResponseField name="tiers" type="object[]">
                                      <Expandable title="properties">
                                        <DynamicResponseField name="to" type="number">
                                          Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.
                                        </DynamicResponseField>

                                        <DynamicResponseField name="credit_cost" type="number">
                                          Credits consumed per billing-unit group within this tier.
                                        </DynamicResponseField>
                                      </Expandable>
                                    </DynamicResponseField>
                                  </Expandable>
                                </DynamicResponseField>

                                <DynamicResponseField name="multipliers.{key}" type="object">
                                  Named adjustments chosen by event properties. Every match applies: factors multiply, then adds are summed.

                                  <Expandable title="properties">
                                    <DynamicResponseField name="match.{key}" type="string">
                                      Event properties this entry applies to. Every key must equal the tracked property, compared as strings.
                                    </DynamicResponseField>

                                    <DynamicResponseField name="factor" type="number">
                                      Multiplies the matched rate. All matching multipliers stack.
                                    </DynamicResponseField>

                                    <DynamicResponseField name="add" type="number">
                                      Added to the rate after every factor is applied, in credits per billing-unit group.
                                    </DynamicResponseField>
                                  </Expandable>
                                </DynamicResponseField>

                                <DynamicResponseField name="tier_behavior" type="any" />

                                <DynamicResponseField name="tiers" type="object[]">
                                  <Expandable title="properties">
                                    <DynamicResponseField name="to" type="number">
                                      Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.
                                    </DynamicResponseField>

                                    <DynamicResponseField name="credit_cost" type="number">
                                      Credits consumed per billing-unit group within this tier.
                                    </DynamicResponseField>
                                  </Expandable>
                                </DynamicResponseField>

                                <DynamicResponseField name="credit_cost" type="number">
                                  Credits consumed per billing-unit group.
                                </DynamicResponseField>
                              </Expandable>
                            </DynamicResponseField>

                            <DynamicResponseField name="markups" type="object">
                              For AI credit system features: replaces the feature's markup chain entirely for customers on this plan. An unset level means no markup at that level rather than inheriting the feature's.

                              <Expandable title="properties">
                                <DynamicResponseField name="default_markup" type="number">
                                  Default percentage markup for customers on this plan. Use -100 to make usage free.
                                </DynamicResponseField>

                                <DynamicResponseField name="provider_markups.{key}" type="object | null">
                                  Per-provider markup percentages for customers on this plan.

                                  <Expandable title="properties">
                                    <DynamicResponseField name="markup" type="number" />
                                  </Expandable>
                                </DynamicResponseField>

                                <DynamicResponseField name="model_markups.{key}" type="object | null">
                                  Per-model markup overrides for customers on this plan.

                                  <Expandable title="properties">
                                    <DynamicResponseField name="markup" type="number" />

                                    <DynamicResponseField name="input_cost" type="number" />

                                    <DynamicResponseField name="output_cost" type="number" />
                                  </Expandable>
                                </DynamicResponseField>
                              </Expandable>
                            </DynamicResponseField>
                          </Expandable>
                        </DynamicResponseField>
                      </Expandable>
                    </DynamicResponseField>

                    <DynamicResponseField name="remove_items" type="object[]">
                      Filters selecting items to remove from the plan.

                      <Expandable title="properties">
                        <DynamicResponseField name="feature_id" type="string">
                          Match items linked to this feature.
                        </DynamicResponseField>

                        <DynamicResponseField name="billing_method" type="'prepaid' | 'usage_based'">
                          Match items with this billing method (prepaid or usage\_based).
                        </DynamicResponseField>

                        <DynamicResponseField name="interval" type="'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'">
                          Match items with this interval. Accepts either a BillingInterval (price-side) or a ResetInterval (reset-side, includes day/hour/minute) so price-less items keyed by reset.interval can be disambiguated.
                        </DynamicResponseField>

                        <DynamicResponseField name="interval_count" type="integer">
                          Match items with this interval\_count. Disambiguates between items that share an interval but differ in count.
                        </DynamicResponseField>

                        <DynamicResponseField name="included" type="number">
                          Match items whose grant equals this included usage. Omitted is a wildcard.
                        </DynamicResponseField>
                      </Expandable>
                    </DynamicResponseField>

                    <DynamicResponseField name="free_trial" type="object | null">
                      Free trial configuration for a plan.

                      <Expandable title="properties">
                        <DynamicResponseField name="duration_length" type="number">
                          Number of duration\_type periods the trial lasts.
                        </DynamicResponseField>

                        <DynamicResponseField name="duration_type" type="'day' | 'month' | 'year'">
                          Unit of time for the trial ('day', 'month', 'year').
                        </DynamicResponseField>

                        <DynamicResponseField name="card_required" type="boolean">
                          If true, a payment method is required to start the trial and the customer is charged when it ends. Defaults to false.
                        </DynamicResponseField>

                        <DynamicResponseField name="on_end" type="'bill' | 'revert'">
                          Behavior when the trial ends. 'bill' charges the customer (default). 'revert' expires the trial and restores the customer's previous plan.
                        </DynamicResponseField>
                      </Expandable>
                    </DynamicResponseField>

                    <DynamicResponseField name="billing_controls" type="object">
                      Override the plan's billing controls (auto top-ups, spend limits, usage limits, usage alerts, overage allowed) for this customer.

                      <Expandable title="properties">
                        <DynamicResponseField name="auto_topups" type="object[]">
                          List of auto top-up configurations per feature.

                          <Expandable title="properties">
                            <DynamicResponseField name="feature_id" type="string">
                              The ID of the feature (credit balance) to auto top-up.
                            </DynamicResponseField>

                            <DynamicResponseField name="enabled" type="boolean">
                              Whether auto top-up is enabled.
                            </DynamicResponseField>

                            <DynamicResponseField name="threshold" type="number">
                              When the balance drops below this threshold, an auto top-up will be purchased.
                            </DynamicResponseField>

                            <DynamicResponseField name="quantity" type="number">
                              Amount of credits to add per auto top-up.
                            </DynamicResponseField>

                            <DynamicResponseField name="purchase_limit" type="object">
                              Optional rate limit to cap how often auto top-ups occur. Pass count to set the current window's consumed top-ups.

                              <Expandable title="properties">
                                <DynamicResponseField name="interval" type="'hour' | 'day' | 'week' | 'month'">
                                  The time interval for the purchase limit window.
                                </DynamicResponseField>

                                <DynamicResponseField name="interval_count" type="number">
                                  Number of intervals in the purchase limit window.
                                </DynamicResponseField>

                                <DynamicResponseField name="limit" type="number">
                                  Maximum number of auto top-ups allowed within the interval.
                                </DynamicResponseField>

                                <DynamicResponseField name="count" type="number">
                                  Set the current window's consumed auto top-up count. Omit to leave runtime state unchanged.
                                </DynamicResponseField>
                              </Expandable>
                            </DynamicResponseField>

                            <DynamicResponseField name="invoice_mode" type="boolean">
                              When true, auto top-up creates a send\_invoice invoice instead of auto-charging.
                            </DynamicResponseField>
                          </Expandable>
                        </DynamicResponseField>

                        <DynamicResponseField name="spend_limits" type="object[]">
                          List of overage spend limits per feature (caps overage spend).

                          <Expandable title="properties">
                            <DynamicResponseField name="feature_id" type="string">
                              Optional feature ID this spend limit applies to.
                            </DynamicResponseField>

                            <DynamicResponseField name="enabled" type="boolean">
                              Whether the overage spend limit is enabled.
                            </DynamicResponseField>

                            <DynamicResponseField name="limit_type" type="'absolute' | 'usage_percentage'">
                              How overage\_limit is interpreted: an absolute overage cap (default) or a percentage of the main-plan allowance.
                            </DynamicResponseField>

                            <DynamicResponseField name="overage_limit" type="number">
                              Overage cap for the feature: absolute units, or a percent (e.g. 120) when limit\_type is usage\_percentage.
                            </DynamicResponseField>

                            <DynamicResponseField name="skip_overage_billing" type="boolean">
                              When true, overage for this feature is not posted to Stripe. Usage tracking and balance resets still behave normally.
                            </DynamicResponseField>
                          </Expandable>
                        </DynamicResponseField>

                        <DynamicResponseField name="usage_limits" type="object[]">
                          List of hard usage caps per feature (max units per interval).

                          <Expandable title="properties">
                            <DynamicResponseField name="feature_id" type="string">
                              The feature this usage limit applies to.
                            </DynamicResponseField>

                            <DynamicResponseField name="enabled" type="boolean">
                              Whether this usage limit is enabled.
                            </DynamicResponseField>

                            <DynamicResponseField name="limit" type="number">
                              Maximum units allowed per interval.
                            </DynamicResponseField>

                            <DynamicResponseField name="interval" type="'day' | 'week' | 'month' | 'year'">
                              Interval for the cap, aligned to the customer's billing cycle.
                            </DynamicResponseField>

                            <DynamicResponseField name="anchor" type="'billing_cycle' | 'utc'">
                              Window alignment. 'billing\_cycle' phases the interval to the customer's renewal time; 'utc' aligns to the UTC calendar.
                            </DynamicResponseField>

                            <DynamicResponseField name="filter" type="object">
                              When set, only usage from events whose properties match counts toward this cap. Omit to count all usage of the feature.

                              <Expandable title="properties">
                                <DynamicResponseField name="properties.{key}" type="string" />
                              </Expandable>
                            </DynamicResponseField>
                          </Expandable>
                        </DynamicResponseField>

                        <DynamicResponseField name="usage_alerts" type="object[]">
                          List of usage alert configurations per feature.

                          <Expandable title="properties">
                            <DynamicResponseField name="feature_id" type="string">
                              The feature ID this alert applies to.
                            </DynamicResponseField>

                            <DynamicResponseField name="enabled" type="boolean">
                              Whether this usage alert is enabled.
                            </DynamicResponseField>

                            <DynamicResponseField name="threshold" type="number">
                              The threshold value that triggers the alert. For usage or remaining, this is an absolute count. For usage\_percentage or remaining\_percentage, this is a percentage (0-100).
                            </DynamicResponseField>

                            <DynamicResponseField name="threshold_type" type="'usage' | 'usage_percentage' | 'remaining' | 'remaining_percentage'">
                              Whether the threshold is an absolute count or a percentage of the usage allowance or remaining balance.
                            </DynamicResponseField>

                            <DynamicResponseField name="basis" type="'balance' | 'included' | 'recurring' | 'usage_limit'">
                              What 100% means. balance: every grant on the feature. included: the plan allowance only. recurring: grants that reset. usage\_limit: the cap of the usage limit with the same feature and filter.
                            </DynamicResponseField>

                            <DynamicResponseField name="filter" type="object">
                              Only valid with basis usage\_limit. Points the alert at the usage limit carrying the same filter.

                              <Expandable title="properties">
                                <DynamicResponseField name="properties.{key}" type="string" />
                              </Expandable>
                            </DynamicResponseField>

                            <DynamicResponseField name="name" type="string">
                              Optional user-defined label to distinguish multiple alerts on the same feature.
                            </DynamicResponseField>
                          </Expandable>
                        </DynamicResponseField>

                        <DynamicResponseField name="overage_allowed" type="object[]">
                          List of overage allowed controls per feature. When enabled, usage can exceed balance.

                          <Expandable title="properties">
                            <DynamicResponseField name="feature_id" type="string">
                              The feature ID this overage allowed control applies to.
                            </DynamicResponseField>

                            <DynamicResponseField name="enabled" type="boolean">
                              Whether overage is allowed for this feature.
                            </DynamicResponseField>
                          </Expandable>
                        </DynamicResponseField>
                      </Expandable>
                    </DynamicResponseField>

                    <DynamicResponseField name="upsert_licenses" type="object[]">
                      License links to add or override for this customer, keyed by license\_plan\_id. Omitted fields inherit the plan catalog link (included defaults to 1 when the license is not in the catalog). A bare entry restores the license to pure catalog inheritance.

                      <Expandable title="properties">
                        <DynamicResponseField name="license_plan_id" type="string" />

                        <DynamicResponseField name="version_slug" type="string" />

                        <DynamicResponseField name="included" type="integer" />

                        <DynamicResponseField name="prepaid_only" type="boolean" />

                        <DynamicResponseField name="customize" type="object | null">
                          <Expandable title="properties">
                            <DynamicResponseField name="price" type="object | null">
                              Base price configuration for a plan.

                              <Expandable title="properties">
                                <DynamicResponseField name="amount" type="number">
                                  Base price amount for the plan, in major currency units (e.g. dollars).
                                </DynamicResponseField>

                                <DynamicResponseField name="interval" type="'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'">
                                  Billing interval (e.g. 'month', 'year').
                                </DynamicResponseField>

                                <DynamicResponseField name="interval_count" type="number">
                                  Number of intervals per billing cycle. Defaults to 1.
                                </DynamicResponseField>

                                <DynamicResponseField name="additional_currencies" type="object[]">
                                  Base price amounts in additional currencies. The base 'amount' is in the org's default currency.

                                  <Expandable title="properties">
                                    <DynamicResponseField name="currency" type="string">
                                      Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').
                                    </DynamicResponseField>

                                    <DynamicResponseField name="amount" type="number">
                                      Price amount in this currency. Set explicitly per currency, not converted from the base amount.
                                    </DynamicResponseField>
                                  </Expandable>
                                </DynamicResponseField>
                              </Expandable>
                            </DynamicResponseField>

                            <DynamicResponseField name="add_items" type="object[]">
                              <Expandable title="properties">
                                <DynamicResponseField name="feature_id" type="string">
                                  The ID of the feature to configure.
                                </DynamicResponseField>

                                <DynamicResponseField name="included" type="number">
                                  Number of free units included. Balance resets to this each interval for consumable features.
                                </DynamicResponseField>

                                <DynamicResponseField name="unlimited" type="boolean">
                                  If true, customer has unlimited access to this feature.
                                </DynamicResponseField>

                                <DynamicResponseField name="pooled" type="boolean">
                                  Whether entity-level grants contribute to a shared customer balance.
                                </DynamicResponseField>

                                <DynamicResponseField name="reset" type="object">
                                  Reset configuration for consumable features. Omit for non-consumable features like seats.

                                  <Expandable title="properties">
                                    <DynamicResponseField name="interval" type="'one_off' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'">
                                      Interval at which balance resets (e.g. 'month', 'year'). For consumable features only.
                                    </DynamicResponseField>

                                    <DynamicResponseField name="interval_count" type="number">
                                      Number of intervals between resets. Defaults to 1.
                                    </DynamicResponseField>
                                  </Expandable>
                                </DynamicResponseField>

                                <DynamicResponseField name="price" type="object">
                                  Pricing for usage beyond included units. Omit for free features.

                                  <Expandable title="properties">
                                    <DynamicResponseField name="amount" type="number">
                                      Price per billing\_units after included usage. Either 'amount' or 'tiers' is required.
                                    </DynamicResponseField>

                                    <DynamicResponseField name="additional_currencies" type="object[]">
                                      Amounts in additional currencies for this flat price. The base 'amount' is in the org's default currency. Only valid with 'amount', not 'tiers'.

                                      <Expandable title="properties">
                                        <DynamicResponseField name="currency" type="string">
                                          Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').
                                        </DynamicResponseField>

                                        <DynamicResponseField name="amount" type="number">
                                          Price amount in this currency. Set explicitly per currency, not converted from the base amount.
                                        </DynamicResponseField>
                                      </Expandable>
                                    </DynamicResponseField>

                                    <DynamicResponseField name="tiers" type="object[]">
                                      Tiered pricing. Either 'amount' or 'tiers' is required.

                                      <Expandable title="properties">
                                        <DynamicResponseField name="to" type="number" />

                                        <DynamicResponseField name="amount" type="number" />

                                        <DynamicResponseField name="flat_amount" type="number" />

                                        <DynamicResponseField name="additional_currencies" type="object[]">
                                          <Expandable title="properties">
                                            <DynamicResponseField name="currency" type="string">
                                              Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').
                                            </DynamicResponseField>

                                            <DynamicResponseField name="amount" type="number">
                                              Per-unit amount for this tier in this currency.
                                            </DynamicResponseField>

                                            <DynamicResponseField name="flat_amount" type="number">
                                              Flat amount for this tier in this currency, if the tier uses one.
                                            </DynamicResponseField>
                                          </Expandable>
                                        </DynamicResponseField>
                                      </Expandable>
                                    </DynamicResponseField>

                                    <DynamicResponseField name="tier_behavior" type="'graduated' | 'volume'" />

                                    <DynamicResponseField name="interval" type="'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'">
                                      Billing interval. For consumable features, should match reset.interval.
                                    </DynamicResponseField>

                                    <DynamicResponseField name="interval_count" type="number">
                                      Number of intervals per billing cycle. Defaults to 1.
                                    </DynamicResponseField>

                                    <DynamicResponseField name="billing_units" type="number">
                                      Units per price increment. Usage is rounded UP when billed (e.g. billing\_units=100 means 101 rounds to 200).
                                    </DynamicResponseField>

                                    <DynamicResponseField name="billing_method" type="'prepaid' | 'usage_based'">
                                      'prepaid' for upfront payment (seats), 'usage\_based' for pay-as-you-go.
                                    </DynamicResponseField>

                                    <DynamicResponseField name="max_purchase" type="number | null">
                                      Max units purchasable beyond included. E.g. included=100, max\_purchase=300 allows 400 total. Null for no limit.
                                    </DynamicResponseField>
                                  </Expandable>
                                </DynamicResponseField>

                                <DynamicResponseField name="proration" type="object">
                                  Proration settings for prepaid features. Controls mid-cycle quantity change billing.

                                  <Expandable title="properties">
                                    <DynamicResponseField name="on_increase" type="'bill_immediately' | 'prorate_immediately' | 'prorate_next_cycle' | 'bill_next_cycle'">
                                      Billing behavior when quantity increases mid-cycle.
                                    </DynamicResponseField>

                                    <DynamicResponseField name="on_decrease" type="'prorate' | 'prorate_immediately' | 'prorate_next_cycle' | 'none' | 'no_prorations'">
                                      Credit behavior when quantity decreases mid-cycle.
                                    </DynamicResponseField>
                                  </Expandable>
                                </DynamicResponseField>

                                <DynamicResponseField name="rollover" type="object">
                                  Rollover config for unused units. If set, unused included units carry over.

                                  <Expandable title="properties">
                                    <DynamicResponseField name="max" type="number">
                                      Max rollover units. Omit for unlimited rollover.
                                    </DynamicResponseField>

                                    <DynamicResponseField name="max_percentage" type="number">
                                      Maximum rollover as a percentage (0-100) of included + prepaid grant. Mutually exclusive with max.
                                    </DynamicResponseField>

                                    <DynamicResponseField name="expiry_duration_type" type="'month' | 'forever'">
                                      When rolled over units expire.
                                    </DynamicResponseField>

                                    <DynamicResponseField name="expiry_duration_length" type="number">
                                      Number of periods before expiry.
                                    </DynamicResponseField>
                                  </Expandable>
                                </DynamicResponseField>

                                <DynamicResponseField name="feature_override" type="object">
                                  Overrides fields of this item's feature for customers on this plan (e.g. a credit system's credit\_schema).

                                  <Expandable title="properties">
                                    <DynamicResponseField name="credit_schema" type="object | object[]">
                                      For credit system features: replaces the feature's credit\_schema entirely for customers on this plan.

                                      <Expandable title="properties">
                                        <DynamicResponseField name="metered_feature_id" type="string">
                                          ID of the metered feature that draws from this credit system.
                                        </DynamicResponseField>

                                        <DynamicResponseField name="billing_units" type="number">
                                          Number of metered-feature units priced together. Defaults to one when omitted.
                                        </DynamicResponseField>

                                        <DynamicResponseField name="dimensions.{key}" type="object">
                                          Named rates chosen by event properties. The most specific match sets the rate; with no match the item's own rate applies.

                                          <Expandable title="properties">
                                            <DynamicResponseField name="match.{key}" type="string">
                                              Event properties this entry applies to. Every key must equal the tracked property, compared as strings.
                                            </DynamicResponseField>

                                            <DynamicResponseField name="priority" type="integer">
                                              Breaks ties between dimensions that match the same number of keys. Higher wins.
                                            </DynamicResponseField>

                                            <DynamicResponseField name="tier_behavior" type="any" />

                                            <DynamicResponseField name="tiers" type="object[]">
                                              <Expandable title="properties">
                                                <DynamicResponseField name="to" type="number">
                                                  Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.
                                                </DynamicResponseField>

                                                <DynamicResponseField name="credit_cost" type="number">
                                                  Credits consumed per billing-unit group within this tier.
                                                </DynamicResponseField>
                                              </Expandable>
                                            </DynamicResponseField>
                                          </Expandable>
                                        </DynamicResponseField>

                                        <DynamicResponseField name="multipliers.{key}" type="object">
                                          Named adjustments chosen by event properties. Every match applies: factors multiply, then adds are summed.

                                          <Expandable title="properties">
                                            <DynamicResponseField name="match.{key}" type="string">
                                              Event properties this entry applies to. Every key must equal the tracked property, compared as strings.
                                            </DynamicResponseField>

                                            <DynamicResponseField name="factor" type="number">
                                              Multiplies the matched rate. All matching multipliers stack.
                                            </DynamicResponseField>

                                            <DynamicResponseField name="add" type="number">
                                              Added to the rate after every factor is applied, in credits per billing-unit group.
                                            </DynamicResponseField>
                                          </Expandable>
                                        </DynamicResponseField>

                                        <DynamicResponseField name="tier_behavior" type="any" />

                                        <DynamicResponseField name="tiers" type="object[]">
                                          <Expandable title="properties">
                                            <DynamicResponseField name="to" type="number">
                                              Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.
                                            </DynamicResponseField>

                                            <DynamicResponseField name="credit_cost" type="number">
                                              Credits consumed per billing-unit group within this tier.
                                            </DynamicResponseField>
                                          </Expandable>
                                        </DynamicResponseField>

                                        <DynamicResponseField name="credit_cost" type="number">
                                          Credits consumed per billing-unit group.
                                        </DynamicResponseField>
                                      </Expandable>
                                    </DynamicResponseField>

                                    <DynamicResponseField name="markups" type="object">
                                      For AI credit system features: replaces the feature's markup chain entirely for customers on this plan. An unset level means no markup at that level rather than inheriting the feature's.

                                      <Expandable title="properties">
                                        <DynamicResponseField name="default_markup" type="number">
                                          Default percentage markup for customers on this plan. Use -100 to make usage free.
                                        </DynamicResponseField>

                                        <DynamicResponseField name="provider_markups.{key}" type="object | null">
                                          Per-provider markup percentages for customers on this plan.

                                          <Expandable title="properties">
                                            <DynamicResponseField name="markup" type="number" />
                                          </Expandable>
                                        </DynamicResponseField>

                                        <DynamicResponseField name="model_markups.{key}" type="object | null">
                                          Per-model markup overrides for customers on this plan.

                                          <Expandable title="properties">
                                            <DynamicResponseField name="markup" type="number" />

                                            <DynamicResponseField name="input_cost" type="number" />

                                            <DynamicResponseField name="output_cost" type="number" />
                                          </Expandable>
                                        </DynamicResponseField>
                                      </Expandable>
                                    </DynamicResponseField>
                                  </Expandable>
                                </DynamicResponseField>
                              </Expandable>
                            </DynamicResponseField>

                            <DynamicResponseField name="remove_items" type="object[]">
                              <Expandable title="properties">
                                <DynamicResponseField name="feature_id" type="string">
                                  Match items linked to this feature.
                                </DynamicResponseField>

                                <DynamicResponseField name="billing_method" type="'prepaid' | 'usage_based'">
                                  Match items with this billing method (prepaid or usage\_based).
                                </DynamicResponseField>

                                <DynamicResponseField name="interval" type="'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'">
                                  Match items with this interval. Accepts either a BillingInterval (price-side) or a ResetInterval (reset-side, includes day/hour/minute) so price-less items keyed by reset.interval can be disambiguated.
                                </DynamicResponseField>

                                <DynamicResponseField name="interval_count" type="integer">
                                  Match items with this interval\_count. Disambiguates between items that share an interval but differ in count.
                                </DynamicResponseField>

                                <DynamicResponseField name="included" type="number">
                                  Match items whose grant equals this included usage. Omitted is a wildcard.
                                </DynamicResponseField>
                              </Expandable>
                            </DynamicResponseField>
                          </Expandable>
                        </DynamicResponseField>

                        <DynamicResponseField name="metadata" type="object" />
                      </Expandable>
                    </DynamicResponseField>

                    <DynamicResponseField name="remove_licenses" type="object[]">
                      License links to drop, keyed by license\_plan\_id. Parallel to remove\_items.

                      <Expandable title="properties">
                        <DynamicResponseField name="license_plan_id" type="string" />
                      </Expandable>
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>
              </Expandable>
            </DynamicResponseField>
          </Expandable>
        </DynamicResponseField>

        <DynamicResponseField name="plan_id" type="string">
          The unique identifier of the subscribed plan.
        </DynamicResponseField>

        <DynamicResponseField name="auto_enable" type="boolean">
          Whether the plan was automatically enabled for the customer.
        </DynamicResponseField>

        <DynamicResponseField name="add_on" type="boolean">
          Whether this is an add-on plan rather than a base subscription.
        </DynamicResponseField>

        <DynamicResponseField name="status" type="'active' | 'scheduled'">
          Current status of the subscription.
        </DynamicResponseField>

        <DynamicResponseField name="past_due" type="boolean">
          Whether the subscription has overdue payments.
        </DynamicResponseField>

        <DynamicResponseField name="canceled_at" type="number | null">
          Timestamp when the subscription was canceled, or null if not canceled.
        </DynamicResponseField>

        <DynamicResponseField name="expires_at" type="number | null">
          Timestamp when the subscription will expire, or null if no expiry set.
        </DynamicResponseField>

        <DynamicResponseField name="trial_ends_at" type="number | null">
          Timestamp when the trial period ends, or null if not on trial.
        </DynamicResponseField>

        <DynamicResponseField name="started_at" type="number">
          Timestamp when the subscription started.
        </DynamicResponseField>

        <DynamicResponseField name="current_period_start" type="number | null">
          Start timestamp of the current billing period.
        </DynamicResponseField>

        <DynamicResponseField name="current_period_end" type="number | null">
          End timestamp of the current billing period.
        </DynamicResponseField>

        <DynamicResponseField name="quantity" type="number">
          Number of units of this subscription (for per-seat plans).
        </DynamicResponseField>

        <DynamicResponseField name="scope" type="'customer' | 'entity'">
          Whether this subscription is attached at the customer level or entity level.
        </DynamicResponseField>
      </Expandable>
    </DynamicResponseField>

    <DynamicResponseField name="purchases" type="object[]">
      <Expandable title="properties">
        <DynamicResponseField name="plan" type="object">
          The full plan object if expanded.

          <Expandable title="properties">
            <DynamicResponseField name="id" type="string">
              Unique identifier for the plan.
            </DynamicResponseField>

            <DynamicResponseField name="name" type="string">
              Display name of the plan.
            </DynamicResponseField>

            <DynamicResponseField name="description" type="string | null">
              Optional description of the plan.
            </DynamicResponseField>

            <DynamicResponseField name="group" type="string | null">
              Group identifier for organizing related plans. Plans in the same group are mutually exclusive.
            </DynamicResponseField>

            <DynamicResponseField name="version" type="number">
              Version number of the plan. Incremented when plan configuration changes.
            </DynamicResponseField>

            <DynamicResponseField name="version_slug" type="string | null">
              User-facing version identity. Defaults to v\{n} when the version is minted.
            </DynamicResponseField>

            <DynamicResponseField name="active" type="boolean">
              Whether this is the active version of the plan. At most one version is active.
            </DynamicResponseField>

            <DynamicResponseField name="add_on" type="boolean">
              Whether this is an add-on plan that can be attached alongside a main plan.
            </DynamicResponseField>

            <DynamicResponseField name="auto_enable" type="boolean">
              If true, this plan is automatically attached when a customer is created. Used for free plans.
            </DynamicResponseField>

            <DynamicResponseField name="price" type="object | null">
              Base recurring price for the plan. Null for free plans or usage-only plans.

              <Expandable title="properties">
                <DynamicResponseField name="amount" type="number">
                  Base price amount for the plan, in major currency units (e.g. dollars).
                </DynamicResponseField>

                <DynamicResponseField name="additional_currencies" type="object[]">
                  Base price amounts in additional currencies. The base 'amount' is in the org's default currency.

                  <Expandable title="properties">
                    <DynamicResponseField name="currency" type="string">
                      Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').
                    </DynamicResponseField>

                    <DynamicResponseField name="amount" type="number">
                      Price amount in this currency. Set explicitly per currency, not converted from the base amount.
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>

                <DynamicResponseField name="interval" type="'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'">
                  Billing interval (e.g. 'month', 'year').
                </DynamicResponseField>

                <DynamicResponseField name="interval_count" type="number">
                  Number of intervals per billing cycle. Defaults to 1.
                </DynamicResponseField>

                <DynamicResponseField name="display" type="object">
                  Display text for showing this price in pricing pages.

                  <Expandable title="properties">
                    <DynamicResponseField name="primary_text" type="string">
                      Main display text (e.g. '\$10' or '100 messages').
                    </DynamicResponseField>

                    <DynamicResponseField name="secondary_text" type="string">
                      Secondary display text (e.g. 'per month' or 'then \$0.5 per 100').
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>

                <DynamicResponseField name="processors" type="object">
                  Payment processors this base price is connected to. Omitted when unset.

                  <Expandable title="properties">
                    <DynamicResponseField name="stripe" type="object | null">
                      <Expandable title="properties">
                        <DynamicResponseField name="price_id" type="string">
                          Stripe price ID. For prepaid with included > 0 this is the V2 price.
                        </DynamicResponseField>
                      </Expandable>
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>
              </Expandable>
            </DynamicResponseField>

            <DynamicResponseField name="items" type="object[]">
              Feature configurations included in this plan. Each item defines included units, pricing, and reset behavior for a feature.

              <Expandable title="properties">
                <DynamicResponseField name="feature_id" type="string">
                  The ID of the feature this item configures.
                </DynamicResponseField>

                <DynamicResponseField name="feature" type="object">
                  The full feature object if expanded.

                  <Expandable title="properties">
                    <DynamicResponseField name="id" type="string">
                      The ID of the feature, used to refer to it in other API calls like /track or /check.
                    </DynamicResponseField>

                    <DynamicResponseField name="name" type="string | null">
                      The name of the feature.
                    </DynamicResponseField>

                    <DynamicResponseField name="type" type="'static' | 'boolean' | 'single_use' | 'continuous_use' | 'credit_system' | 'ai_credit_system'">
                      The type of the feature
                    </DynamicResponseField>

                    <DynamicResponseField name="display" type="object | null">
                      Singular and plural display names for the feature.

                      <Expandable title="properties">
                        <DynamicResponseField name="singular" type="string">
                          The singular display name for the feature.
                        </DynamicResponseField>

                        <DynamicResponseField name="plural" type="string">
                          The plural display name for the feature.
                        </DynamicResponseField>
                      </Expandable>
                    </DynamicResponseField>

                    <DynamicResponseField name="credit_schema" type="object[] | null">
                      Credit cost schema for credit system features.

                      <Expandable title="properties">
                        <DynamicResponseField name="metered_feature_id" type="string">
                          The ID of the metered feature (should be a single\_use feature).
                        </DynamicResponseField>

                        <DynamicResponseField name="credit_cost" type="number">
                          The credit cost of the metered feature.
                        </DynamicResponseField>
                      </Expandable>
                    </DynamicResponseField>

                    <DynamicResponseField name="archived" type="boolean | null">
                      Whether or not the feature is archived.
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>

                <DynamicResponseField name="included" type="number">
                  Number of free units included. For consumable features, balance resets to this number each interval.
                </DynamicResponseField>

                <DynamicResponseField name="unlimited" type="boolean">
                  Whether the customer has unlimited access to this feature.
                </DynamicResponseField>

                <DynamicResponseField name="pooled" type="boolean">
                  Whether entity-level grants contribute to a shared customer balance.
                </DynamicResponseField>

                <DynamicResponseField name="reset" type="object | null">
                  Reset configuration for consumable features. Null for non-consumable features like seats where usage persists across billing cycles.

                  <Expandable title="properties">
                    <DynamicResponseField name="interval" type="'one_off' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'">
                      The interval at which the feature balance resets (e.g. 'month', 'year'). For consumable features, usage resets to 0 and included units are restored.
                    </DynamicResponseField>

                    <DynamicResponseField name="interval_count" type="number">
                      Number of intervals between resets. Defaults to 1.
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>

                <DynamicResponseField name="price" type="object | null">
                  Pricing configuration for usage beyond included units. Null if feature is entirely free.

                  <Expandable title="properties">
                    <DynamicResponseField name="amount" type="number">
                      Price per billing\_units after included usage is consumed. Mutually exclusive with tiers.
                    </DynamicResponseField>

                    <DynamicResponseField name="additional_currencies" type="object[]">
                      Amounts in additional currencies for this flat price. The base 'amount' is in the org's default currency. Only valid with 'amount', not 'tiers' (tiered prices carry per-currency amounts on each tier).

                      <Expandable title="properties">
                        <DynamicResponseField name="currency" type="string">
                          Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').
                        </DynamicResponseField>

                        <DynamicResponseField name="amount" type="number">
                          Price amount in this currency. Set explicitly per currency, not converted from the base amount.
                        </DynamicResponseField>
                      </Expandable>
                    </DynamicResponseField>

                    <DynamicResponseField name="tiers" type="object[]">
                      Tiered pricing configuration. Each tier's 'to' INCLUDES the included amount. Either 'tiers' or 'amount' is required.

                      <Expandable title="properties">
                        <DynamicResponseField name="to" type="number" />

                        <DynamicResponseField name="amount" type="number" />

                        <DynamicResponseField name="flat_amount" type="number" />

                        <DynamicResponseField name="additional_currencies" type="object[]">
                          <Expandable title="properties">
                            <DynamicResponseField name="currency" type="string">
                              Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').
                            </DynamicResponseField>

                            <DynamicResponseField name="amount" type="number">
                              Per-unit amount for this tier in this currency.
                            </DynamicResponseField>

                            <DynamicResponseField name="flat_amount" type="number">
                              Flat amount for this tier in this currency, if the tier uses one.
                            </DynamicResponseField>
                          </Expandable>
                        </DynamicResponseField>
                      </Expandable>
                    </DynamicResponseField>

                    <DynamicResponseField name="tier_behavior" type="'graduated' | 'volume'" />

                    <DynamicResponseField name="interval" type="'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'">
                      Billing interval for this price. For consumable features, should match reset.interval.
                    </DynamicResponseField>

                    <DynamicResponseField name="interval_count" type="number">
                      Number of intervals per billing cycle. Defaults to 1.
                    </DynamicResponseField>

                    <DynamicResponseField name="billing_units" type="number">
                      Number of units per price increment. Usage is rounded UP to the nearest billing\_units when billed (e.g. billing\_units=100 means 101 usage rounds to 200).
                    </DynamicResponseField>

                    <DynamicResponseField name="billing_method" type="'prepaid' | 'usage_based'">
                      'prepaid' for features like seats where customers pay upfront, 'usage\_based' for pay-as-you-go after included usage.
                    </DynamicResponseField>

                    <DynamicResponseField name="max_purchase" type="number | null">
                      Maximum units a customer can purchase beyond included. E.g. if included=100 and max\_purchase=300, customer can use up to 400 total before usage is capped. Null for no limit.
                    </DynamicResponseField>

                    <DynamicResponseField name="processors" type="object">
                      Payment processors this item price is connected to. Omitted when unset.

                      <Expandable title="properties">
                        <DynamicResponseField name="stripe" type="object | null">
                          <Expandable title="properties">
                            <DynamicResponseField name="price_id" type="string">
                              Stripe price ID. For prepaid with included > 0 this is the V2 price.
                            </DynamicResponseField>
                          </Expandable>
                        </DynamicResponseField>
                      </Expandable>
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>

                <DynamicResponseField name="display" type="object">
                  Display text for showing this item in pricing pages.

                  <Expandable title="properties">
                    <DynamicResponseField name="primary_text" type="string">
                      Main display text (e.g. '\$10' or '100 messages').
                    </DynamicResponseField>

                    <DynamicResponseField name="secondary_text" type="string">
                      Secondary display text (e.g. 'per month' or 'then \$0.5 per 100').
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>

                <DynamicResponseField name="rollover" type="object">
                  Rollover configuration for unused units. If set, unused included units roll over to the next period.

                  <Expandable title="properties">
                    <DynamicResponseField name="max" type="number | null">
                      Maximum rollover units. Null for unlimited rollover.
                    </DynamicResponseField>

                    <DynamicResponseField name="max_percentage" type="number | null">
                      Maximum rollover as a percentage (0-100) of included + prepaid grant. Mutually exclusive with max.
                    </DynamicResponseField>

                    <DynamicResponseField name="expiry_duration_type" type="'month' | 'forever'">
                      When rolled over units expire.
                    </DynamicResponseField>

                    <DynamicResponseField name="expiry_duration_length" type="number">
                      Number of periods before expiry.
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>

                <DynamicResponseField name="feature_override" type="object">
                  Overrides fields of this item's feature for customers on this plan (e.g. a credit system's credit\_schema).

                  <Expandable title="properties">
                    <DynamicResponseField name="credit_schema" type="object | object[]">
                      For credit system features: replaces the feature's credit\_schema entirely for customers on this plan.

                      <Expandable title="properties">
                        <DynamicResponseField name="metered_feature_id" type="string">
                          ID of the metered feature that draws from this credit system.
                        </DynamicResponseField>

                        <DynamicResponseField name="billing_units" type="number">
                          Number of metered-feature units priced together. Defaults to one when omitted.
                        </DynamicResponseField>

                        <DynamicResponseField name="dimensions.{key}" type="object">
                          Named rates chosen by event properties. The most specific match sets the rate; with no match the item's own rate applies.

                          <Expandable title="properties">
                            <DynamicResponseField name="match.{key}" type="string">
                              Event properties this entry applies to. Every key must equal the tracked property, compared as strings.
                            </DynamicResponseField>

                            <DynamicResponseField name="priority" type="integer">
                              Breaks ties between dimensions that match the same number of keys. Higher wins.
                            </DynamicResponseField>

                            <DynamicResponseField name="tier_behavior" type="any" />

                            <DynamicResponseField name="tiers" type="object[]">
                              <Expandable title="properties">
                                <DynamicResponseField name="to" type="number">
                                  Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.
                                </DynamicResponseField>

                                <DynamicResponseField name="credit_cost" type="number">
                                  Credits consumed per billing-unit group within this tier.
                                </DynamicResponseField>
                              </Expandable>
                            </DynamicResponseField>
                          </Expandable>
                        </DynamicResponseField>

                        <DynamicResponseField name="multipliers.{key}" type="object">
                          Named adjustments chosen by event properties. Every match applies: factors multiply, then adds are summed.

                          <Expandable title="properties">
                            <DynamicResponseField name="match.{key}" type="string">
                              Event properties this entry applies to. Every key must equal the tracked property, compared as strings.
                            </DynamicResponseField>

                            <DynamicResponseField name="factor" type="number">
                              Multiplies the matched rate. All matching multipliers stack.
                            </DynamicResponseField>

                            <DynamicResponseField name="add" type="number">
                              Added to the rate after every factor is applied, in credits per billing-unit group.
                            </DynamicResponseField>
                          </Expandable>
                        </DynamicResponseField>

                        <DynamicResponseField name="tier_behavior" type="any" />

                        <DynamicResponseField name="tiers" type="object[]">
                          <Expandable title="properties">
                            <DynamicResponseField name="to" type="number">
                              Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.
                            </DynamicResponseField>

                            <DynamicResponseField name="credit_cost" type="number">
                              Credits consumed per billing-unit group within this tier.
                            </DynamicResponseField>
                          </Expandable>
                        </DynamicResponseField>

                        <DynamicResponseField name="credit_cost" type="number">
                          Credits consumed per billing-unit group.
                        </DynamicResponseField>
                      </Expandable>
                    </DynamicResponseField>

                    <DynamicResponseField name="markups" type="object">
                      For AI credit system features: replaces the feature's markup chain entirely for customers on this plan. An unset level means no markup at that level rather than inheriting the feature's.

                      <Expandable title="properties">
                        <DynamicResponseField name="default_markup" type="number">
                          Default percentage markup for customers on this plan. Use -100 to make usage free.
                        </DynamicResponseField>

                        <DynamicResponseField name="provider_markups.{key}" type="object | null">
                          Per-provider markup percentages for customers on this plan.

                          <Expandable title="properties">
                            <DynamicResponseField name="markup" type="number" />
                          </Expandable>
                        </DynamicResponseField>

                        <DynamicResponseField name="model_markups.{key}" type="object | null">
                          Per-model markup overrides for customers on this plan.

                          <Expandable title="properties">
                            <DynamicResponseField name="markup" type="number" />

                            <DynamicResponseField name="input_cost" type="number" />

                            <DynamicResponseField name="output_cost" type="number" />
                          </Expandable>
                        </DynamicResponseField>
                      </Expandable>
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>
              </Expandable>
            </DynamicResponseField>

            <DynamicResponseField name="processors" type="object">
              Payment processors this plan is connected to. Omitted when unset.

              <Expandable title="properties">
                <DynamicResponseField name="stripe" type="object | null">
                  <Expandable title="properties">
                    <DynamicResponseField name="product_id" type="string">
                      Stripe product ID this plan is billed under.
                    </DynamicResponseField>

                    <DynamicResponseField name="additional_product_ids" type="string[]">
                      Extra Stripe product IDs aliased to this plan.
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>

                <DynamicResponseField name="revenuecat" type="object | null">
                  <Expandable title="properties">
                    <DynamicResponseField name="products" type="object[]">
                      Every RevenueCat product that maps to this plan. Replaces the current set.

                      <Expandable title="properties">
                        <DynamicResponseField name="product_id" type="string">
                          RevenueCat product ID that grants this plan when purchased.
                        </DynamicResponseField>

                        <DynamicResponseField name="feature_quantities" type="object[]">
                          Prepaid quantities granted when this specific RevenueCat product is purchased, in feature units.

                          <Expandable title="properties">
                            <DynamicResponseField name="feature_id" type="string" />

                            <DynamicResponseField name="quantity" type="number" />
                          </Expandable>
                        </DynamicResponseField>
                      </Expandable>
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>
              </Expandable>
            </DynamicResponseField>

            <DynamicResponseField name="free_trial" type="object">
              Free trial configuration. If set, new customers can try this plan before being charged.

              <Expandable title="properties">
                <DynamicResponseField name="duration_length" type="number">
                  Number of duration\_type periods the trial lasts.
                </DynamicResponseField>

                <DynamicResponseField name="duration_type" type="'day' | 'month' | 'year'">
                  Unit of time for the trial duration ('day', 'month', 'year').
                </DynamicResponseField>

                <DynamicResponseField name="card_required" type="boolean">
                  Whether a payment method is required to start the trial. If true, customer will be charged after trial ends.
                </DynamicResponseField>

                <DynamicResponseField name="on_end" type="'bill' | 'revert'">
                  Behavior when the trial ends. 'bill' charges the customer (default). 'revert' expires the trial and restores the customer's previous plan.
                </DynamicResponseField>
              </Expandable>
            </DynamicResponseField>

            <DynamicResponseField name="created_at" type="number">
              Unix timestamp (ms) when the plan was created.
            </DynamicResponseField>

            <DynamicResponseField name="env" type="'sandbox' | 'live'">
              Environment this plan belongs to ('sandbox' or 'live').
            </DynamicResponseField>

            <DynamicResponseField name="archived" type="boolean">
              Whether the plan is archived. Archived plans cannot be attached to new customers.
            </DynamicResponseField>

            <DynamicResponseField name="config" type="object">
              Miscellaneous plan-level configuration flags.

              <Expandable title="properties">
                <DynamicResponseField name="ignore_past_due" type="boolean">
                  If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past\_due state.
                </DynamicResponseField>
              </Expandable>
            </DynamicResponseField>

            <DynamicResponseField name="billing_controls" type="object">
              Plan-level billing controls used as customer defaults.

              <Expandable title="properties">
                <DynamicResponseField name="auto_topups" type="object[]">
                  List of auto top-up configurations per feature.

                  <Expandable title="properties">
                    <DynamicResponseField name="feature_id" type="string">
                      The ID of the feature (credit balance) to auto top-up.
                    </DynamicResponseField>

                    <DynamicResponseField name="enabled" type="boolean">
                      Whether auto top-up is enabled.
                    </DynamicResponseField>

                    <DynamicResponseField name="threshold" type="number">
                      When the balance drops below this threshold, an auto top-up will be purchased.
                    </DynamicResponseField>

                    <DynamicResponseField name="quantity" type="number">
                      Amount of credits to add per auto top-up.
                    </DynamicResponseField>

                    <DynamicResponseField name="purchase_limit" type="object">
                      Optional rate limit to cap how often auto top-ups occur.

                      <Expandable title="properties">
                        <DynamicResponseField name="interval" type="'hour' | 'day' | 'week' | 'month'">
                          The time interval for the purchase limit window.
                        </DynamicResponseField>

                        <DynamicResponseField name="interval_count" type="number">
                          Number of intervals in the purchase limit window.
                        </DynamicResponseField>

                        <DynamicResponseField name="limit" type="number">
                          Maximum number of auto top-ups allowed within the interval.
                        </DynamicResponseField>
                      </Expandable>
                    </DynamicResponseField>

                    <DynamicResponseField name="invoice_mode" type="boolean">
                      When true, auto top-up creates a send\_invoice invoice instead of auto-charging.
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>

                <DynamicResponseField name="spend_limits" type="object[]">
                  List of overage spend limits per feature (caps overage spend).

                  <Expandable title="properties">
                    <DynamicResponseField name="feature_id" type="string">
                      Optional feature ID this spend limit applies to.
                    </DynamicResponseField>

                    <DynamicResponseField name="enabled" type="boolean">
                      Whether the overage spend limit is enabled.
                    </DynamicResponseField>

                    <DynamicResponseField name="limit_type" type="'absolute' | 'usage_percentage'">
                      How overage\_limit is interpreted: an absolute overage cap (default) or a percentage of the main-plan allowance.
                    </DynamicResponseField>

                    <DynamicResponseField name="overage_limit" type="number">
                      Overage cap for the feature: absolute units, or a percent (e.g. 120) when limit\_type is usage\_percentage.
                    </DynamicResponseField>

                    <DynamicResponseField name="skip_overage_billing" type="boolean">
                      When true, overage for this feature is not posted to Stripe. Usage tracking and balance resets still behave normally.
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>

                <DynamicResponseField name="usage_limits" type="object[]">
                  List of hard usage caps per feature (max units per interval).

                  <Expandable title="properties">
                    <DynamicResponseField name="feature_id" type="string">
                      The feature this usage limit applies to.
                    </DynamicResponseField>

                    <DynamicResponseField name="enabled" type="boolean">
                      Whether this usage limit is enabled.
                    </DynamicResponseField>

                    <DynamicResponseField name="limit" type="number">
                      Maximum units allowed per interval.
                    </DynamicResponseField>

                    <DynamicResponseField name="interval" type="'day' | 'week' | 'month' | 'year'">
                      Interval for the cap, aligned to the customer's billing cycle.
                    </DynamicResponseField>

                    <DynamicResponseField name="anchor" type="'billing_cycle' | 'utc'">
                      Window alignment. 'billing\_cycle' phases the interval to the customer's renewal time; 'utc' aligns to the UTC calendar.
                    </DynamicResponseField>

                    <DynamicResponseField name="filter" type="object">
                      When set, only usage from events whose properties match counts toward this cap. Omit to count all usage of the feature.

                      <Expandable title="properties">
                        <DynamicResponseField name="properties.{key}" type="string" />
                      </Expandable>
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>

                <DynamicResponseField name="usage_alerts" type="object[]">
                  List of usage alert configurations per feature.

                  <Expandable title="properties">
                    <DynamicResponseField name="feature_id" type="string">
                      The feature ID this alert applies to.
                    </DynamicResponseField>

                    <DynamicResponseField name="enabled" type="boolean">
                      Whether this usage alert is enabled.
                    </DynamicResponseField>

                    <DynamicResponseField name="threshold" type="number">
                      The threshold value that triggers the alert. For usage or remaining, this is an absolute count. For usage\_percentage or remaining\_percentage, this is a percentage (0-100).
                    </DynamicResponseField>

                    <DynamicResponseField name="threshold_type" type="'usage' | 'usage_percentage' | 'remaining' | 'remaining_percentage'">
                      Whether the threshold is an absolute count or a percentage of the usage allowance or remaining balance.
                    </DynamicResponseField>

                    <DynamicResponseField name="basis" type="'balance' | 'included' | 'recurring' | 'usage_limit'">
                      What 100% means. balance: every grant on the feature. included: the plan allowance only. recurring: grants that reset. usage\_limit: the cap of the usage limit with the same feature and filter.
                    </DynamicResponseField>

                    <DynamicResponseField name="filter" type="object">
                      Only valid with basis usage\_limit. Points the alert at the usage limit carrying the same filter.

                      <Expandable title="properties">
                        <DynamicResponseField name="properties.{key}" type="string" />
                      </Expandable>
                    </DynamicResponseField>

                    <DynamicResponseField name="name" type="string">
                      Optional user-defined label to distinguish multiple alerts on the same feature.
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>

                <DynamicResponseField name="overage_allowed" type="object[]">
                  List of overage allowed controls per feature. When enabled, usage can exceed balance.

                  <Expandable title="properties">
                    <DynamicResponseField name="feature_id" type="string">
                      The feature ID this overage allowed control applies to.
                    </DynamicResponseField>

                    <DynamicResponseField name="enabled" type="boolean">
                      Whether overage is allowed for this feature.
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>
              </Expandable>
            </DynamicResponseField>

            <DynamicResponseField name="metadata" type="object">
              Arbitrary key-value metadata defined by you for your own use. Shared across all versions of the plan.
            </DynamicResponseField>

            <DynamicResponseField name="customer_eligibility" type="object">
              <Expandable title="properties">
                <DynamicResponseField name="trial_available" type="boolean">
                  Whether the trial on this plan is available to this customer. For example, if the customer used the trial in the past, this will be false.
                </DynamicResponseField>

                <DynamicResponseField name="status" type="'active' | 'scheduled'">
                  The customer's current status with this plan. 'active' if attached, 'scheduled' if pending activation.
                </DynamicResponseField>

                <DynamicResponseField name="canceling" type="boolean">
                  Whether the customer's active instance of this plan is set to cancel.
                </DynamicResponseField>

                <DynamicResponseField name="trialing" type="boolean">
                  Whether the customer is currently on a free trial of this plan.
                </DynamicResponseField>

                <DynamicResponseField name="attach_action" type="'activate' | 'upgrade' | 'downgrade' | 'none' | 'purchase'">
                  The action that would occur if this plan were attached to the customer.
                </DynamicResponseField>
              </Expandable>
            </DynamicResponseField>

            <DynamicResponseField name="base_variant_id" type="string | null">
              Deprecated. Use variant\_details.base\_plan\_id instead. If this is a variant, the ID of the base plan it was created from.
            </DynamicResponseField>

            <DynamicResponseField name="variant_details" type="object">
              Details about how this variant relates to its latest base plan.

              <Expandable title="properties">
                <DynamicResponseField name="base_plan_id" type="string">
                  The ID of the base plan this variant was derived from.
                </DynamicResponseField>

                <DynamicResponseField name="customize" type="object">
                  The customization that transforms the base plan into this variant.

                  <Expandable title="properties">
                    <DynamicResponseField name="price" type="object | null">
                      Base price configuration for a plan.

                      <Expandable title="properties">
                        <DynamicResponseField name="amount" type="number">
                          Base price amount for the plan, in major currency units (e.g. dollars).
                        </DynamicResponseField>

                        <DynamicResponseField name="interval" type="'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'">
                          Billing interval (e.g. 'month', 'year').
                        </DynamicResponseField>

                        <DynamicResponseField name="interval_count" type="number">
                          Number of intervals per billing cycle. Defaults to 1.
                        </DynamicResponseField>

                        <DynamicResponseField name="additional_currencies" type="object[]">
                          Base price amounts in additional currencies. The base 'amount' is in the org's default currency.

                          <Expandable title="properties">
                            <DynamicResponseField name="currency" type="string">
                              Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').
                            </DynamicResponseField>

                            <DynamicResponseField name="amount" type="number">
                              Price amount in this currency. Set explicitly per currency, not converted from the base amount.
                            </DynamicResponseField>
                          </Expandable>
                        </DynamicResponseField>
                      </Expandable>
                    </DynamicResponseField>

                    <DynamicResponseField name="add_items" type="object[]">
                      Items to add to the plan.

                      <Expandable title="properties">
                        <DynamicResponseField name="feature_id" type="string">
                          The ID of the feature to configure.
                        </DynamicResponseField>

                        <DynamicResponseField name="included" type="number">
                          Number of free units included. Balance resets to this each interval for consumable features.
                        </DynamicResponseField>

                        <DynamicResponseField name="unlimited" type="boolean">
                          If true, customer has unlimited access to this feature.
                        </DynamicResponseField>

                        <DynamicResponseField name="pooled" type="boolean">
                          Whether entity-level grants contribute to a shared customer balance.
                        </DynamicResponseField>

                        <DynamicResponseField name="reset" type="object">
                          Reset configuration for consumable features. Omit for non-consumable features like seats.

                          <Expandable title="properties">
                            <DynamicResponseField name="interval" type="'one_off' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'">
                              Interval at which balance resets (e.g. 'month', 'year'). For consumable features only.
                            </DynamicResponseField>

                            <DynamicResponseField name="interval_count" type="number">
                              Number of intervals between resets. Defaults to 1.
                            </DynamicResponseField>
                          </Expandable>
                        </DynamicResponseField>

                        <DynamicResponseField name="price" type="object">
                          Pricing for usage beyond included units. Omit for free features.

                          <Expandable title="properties">
                            <DynamicResponseField name="amount" type="number">
                              Price per billing\_units after included usage. Either 'amount' or 'tiers' is required.
                            </DynamicResponseField>

                            <DynamicResponseField name="additional_currencies" type="object[]">
                              Amounts in additional currencies for this flat price. The base 'amount' is in the org's default currency. Only valid with 'amount', not 'tiers'.

                              <Expandable title="properties">
                                <DynamicResponseField name="currency" type="string">
                                  Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').
                                </DynamicResponseField>

                                <DynamicResponseField name="amount" type="number">
                                  Price amount in this currency. Set explicitly per currency, not converted from the base amount.
                                </DynamicResponseField>
                              </Expandable>
                            </DynamicResponseField>

                            <DynamicResponseField name="tiers" type="object[]">
                              Tiered pricing. Either 'amount' or 'tiers' is required.

                              <Expandable title="properties">
                                <DynamicResponseField name="to" type="number" />

                                <DynamicResponseField name="amount" type="number" />

                                <DynamicResponseField name="flat_amount" type="number" />

                                <DynamicResponseField name="additional_currencies" type="object[]">
                                  <Expandable title="properties">
                                    <DynamicResponseField name="currency" type="string">
                                      Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').
                                    </DynamicResponseField>

                                    <DynamicResponseField name="amount" type="number">
                                      Per-unit amount for this tier in this currency.
                                    </DynamicResponseField>

                                    <DynamicResponseField name="flat_amount" type="number">
                                      Flat amount for this tier in this currency, if the tier uses one.
                                    </DynamicResponseField>
                                  </Expandable>
                                </DynamicResponseField>
                              </Expandable>
                            </DynamicResponseField>

                            <DynamicResponseField name="tier_behavior" type="'graduated' | 'volume'" />

                            <DynamicResponseField name="interval" type="'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'">
                              Billing interval. For consumable features, should match reset.interval.
                            </DynamicResponseField>

                            <DynamicResponseField name="interval_count" type="number">
                              Number of intervals per billing cycle. Defaults to 1.
                            </DynamicResponseField>

                            <DynamicResponseField name="billing_units" type="number">
                              Units per price increment. Usage is rounded UP when billed (e.g. billing\_units=100 means 101 rounds to 200).
                            </DynamicResponseField>

                            <DynamicResponseField name="billing_method" type="'prepaid' | 'usage_based'">
                              'prepaid' for upfront payment (seats), 'usage\_based' for pay-as-you-go.
                            </DynamicResponseField>

                            <DynamicResponseField name="max_purchase" type="number | null">
                              Max units purchasable beyond included. E.g. included=100, max\_purchase=300 allows 400 total. Null for no limit.
                            </DynamicResponseField>
                          </Expandable>
                        </DynamicResponseField>

                        <DynamicResponseField name="proration" type="object">
                          Proration settings for prepaid features. Controls mid-cycle quantity change billing.

                          <Expandable title="properties">
                            <DynamicResponseField name="on_increase" type="'bill_immediately' | 'prorate_immediately' | 'prorate_next_cycle' | 'bill_next_cycle'">
                              Billing behavior when quantity increases mid-cycle.
                            </DynamicResponseField>

                            <DynamicResponseField name="on_decrease" type="'prorate' | 'prorate_immediately' | 'prorate_next_cycle' | 'none' | 'no_prorations'">
                              Credit behavior when quantity decreases mid-cycle.
                            </DynamicResponseField>
                          </Expandable>
                        </DynamicResponseField>

                        <DynamicResponseField name="rollover" type="object">
                          Rollover config for unused units. If set, unused included units carry over.

                          <Expandable title="properties">
                            <DynamicResponseField name="max" type="number">
                              Max rollover units. Omit for unlimited rollover.
                            </DynamicResponseField>

                            <DynamicResponseField name="max_percentage" type="number">
                              Maximum rollover as a percentage (0-100) of included + prepaid grant. Mutually exclusive with max.
                            </DynamicResponseField>

                            <DynamicResponseField name="expiry_duration_type" type="'month' | 'forever'">
                              When rolled over units expire.
                            </DynamicResponseField>

                            <DynamicResponseField name="expiry_duration_length" type="number">
                              Number of periods before expiry.
                            </DynamicResponseField>
                          </Expandable>
                        </DynamicResponseField>

                        <DynamicResponseField name="feature_override" type="object">
                          Overrides fields of this item's feature for customers on this plan (e.g. a credit system's credit\_schema).

                          <Expandable title="properties">
                            <DynamicResponseField name="credit_schema" type="object | object[]">
                              For credit system features: replaces the feature's credit\_schema entirely for customers on this plan.

                              <Expandable title="properties">
                                <DynamicResponseField name="metered_feature_id" type="string">
                                  ID of the metered feature that draws from this credit system.
                                </DynamicResponseField>

                                <DynamicResponseField name="billing_units" type="number">
                                  Number of metered-feature units priced together. Defaults to one when omitted.
                                </DynamicResponseField>

                                <DynamicResponseField name="dimensions.{key}" type="object">
                                  Named rates chosen by event properties. The most specific match sets the rate; with no match the item's own rate applies.

                                  <Expandable title="properties">
                                    <DynamicResponseField name="match.{key}" type="string">
                                      Event properties this entry applies to. Every key must equal the tracked property, compared as strings.
                                    </DynamicResponseField>

                                    <DynamicResponseField name="priority" type="integer">
                                      Breaks ties between dimensions that match the same number of keys. Higher wins.
                                    </DynamicResponseField>

                                    <DynamicResponseField name="tier_behavior" type="any" />

                                    <DynamicResponseField name="tiers" type="object[]">
                                      <Expandable title="properties">
                                        <DynamicResponseField name="to" type="number">
                                          Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.
                                        </DynamicResponseField>

                                        <DynamicResponseField name="credit_cost" type="number">
                                          Credits consumed per billing-unit group within this tier.
                                        </DynamicResponseField>
                                      </Expandable>
                                    </DynamicResponseField>
                                  </Expandable>
                                </DynamicResponseField>

                                <DynamicResponseField name="multipliers.{key}" type="object">
                                  Named adjustments chosen by event properties. Every match applies: factors multiply, then adds are summed.

                                  <Expandable title="properties">
                                    <DynamicResponseField name="match.{key}" type="string">
                                      Event properties this entry applies to. Every key must equal the tracked property, compared as strings.
                                    </DynamicResponseField>

                                    <DynamicResponseField name="factor" type="number">
                                      Multiplies the matched rate. All matching multipliers stack.
                                    </DynamicResponseField>

                                    <DynamicResponseField name="add" type="number">
                                      Added to the rate after every factor is applied, in credits per billing-unit group.
                                    </DynamicResponseField>
                                  </Expandable>
                                </DynamicResponseField>

                                <DynamicResponseField name="tier_behavior" type="any" />

                                <DynamicResponseField name="tiers" type="object[]">
                                  <Expandable title="properties">
                                    <DynamicResponseField name="to" type="number">
                                      Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.
                                    </DynamicResponseField>

                                    <DynamicResponseField name="credit_cost" type="number">
                                      Credits consumed per billing-unit group within this tier.
                                    </DynamicResponseField>
                                  </Expandable>
                                </DynamicResponseField>

                                <DynamicResponseField name="credit_cost" type="number">
                                  Credits consumed per billing-unit group.
                                </DynamicResponseField>
                              </Expandable>
                            </DynamicResponseField>

                            <DynamicResponseField name="markups" type="object">
                              For AI credit system features: replaces the feature's markup chain entirely for customers on this plan. An unset level means no markup at that level rather than inheriting the feature's.

                              <Expandable title="properties">
                                <DynamicResponseField name="default_markup" type="number">
                                  Default percentage markup for customers on this plan. Use -100 to make usage free.
                                </DynamicResponseField>

                                <DynamicResponseField name="provider_markups.{key}" type="object | null">
                                  Per-provider markup percentages for customers on this plan.

                                  <Expandable title="properties">
                                    <DynamicResponseField name="markup" type="number" />
                                  </Expandable>
                                </DynamicResponseField>

                                <DynamicResponseField name="model_markups.{key}" type="object | null">
                                  Per-model markup overrides for customers on this plan.

                                  <Expandable title="properties">
                                    <DynamicResponseField name="markup" type="number" />

                                    <DynamicResponseField name="input_cost" type="number" />

                                    <DynamicResponseField name="output_cost" type="number" />
                                  </Expandable>
                                </DynamicResponseField>
                              </Expandable>
                            </DynamicResponseField>
                          </Expandable>
                        </DynamicResponseField>
                      </Expandable>
                    </DynamicResponseField>

                    <DynamicResponseField name="remove_items" type="object[]">
                      Filters selecting items to remove from the plan.

                      <Expandable title="properties">
                        <DynamicResponseField name="feature_id" type="string">
                          Match items linked to this feature.
                        </DynamicResponseField>

                        <DynamicResponseField name="billing_method" type="'prepaid' | 'usage_based'">
                          Match items with this billing method (prepaid or usage\_based).
                        </DynamicResponseField>

                        <DynamicResponseField name="interval" type="'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'">
                          Match items with this interval. Accepts either a BillingInterval (price-side) or a ResetInterval (reset-side, includes day/hour/minute) so price-less items keyed by reset.interval can be disambiguated.
                        </DynamicResponseField>

                        <DynamicResponseField name="interval_count" type="integer">
                          Match items with this interval\_count. Disambiguates between items that share an interval but differ in count.
                        </DynamicResponseField>

                        <DynamicResponseField name="included" type="number">
                          Match items whose grant equals this included usage. Omitted is a wildcard.
                        </DynamicResponseField>
                      </Expandable>
                    </DynamicResponseField>

                    <DynamicResponseField name="free_trial" type="object | null">
                      Free trial configuration for a plan.

                      <Expandable title="properties">
                        <DynamicResponseField name="duration_length" type="number">
                          Number of duration\_type periods the trial lasts.
                        </DynamicResponseField>

                        <DynamicResponseField name="duration_type" type="'day' | 'month' | 'year'">
                          Unit of time for the trial ('day', 'month', 'year').
                        </DynamicResponseField>

                        <DynamicResponseField name="card_required" type="boolean">
                          If true, a payment method is required to start the trial and the customer is charged when it ends. Defaults to false.
                        </DynamicResponseField>

                        <DynamicResponseField name="on_end" type="'bill' | 'revert'">
                          Behavior when the trial ends. 'bill' charges the customer (default). 'revert' expires the trial and restores the customer's previous plan.
                        </DynamicResponseField>
                      </Expandable>
                    </DynamicResponseField>

                    <DynamicResponseField name="billing_controls" type="object">
                      Override the plan's billing controls (auto top-ups, spend limits, usage limits, usage alerts, overage allowed) for this customer.

                      <Expandable title="properties">
                        <DynamicResponseField name="auto_topups" type="object[]">
                          List of auto top-up configurations per feature.

                          <Expandable title="properties">
                            <DynamicResponseField name="feature_id" type="string">
                              The ID of the feature (credit balance) to auto top-up.
                            </DynamicResponseField>

                            <DynamicResponseField name="enabled" type="boolean">
                              Whether auto top-up is enabled.
                            </DynamicResponseField>

                            <DynamicResponseField name="threshold" type="number">
                              When the balance drops below this threshold, an auto top-up will be purchased.
                            </DynamicResponseField>

                            <DynamicResponseField name="quantity" type="number">
                              Amount of credits to add per auto top-up.
                            </DynamicResponseField>

                            <DynamicResponseField name="purchase_limit" type="object">
                              Optional rate limit to cap how often auto top-ups occur. Pass count to set the current window's consumed top-ups.

                              <Expandable title="properties">
                                <DynamicResponseField name="interval" type="'hour' | 'day' | 'week' | 'month'">
                                  The time interval for the purchase limit window.
                                </DynamicResponseField>

                                <DynamicResponseField name="interval_count" type="number">
                                  Number of intervals in the purchase limit window.
                                </DynamicResponseField>

                                <DynamicResponseField name="limit" type="number">
                                  Maximum number of auto top-ups allowed within the interval.
                                </DynamicResponseField>

                                <DynamicResponseField name="count" type="number">
                                  Set the current window's consumed auto top-up count. Omit to leave runtime state unchanged.
                                </DynamicResponseField>
                              </Expandable>
                            </DynamicResponseField>

                            <DynamicResponseField name="invoice_mode" type="boolean">
                              When true, auto top-up creates a send\_invoice invoice instead of auto-charging.
                            </DynamicResponseField>
                          </Expandable>
                        </DynamicResponseField>

                        <DynamicResponseField name="spend_limits" type="object[]">
                          List of overage spend limits per feature (caps overage spend).

                          <Expandable title="properties">
                            <DynamicResponseField name="feature_id" type="string">
                              Optional feature ID this spend limit applies to.
                            </DynamicResponseField>

                            <DynamicResponseField name="enabled" type="boolean">
                              Whether the overage spend limit is enabled.
                            </DynamicResponseField>

                            <DynamicResponseField name="limit_type" type="'absolute' | 'usage_percentage'">
                              How overage\_limit is interpreted: an absolute overage cap (default) or a percentage of the main-plan allowance.
                            </DynamicResponseField>

                            <DynamicResponseField name="overage_limit" type="number">
                              Overage cap for the feature: absolute units, or a percent (e.g. 120) when limit\_type is usage\_percentage.
                            </DynamicResponseField>

                            <DynamicResponseField name="skip_overage_billing" type="boolean">
                              When true, overage for this feature is not posted to Stripe. Usage tracking and balance resets still behave normally.
                            </DynamicResponseField>
                          </Expandable>
                        </DynamicResponseField>

                        <DynamicResponseField name="usage_limits" type="object[]">
                          List of hard usage caps per feature (max units per interval).

                          <Expandable title="properties">
                            <DynamicResponseField name="feature_id" type="string">
                              The feature this usage limit applies to.
                            </DynamicResponseField>

                            <DynamicResponseField name="enabled" type="boolean">
                              Whether this usage limit is enabled.
                            </DynamicResponseField>

                            <DynamicResponseField name="limit" type="number">
                              Maximum units allowed per interval.
                            </DynamicResponseField>

                            <DynamicResponseField name="interval" type="'day' | 'week' | 'month' | 'year'">
                              Interval for the cap, aligned to the customer's billing cycle.
                            </DynamicResponseField>

                            <DynamicResponseField name="anchor" type="'billing_cycle' | 'utc'">
                              Window alignment. 'billing\_cycle' phases the interval to the customer's renewal time; 'utc' aligns to the UTC calendar.
                            </DynamicResponseField>

                            <DynamicResponseField name="filter" type="object">
                              When set, only usage from events whose properties match counts toward this cap. Omit to count all usage of the feature.

                              <Expandable title="properties">
                                <DynamicResponseField name="properties.{key}" type="string" />
                              </Expandable>
                            </DynamicResponseField>
                          </Expandable>
                        </DynamicResponseField>

                        <DynamicResponseField name="usage_alerts" type="object[]">
                          List of usage alert configurations per feature.

                          <Expandable title="properties">
                            <DynamicResponseField name="feature_id" type="string">
                              The feature ID this alert applies to.
                            </DynamicResponseField>

                            <DynamicResponseField name="enabled" type="boolean">
                              Whether this usage alert is enabled.
                            </DynamicResponseField>

                            <DynamicResponseField name="threshold" type="number">
                              The threshold value that triggers the alert. For usage or remaining, this is an absolute count. For usage\_percentage or remaining\_percentage, this is a percentage (0-100).
                            </DynamicResponseField>

                            <DynamicResponseField name="threshold_type" type="'usage' | 'usage_percentage' | 'remaining' | 'remaining_percentage'">
                              Whether the threshold is an absolute count or a percentage of the usage allowance or remaining balance.
                            </DynamicResponseField>

                            <DynamicResponseField name="basis" type="'balance' | 'included' | 'recurring' | 'usage_limit'">
                              What 100% means. balance: every grant on the feature. included: the plan allowance only. recurring: grants that reset. usage\_limit: the cap of the usage limit with the same feature and filter.
                            </DynamicResponseField>

                            <DynamicResponseField name="filter" type="object">
                              Only valid with basis usage\_limit. Points the alert at the usage limit carrying the same filter.

                              <Expandable title="properties">
                                <DynamicResponseField name="properties.{key}" type="string" />
                              </Expandable>
                            </DynamicResponseField>

                            <DynamicResponseField name="name" type="string">
                              Optional user-defined label to distinguish multiple alerts on the same feature.
                            </DynamicResponseField>
                          </Expandable>
                        </DynamicResponseField>

                        <DynamicResponseField name="overage_allowed" type="object[]">
                          List of overage allowed controls per feature. When enabled, usage can exceed balance.

                          <Expandable title="properties">
                            <DynamicResponseField name="feature_id" type="string">
                              The feature ID this overage allowed control applies to.
                            </DynamicResponseField>

                            <DynamicResponseField name="enabled" type="boolean">
                              Whether overage is allowed for this feature.
                            </DynamicResponseField>
                          </Expandable>
                        </DynamicResponseField>
                      </Expandable>
                    </DynamicResponseField>

                    <DynamicResponseField name="upsert_licenses" type="object[]">
                      License links to add or override for this customer, keyed by license\_plan\_id. Omitted fields inherit the plan catalog link (included defaults to 1 when the license is not in the catalog). A bare entry restores the license to pure catalog inheritance.

                      <Expandable title="properties">
                        <DynamicResponseField name="license_plan_id" type="string" />

                        <DynamicResponseField name="version_slug" type="string" />

                        <DynamicResponseField name="included" type="integer" />

                        <DynamicResponseField name="prepaid_only" type="boolean" />

                        <DynamicResponseField name="customize" type="object | null">
                          <Expandable title="properties">
                            <DynamicResponseField name="price" type="object | null">
                              Base price configuration for a plan.

                              <Expandable title="properties">
                                <DynamicResponseField name="amount" type="number">
                                  Base price amount for the plan, in major currency units (e.g. dollars).
                                </DynamicResponseField>

                                <DynamicResponseField name="interval" type="'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'">
                                  Billing interval (e.g. 'month', 'year').
                                </DynamicResponseField>

                                <DynamicResponseField name="interval_count" type="number">
                                  Number of intervals per billing cycle. Defaults to 1.
                                </DynamicResponseField>

                                <DynamicResponseField name="additional_currencies" type="object[]">
                                  Base price amounts in additional currencies. The base 'amount' is in the org's default currency.

                                  <Expandable title="properties">
                                    <DynamicResponseField name="currency" type="string">
                                      Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').
                                    </DynamicResponseField>

                                    <DynamicResponseField name="amount" type="number">
                                      Price amount in this currency. Set explicitly per currency, not converted from the base amount.
                                    </DynamicResponseField>
                                  </Expandable>
                                </DynamicResponseField>
                              </Expandable>
                            </DynamicResponseField>

                            <DynamicResponseField name="add_items" type="object[]">
                              <Expandable title="properties">
                                <DynamicResponseField name="feature_id" type="string">
                                  The ID of the feature to configure.
                                </DynamicResponseField>

                                <DynamicResponseField name="included" type="number">
                                  Number of free units included. Balance resets to this each interval for consumable features.
                                </DynamicResponseField>

                                <DynamicResponseField name="unlimited" type="boolean">
                                  If true, customer has unlimited access to this feature.
                                </DynamicResponseField>

                                <DynamicResponseField name="pooled" type="boolean">
                                  Whether entity-level grants contribute to a shared customer balance.
                                </DynamicResponseField>

                                <DynamicResponseField name="reset" type="object">
                                  Reset configuration for consumable features. Omit for non-consumable features like seats.

                                  <Expandable title="properties">
                                    <DynamicResponseField name="interval" type="'one_off' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'">
                                      Interval at which balance resets (e.g. 'month', 'year'). For consumable features only.
                                    </DynamicResponseField>

                                    <DynamicResponseField name="interval_count" type="number">
                                      Number of intervals between resets. Defaults to 1.
                                    </DynamicResponseField>
                                  </Expandable>
                                </DynamicResponseField>

                                <DynamicResponseField name="price" type="object">
                                  Pricing for usage beyond included units. Omit for free features.

                                  <Expandable title="properties">
                                    <DynamicResponseField name="amount" type="number">
                                      Price per billing\_units after included usage. Either 'amount' or 'tiers' is required.
                                    </DynamicResponseField>

                                    <DynamicResponseField name="additional_currencies" type="object[]">
                                      Amounts in additional currencies for this flat price. The base 'amount' is in the org's default currency. Only valid with 'amount', not 'tiers'.

                                      <Expandable title="properties">
                                        <DynamicResponseField name="currency" type="string">
                                          Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').
                                        </DynamicResponseField>

                                        <DynamicResponseField name="amount" type="number">
                                          Price amount in this currency. Set explicitly per currency, not converted from the base amount.
                                        </DynamicResponseField>
                                      </Expandable>
                                    </DynamicResponseField>

                                    <DynamicResponseField name="tiers" type="object[]">
                                      Tiered pricing. Either 'amount' or 'tiers' is required.

                                      <Expandable title="properties">
                                        <DynamicResponseField name="to" type="number" />

                                        <DynamicResponseField name="amount" type="number" />

                                        <DynamicResponseField name="flat_amount" type="number" />

                                        <DynamicResponseField name="additional_currencies" type="object[]">
                                          <Expandable title="properties">
                                            <DynamicResponseField name="currency" type="string">
                                              Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').
                                            </DynamicResponseField>

                                            <DynamicResponseField name="amount" type="number">
                                              Per-unit amount for this tier in this currency.
                                            </DynamicResponseField>

                                            <DynamicResponseField name="flat_amount" type="number">
                                              Flat amount for this tier in this currency, if the tier uses one.
                                            </DynamicResponseField>
                                          </Expandable>
                                        </DynamicResponseField>
                                      </Expandable>
                                    </DynamicResponseField>

                                    <DynamicResponseField name="tier_behavior" type="'graduated' | 'volume'" />

                                    <DynamicResponseField name="interval" type="'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'">
                                      Billing interval. For consumable features, should match reset.interval.
                                    </DynamicResponseField>

                                    <DynamicResponseField name="interval_count" type="number">
                                      Number of intervals per billing cycle. Defaults to 1.
                                    </DynamicResponseField>

                                    <DynamicResponseField name="billing_units" type="number">
                                      Units per price increment. Usage is rounded UP when billed (e.g. billing\_units=100 means 101 rounds to 200).
                                    </DynamicResponseField>

                                    <DynamicResponseField name="billing_method" type="'prepaid' | 'usage_based'">
                                      'prepaid' for upfront payment (seats), 'usage\_based' for pay-as-you-go.
                                    </DynamicResponseField>

                                    <DynamicResponseField name="max_purchase" type="number | null">
                                      Max units purchasable beyond included. E.g. included=100, max\_purchase=300 allows 400 total. Null for no limit.
                                    </DynamicResponseField>
                                  </Expandable>
                                </DynamicResponseField>

                                <DynamicResponseField name="proration" type="object">
                                  Proration settings for prepaid features. Controls mid-cycle quantity change billing.

                                  <Expandable title="properties">
                                    <DynamicResponseField name="on_increase" type="'bill_immediately' | 'prorate_immediately' | 'prorate_next_cycle' | 'bill_next_cycle'">
                                      Billing behavior when quantity increases mid-cycle.
                                    </DynamicResponseField>

                                    <DynamicResponseField name="on_decrease" type="'prorate' | 'prorate_immediately' | 'prorate_next_cycle' | 'none' | 'no_prorations'">
                                      Credit behavior when quantity decreases mid-cycle.
                                    </DynamicResponseField>
                                  </Expandable>
                                </DynamicResponseField>

                                <DynamicResponseField name="rollover" type="object">
                                  Rollover config for unused units. If set, unused included units carry over.

                                  <Expandable title="properties">
                                    <DynamicResponseField name="max" type="number">
                                      Max rollover units. Omit for unlimited rollover.
                                    </DynamicResponseField>

                                    <DynamicResponseField name="max_percentage" type="number">
                                      Maximum rollover as a percentage (0-100) of included + prepaid grant. Mutually exclusive with max.
                                    </DynamicResponseField>

                                    <DynamicResponseField name="expiry_duration_type" type="'month' | 'forever'">
                                      When rolled over units expire.
                                    </DynamicResponseField>

                                    <DynamicResponseField name="expiry_duration_length" type="number">
                                      Number of periods before expiry.
                                    </DynamicResponseField>
                                  </Expandable>
                                </DynamicResponseField>

                                <DynamicResponseField name="feature_override" type="object">
                                  Overrides fields of this item's feature for customers on this plan (e.g. a credit system's credit\_schema).

                                  <Expandable title="properties">
                                    <DynamicResponseField name="credit_schema" type="object | object[]">
                                      For credit system features: replaces the feature's credit\_schema entirely for customers on this plan.

                                      <Expandable title="properties">
                                        <DynamicResponseField name="metered_feature_id" type="string">
                                          ID of the metered feature that draws from this credit system.
                                        </DynamicResponseField>

                                        <DynamicResponseField name="billing_units" type="number">
                                          Number of metered-feature units priced together. Defaults to one when omitted.
                                        </DynamicResponseField>

                                        <DynamicResponseField name="dimensions.{key}" type="object">
                                          Named rates chosen by event properties. The most specific match sets the rate; with no match the item's own rate applies.

                                          <Expandable title="properties">
                                            <DynamicResponseField name="match.{key}" type="string">
                                              Event properties this entry applies to. Every key must equal the tracked property, compared as strings.
                                            </DynamicResponseField>

                                            <DynamicResponseField name="priority" type="integer">
                                              Breaks ties between dimensions that match the same number of keys. Higher wins.
                                            </DynamicResponseField>

                                            <DynamicResponseField name="tier_behavior" type="any" />

                                            <DynamicResponseField name="tiers" type="object[]">
                                              <Expandable title="properties">
                                                <DynamicResponseField name="to" type="number">
                                                  Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.
                                                </DynamicResponseField>

                                                <DynamicResponseField name="credit_cost" type="number">
                                                  Credits consumed per billing-unit group within this tier.
                                                </DynamicResponseField>
                                              </Expandable>
                                            </DynamicResponseField>
                                          </Expandable>
                                        </DynamicResponseField>

                                        <DynamicResponseField name="multipliers.{key}" type="object">
                                          Named adjustments chosen by event properties. Every match applies: factors multiply, then adds are summed.

                                          <Expandable title="properties">
                                            <DynamicResponseField name="match.{key}" type="string">
                                              Event properties this entry applies to. Every key must equal the tracked property, compared as strings.
                                            </DynamicResponseField>

                                            <DynamicResponseField name="factor" type="number">
                                              Multiplies the matched rate. All matching multipliers stack.
                                            </DynamicResponseField>

                                            <DynamicResponseField name="add" type="number">
                                              Added to the rate after every factor is applied, in credits per billing-unit group.
                                            </DynamicResponseField>
                                          </Expandable>
                                        </DynamicResponseField>

                                        <DynamicResponseField name="tier_behavior" type="any" />

                                        <DynamicResponseField name="tiers" type="object[]">
                                          <Expandable title="properties">
                                            <DynamicResponseField name="to" type="number">
                                              Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.
                                            </DynamicResponseField>

                                            <DynamicResponseField name="credit_cost" type="number">
                                              Credits consumed per billing-unit group within this tier.
                                            </DynamicResponseField>
                                          </Expandable>
                                        </DynamicResponseField>

                                        <DynamicResponseField name="credit_cost" type="number">
                                          Credits consumed per billing-unit group.
                                        </DynamicResponseField>
                                      </Expandable>
                                    </DynamicResponseField>

                                    <DynamicResponseField name="markups" type="object">
                                      For AI credit system features: replaces the feature's markup chain entirely for customers on this plan. An unset level means no markup at that level rather than inheriting the feature's.

                                      <Expandable title="properties">
                                        <DynamicResponseField name="default_markup" type="number">
                                          Default percentage markup for customers on this plan. Use -100 to make usage free.
                                        </DynamicResponseField>

                                        <DynamicResponseField name="provider_markups.{key}" type="object | null">
                                          Per-provider markup percentages for customers on this plan.

                                          <Expandable title="properties">
                                            <DynamicResponseField name="markup" type="number" />
                                          </Expandable>
                                        </DynamicResponseField>

                                        <DynamicResponseField name="model_markups.{key}" type="object | null">
                                          Per-model markup overrides for customers on this plan.

                                          <Expandable title="properties">
                                            <DynamicResponseField name="markup" type="number" />

                                            <DynamicResponseField name="input_cost" type="number" />

                                            <DynamicResponseField name="output_cost" type="number" />
                                          </Expandable>
                                        </DynamicResponseField>
                                      </Expandable>
                                    </DynamicResponseField>
                                  </Expandable>
                                </DynamicResponseField>
                              </Expandable>
                            </DynamicResponseField>

                            <DynamicResponseField name="remove_items" type="object[]">
                              <Expandable title="properties">
                                <DynamicResponseField name="feature_id" type="string">
                                  Match items linked to this feature.
                                </DynamicResponseField>

                                <DynamicResponseField name="billing_method" type="'prepaid' | 'usage_based'">
                                  Match items with this billing method (prepaid or usage\_based).
                                </DynamicResponseField>

                                <DynamicResponseField name="interval" type="'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'">
                                  Match items with this interval. Accepts either a BillingInterval (price-side) or a ResetInterval (reset-side, includes day/hour/minute) so price-less items keyed by reset.interval can be disambiguated.
                                </DynamicResponseField>

                                <DynamicResponseField name="interval_count" type="integer">
                                  Match items with this interval\_count. Disambiguates between items that share an interval but differ in count.
                                </DynamicResponseField>

                                <DynamicResponseField name="included" type="number">
                                  Match items whose grant equals this included usage. Omitted is a wildcard.
                                </DynamicResponseField>
                              </Expandable>
                            </DynamicResponseField>
                          </Expandable>
                        </DynamicResponseField>

                        <DynamicResponseField name="metadata" type="object" />
                      </Expandable>
                    </DynamicResponseField>

                    <DynamicResponseField name="remove_licenses" type="object[]">
                      License links to drop, keyed by license\_plan\_id. Parallel to remove\_items.

                      <Expandable title="properties">
                        <DynamicResponseField name="license_plan_id" type="string" />
                      </Expandable>
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>
              </Expandable>
            </DynamicResponseField>
          </Expandable>
        </DynamicResponseField>

        <DynamicResponseField name="plan_id" type="string">
          The unique identifier of the purchased plan.
        </DynamicResponseField>

        <DynamicResponseField name="expires_at" type="number | null">
          Timestamp when the purchase expires, or null for lifetime access.
        </DynamicResponseField>

        <DynamicResponseField name="started_at" type="number">
          Timestamp when the purchase was made.
        </DynamicResponseField>

        <DynamicResponseField name="quantity" type="number">
          Number of units purchased.
        </DynamicResponseField>

        <DynamicResponseField name="scope" type="'customer' | 'entity'">
          Whether this purchase is attached at the customer level or entity level.
        </DynamicResponseField>
      </Expandable>
    </DynamicResponseField>

    <DynamicResponseField name="balances.{key}" type="object">
      <Expandable title="properties">
        <DynamicResponseField name="feature_id" type="string">
          The feature ID this balance is for.
        </DynamicResponseField>

        <DynamicResponseField name="feature" type="object">
          The full feature object if expanded.

          <Expandable title="properties">
            <DynamicResponseField name="id" type="string">
              The unique identifier for this feature, used in /check and /track calls.
            </DynamicResponseField>

            <DynamicResponseField name="name" type="string">
              Human-readable name displayed in the dashboard and billing UI.
            </DynamicResponseField>

            <DynamicResponseField name="type" type="'boolean' | 'metered' | 'credit_system' | 'ai_credit_system'">
              Feature type: 'boolean' for on/off access, 'metered' for usage-tracked features, 'credit\_system' for unified credit pools, 'ai\_credit\_system' for model-based token pricing.
            </DynamicResponseField>

            <DynamicResponseField name="consumable" type="boolean">
              For metered features: true if usage resets periodically (API calls, credits), false if allocated persistently (seats, storage).
            </DynamicResponseField>

            <DynamicResponseField name="event_names" type="string[]">
              Event names that trigger this feature's balance. Allows multiple features to respond to a single event.
            </DynamicResponseField>

            <DynamicResponseField name="credit_schema" type="object | object | object[]">
              For classic credit systems: maps metered features to flat or graduated credit costs.

              <Expandable title="properties">
                <DynamicResponseField name="metered_feature_id" type="string | any">
                  ID of the metered feature that draws from this credit system.
                </DynamicResponseField>

                <DynamicResponseField name="billing_units" type="number">
                  Number of metered-feature units priced together. Defaults to one when omitted.
                </DynamicResponseField>

                <DynamicResponseField name="dimensions.{key}" type="object">
                  Named rates chosen by event properties. The most specific match sets the rate; with no match the item's own rate applies.

                  <Expandable title="properties">
                    <DynamicResponseField name="match.{key}" type="string">
                      Event properties this entry applies to. Every key must equal the tracked property, compared as strings.
                    </DynamicResponseField>

                    <DynamicResponseField name="priority" type="integer">
                      Breaks ties between dimensions that match the same number of keys. Higher wins.
                    </DynamicResponseField>

                    <DynamicResponseField name="tier_behavior" type="any" />

                    <DynamicResponseField name="tiers" type="object[]">
                      <Expandable title="properties">
                        <DynamicResponseField name="to" type="number">
                          Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.
                        </DynamicResponseField>

                        <DynamicResponseField name="credit_cost" type="number">
                          Credits consumed per billing-unit group within this tier.
                        </DynamicResponseField>
                      </Expandable>
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>

                <DynamicResponseField name="multipliers.{key}" type="object">
                  Named adjustments chosen by event properties. Every match applies: factors multiply, then adds are summed.

                  <Expandable title="properties">
                    <DynamicResponseField name="match.{key}" type="string">
                      Event properties this entry applies to. Every key must equal the tracked property, compared as strings.
                    </DynamicResponseField>

                    <DynamicResponseField name="factor" type="number">
                      Multiplies the matched rate. All matching multipliers stack.
                    </DynamicResponseField>

                    <DynamicResponseField name="add" type="number">
                      Added to the rate after every factor is applied, in credits per billing-unit group.
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>

                <DynamicResponseField name="tier_behavior" type="any" />

                <DynamicResponseField name="tiers" type="object[]">
                  <Expandable title="properties">
                    <DynamicResponseField name="to" type="number">
                      Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.
                    </DynamicResponseField>

                    <DynamicResponseField name="credit_cost" type="number">
                      Credits consumed per billing-unit group within this tier.
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>

                <DynamicResponseField name="credit_cost" type="number">
                  Credits consumed per billing-unit group.
                </DynamicResponseField>
              </Expandable>
            </DynamicResponseField>

            <DynamicResponseField name="invoice_credit" type="boolean">
              Whether usage of this classic credit system should be itemized as invoice credits.
            </DynamicResponseField>

            <DynamicResponseField name="model_markups.{key}" type="object | null">
              Per-model markup overrides for AI credit systems.

              <Expandable title="properties">
                <DynamicResponseField name="markup" type="number" />

                <DynamicResponseField name="input_cost" type="number" />

                <DynamicResponseField name="output_cost" type="number" />
              </Expandable>
            </DynamicResponseField>

            <DynamicResponseField name="default_markup" type="number">
              Default percentage markup for AI credit systems. Use -100 to make usage free.
            </DynamicResponseField>

            <DynamicResponseField name="provider_markups.{key}" type="object | null">
              Per-provider default markup percentages for AI credit systems.

              <Expandable title="properties">
                <DynamicResponseField name="markup" type="number" />
              </Expandable>
            </DynamicResponseField>

            <DynamicResponseField name="display" type="object">
              Display names for the feature in billing UI and customer-facing components.

              <Expandable title="properties">
                <DynamicResponseField name="singular" type="string | null">
                  Singular form for UI display (e.g., 'API call', 'seat').
                </DynamicResponseField>

                <DynamicResponseField name="plural" type="string | null">
                  Plural form for UI display (e.g., 'API calls', 'seats').
                </DynamicResponseField>
              </Expandable>
            </DynamicResponseField>

            <DynamicResponseField name="archived" type="boolean">
              Whether the feature is archived and hidden from the dashboard.
            </DynamicResponseField>

            <DynamicResponseField name="processors" type="object">
              Processor mappings for this feature. Present when a Stripe product or meter is set.

              <Expandable title="properties">
                <DynamicResponseField name="stripe" type="object">
                  <Expandable title="properties">
                    <DynamicResponseField name="product_id" type="string">
                      Stripe product ID this feature's usage prices bill under.
                    </DynamicResponseField>

                    <DynamicResponseField name="meter_id" type="string">
                      Stripe meter ID used to create this feature's metered price.
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>
              </Expandable>
            </DynamicResponseField>
          </Expandable>
        </DynamicResponseField>

        <DynamicResponseField name="granted" type="number">
          Total balance granted (included + prepaid).
        </DynamicResponseField>

        <DynamicResponseField name="remaining" type="number">
          Remaining balance available for use.
        </DynamicResponseField>

        <DynamicResponseField name="usage" type="number">
          Total usage consumed in the current period.
        </DynamicResponseField>

        <DynamicResponseField name="unlimited" type="boolean">
          Whether this feature has unlimited usage.
        </DynamicResponseField>

        <DynamicResponseField name="overage_allowed" type="boolean">
          Whether usage beyond the granted balance is allowed (with overage charges).
        </DynamicResponseField>

        <DynamicResponseField name="max_purchase" type="number | null">
          Maximum quantity that can be purchased as a top-up, or null for unlimited.
        </DynamicResponseField>

        <DynamicResponseField name="next_reset_at" type="number | null">
          Timestamp when the balance will reset, or null for no reset.
        </DynamicResponseField>

        <DynamicResponseField name="breakdown" type="object[]">
          Detailed breakdown of balance sources when stacking multiple plans or grants.

          <Expandable title="properties">
            <DynamicResponseField name="id" type="string">
              The unique identifier for this balance breakdown.
            </DynamicResponseField>

            <DynamicResponseField name="plan_id" type="string | null">
              The plan ID this balance originates from, or null for standalone balances.
            </DynamicResponseField>

            <DynamicResponseField name="included_grant" type="number">
              Amount granted from the plan's included usage.
            </DynamicResponseField>

            <DynamicResponseField name="prepaid_grant" type="number">
              Amount granted from prepaid purchases or top-ups.
            </DynamicResponseField>

            <DynamicResponseField name="remaining" type="number">
              Remaining balance available for use.
            </DynamicResponseField>

            <DynamicResponseField name="usage" type="number">
              Amount consumed in the current period.
            </DynamicResponseField>

            <DynamicResponseField name="unlimited" type="boolean">
              Whether this balance has unlimited usage.
            </DynamicResponseField>

            <DynamicResponseField name="reset" type="object | null">
              Reset configuration for this balance, or null if no reset.

              <Expandable title="properties">
                <DynamicResponseField name="interval" type="'one_off' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'">
                  The reset interval (hour, day, week, month, etc.) or 'multiple' if combined from different intervals.
                </DynamicResponseField>

                <DynamicResponseField name="interval_count" type="number">
                  Number of intervals between resets (eg. 2 for bi-monthly).
                </DynamicResponseField>

                <DynamicResponseField name="resets_at" type="number | null">
                  Timestamp when the balance will next reset.
                </DynamicResponseField>
              </Expandable>
            </DynamicResponseField>

            <DynamicResponseField name="price" type="object | null">
              Pricing configuration if this balance has usage-based pricing.

              <Expandable title="properties">
                <DynamicResponseField name="amount" type="number">
                  The per-unit price amount.
                </DynamicResponseField>

                <DynamicResponseField name="tiers" type="object[]">
                  Tiered pricing configuration if applicable.

                  <Expandable title="properties">
                    <DynamicResponseField name="to" type="number" />

                    <DynamicResponseField name="amount" type="number" />

                    <DynamicResponseField name="flat_amount" type="number" />
                  </Expandable>
                </DynamicResponseField>

                <DynamicResponseField name="tier_behavior" type="'graduated' | 'volume'">
                  How tiers are applied: graduated (split across bands) or volume (flat rate for the matched tier).
                </DynamicResponseField>

                <DynamicResponseField name="billing_units" type="number">
                  The number of units per billing increment (eg. \$9 / 250 units).
                </DynamicResponseField>

                <DynamicResponseField name="billing_method" type="'prepaid' | 'usage_based'">
                  Whether usage is prepaid or billed pay-per-use.
                </DynamicResponseField>

                <DynamicResponseField name="max_purchase" type="number | null">
                  Maximum quantity that can be purchased, or null for unlimited.
                </DynamicResponseField>
              </Expandable>
            </DynamicResponseField>

            <DynamicResponseField name="expires_at" type="number | null">
              Timestamp when this balance expires, or null for no expiration.
            </DynamicResponseField>
          </Expandable>
        </DynamicResponseField>

        <DynamicResponseField name="rollovers" type="object[]">
          Rollover balances carried over from previous periods.

          <Expandable title="properties">
            <DynamicResponseField name="granted" type="number">
              Amount originally rolled over from a previous period, before any of it was consumed.
            </DynamicResponseField>

            <DynamicResponseField name="balance" type="number">
              Amount of balance rolled over from a previous period.
            </DynamicResponseField>

            <DynamicResponseField name="expires_at" type="number">
              Timestamp when the rollover balance expires.
            </DynamicResponseField>
          </Expandable>
        </DynamicResponseField>
      </Expandable>
    </DynamicResponseField>

    <DynamicResponseField name="flags.{key}" type="object">
      <Expandable title="properties">
        <DynamicResponseField name="id" type="string">
          The unique identifier for this flag.
        </DynamicResponseField>

        <DynamicResponseField name="plan_id" type="string | null">
          The plan ID this flag originates from, or null for standalone flags.
        </DynamicResponseField>

        <DynamicResponseField name="expires_at" type="number | null">
          Timestamp when this flag expires, or null for no expiration.
        </DynamicResponseField>

        <DynamicResponseField name="feature_id" type="string">
          The feature ID this flag is for.
        </DynamicResponseField>

        <DynamicResponseField name="feature" type="object">
          The full feature object if expanded.

          <Expandable title="properties">
            <DynamicResponseField name="id" type="string">
              The unique identifier for this feature, used in /check and /track calls.
            </DynamicResponseField>

            <DynamicResponseField name="name" type="string">
              Human-readable name displayed in the dashboard and billing UI.
            </DynamicResponseField>

            <DynamicResponseField name="type" type="'boolean' | 'metered' | 'credit_system' | 'ai_credit_system'">
              Feature type: 'boolean' for on/off access, 'metered' for usage-tracked features, 'credit\_system' for unified credit pools, 'ai\_credit\_system' for model-based token pricing.
            </DynamicResponseField>

            <DynamicResponseField name="consumable" type="boolean">
              For metered features: true if usage resets periodically (API calls, credits), false if allocated persistently (seats, storage).
            </DynamicResponseField>

            <DynamicResponseField name="event_names" type="string[]">
              Event names that trigger this feature's balance. Allows multiple features to respond to a single event.
            </DynamicResponseField>

            <DynamicResponseField name="credit_schema" type="object | object | object[]">
              For classic credit systems: maps metered features to flat or graduated credit costs.

              <Expandable title="properties">
                <DynamicResponseField name="metered_feature_id" type="string | any">
                  ID of the metered feature that draws from this credit system.
                </DynamicResponseField>

                <DynamicResponseField name="billing_units" type="number">
                  Number of metered-feature units priced together. Defaults to one when omitted.
                </DynamicResponseField>

                <DynamicResponseField name="dimensions.{key}" type="object">
                  Named rates chosen by event properties. The most specific match sets the rate; with no match the item's own rate applies.

                  <Expandable title="properties">
                    <DynamicResponseField name="match.{key}" type="string">
                      Event properties this entry applies to. Every key must equal the tracked property, compared as strings.
                    </DynamicResponseField>

                    <DynamicResponseField name="priority" type="integer">
                      Breaks ties between dimensions that match the same number of keys. Higher wins.
                    </DynamicResponseField>

                    <DynamicResponseField name="tier_behavior" type="any" />

                    <DynamicResponseField name="tiers" type="object[]">
                      <Expandable title="properties">
                        <DynamicResponseField name="to" type="number">
                          Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.
                        </DynamicResponseField>

                        <DynamicResponseField name="credit_cost" type="number">
                          Credits consumed per billing-unit group within this tier.
                        </DynamicResponseField>
                      </Expandable>
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>

                <DynamicResponseField name="multipliers.{key}" type="object">
                  Named adjustments chosen by event properties. Every match applies: factors multiply, then adds are summed.

                  <Expandable title="properties">
                    <DynamicResponseField name="match.{key}" type="string">
                      Event properties this entry applies to. Every key must equal the tracked property, compared as strings.
                    </DynamicResponseField>

                    <DynamicResponseField name="factor" type="number">
                      Multiplies the matched rate. All matching multipliers stack.
                    </DynamicResponseField>

                    <DynamicResponseField name="add" type="number">
                      Added to the rate after every factor is applied, in credits per billing-unit group.
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>

                <DynamicResponseField name="tier_behavior" type="any" />

                <DynamicResponseField name="tiers" type="object[]">
                  <Expandable title="properties">
                    <DynamicResponseField name="to" type="number">
                      Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.
                    </DynamicResponseField>

                    <DynamicResponseField name="credit_cost" type="number">
                      Credits consumed per billing-unit group within this tier.
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>

                <DynamicResponseField name="credit_cost" type="number">
                  Credits consumed per billing-unit group.
                </DynamicResponseField>
              </Expandable>
            </DynamicResponseField>

            <DynamicResponseField name="invoice_credit" type="boolean">
              Whether usage of this classic credit system should be itemized as invoice credits.
            </DynamicResponseField>

            <DynamicResponseField name="model_markups.{key}" type="object | null">
              Per-model markup overrides for AI credit systems.

              <Expandable title="properties">
                <DynamicResponseField name="markup" type="number" />

                <DynamicResponseField name="input_cost" type="number" />

                <DynamicResponseField name="output_cost" type="number" />
              </Expandable>
            </DynamicResponseField>

            <DynamicResponseField name="default_markup" type="number">
              Default percentage markup for AI credit systems. Use -100 to make usage free.
            </DynamicResponseField>

            <DynamicResponseField name="provider_markups.{key}" type="object | null">
              Per-provider default markup percentages for AI credit systems.

              <Expandable title="properties">
                <DynamicResponseField name="markup" type="number" />
              </Expandable>
            </DynamicResponseField>

            <DynamicResponseField name="display" type="object">
              Display names for the feature in billing UI and customer-facing components.

              <Expandable title="properties">
                <DynamicResponseField name="singular" type="string | null">
                  Singular form for UI display (e.g., 'API call', 'seat').
                </DynamicResponseField>

                <DynamicResponseField name="plural" type="string | null">
                  Plural form for UI display (e.g., 'API calls', 'seats').
                </DynamicResponseField>
              </Expandable>
            </DynamicResponseField>

            <DynamicResponseField name="archived" type="boolean">
              Whether the feature is archived and hidden from the dashboard.
            </DynamicResponseField>

            <DynamicResponseField name="processors" type="object">
              Processor mappings for this feature. Present when a Stripe product or meter is set.

              <Expandable title="properties">
                <DynamicResponseField name="stripe" type="object">
                  <Expandable title="properties">
                    <DynamicResponseField name="product_id" type="string">
                      Stripe product ID this feature's usage prices bill under.
                    </DynamicResponseField>

                    <DynamicResponseField name="meter_id" type="string">
                      Stripe meter ID used to create this feature's metered price.
                    </DynamicResponseField>
                  </Expandable>
                </DynamicResponseField>
              </Expandable>
            </DynamicResponseField>
          </Expandable>
        </DynamicResponseField>
      </Expandable>
    </DynamicResponseField>

    <DynamicResponseField name="billing_controls" type="object">
      Billing controls for the entity.

      <Expandable title="properties">
        <DynamicResponseField name="spend_limits" type="object[]">
          List of spend limits per feature. Each entry caps overage (overage\_limit) and/or per-interval usage (usage\_limit).

          <Expandable title="properties">
            <DynamicResponseField name="feature_id" type="string">
              Optional feature ID this spend limit applies to.
            </DynamicResponseField>

            <DynamicResponseField name="enabled" type="boolean">
              Whether the overage spend limit is enabled.
            </DynamicResponseField>

            <DynamicResponseField name="limit_type" type="'absolute' | 'usage_percentage'">
              How overage\_limit is interpreted: an absolute overage cap (default) or a percentage of the main-plan allowance.
            </DynamicResponseField>

            <DynamicResponseField name="overage_limit" type="number">
              Overage cap for the feature: absolute units, or a percent (e.g. 120) when limit\_type is usage\_percentage.
            </DynamicResponseField>

            <DynamicResponseField name="skip_overage_billing" type="boolean">
              When true, overage for this feature is not posted to Stripe. Usage tracking and balance resets still behave normally.
            </DynamicResponseField>

            <DynamicResponseField name="source" type="'customer' | 'plan'">
              Response-only: whether the entry is a customer-level override or inherited from an attached plan's defaults.
            </DynamicResponseField>
          </Expandable>
        </DynamicResponseField>

        <DynamicResponseField name="usage_limits" type="object[]">
          List of hard usage caps per feature for this entity. An entity entry overrides the customer's for that feature.

          <Expandable title="properties">
            <DynamicResponseField name="feature_id" type="string">
              The feature this usage limit applies to.
            </DynamicResponseField>

            <DynamicResponseField name="enabled" type="boolean">
              Whether this usage limit is enabled.
            </DynamicResponseField>

            <DynamicResponseField name="limit" type="number">
              Maximum units allowed per interval.
            </DynamicResponseField>

            <DynamicResponseField name="interval" type="'day' | 'week' | 'month' | 'year'">
              Interval for the cap, aligned to the customer's billing cycle.
            </DynamicResponseField>

            <DynamicResponseField name="anchor" type="'billing_cycle' | 'utc'">
              Window alignment. 'billing\_cycle' phases the interval to the customer's renewal time; 'utc' aligns to the UTC calendar.
            </DynamicResponseField>

            <DynamicResponseField name="filter" type="object">
              When set, only usage from events whose properties match counts toward this cap. Omit to count all usage of the feature.

              <Expandable title="properties">
                <DynamicResponseField name="properties.{key}" type="string" />
              </Expandable>
            </DynamicResponseField>

            <DynamicResponseField name="usage" type="number">
              Usage consumed in the active interval, stored in the usage-window counter.
            </DynamicResponseField>

            <DynamicResponseField name="source" type="'customer' | 'plan'">
              Response-only: whether the entry is a customer-level override or inherited from an attached plan's defaults.
            </DynamicResponseField>
          </Expandable>
        </DynamicResponseField>

        <DynamicResponseField name="usage_alerts" type="object[]">
          List of usage alert configurations per feature.

          <Expandable title="properties">
            <DynamicResponseField name="feature_id" type="string">
              The feature ID this alert applies to.
            </DynamicResponseField>

            <DynamicResponseField name="enabled" type="boolean">
              Whether this usage alert is enabled.
            </DynamicResponseField>

            <DynamicResponseField name="threshold" type="number">
              The threshold value that triggers the alert. For usage or remaining, this is an absolute count. For usage\_percentage or remaining\_percentage, this is a percentage (0-100).
            </DynamicResponseField>

            <DynamicResponseField name="threshold_type" type="'usage' | 'usage_percentage' | 'remaining' | 'remaining_percentage'">
              Whether the threshold is an absolute count or a percentage of the usage allowance or remaining balance.
            </DynamicResponseField>

            <DynamicResponseField name="basis" type="'balance' | 'included' | 'recurring' | 'usage_limit'">
              What 100% means. balance: every grant on the feature. included: the plan allowance only. recurring: grants that reset. usage\_limit: the cap of the usage limit with the same feature and filter.
            </DynamicResponseField>

            <DynamicResponseField name="filter" type="object">
              Only valid with basis usage\_limit. Points the alert at the usage limit carrying the same filter.

              <Expandable title="properties">
                <DynamicResponseField name="properties.{key}" type="string" />
              </Expandable>
            </DynamicResponseField>

            <DynamicResponseField name="name" type="string">
              Optional user-defined label to distinguish multiple alerts on the same feature.
            </DynamicResponseField>

            <DynamicResponseField name="source" type="'customer' | 'plan'">
              Response-only: whether the entry is a customer-level override or inherited from an attached plan's defaults.
            </DynamicResponseField>
          </Expandable>
        </DynamicResponseField>

        <DynamicResponseField name="overage_allowed" type="object[]">
          List of overage allowed controls per feature. When enabled, usage can exceed balance.

          <Expandable title="properties">
            <DynamicResponseField name="feature_id" type="string">
              The feature ID this overage allowed control applies to.
            </DynamicResponseField>

            <DynamicResponseField name="enabled" type="boolean">
              Whether overage is allowed for this feature.
            </DynamicResponseField>

            <DynamicResponseField name="source" type="'customer' | 'plan'">
              Response-only: whether the entry is a customer-level override or inherited from an attached plan's defaults.
            </DynamicResponseField>
          </Expandable>
        </DynamicResponseField>
      </Expandable>
    </DynamicResponseField>

    <DynamicResponseField name="invoices" type="object[]">
      Invoices for this entity (only included when expand=invoices)

      <Expandable title="properties">
        <DynamicResponseField name="plan_ids" type="string[]">
          Array of plan IDs included in this invoice
        </DynamicResponseField>

        <DynamicResponseField name="stripe_id" type="string">
          The Stripe invoice ID
        </DynamicResponseField>

        <DynamicResponseField name="processor_type" type="'stripe' | 'revenuecat'">
          The billing processor that owns this invoice.
        </DynamicResponseField>

        <DynamicResponseField name="status" type="string">
          The status of the invoice
        </DynamicResponseField>

        <DynamicResponseField name="total" type="number">
          The total amount of the invoice
        </DynamicResponseField>

        <DynamicResponseField name="currency" type="string">
          The currency code for the invoice
        </DynamicResponseField>

        <DynamicResponseField name="created_at" type="number">
          Timestamp when the invoice was created
        </DynamicResponseField>

        <DynamicResponseField name="hosted_invoice_url" type="string | null">
          URL to the Stripe-hosted invoice page
        </DynamicResponseField>
      </Expandable>
    </DynamicResponseField>
  </Expandable>
</DynamicResponseField>

<DynamicResponseField name="next_cursor" type="string | null">
  Opaque cursor for the next page. Null when there are no more results.
</DynamicResponseField>

<ResponseExample>
  ```json 200 theme={null}
  {
    "list": [
      {
        "id": "seat_42",
        "name": "Seat 42",
        "customer_id": "cus_123",
        "feature_id": "seats",
        "created_at": 1771409161016,
        "env": "sandbox",
        "subscriptions": [
          {
            "plan_id": "pro_plan",
            "auto_enable": true,
            "add_on": false,
            "status": "active",
            "past_due": false,
            "canceled_at": null,
            "expires_at": null,
            "trial_ends_at": null,
            "started_at": 1771431921437,
            "current_period_start": 1771431921437,
            "current_period_end": 1771999921437,
            "quantity": 1
          }
        ],
        "purchases": [],
        "balances": {
          "messages": {
            "feature_id": "messages",
            "granted": 100,
            "remaining": 72,
            "usage": 28,
            "unlimited": false,
            "overage_allowed": false,
            "max_purchase": null,
            "next_reset_at": 1773851121437,
            "breakdown": [
              {
                "id": "cus_ent_39qmLooixXLAqMywgXywjAz96rV",
                "plan_id": "pro_plan",
                "included_grant": 100,
                "prepaid_grant": 0,
                "remaining": 72,
                "usage": 28,
                "unlimited": false,
                "reset": {
                  "interval": "month",
                  "resets_at": 1773851121437
                },
                "price": null,
                "expires_at": null
              }
            ]
          }
        },
        "invoices": []
      }
    ],
    "next_cursor": null
  }
  ```
</ResponseExample>


## OpenAPI

````yaml openapi POST /v1/entities.list
openapi: 3.1.0
info:
  title: Autumn API
  version: 2.4.0
servers:
  - url: https://api.useautumn.com
    description: Production server
security:
  - secretKey: []
paths:
  /v1/entities.list:
    post:
      tags:
        - entities
      description: >-
        Lists entities across the organization with pagination and optional
        filters.


        Use this to page through entities globally, including filtering by plans
        inherited from parent customers or attached directly to entities.
      operationId: listEntities
      parameters:
        - name: x-api-version
          in: header
          required: true
          schema:
            type: string
            default: 2.4.0
          x-speakeasy-globals-hidden: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                start_cursor:
                  type: string
                  default: ''
                  description: >-
                    Opaque pagination cursor. Empty string (default) requests
                    the first page; use next_cursor from a prior response for
                    subsequent pages.
                limit:
                  type: integer
                  minimum: 1
                  maximum: 5000
                  default: 50
                  description: Number of items to return. Default 50, hard ceiling 5000.
                plans:
                  type: array
                  items:
                    type: object
                    properties:
                      id:
                        type: string
                      versions:
                        type: array
                        items:
                          type: number
                    required:
                      - id
                  description: >-
                    Filter by plan ID and version. Returns entities with active
                    subscriptions to this plan, including plans inherited from
                    the parent customer.
                subscription_status:
                  enum:
                    - active
                    - scheduled
                  type: string
                  description: >-
                    Filter customer products used for entity hydration and plan
                    matching. Defaults to active and scheduled.
                search:
                  type: string
                  description: Search entities by id or name.
                processors:
                  type: array
                  items:
                    enum:
                      - stripe
                      - revenuecat
                      - vercel
                    type: string
                  description: >-
                    Filter by parent customer processor type (stripe,
                    revenuecat, vercel).
                customer_id:
                  type: string
                  minLength: 1
                  description: >-
                    Restrict the response to entities owned by this customer id.
                    Use to bulk-fetch all entities for one customer in a single
                    paginated call instead of iterating entities.get.
              title: ListEntitiesParams
              examples:
                - start_cursor: ''
                  limit: 10
                - plans:
                    - id: pro_plan
            example:
              start_cursor: ''
              limit: 10
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  list:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          anyOf:
                            - type: string
                            - type: 'null'
                          description: The unique identifier of the entity
                        name:
                          anyOf:
                            - type: string
                            - type: 'null'
                          description: The name of the entity
                        customer_id:
                          anyOf:
                            - type: string
                            - type: 'null'
                          description: The customer ID this entity belongs to
                        feature_id:
                          anyOf:
                            - type: string
                            - type: 'null'
                          description: The feature ID this entity belongs to
                        created_at:
                          type: number
                          description: Unix timestamp when the entity was created
                        env:
                          enum:
                            - sandbox
                            - live
                          type: string
                          description: The environment (sandbox/live)
                        subscriptions:
                          type: array
                          items:
                            type: object
                            properties:
                              id:
                                type: string
                                description: >-
                                  The unique identifier of this subscription. If
                                  a subscription_id was provided at attach time,
                                  it is used; otherwise, falls back to the
                                  internal ID.
                              plan:
                                $ref: '#/components/schemas/Plan'
                                description: The full plan object if expanded.
                              plan_id:
                                type: string
                                description: The unique identifier of the subscribed plan.
                              auto_enable:
                                type: boolean
                                description: >-
                                  Whether the plan was automatically enabled for
                                  the customer.
                              add_on:
                                type: boolean
                                description: >-
                                  Whether this is an add-on plan rather than a
                                  base subscription.
                              status:
                                enum:
                                  - active
                                  - scheduled
                                type: string
                                description: Current status of the subscription.
                              past_due:
                                type: boolean
                                description: Whether the subscription has overdue payments.
                              canceled_at:
                                anyOf:
                                  - type: number
                                  - type: 'null'
                                description: >-
                                  Timestamp when the subscription was canceled,
                                  or null if not canceled.
                              expires_at:
                                anyOf:
                                  - type: number
                                  - type: 'null'
                                description: >-
                                  Timestamp when the subscription will expire,
                                  or null if no expiry set.
                              trial_ends_at:
                                anyOf:
                                  - type: number
                                  - type: 'null'
                                description: >-
                                  Timestamp when the trial period ends, or null
                                  if not on trial.
                              started_at:
                                type: number
                                description: Timestamp when the subscription started.
                              current_period_start:
                                anyOf:
                                  - type: number
                                  - type: 'null'
                                description: Start timestamp of the current billing period.
                              current_period_end:
                                anyOf:
                                  - type: number
                                  - type: 'null'
                                description: End timestamp of the current billing period.
                              quantity:
                                type: number
                                description: >-
                                  Number of units of this subscription (for
                                  per-seat plans).
                              scope:
                                enum:
                                  - customer
                                  - entity
                                type: string
                                description: >-
                                  Whether this subscription is attached at the
                                  customer level or entity level.
                            required:
                              - id
                              - plan_id
                              - auto_enable
                              - add_on
                              - status
                              - past_due
                              - canceled_at
                              - expires_at
                              - trial_ends_at
                              - started_at
                              - current_period_start
                              - current_period_end
                              - quantity
                        purchases:
                          type: array
                          items:
                            type: object
                            properties:
                              plan:
                                $ref: '#/components/schemas/Plan'
                                description: The full plan object if expanded.
                              plan_id:
                                type: string
                                description: The unique identifier of the purchased plan.
                              expires_at:
                                anyOf:
                                  - type: number
                                  - type: 'null'
                                description: >-
                                  Timestamp when the purchase expires, or null
                                  for lifetime access.
                              started_at:
                                type: number
                                description: Timestamp when the purchase was made.
                              quantity:
                                type: number
                                description: Number of units purchased.
                              scope:
                                enum:
                                  - customer
                                  - entity
                                type: string
                                description: >-
                                  Whether this purchase is attached at the
                                  customer level or entity level.
                            required:
                              - plan_id
                              - expires_at
                              - started_at
                              - quantity
                        balances:
                          type: object
                          propertyNames:
                            type: string
                          additionalProperties:
                            $ref: '#/components/schemas/Balance'
                        flags:
                          type: object
                          propertyNames:
                            type: string
                          additionalProperties:
                            type: object
                            properties:
                              id:
                                type: string
                                description: The unique identifier for this flag.
                              plan_id:
                                anyOf:
                                  - type: string
                                  - type: 'null'
                                description: >-
                                  The plan ID this flag originates from, or null
                                  for standalone flags.
                              expires_at:
                                anyOf:
                                  - type: number
                                  - type: 'null'
                                description: >-
                                  Timestamp when this flag expires, or null for
                                  no expiration.
                              feature_id:
                                type: string
                                description: The feature ID this flag is for.
                              feature:
                                type: object
                                properties:
                                  id:
                                    type: string
                                    description: >-
                                      The unique identifier for this feature,
                                      used in /check and /track calls.
                                  name:
                                    type: string
                                    description: >-
                                      Human-readable name displayed in the
                                      dashboard and billing UI.
                                  type:
                                    enum:
                                      - boolean
                                      - metered
                                      - credit_system
                                      - ai_credit_system
                                    type: string
                                    description: >-
                                      Feature type: 'boolean' for on/off access,
                                      'metered' for usage-tracked features,
                                      'credit_system' for unified credit pools,
                                      'ai_credit_system' for model-based token
                                      pricing.
                                  consumable:
                                    type: boolean
                                    description: >-
                                      For metered features: true if usage resets
                                      periodically (API calls, credits), false
                                      if allocated persistently (seats,
                                      storage).
                                  event_names:
                                    type: array
                                    items:
                                      type: string
                                    description: >-
                                      Event names that trigger this feature's
                                      balance. Allows multiple features to
                                      respond to a single event.
                                  credit_schema:
                                    type: array
                                    items:
                                      anyOf:
                                        - type: object
                                          properties:
                                            metered_feature_id:
                                              type: string
                                              minLength: 1
                                              description: >-
                                                ID of the metered feature that draws
                                                from this credit system.
                                            billing_units:
                                              type: number
                                              exclusiveMinimum: 0
                                              description: >-
                                                Number of metered-feature units priced
                                                together. Defaults to one when omitted.
                                            dimensions:
                                              type: object
                                              propertyNames:
                                                type: string
                                                minLength: 1
                                                maxLength: 64
                                              additionalProperties:
                                                anyOf:
                                                  - type: object
                                                    properties:
                                                      match:
                                                        type: object
                                                        propertyNames:
                                                          type: string
                                                        additionalProperties:
                                                          type: string
                                                        description: >-
                                                          Event properties this entry applies to.
                                                          Every key must equal the tracked
                                                          property, compared as strings.
                                                      priority:
                                                        type: integer
                                                        minimum: -9007199254740991
                                                        maximum: 9007199254740991
                                                        description: >-
                                                          Breaks ties between dimensions that
                                                          match the same number of keys. Higher
                                                          wins.
                                                      tier_behavior:
                                                        const: graduated
                                                      tiers:
                                                        type: array
                                                        minItems: 1
                                                        items:
                                                          type: object
                                                          properties:
                                                            to:
                                                              anyOf:
                                                                - type: number
                                                                  exclusiveMinimum: 0
                                                                - enum:
                                                                    - inf
                                                                  type: string
                                                              description: >-
                                                                Inclusive upper usage boundary for this
                                                                graduated tier. The final tier must be
                                                                'inf'.
                                                            credit_cost:
                                                              type: number
                                                              minimum: 0
                                                              description: >-
                                                                Credits consumed per billing-unit group
                                                                within this tier.
                                                          required:
                                                            - to
                                                            - credit_cost
                                                    required:
                                                      - match
                                                      - tier_behavior
                                                      - tiers
                                                    additionalProperties: false
                                                  - type: object
                                                    properties:
                                                      match:
                                                        type: object
                                                        propertyNames:
                                                          type: string
                                                        additionalProperties:
                                                          type: string
                                                        description: >-
                                                          Event properties this entry applies to.
                                                          Every key must equal the tracked
                                                          property, compared as strings.
                                                      priority:
                                                        type: integer
                                                        minimum: -9007199254740991
                                                        maximum: 9007199254740991
                                                        description: >-
                                                          Breaks ties between dimensions that
                                                          match the same number of keys. Higher
                                                          wins.
                                                      credit_cost:
                                                        type: number
                                                        minimum: 0
                                                        description: >-
                                                          Credits consumed per billing-unit group
                                                          when this dimension matches.
                                                    required:
                                                      - match
                                                      - credit_cost
                                                    additionalProperties: false
                                              description: >-
                                                Named rates chosen by event properties.
                                                The most specific match sets the rate;
                                                with no match the item's own rate
                                                applies.
                                            multipliers:
                                              type: object
                                              propertyNames:
                                                type: string
                                                minLength: 1
                                                maxLength: 64
                                              additionalProperties:
                                                type: object
                                                properties:
                                                  match:
                                                    type: object
                                                    propertyNames:
                                                      type: string
                                                    additionalProperties:
                                                      type: string
                                                    description: >-
                                                      Event properties this entry applies to.
                                                      Every key must equal the tracked
                                                      property, compared as strings.
                                                  factor:
                                                    type: number
                                                    exclusiveMinimum: 0
                                                    description: >-
                                                      Multiplies the matched rate. All
                                                      matching multipliers stack.
                                                  add:
                                                    type: number
                                                    description: >-
                                                      Added to the rate after every factor is
                                                      applied, in credits per billing-unit
                                                      group.
                                                required:
                                                  - match
                                                additionalProperties: false
                                              description: >-
                                                Named adjustments chosen by event
                                                properties. Every match applies: factors
                                                multiply, then adds are summed.
                                            tier_behavior:
                                              const: graduated
                                            tiers:
                                              type: array
                                              minItems: 1
                                              items:
                                                type: object
                                                properties:
                                                  to:
                                                    anyOf:
                                                      - type: number
                                                        exclusiveMinimum: 0
                                                      - enum:
                                                          - inf
                                                        type: string
                                                    description: >-
                                                      Inclusive upper usage boundary for this
                                                      graduated tier. The final tier must be
                                                      'inf'.
                                                  credit_cost:
                                                    type: number
                                                    minimum: 0
                                                    description: >-
                                                      Credits consumed per billing-unit group
                                                      within this tier.
                                                required:
                                                  - to
                                                  - credit_cost
                                          required:
                                            - metered_feature_id
                                            - tier_behavior
                                            - tiers
                                          additionalProperties: false
                                        - type: object
                                          properties:
                                            metered_feature_id:
                                              type: string
                                              minLength: 1
                                              description: >-
                                                ID of the metered feature that draws
                                                from this credit system.
                                            billing_units:
                                              type: number
                                              exclusiveMinimum: 0
                                              description: >-
                                                Number of metered-feature units priced
                                                together. Defaults to one when omitted.
                                            dimensions:
                                              type: object
                                              propertyNames:
                                                type: string
                                                minLength: 1
                                                maxLength: 64
                                              additionalProperties:
                                                anyOf:
                                                  - type: object
                                                    properties:
                                                      match:
                                                        type: object
                                                        propertyNames:
                                                          type: string
                                                        additionalProperties:
                                                          type: string
                                                        description: >-
                                                          Event properties this entry applies to.
                                                          Every key must equal the tracked
                                                          property, compared as strings.
                                                      priority:
                                                        type: integer
                                                        minimum: -9007199254740991
                                                        maximum: 9007199254740991
                                                        description: >-
                                                          Breaks ties between dimensions that
                                                          match the same number of keys. Higher
                                                          wins.
                                                      tier_behavior:
                                                        const: graduated
                                                      tiers:
                                                        type: array
                                                        minItems: 1
                                                        items:
                                                          type: object
                                                          properties:
                                                            to:
                                                              anyOf:
                                                                - type: number
                                                                  exclusiveMinimum: 0
                                                                - enum:
                                                                    - inf
                                                                  type: string
                                                              description: >-
                                                                Inclusive upper usage boundary for this
                                                                graduated tier. The final tier must be
                                                                'inf'.
                                                            credit_cost:
                                                              type: number
                                                              minimum: 0
                                                              description: >-
                                                                Credits consumed per billing-unit group
                                                                within this tier.
                                                          required:
                                                            - to
                                                            - credit_cost
                                                    required:
                                                      - match
                                                      - tier_behavior
                                                      - tiers
                                                    additionalProperties: false
                                                  - type: object
                                                    properties:
                                                      match:
                                                        type: object
                                                        propertyNames:
                                                          type: string
                                                        additionalProperties:
                                                          type: string
                                                        description: >-
                                                          Event properties this entry applies to.
                                                          Every key must equal the tracked
                                                          property, compared as strings.
                                                      priority:
                                                        type: integer
                                                        minimum: -9007199254740991
                                                        maximum: 9007199254740991
                                                        description: >-
                                                          Breaks ties between dimensions that
                                                          match the same number of keys. Higher
                                                          wins.
                                                      credit_cost:
                                                        type: number
                                                        minimum: 0
                                                        description: >-
                                                          Credits consumed per billing-unit group
                                                          when this dimension matches.
                                                    required:
                                                      - match
                                                      - credit_cost
                                                    additionalProperties: false
                                              description: >-
                                                Named rates chosen by event properties.
                                                The most specific match sets the rate;
                                                with no match the item's own rate
                                                applies.
                                            multipliers:
                                              type: object
                                              propertyNames:
                                                type: string
                                                minLength: 1
                                                maxLength: 64
                                              additionalProperties:
                                                type: object
                                                properties:
                                                  match:
                                                    type: object
                                                    propertyNames:
                                                      type: string
                                                    additionalProperties:
                                                      type: string
                                                    description: >-
                                                      Event properties this entry applies to.
                                                      Every key must equal the tracked
                                                      property, compared as strings.
                                                  factor:
                                                    type: number
                                                    exclusiveMinimum: 0
                                                    description: >-
                                                      Multiplies the matched rate. All
                                                      matching multipliers stack.
                                                  add:
                                                    type: number
                                                    description: >-
                                                      Added to the rate after every factor is
                                                      applied, in credits per billing-unit
                                                      group.
                                                required:
                                                  - match
                                                additionalProperties: false
                                              description: >-
                                                Named adjustments chosen by event
                                                properties. Every match applies: factors
                                                multiply, then adds are summed.
                                            credit_cost:
                                              type: number
                                              minimum: 0
                                              description: Credits consumed per billing-unit group.
                                          required:
                                            - metered_feature_id
                                            - credit_cost
                                          additionalProperties: false
                                        - type: object
                                          properties:
                                            metered_feature_id:
                                              const: ''
                                            billing_units:
                                              type: number
                                              exclusiveMinimum: 0
                                              description: >-
                                                Number of metered-feature units priced
                                                together. Defaults to one when omitted.
                                            dimensions:
                                              type: object
                                              propertyNames:
                                                type: string
                                                minLength: 1
                                                maxLength: 64
                                              additionalProperties:
                                                anyOf:
                                                  - type: object
                                                    properties:
                                                      match:
                                                        type: object
                                                        propertyNames:
                                                          type: string
                                                        additionalProperties:
                                                          type: string
                                                        description: >-
                                                          Event properties this entry applies to.
                                                          Every key must equal the tracked
                                                          property, compared as strings.
                                                      priority:
                                                        type: integer
                                                        minimum: -9007199254740991
                                                        maximum: 9007199254740991
                                                        description: >-
                                                          Breaks ties between dimensions that
                                                          match the same number of keys. Higher
                                                          wins.
                                                      tier_behavior:
                                                        const: graduated
                                                      tiers:
                                                        type: array
                                                        minItems: 1
                                                        items:
                                                          type: object
                                                          properties:
                                                            to:
                                                              anyOf:
                                                                - type: number
                                                                  exclusiveMinimum: 0
                                                                - enum:
                                                                    - inf
                                                                  type: string
                                                              description: >-
                                                                Inclusive upper usage boundary for this
                                                                graduated tier. The final tier must be
                                                                'inf'.
                                                            credit_cost:
                                                              type: number
                                                              minimum: 0
                                                              description: >-
                                                                Credits consumed per billing-unit group
                                                                within this tier.
                                                          required:
                                                            - to
                                                            - credit_cost
                                                    required:
                                                      - match
                                                      - tier_behavior
                                                      - tiers
                                                    additionalProperties: false
                                                  - type: object
                                                    properties:
                                                      match:
                                                        type: object
                                                        propertyNames:
                                                          type: string
                                                        additionalProperties:
                                                          type: string
                                                        description: >-
                                                          Event properties this entry applies to.
                                                          Every key must equal the tracked
                                                          property, compared as strings.
                                                      priority:
                                                        type: integer
                                                        minimum: -9007199254740991
                                                        maximum: 9007199254740991
                                                        description: >-
                                                          Breaks ties between dimensions that
                                                          match the same number of keys. Higher
                                                          wins.
                                                      credit_cost:
                                                        type: number
                                                        minimum: 0
                                                        description: >-
                                                          Credits consumed per billing-unit group
                                                          when this dimension matches.
                                                    required:
                                                      - match
                                                      - credit_cost
                                                    additionalProperties: false
                                              description: >-
                                                Named rates chosen by event properties.
                                                The most specific match sets the rate;
                                                with no match the item's own rate
                                                applies.
                                            multipliers:
                                              type: object
                                              propertyNames:
                                                type: string
                                                minLength: 1
                                                maxLength: 64
                                              additionalProperties:
                                                type: object
                                                properties:
                                                  match:
                                                    type: object
                                                    propertyNames:
                                                      type: string
                                                    additionalProperties:
                                                      type: string
                                                    description: >-
                                                      Event properties this entry applies to.
                                                      Every key must equal the tracked
                                                      property, compared as strings.
                                                  factor:
                                                    type: number
                                                    exclusiveMinimum: 0
                                                    description: >-
                                                      Multiplies the matched rate. All
                                                      matching multipliers stack.
                                                  add:
                                                    type: number
                                                    description: >-
                                                      Added to the rate after every factor is
                                                      applied, in credits per billing-unit
                                                      group.
                                                required:
                                                  - match
                                                additionalProperties: false
                                              description: >-
                                                Named adjustments chosen by event
                                                properties. Every match applies: factors
                                                multiply, then adds are summed.
                                            credit_cost:
                                              type: number
                                              minimum: 0
                                              description: Credits consumed per billing-unit group.
                                          required:
                                            - metered_feature_id
                                            - credit_cost
                                          additionalProperties: false
                                    description: >-
                                      For classic credit systems: maps metered
                                      features to flat or graduated credit
                                      costs.
                                  invoice_credit:
                                    type: boolean
                                    description: >-
                                      Whether usage of this classic credit
                                      system should be itemized as invoice
                                      credits.
                                  model_markups:
                                    anyOf:
                                      - type: object
                                        propertyNames:
                                          type: string
                                          pattern: .+\/.+
                                        additionalProperties:
                                          type: object
                                          properties:
                                            markup:
                                              type: number
                                              minimum: -100
                                            input_cost:
                                              type: number
                                              minimum: 0
                                            output_cost:
                                              type: number
                                              minimum: 0
                                      - type: 'null'
                                    description: >-
                                      Per-model markup overrides for AI credit
                                      systems.
                                  default_markup:
                                    type: number
                                    minimum: -100
                                    description: >-
                                      Default percentage markup for AI credit
                                      systems. Use -100 to make usage free.
                                  provider_markups:
                                    anyOf:
                                      - type: object
                                        propertyNames:
                                          type: string
                                        additionalProperties:
                                          type: object
                                          properties:
                                            markup:
                                              type: number
                                              minimum: -100
                                          required:
                                            - markup
                                      - type: 'null'
                                    description: >-
                                      Per-provider default markup percentages
                                      for AI credit systems.
                                  display:
                                    type: object
                                    properties:
                                      singular:
                                        anyOf:
                                          - type: string
                                          - type: 'null'
                                        description: >-
                                          Singular form for UI display (e.g., 'API
                                          call', 'seat').
                                      plural:
                                        anyOf:
                                          - type: string
                                          - type: 'null'
                                        description: >-
                                          Plural form for UI display (e.g., 'API
                                          calls', 'seats').
                                    description: >-
                                      Display names for the feature in billing
                                      UI and customer-facing components.
                                  archived:
                                    type: boolean
                                    description: >-
                                      Whether the feature is archived and hidden
                                      from the dashboard.
                                  processors:
                                    type: object
                                    properties:
                                      stripe:
                                        type: object
                                        properties:
                                          product_id:
                                            type: string
                                            description: >-
                                              Stripe product ID this feature's usage
                                              prices bill under.
                                          meter_id:
                                            type: string
                                            description: >-
                                              Stripe meter ID used to create this
                                              feature's metered price.
                                    description: >-
                                      Processor mappings for this feature.
                                      Present when a Stripe product or meter is
                                      set.
                                required:
                                  - id
                                  - name
                                  - type
                                  - consumable
                                  - archived
                                description: The full feature object if expanded.
                            required:
                              - id
                              - plan_id
                              - expires_at
                              - feature_id
                            examples:
                              - id: cus_ent_39qmLooixXLAqMywgXywjAz96rV
                                plan_id: pro_plan
                                expires_at: null
                                feature_id: dashboard
                        billing_controls:
                          type: object
                          properties:
                            spend_limits:
                              type: array
                              items:
                                type: object
                                properties:
                                  feature_id:
                                    type: string
                                    description: >-
                                      Optional feature ID this spend limit
                                      applies to.
                                  enabled:
                                    type: boolean
                                    default: false
                                    description: >-
                                      Whether the overage spend limit is
                                      enabled.
                                  limit_type:
                                    enum:
                                      - absolute
                                      - usage_percentage
                                    type: string
                                    description: >-
                                      How overage_limit is interpreted: an
                                      absolute overage cap (default) or a
                                      percentage of the main-plan allowance.
                                  overage_limit:
                                    type: number
                                    minimum: 0
                                    description: >-
                                      Overage cap for the feature: absolute
                                      units, or a percent (e.g. 120) when
                                      limit_type is usage_percentage.
                                  skip_overage_billing:
                                    type: boolean
                                    description: >-
                                      When true, overage for this feature is not
                                      posted to Stripe. Usage tracking and
                                      balance resets still behave normally.
                                  source:
                                    enum:
                                      - customer
                                      - plan
                                    type: string
                                    description: >-
                                      Response-only: whether the entry is a
                                      customer-level override or inherited from
                                      an attached plan's defaults.
                              description: >-
                                List of spend limits per feature. Each entry
                                caps overage (overage_limit) and/or per-interval
                                usage (usage_limit).
                            usage_limits:
                              type: array
                              items:
                                type: object
                                properties:
                                  feature_id:
                                    type: string
                                    description: The feature this usage limit applies to.
                                  enabled:
                                    type: boolean
                                    default: true
                                    description: Whether this usage limit is enabled.
                                  limit:
                                    type: number
                                    minimum: 0
                                    description: Maximum units allowed per interval.
                                  interval:
                                    enum:
                                      - day
                                      - week
                                      - month
                                      - year
                                    type: string
                                    description: >-
                                      Interval for the cap, aligned to the
                                      customer's billing cycle.
                                  anchor:
                                    enum:
                                      - billing_cycle
                                      - utc
                                    type: string
                                    description: >-
                                      Window alignment. 'billing_cycle' phases
                                      the interval to the customer's renewal
                                      time; 'utc' aligns to the UTC calendar.
                                  filter:
                                    type: object
                                    properties:
                                      properties:
                                        type: object
                                        propertyNames:
                                          type: string
                                          minLength: 1
                                          maxLength: 64
                                        additionalProperties:
                                          type: string
                                    required:
                                      - properties
                                    description: >-
                                      When set, only usage from events whose
                                      properties match counts toward this cap.
                                      Omit to count all usage of the feature.
                                  usage:
                                    type: number
                                    minimum: 0
                                    description: >-
                                      Usage consumed in the active interval,
                                      stored in the usage-window counter.
                                  source:
                                    enum:
                                      - customer
                                      - plan
                                    type: string
                                    description: >-
                                      Response-only: whether the entry is a
                                      customer-level override or inherited from
                                      an attached plan's defaults.
                                required:
                                  - feature_id
                                  - limit
                                  - interval
                              description: >-
                                List of hard usage caps per feature for this
                                entity. An entity entry overrides the customer's
                                for that feature.
                            usage_alerts:
                              type: array
                              items:
                                type: object
                                properties:
                                  feature_id:
                                    type: string
                                    description: The feature ID this alert applies to.
                                  enabled:
                                    type: boolean
                                    default: true
                                    description: Whether this usage alert is enabled.
                                  threshold:
                                    type: number
                                    minimum: 0
                                    description: >-
                                      The threshold value that triggers the
                                      alert. For usage or remaining, this is an
                                      absolute count. For usage_percentage or
                                      remaining_percentage, this is a percentage
                                      (0-100).
                                  threshold_type:
                                    enum:
                                      - usage
                                      - usage_percentage
                                      - remaining
                                      - remaining_percentage
                                    type: string
                                    description: >-
                                      Whether the threshold is an absolute count
                                      or a percentage of the usage allowance or
                                      remaining balance.
                                  basis:
                                    enum:
                                      - balance
                                      - included
                                      - recurring
                                      - usage_limit
                                    type: string
                                    default: balance
                                    description: >-
                                      What 100% means. balance: every grant on
                                      the feature. included: the plan allowance
                                      only. recurring: grants that reset.
                                      usage_limit: the cap of the usage limit
                                      with the same feature and filter.
                                  filter:
                                    type: object
                                    properties:
                                      properties:
                                        type: object
                                        propertyNames:
                                          type: string
                                          minLength: 1
                                          maxLength: 64
                                        additionalProperties:
                                          type: string
                                    required:
                                      - properties
                                    description: >-
                                      Only valid with basis usage_limit. Points
                                      the alert at the usage limit carrying the
                                      same filter.
                                  name:
                                    type: string
                                    description: >-
                                      Optional user-defined label to distinguish
                                      multiple alerts on the same feature.
                                  source:
                                    enum:
                                      - customer
                                      - plan
                                    type: string
                                    description: >-
                                      Response-only: whether the entry is a
                                      customer-level override or inherited from
                                      an attached plan's defaults.
                                required:
                                  - threshold
                                  - threshold_type
                              description: List of usage alert configurations per feature.
                            overage_allowed:
                              type: array
                              items:
                                type: object
                                properties:
                                  feature_id:
                                    type: string
                                    description: >-
                                      The feature ID this overage allowed
                                      control applies to.
                                  enabled:
                                    type: boolean
                                    default: false
                                    description: >-
                                      Whether overage is allowed for this
                                      feature.
                                  source:
                                    enum:
                                      - customer
                                      - plan
                                    type: string
                                    description: >-
                                      Response-only: whether the entry is a
                                      customer-level override or inherited from
                                      an attached plan's defaults.
                                required:
                                  - feature_id
                              description: >-
                                List of overage allowed controls per feature.
                                When enabled, usage can exceed balance.
                          description: Billing controls for the entity.
                        invoices:
                          type: array
                          items:
                            type: object
                            properties:
                              plan_ids:
                                type: array
                                items:
                                  type: string
                                description: Array of plan IDs included in this invoice
                              stripe_id:
                                type: string
                                description: The Stripe invoice ID
                              processor_type:
                                enum:
                                  - stripe
                                  - revenuecat
                                type: string
                                default: stripe
                                description: The billing processor that owns this invoice.
                              status:
                                type: string
                                description: The status of the invoice
                              total:
                                type: number
                                description: The total amount of the invoice
                              currency:
                                type: string
                                description: The currency code for the invoice
                              created_at:
                                type: number
                                description: Timestamp when the invoice was created
                              hosted_invoice_url:
                                anyOf:
                                  - type: string
                                  - type: 'null'
                                description: URL to the Stripe-hosted invoice page
                            required:
                              - plan_ids
                              - stripe_id
                              - status
                              - total
                              - currency
                              - created_at
                          description: >-
                            Invoices for this entity (only included when
                            expand=invoices)
                      required:
                        - id
                        - name
                        - created_at
                        - env
                        - subscriptions
                        - purchases
                        - balances
                        - flags
                    description: Items for current page.
                  next_cursor:
                    anyOf:
                      - type: string
                      - type: 'null'
                    description: >-
                      Opaque cursor for the next page. Null when there are no
                      more results.
                required:
                  - list
                  - next_cursor
                examples:
                  - list:
                      - id: seat_42
                        name: Seat 42
                        customer_id: cus_123
                        feature_id: seats
                        created_at: 1771409161016
                        env: sandbox
                        subscriptions:
                          - plan_id: pro_plan
                            auto_enable: true
                            add_on: false
                            status: active
                            past_due: false
                            canceled_at: null
                            expires_at: null
                            trial_ends_at: null
                            started_at: 1771431921437
                            current_period_start: 1771431921437
                            current_period_end: 1771999921437
                            quantity: 1
                        purchases: []
                        balances:
                          messages:
                            feature_id: messages
                            granted: 100
                            remaining: 72
                            usage: 28
                            unlimited: false
                            overage_allowed: false
                            max_purchase: null
                            next_reset_at: 1773851121437
                            breakdown:
                              - id: cus_ent_39qmLooixXLAqMywgXywjAz96rV
                                plan_id: pro_plan
                                included_grant: 100
                                prepaid_grant: 0
                                remaining: 72
                                usage: 28
                                unlimited: false
                                reset:
                                  interval: month
                                  resets_at: 1773851121437
                                price: null
                                expires_at: null
                        invoices: []
                    next_cursor: null
              example:
                list:
                  - id: seat_42
                    name: Seat 42
                    customer_id: cus_123
                    feature_id: seats
                    created_at: 1771409161016
                    env: sandbox
                    subscriptions:
                      - plan_id: pro_plan
                        auto_enable: true
                        add_on: false
                        status: active
                        past_due: false
                        canceled_at: null
                        expires_at: null
                        trial_ends_at: null
                        started_at: 1771431921437
                        current_period_start: 1771431921437
                        current_period_end: 1771999921437
                        quantity: 1
                    purchases: []
                    balances:
                      messages:
                        feature_id: messages
                        granted: 100
                        remaining: 72
                        usage: 28
                        unlimited: false
                        overage_allowed: false
                        max_purchase: null
                        next_reset_at: 1773851121437
                        breakdown:
                          - id: cus_ent_39qmLooixXLAqMywgXywjAz96rV
                            plan_id: pro_plan
                            included_grant: 100
                            prepaid_grant: 0
                            remaining: 72
                            usage: 28
                            unlimited: false
                            reset:
                              interval: month
                              resets_at: 1773851121437
                            price: null
                            expires_at: null
                    invoices: []
                next_cursor: null
      x-codeSamples:
        - lang: typescript
          label: Typescript (SDK)
          source: |-
            import { Autumn } from 'autumn-js'

            const autumn = new Autumn()

            const result = await autumn.entities.list({
              limit: 10,
            });
        - lang: python
          label: Python (SDK)
          source: |-
            from autumn_sdk import Autumn

            autumn = Autumn(secret_key="am_sk_test...")

            res = autumn.entities.list(start_cursor="", limit=10)
components:
  schemas:
    Plan:
      type: object
      properties:
        id:
          type: string
          description: Unique identifier for the plan.
        name:
          type: string
          description: Display name of the plan.
        description:
          anyOf:
            - type: string
            - type: 'null'
          description: Optional description of the plan.
        group:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            Group identifier for organizing related plans. Plans in the same
            group are mutually exclusive.
        version:
          type: number
          description: >-
            Version number of the plan. Incremented when plan configuration
            changes.
        version_slug:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            User-facing version identity. Defaults to v{n} when the version is
            minted.
        active:
          type: boolean
          description: >-
            Whether this is the active version of the plan. At most one version
            is active.
        add_on:
          type: boolean
          description: >-
            Whether this is an add-on plan that can be attached alongside a main
            plan.
        auto_enable:
          type: boolean
          description: >-
            If true, this plan is automatically attached when a customer is
            created. Used for free plans.
        price:
          anyOf:
            - type: object
              properties:
                amount:
                  type: number
                  description: >-
                    Base price amount for the plan, in major currency units
                    (e.g. dollars).
                additional_currencies:
                  type: array
                  items:
                    type: object
                    properties:
                      currency:
                        type: string
                        description: >-
                          Three-letter Stripe-supported currency code (e.g.
                          'eur', 'gbp').
                      amount:
                        type: number
                        description: >-
                          Price amount in this currency. Set explicitly per
                          currency, not converted from the base amount.
                    required:
                      - currency
                      - amount
                  description: >-
                    Base price amounts in additional currencies. The base
                    'amount' is in the org's default currency.
                interval:
                  enum:
                    - one_off
                    - week
                    - month
                    - quarter
                    - semi_annual
                    - year
                  type: string
                  description: Billing interval (e.g. 'month', 'year').
                interval_count:
                  type: number
                  description: Number of intervals per billing cycle. Defaults to 1.
                display:
                  type: object
                  properties:
                    primary_text:
                      type: string
                      description: Main display text (e.g. '$10' or '100 messages').
                    secondary_text:
                      type: string
                      description: >-
                        Secondary display text (e.g. 'per month' or 'then $0.5
                        per 100').
                  required:
                    - primary_text
                  description: Display text for showing this price in pricing pages.
                processors:
                  type: object
                  properties:
                    stripe:
                      anyOf:
                        - type: object
                          properties:
                            price_id:
                              type: string
                              description: >-
                                Stripe price ID. For prepaid with included > 0
                                this is the V2 price.
                          required:
                            - price_id
                        - type: 'null'
                  description: >-
                    Payment processors this base price is connected to. Omitted
                    when unset.
              required:
                - amount
                - interval
            - type: 'null'
          description: >-
            Base recurring price for the plan. Null for free plans or usage-only
            plans.
        items:
          type: array
          items:
            type: object
            properties:
              feature_id:
                type: string
                description: The ID of the feature this item configures.
              feature:
                type: object
                properties:
                  id:
                    type: string
                    description: >-
                      The ID of the feature, used to refer to it in other API
                      calls like /track or /check.
                  name:
                    anyOf:
                      - type: string
                      - type: 'null'
                    description: The name of the feature.
                  type:
                    enum:
                      - static
                      - boolean
                      - single_use
                      - continuous_use
                      - credit_system
                      - ai_credit_system
                    type: string
                    description: The type of the feature
                  display:
                    anyOf:
                      - type: object
                        properties:
                          singular:
                            type: string
                            description: The singular display name for the feature.
                          plural:
                            type: string
                            description: The plural display name for the feature.
                        required:
                          - singular
                          - plural
                      - type: 'null'
                    description: Singular and plural display names for the feature.
                  credit_schema:
                    anyOf:
                      - type: array
                        items:
                          type: object
                          properties:
                            metered_feature_id:
                              type: string
                              description: >-
                                The ID of the metered feature (should be a
                                single_use feature).
                            credit_cost:
                              type: number
                              description: The credit cost of the metered feature.
                          required:
                            - metered_feature_id
                            - credit_cost
                      - type: 'null'
                    description: Credit cost schema for credit system features.
                  archived:
                    anyOf:
                      - type: boolean
                      - type: 'null'
                    description: Whether or not the feature is archived.
                required:
                  - id
                  - type
                description: The full feature object if expanded.
              included:
                type: number
                description: >-
                  Number of free units included. For consumable features,
                  balance resets to this number each interval.
              unlimited:
                type: boolean
                description: Whether the customer has unlimited access to this feature.
              pooled:
                type: boolean
                default: false
                description: >-
                  Whether entity-level grants contribute to a shared customer
                  balance.
              reset:
                anyOf:
                  - type: object
                    properties:
                      interval:
                        enum:
                          - one_off
                          - minute
                          - hour
                          - day
                          - week
                          - month
                          - quarter
                          - semi_annual
                          - year
                        type: string
                        description: >-
                          The interval at which the feature balance resets (e.g.
                          'month', 'year'). For consumable features, usage
                          resets to 0 and included units are restored.
                      interval_count:
                        type: number
                        description: Number of intervals between resets. Defaults to 1.
                    required:
                      - interval
                  - type: 'null'
                description: >-
                  Reset configuration for consumable features. Null for
                  non-consumable features like seats where usage persists across
                  billing cycles.
              price:
                anyOf:
                  - type: object
                    properties:
                      amount:
                        type: number
                        description: >-
                          Price per billing_units after included usage is
                          consumed. Mutually exclusive with tiers.
                      additional_currencies:
                        type: array
                        items:
                          type: object
                          properties:
                            currency:
                              type: string
                              description: >-
                                Three-letter Stripe-supported currency code
                                (e.g. 'eur', 'gbp').
                            amount:
                              type: number
                              description: >-
                                Price amount in this currency. Set explicitly
                                per currency, not converted from the base
                                amount.
                          required:
                            - currency
                            - amount
                        description: >-
                          Amounts in additional currencies for this flat price.
                          The base 'amount' is in the org's default currency.
                          Only valid with 'amount', not 'tiers' (tiered prices
                          carry per-currency amounts on each tier).
                      tiers:
                        type: array
                        items:
                          type: object
                          properties:
                            to:
                              anyOf:
                                - type: number
                                - const: inf
                            amount:
                              type: number
                            flat_amount:
                              type: number
                            additional_currencies:
                              type: array
                              items:
                                type: object
                                properties:
                                  currency:
                                    type: string
                                    description: >-
                                      Three-letter Stripe-supported currency
                                      code (e.g. 'eur', 'gbp').
                                  amount:
                                    type: number
                                    description: >-
                                      Per-unit amount for this tier in this
                                      currency.
                                  flat_amount:
                                    type: number
                                    description: >-
                                      Flat amount for this tier in this
                                      currency, if the tier uses one.
                                required:
                                  - currency
                          required:
                            - to
                            - amount
                        description: >-
                          Tiered pricing configuration. Each tier's 'to'
                          INCLUDES the included amount. Either 'tiers' or
                          'amount' is required.
                      tier_behavior:
                        enum:
                          - graduated
                          - volume
                        type: string
                      interval:
                        enum:
                          - one_off
                          - week
                          - month
                          - quarter
                          - semi_annual
                          - year
                        type: string
                        description: >-
                          Billing interval for this price. For consumable
                          features, should match reset.interval.
                      interval_count:
                        type: number
                        description: Number of intervals per billing cycle. Defaults to 1.
                      billing_units:
                        type: number
                        description: >-
                          Number of units per price increment. Usage is rounded
                          UP to the nearest billing_units when billed (e.g.
                          billing_units=100 means 101 usage rounds to 200).
                      billing_method:
                        enum:
                          - prepaid
                          - usage_based
                        type: string
                        description: >-
                          'prepaid' for features like seats where customers pay
                          upfront, 'usage_based' for pay-as-you-go after
                          included usage.
                      max_purchase:
                        anyOf:
                          - type: number
                          - type: 'null'
                        description: >-
                          Maximum units a customer can purchase beyond included.
                          E.g. if included=100 and max_purchase=300, customer
                          can use up to 400 total before usage is capped. Null
                          for no limit.
                      processors:
                        type: object
                        properties:
                          stripe:
                            anyOf:
                              - type: object
                                properties:
                                  price_id:
                                    type: string
                                    description: >-
                                      Stripe price ID. For prepaid with included
                                      > 0 this is the V2 price.
                                required:
                                  - price_id
                              - type: 'null'
                        description: >-
                          Payment processors this item price is connected to.
                          Omitted when unset.
                    required:
                      - interval
                      - billing_units
                      - billing_method
                      - max_purchase
                  - type: 'null'
                description: >-
                  Pricing configuration for usage beyond included units. Null if
                  feature is entirely free.
              display:
                type: object
                properties:
                  primary_text:
                    type: string
                    description: Main display text (e.g. '$10' or '100 messages').
                  secondary_text:
                    type: string
                    description: >-
                      Secondary display text (e.g. 'per month' or 'then $0.5 per
                      100').
                required:
                  - primary_text
                description: Display text for showing this item in pricing pages.
              rollover:
                type: object
                properties:
                  max:
                    anyOf:
                      - type: number
                      - type: 'null'
                    description: Maximum rollover units. Null for unlimited rollover.
                  max_percentage:
                    anyOf:
                      - type: number
                      - type: 'null'
                    description: >-
                      Maximum rollover as a percentage (0-100) of included +
                      prepaid grant. Mutually exclusive with max.
                  expiry_duration_type:
                    enum:
                      - month
                      - forever
                    type: string
                    description: When rolled over units expire.
                  expiry_duration_length:
                    type: number
                    description: Number of periods before expiry.
                required:
                  - max
                  - expiry_duration_type
                description: >-
                  Rollover configuration for unused units. If set, unused
                  included units roll over to the next period.
              feature_override:
                type: object
                properties:
                  credit_schema:
                    type: array
                    items:
                      anyOf:
                        - type: object
                          properties:
                            metered_feature_id:
                              type: string
                              minLength: 1
                              description: >-
                                ID of the metered feature that draws from this
                                credit system.
                            billing_units:
                              type: number
                              exclusiveMinimum: 0
                              description: >-
                                Number of metered-feature units priced together.
                                Defaults to one when omitted.
                            dimensions:
                              type: object
                              propertyNames:
                                type: string
                                minLength: 1
                                maxLength: 64
                              additionalProperties:
                                anyOf:
                                  - type: object
                                    properties:
                                      match:
                                        type: object
                                        propertyNames:
                                          type: string
                                        additionalProperties:
                                          type: string
                                        description: >-
                                          Event properties this entry applies to.
                                          Every key must equal the tracked
                                          property, compared as strings.
                                      priority:
                                        type: integer
                                        minimum: -9007199254740991
                                        maximum: 9007199254740991
                                        description: >-
                                          Breaks ties between dimensions that
                                          match the same number of keys. Higher
                                          wins.
                                      tier_behavior:
                                        const: graduated
                                      tiers:
                                        type: array
                                        minItems: 1
                                        items:
                                          type: object
                                          properties:
                                            to:
                                              anyOf:
                                                - type: number
                                                  exclusiveMinimum: 0
                                                - enum:
                                                    - inf
                                                  type: string
                                              description: >-
                                                Inclusive upper usage boundary for this
                                                graduated tier. The final tier must be
                                                'inf'.
                                            credit_cost:
                                              type: number
                                              minimum: 0
                                              description: >-
                                                Credits consumed per billing-unit group
                                                within this tier.
                                          required:
                                            - to
                                            - credit_cost
                                    required:
                                      - match
                                      - tier_behavior
                                      - tiers
                                    additionalProperties: false
                                  - type: object
                                    properties:
                                      match:
                                        type: object
                                        propertyNames:
                                          type: string
                                        additionalProperties:
                                          type: string
                                        description: >-
                                          Event properties this entry applies to.
                                          Every key must equal the tracked
                                          property, compared as strings.
                                      priority:
                                        type: integer
                                        minimum: -9007199254740991
                                        maximum: 9007199254740991
                                        description: >-
                                          Breaks ties between dimensions that
                                          match the same number of keys. Higher
                                          wins.
                                      credit_cost:
                                        type: number
                                        minimum: 0
                                        description: >-
                                          Credits consumed per billing-unit group
                                          when this dimension matches.
                                    required:
                                      - match
                                      - credit_cost
                                    additionalProperties: false
                              description: >-
                                Named rates chosen by event properties. The most
                                specific match sets the rate; with no match the
                                item's own rate applies.
                            multipliers:
                              type: object
                              propertyNames:
                                type: string
                                minLength: 1
                                maxLength: 64
                              additionalProperties:
                                type: object
                                properties:
                                  match:
                                    type: object
                                    propertyNames:
                                      type: string
                                    additionalProperties:
                                      type: string
                                    description: >-
                                      Event properties this entry applies to.
                                      Every key must equal the tracked property,
                                      compared as strings.
                                  factor:
                                    type: number
                                    exclusiveMinimum: 0
                                    description: >-
                                      Multiplies the matched rate. All matching
                                      multipliers stack.
                                  add:
                                    type: number
                                    description: >-
                                      Added to the rate after every factor is
                                      applied, in credits per billing-unit
                                      group.
                                required:
                                  - match
                                additionalProperties: false
                              description: >-
                                Named adjustments chosen by event properties.
                                Every match applies: factors multiply, then adds
                                are summed.
                            tier_behavior:
                              const: graduated
                            tiers:
                              type: array
                              minItems: 1
                              items:
                                type: object
                                properties:
                                  to:
                                    anyOf:
                                      - type: number
                                        exclusiveMinimum: 0
                                      - enum:
                                          - inf
                                        type: string
                                    description: >-
                                      Inclusive upper usage boundary for this
                                      graduated tier. The final tier must be
                                      'inf'.
                                  credit_cost:
                                    type: number
                                    minimum: 0
                                    description: >-
                                      Credits consumed per billing-unit group
                                      within this tier.
                                required:
                                  - to
                                  - credit_cost
                          required:
                            - metered_feature_id
                            - tier_behavior
                            - tiers
                          additionalProperties: false
                        - type: object
                          properties:
                            metered_feature_id:
                              type: string
                              minLength: 1
                              description: >-
                                ID of the metered feature that draws from this
                                credit system.
                            billing_units:
                              type: number
                              exclusiveMinimum: 0
                              description: >-
                                Number of metered-feature units priced together.
                                Defaults to one when omitted.
                            dimensions:
                              type: object
                              propertyNames:
                                type: string
                                minLength: 1
                                maxLength: 64
                              additionalProperties:
                                anyOf:
                                  - type: object
                                    properties:
                                      match:
                                        type: object
                                        propertyNames:
                                          type: string
                                        additionalProperties:
                                          type: string
                                        description: >-
                                          Event properties this entry applies to.
                                          Every key must equal the tracked
                                          property, compared as strings.
                                      priority:
                                        type: integer
                                        minimum: -9007199254740991
                                        maximum: 9007199254740991
                                        description: >-
                                          Breaks ties between dimensions that
                                          match the same number of keys. Higher
                                          wins.
                                      tier_behavior:
                                        const: graduated
                                      tiers:
                                        type: array
                                        minItems: 1
                                        items:
                                          type: object
                                          properties:
                                            to:
                                              anyOf:
                                                - type: number
                                                  exclusiveMinimum: 0
                                                - enum:
                                                    - inf
                                                  type: string
                                              description: >-
                                                Inclusive upper usage boundary for this
                                                graduated tier. The final tier must be
                                                'inf'.
                                            credit_cost:
                                              type: number
                                              minimum: 0
                                              description: >-
                                                Credits consumed per billing-unit group
                                                within this tier.
                                          required:
                                            - to
                                            - credit_cost
                                    required:
                                      - match
                                      - tier_behavior
                                      - tiers
                                    additionalProperties: false
                                  - type: object
                                    properties:
                                      match:
                                        type: object
                                        propertyNames:
                                          type: string
                                        additionalProperties:
                                          type: string
                                        description: >-
                                          Event properties this entry applies to.
                                          Every key must equal the tracked
                                          property, compared as strings.
                                      priority:
                                        type: integer
                                        minimum: -9007199254740991
                                        maximum: 9007199254740991
                                        description: >-
                                          Breaks ties between dimensions that
                                          match the same number of keys. Higher
                                          wins.
                                      credit_cost:
                                        type: number
                                        minimum: 0
                                        description: >-
                                          Credits consumed per billing-unit group
                                          when this dimension matches.
                                    required:
                                      - match
                                      - credit_cost
                                    additionalProperties: false
                              description: >-
                                Named rates chosen by event properties. The most
                                specific match sets the rate; with no match the
                                item's own rate applies.
                            multipliers:
                              type: object
                              propertyNames:
                                type: string
                                minLength: 1
                                maxLength: 64
                              additionalProperties:
                                type: object
                                properties:
                                  match:
                                    type: object
                                    propertyNames:
                                      type: string
                                    additionalProperties:
                                      type: string
                                    description: >-
                                      Event properties this entry applies to.
                                      Every key must equal the tracked property,
                                      compared as strings.
                                  factor:
                                    type: number
                                    exclusiveMinimum: 0
                                    description: >-
                                      Multiplies the matched rate. All matching
                                      multipliers stack.
                                  add:
                                    type: number
                                    description: >-
                                      Added to the rate after every factor is
                                      applied, in credits per billing-unit
                                      group.
                                required:
                                  - match
                                additionalProperties: false
                              description: >-
                                Named adjustments chosen by event properties.
                                Every match applies: factors multiply, then adds
                                are summed.
                            credit_cost:
                              type: number
                              minimum: 0
                              description: Credits consumed per billing-unit group.
                          required:
                            - metered_feature_id
                            - credit_cost
                          additionalProperties: false
                    description: >-
                      For credit system features: replaces the feature's
                      credit_schema entirely for customers on this plan.
                  markups:
                    type: object
                    properties:
                      default_markup:
                        type: number
                        minimum: -100
                        description: >-
                          Default percentage markup for customers on this plan.
                          Use -100 to make usage free.
                      provider_markups:
                        anyOf:
                          - type: object
                            propertyNames:
                              type: string
                            additionalProperties:
                              type: object
                              properties:
                                markup:
                                  type: number
                                  minimum: -100
                              required:
                                - markup
                          - type: 'null'
                        description: >-
                          Per-provider markup percentages for customers on this
                          plan.
                      model_markups:
                        anyOf:
                          - type: object
                            propertyNames:
                              type: string
                              pattern: .+\/.+
                            additionalProperties:
                              type: object
                              properties:
                                markup:
                                  type: number
                                  minimum: -100
                                input_cost:
                                  type: number
                                  minimum: 0
                                output_cost:
                                  type: number
                                  minimum: 0
                          - type: 'null'
                        description: Per-model markup overrides for customers on this plan.
                    additionalProperties: false
                    description: >-
                      For AI credit system features: replaces the feature's
                      markup chain entirely for customers on this plan. An unset
                      level means no markup at that level rather than inheriting
                      the feature's.
                additionalProperties: false
                description: >-
                  Overrides fields of this item's feature for customers on this
                  plan (e.g. a credit system's credit_schema).
            required:
              - feature_id
              - included
              - unlimited
              - reset
              - price
          description: >-
            Feature configurations included in this plan. Each item defines
            included units, pricing, and reset behavior for a feature.
        processors:
          type: object
          properties:
            stripe:
              anyOf:
                - type: object
                  properties:
                    product_id:
                      type: string
                      description: Stripe product ID this plan is billed under.
                    additional_product_ids:
                      type: array
                      items:
                        type: string
                      description: Extra Stripe product IDs aliased to this plan.
                  required:
                    - product_id
                - type: 'null'
            revenuecat:
              anyOf:
                - type: object
                  properties:
                    products:
                      type: array
                      items:
                        type: object
                        properties:
                          product_id:
                            type: string
                            description: >-
                              RevenueCat product ID that grants this plan when
                              purchased.
                          feature_quantities:
                            type: array
                            items:
                              type: object
                              properties:
                                feature_id:
                                  type: string
                                quantity:
                                  type: number
                                  minimum: 0
                              required:
                                - feature_id
                            description: >-
                              Prepaid quantities granted when this specific
                              RevenueCat product is purchased, in feature units.
                        required:
                          - product_id
                      description: >-
                        Every RevenueCat product that maps to this plan.
                        Replaces the current set.
                  required:
                    - products
                - type: 'null'
          description: Payment processors this plan is connected to. Omitted when unset.
        free_trial:
          type: object
          properties:
            duration_length:
              type: number
              description: Number of duration_type periods the trial lasts.
            duration_type:
              enum:
                - day
                - month
                - year
              type: string
              description: Unit of time for the trial duration ('day', 'month', 'year').
            card_required:
              type: boolean
              description: >-
                Whether a payment method is required to start the trial. If
                true, customer will be charged after trial ends.
            on_end:
              anyOf:
                - enum:
                    - bill
                    - revert
                  type: string
                - type: 'null'
              description: >-
                Behavior when the trial ends. 'bill' charges the customer
                (default). 'revert' expires the trial and restores the
                customer's previous plan.
          required:
            - duration_length
            - duration_type
            - card_required
          description: >-
            Free trial configuration. If set, new customers can try this plan
            before being charged.
        created_at:
          type: number
          description: Unix timestamp (ms) when the plan was created.
        env:
          enum:
            - sandbox
            - live
          type: string
          description: Environment this plan belongs to ('sandbox' or 'live').
        archived:
          type: boolean
          description: >-
            Whether the plan is archived. Archived plans cannot be attached to
            new customers.
        config:
          type: object
          properties:
            ignore_past_due:
              type: boolean
              default: false
              description: >-
                If true, entitlements attached to this plan will still reset on
                schedule even when the customer's product is in a past_due
                state.
          description: Miscellaneous plan-level configuration flags.
        billing_controls:
          type: object
          properties:
            auto_topups:
              type: array
              items:
                type: object
                properties:
                  feature_id:
                    type: string
                    description: The ID of the feature (credit balance) to auto top-up.
                  enabled:
                    type: boolean
                    default: false
                    description: Whether auto top-up is enabled.
                  threshold:
                    type: number
                    description: >-
                      When the balance drops below this threshold, an auto
                      top-up will be purchased.
                  quantity:
                    type: number
                    minimum: 1
                    description: Amount of credits to add per auto top-up.
                  purchase_limit:
                    type: object
                    properties:
                      interval:
                        enum:
                          - hour
                          - day
                          - week
                          - month
                        type: string
                        description: The time interval for the purchase limit window.
                      interval_count:
                        type: number
                        minimum: 1
                        default: 1
                        description: Number of intervals in the purchase limit window.
                      limit:
                        type: number
                        minimum: 1
                        description: >-
                          Maximum number of auto top-ups allowed within the
                          interval.
                    required:
                      - interval
                      - limit
                    description: Optional rate limit to cap how often auto top-ups occur.
                  invoice_mode:
                    type: boolean
                    description: >-
                      When true, auto top-up creates a send_invoice invoice
                      instead of auto-charging.
                required:
                  - feature_id
                  - threshold
                  - quantity
              description: List of auto top-up configurations per feature.
            spend_limits:
              type: array
              items:
                type: object
                properties:
                  feature_id:
                    type: string
                    description: Optional feature ID this spend limit applies to.
                  enabled:
                    type: boolean
                    default: false
                    description: Whether the overage spend limit is enabled.
                  limit_type:
                    enum:
                      - absolute
                      - usage_percentage
                    type: string
                    description: >-
                      How overage_limit is interpreted: an absolute overage cap
                      (default) or a percentage of the main-plan allowance.
                  overage_limit:
                    type: number
                    minimum: 0
                    description: >-
                      Overage cap for the feature: absolute units, or a percent
                      (e.g. 120) when limit_type is usage_percentage.
                  skip_overage_billing:
                    type: boolean
                    description: >-
                      When true, overage for this feature is not posted to
                      Stripe. Usage tracking and balance resets still behave
                      normally.
              description: List of overage spend limits per feature (caps overage spend).
            usage_limits:
              type: array
              items:
                type: object
                properties:
                  feature_id:
                    type: string
                    description: The feature this usage limit applies to.
                  enabled:
                    type: boolean
                    default: true
                    description: Whether this usage limit is enabled.
                  limit:
                    type: number
                    minimum: 0
                    description: Maximum units allowed per interval.
                  interval:
                    enum:
                      - day
                      - week
                      - month
                      - year
                    type: string
                    description: >-
                      Interval for the cap, aligned to the customer's billing
                      cycle.
                  anchor:
                    enum:
                      - billing_cycle
                      - utc
                    type: string
                    description: >-
                      Window alignment. 'billing_cycle' phases the interval to
                      the customer's renewal time; 'utc' aligns to the UTC
                      calendar.
                  filter:
                    type: object
                    properties:
                      properties:
                        type: object
                        propertyNames:
                          type: string
                          minLength: 1
                          maxLength: 64
                        additionalProperties:
                          type: string
                    required:
                      - properties
                    description: >-
                      When set, only usage from events whose properties match
                      counts toward this cap. Omit to count all usage of the
                      feature.
                required:
                  - feature_id
                  - limit
                  - interval
              description: List of hard usage caps per feature (max units per interval).
            usage_alerts:
              type: array
              items:
                type: object
                properties:
                  feature_id:
                    type: string
                    description: The feature ID this alert applies to.
                  enabled:
                    type: boolean
                    default: true
                    description: Whether this usage alert is enabled.
                  threshold:
                    type: number
                    minimum: 0
                    description: >-
                      The threshold value that triggers the alert. For usage or
                      remaining, this is an absolute count. For usage_percentage
                      or remaining_percentage, this is a percentage (0-100).
                  threshold_type:
                    enum:
                      - usage
                      - usage_percentage
                      - remaining
                      - remaining_percentage
                    type: string
                    description: >-
                      Whether the threshold is an absolute count or a percentage
                      of the usage allowance or remaining balance.
                  basis:
                    enum:
                      - balance
                      - included
                      - recurring
                      - usage_limit
                    type: string
                    default: balance
                    description: >-
                      What 100% means. balance: every grant on the feature.
                      included: the plan allowance only. recurring: grants that
                      reset. usage_limit: the cap of the usage limit with the
                      same feature and filter.
                  filter:
                    type: object
                    properties:
                      properties:
                        type: object
                        propertyNames:
                          type: string
                          minLength: 1
                          maxLength: 64
                        additionalProperties:
                          type: string
                    required:
                      - properties
                    description: >-
                      Only valid with basis usage_limit. Points the alert at the
                      usage limit carrying the same filter.
                  name:
                    type: string
                    description: >-
                      Optional user-defined label to distinguish multiple alerts
                      on the same feature.
                required:
                  - threshold
                  - threshold_type
              description: List of usage alert configurations per feature.
            overage_allowed:
              type: array
              items:
                type: object
                properties:
                  feature_id:
                    type: string
                    description: The feature ID this overage allowed control applies to.
                  enabled:
                    type: boolean
                    default: false
                    description: Whether overage is allowed for this feature.
                required:
                  - feature_id
              description: >-
                List of overage allowed controls per feature. When enabled,
                usage can exceed balance.
          description: Plan-level billing controls used as customer defaults.
        metadata:
          type: object
          propertyNames:
            type: string
          additionalProperties: {}
          description: >-
            Arbitrary key-value metadata defined by you for your own use. Shared
            across all versions of the plan.
        customer_eligibility:
          type: object
          properties:
            trial_available:
              type: boolean
              description: >-
                Whether the trial on this plan is available to this customer.
                For example, if the customer used the trial in the past, this
                will be false.
            status:
              enum:
                - active
                - scheduled
              type: string
              description: >-
                The customer's current status with this plan. 'active' if
                attached, 'scheduled' if pending activation.
            canceling:
              type: boolean
              description: >-
                Whether the customer's active instance of this plan is set to
                cancel.
            trialing:
              type: boolean
              description: Whether the customer is currently on a free trial of this plan.
            attach_action:
              enum:
                - activate
                - upgrade
                - downgrade
                - none
                - purchase
              type: string
              description: >-
                The action that would occur if this plan were attached to the
                customer.
          required:
            - attach_action
        base_variant_id:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            Deprecated. Use variant_details.base_plan_id instead. If this is a
            variant, the ID of the base plan it was created from.
        variant_details:
          type: object
          properties:
            base_plan_id:
              type: string
              description: The ID of the base plan this variant was derived from.
            customize:
              type: object
              properties:
                price:
                  anyOf:
                    - type: object
                      properties:
                        amount:
                          type: number
                          description: >-
                            Base price amount for the plan, in major currency
                            units (e.g. dollars).
                        interval:
                          enum:
                            - one_off
                            - week
                            - month
                            - quarter
                            - semi_annual
                            - year
                          type: string
                          description: Billing interval (e.g. 'month', 'year').
                        interval_count:
                          type: number
                          description: >-
                            Number of intervals per billing cycle. Defaults to
                            1.
                        additional_currencies:
                          type: array
                          items:
                            type: object
                            properties:
                              currency:
                                type: string
                                description: >-
                                  Three-letter Stripe-supported currency code
                                  (e.g. 'eur', 'gbp').
                              amount:
                                type: number
                                description: >-
                                  Price amount in this currency. Set explicitly
                                  per currency, not converted from the base
                                  amount.
                            required:
                              - currency
                              - amount
                          description: >-
                            Base price amounts in additional currencies. The
                            base 'amount' is in the org's default currency.
                      required:
                        - amount
                        - interval
                      title: BasePrice
                      description: Base price configuration for a plan.
                    - type: 'null'
                  description: >-
                    Override the base price of the plan. Pass null to remove the
                    base price.
                add_items:
                  type: array
                  items:
                    type: object
                    properties:
                      feature_id:
                        type: string
                        description: The ID of the feature to configure.
                      included:
                        type: number
                        maximum: 10000000000000
                        description: >-
                          Number of free units included. Balance resets to this
                          each interval for consumable features.
                      unlimited:
                        type: boolean
                        description: >-
                          If true, customer has unlimited access to this
                          feature.
                      pooled:
                        type: boolean
                        default: false
                        description: >-
                          Whether entity-level grants contribute to a shared
                          customer balance.
                      reset:
                        type: object
                        properties:
                          interval:
                            enum:
                              - one_off
                              - minute
                              - hour
                              - day
                              - week
                              - month
                              - quarter
                              - semi_annual
                              - year
                            type: string
                            description: >-
                              Interval at which balance resets (e.g. 'month',
                              'year'). For consumable features only.
                          interval_count:
                            type: number
                            description: Number of intervals between resets. Defaults to 1.
                        required:
                          - interval
                        description: >-
                          Reset configuration for consumable features. Omit for
                          non-consumable features like seats.
                      price:
                        type: object
                        properties:
                          amount:
                            type: number
                            description: >-
                              Price per billing_units after included usage.
                              Either 'amount' or 'tiers' is required.
                          additional_currencies:
                            type: array
                            items:
                              type: object
                              properties:
                                currency:
                                  type: string
                                  description: >-
                                    Three-letter Stripe-supported currency code
                                    (e.g. 'eur', 'gbp').
                                amount:
                                  type: number
                                  description: >-
                                    Price amount in this currency. Set
                                    explicitly per currency, not converted from
                                    the base amount.
                              required:
                                - currency
                                - amount
                            description: >-
                              Amounts in additional currencies for this flat
                              price. The base 'amount' is in the org's default
                              currency. Only valid with 'amount', not 'tiers'.
                          tiers:
                            type: array
                            items:
                              type: object
                              properties:
                                to:
                                  anyOf:
                                    - type: number
                                    - const: inf
                                amount:
                                  type: number
                                flat_amount:
                                  type: number
                                additional_currencies:
                                  type: array
                                  items:
                                    type: object
                                    properties:
                                      currency:
                                        type: string
                                        description: >-
                                          Three-letter Stripe-supported currency
                                          code (e.g. 'eur', 'gbp').
                                      amount:
                                        type: number
                                        description: >-
                                          Per-unit amount for this tier in this
                                          currency.
                                      flat_amount:
                                        type: number
                                        description: >-
                                          Flat amount for this tier in this
                                          currency, if the tier uses one.
                                    required:
                                      - currency
                              required:
                                - to
                                - amount
                            description: >-
                              Tiered pricing.  Either 'amount' or 'tiers' is
                              required.
                          tier_behavior:
                            enum:
                              - graduated
                              - volume
                            type: string
                          interval:
                            enum:
                              - one_off
                              - week
                              - month
                              - quarter
                              - semi_annual
                              - year
                            type: string
                            description: >-
                              Billing interval. For consumable features, should
                              match reset.interval.
                          interval_count:
                            type: number
                            default: 1
                            description: >-
                              Number of intervals per billing cycle. Defaults to
                              1.
                          billing_units:
                            type: number
                            default: 1
                            description: >-
                              Units per price increment. Usage is rounded UP
                              when billed (e.g. billing_units=100 means 101
                              rounds to 200).
                          billing_method:
                            enum:
                              - prepaid
                              - usage_based
                            type: string
                            description: >-
                              'prepaid' for upfront payment (seats),
                              'usage_based' for pay-as-you-go.
                          max_purchase:
                            anyOf:
                              - type: number
                              - type: 'null'
                            description: >-
                              Max units purchasable beyond included. E.g.
                              included=100, max_purchase=300 allows 400 total.
                              Null for no limit.
                        required:
                          - interval
                          - billing_method
                        description: >-
                          Pricing for usage beyond included units. Omit for free
                          features.
                      proration:
                        type: object
                        properties:
                          on_increase:
                            enum:
                              - bill_immediately
                              - prorate_immediately
                              - prorate_next_cycle
                              - bill_next_cycle
                            type: string
                            description: >-
                              Billing behavior when quantity increases
                              mid-cycle.
                          on_decrease:
                            enum:
                              - prorate
                              - prorate_immediately
                              - prorate_next_cycle
                              - none
                              - no_prorations
                            type: string
                            description: Credit behavior when quantity decreases mid-cycle.
                        required:
                          - on_increase
                          - on_decrease
                        description: >-
                          Proration settings for prepaid features. Controls
                          mid-cycle quantity change billing.
                      rollover:
                        type: object
                        properties:
                          max:
                            type: number
                            description: Max rollover units. Omit for unlimited rollover.
                          max_percentage:
                            type: number
                            description: >-
                              Maximum rollover as a percentage (0-100) of
                              included + prepaid grant. Mutually exclusive with
                              max.
                          expiry_duration_type:
                            enum:
                              - month
                              - forever
                            type: string
                            description: When rolled over units expire.
                          expiry_duration_length:
                            type: number
                            description: Number of periods before expiry.
                        required:
                          - expiry_duration_type
                        description: >-
                          Rollover config for unused units. If set, unused
                          included units carry over.
                      feature_override:
                        type: object
                        properties:
                          credit_schema:
                            type: array
                            items:
                              anyOf:
                                - type: object
                                  properties:
                                    metered_feature_id:
                                      type: string
                                      minLength: 1
                                      description: >-
                                        ID of the metered feature that draws
                                        from this credit system.
                                    billing_units:
                                      type: number
                                      exclusiveMinimum: 0
                                      description: >-
                                        Number of metered-feature units priced
                                        together. Defaults to one when omitted.
                                    dimensions:
                                      type: object
                                      propertyNames:
                                        type: string
                                        minLength: 1
                                        maxLength: 64
                                      additionalProperties:
                                        anyOf:
                                          - type: object
                                            properties:
                                              match:
                                                type: object
                                                propertyNames:
                                                  type: string
                                                additionalProperties:
                                                  type: string
                                                description: >-
                                                  Event properties this entry applies to.
                                                  Every key must equal the tracked
                                                  property, compared as strings.
                                              priority:
                                                type: integer
                                                minimum: -9007199254740991
                                                maximum: 9007199254740991
                                                description: >-
                                                  Breaks ties between dimensions that
                                                  match the same number of keys. Higher
                                                  wins.
                                              tier_behavior:
                                                const: graduated
                                              tiers:
                                                type: array
                                                minItems: 1
                                                items:
                                                  type: object
                                                  properties:
                                                    to:
                                                      anyOf:
                                                        - type: number
                                                          exclusiveMinimum: 0
                                                        - enum:
                                                            - inf
                                                          type: string
                                                      description: >-
                                                        Inclusive upper usage boundary for this
                                                        graduated tier. The final tier must be
                                                        'inf'.
                                                    credit_cost:
                                                      type: number
                                                      minimum: 0
                                                      description: >-
                                                        Credits consumed per billing-unit group
                                                        within this tier.
                                                  required:
                                                    - to
                                                    - credit_cost
                                            required:
                                              - match
                                              - tier_behavior
                                              - tiers
                                            additionalProperties: false
                                          - type: object
                                            properties:
                                              match:
                                                type: object
                                                propertyNames:
                                                  type: string
                                                additionalProperties:
                                                  type: string
                                                description: >-
                                                  Event properties this entry applies to.
                                                  Every key must equal the tracked
                                                  property, compared as strings.
                                              priority:
                                                type: integer
                                                minimum: -9007199254740991
                                                maximum: 9007199254740991
                                                description: >-
                                                  Breaks ties between dimensions that
                                                  match the same number of keys. Higher
                                                  wins.
                                              credit_cost:
                                                type: number
                                                minimum: 0
                                                description: >-
                                                  Credits consumed per billing-unit group
                                                  when this dimension matches.
                                            required:
                                              - match
                                              - credit_cost
                                            additionalProperties: false
                                      description: >-
                                        Named rates chosen by event properties.
                                        The most specific match sets the rate;
                                        with no match the item's own rate
                                        applies.
                                    multipliers:
                                      type: object
                                      propertyNames:
                                        type: string
                                        minLength: 1
                                        maxLength: 64
                                      additionalProperties:
                                        type: object
                                        properties:
                                          match:
                                            type: object
                                            propertyNames:
                                              type: string
                                            additionalProperties:
                                              type: string
                                            description: >-
                                              Event properties this entry applies to.
                                              Every key must equal the tracked
                                              property, compared as strings.
                                          factor:
                                            type: number
                                            exclusiveMinimum: 0
                                            description: >-
                                              Multiplies the matched rate. All
                                              matching multipliers stack.
                                          add:
                                            type: number
                                            description: >-
                                              Added to the rate after every factor is
                                              applied, in credits per billing-unit
                                              group.
                                        required:
                                          - match
                                        additionalProperties: false
                                      description: >-
                                        Named adjustments chosen by event
                                        properties. Every match applies: factors
                                        multiply, then adds are summed.
                                    tier_behavior:
                                      const: graduated
                                    tiers:
                                      type: array
                                      minItems: 1
                                      items:
                                        type: object
                                        properties:
                                          to:
                                            anyOf:
                                              - type: number
                                                exclusiveMinimum: 0
                                              - enum:
                                                  - inf
                                                type: string
                                            description: >-
                                              Inclusive upper usage boundary for this
                                              graduated tier. The final tier must be
                                              'inf'.
                                          credit_cost:
                                            type: number
                                            minimum: 0
                                            description: >-
                                              Credits consumed per billing-unit group
                                              within this tier.
                                        required:
                                          - to
                                          - credit_cost
                                  required:
                                    - metered_feature_id
                                    - tier_behavior
                                    - tiers
                                  additionalProperties: false
                                - type: object
                                  properties:
                                    metered_feature_id:
                                      type: string
                                      minLength: 1
                                      description: >-
                                        ID of the metered feature that draws
                                        from this credit system.
                                    billing_units:
                                      type: number
                                      exclusiveMinimum: 0
                                      description: >-
                                        Number of metered-feature units priced
                                        together. Defaults to one when omitted.
                                    dimensions:
                                      type: object
                                      propertyNames:
                                        type: string
                                        minLength: 1
                                        maxLength: 64
                                      additionalProperties:
                                        anyOf:
                                          - type: object
                                            properties:
                                              match:
                                                type: object
                                                propertyNames:
                                                  type: string
                                                additionalProperties:
                                                  type: string
                                                description: >-
                                                  Event properties this entry applies to.
                                                  Every key must equal the tracked
                                                  property, compared as strings.
                                              priority:
                                                type: integer
                                                minimum: -9007199254740991
                                                maximum: 9007199254740991
                                                description: >-
                                                  Breaks ties between dimensions that
                                                  match the same number of keys. Higher
                                                  wins.
                                              tier_behavior:
                                                const: graduated
                                              tiers:
                                                type: array
                                                minItems: 1
                                                items:
                                                  type: object
                                                  properties:
                                                    to:
                                                      anyOf:
                                                        - type: number
                                                          exclusiveMinimum: 0
                                                        - enum:
                                                            - inf
                                                          type: string
                                                      description: >-
                                                        Inclusive upper usage boundary for this
                                                        graduated tier. The final tier must be
                                                        'inf'.
                                                    credit_cost:
                                                      type: number
                                                      minimum: 0
                                                      description: >-
                                                        Credits consumed per billing-unit group
                                                        within this tier.
                                                  required:
                                                    - to
                                                    - credit_cost
                                            required:
                                              - match
                                              - tier_behavior
                                              - tiers
                                            additionalProperties: false
                                          - type: object
                                            properties:
                                              match:
                                                type: object
                                                propertyNames:
                                                  type: string
                                                additionalProperties:
                                                  type: string
                                                description: >-
                                                  Event properties this entry applies to.
                                                  Every key must equal the tracked
                                                  property, compared as strings.
                                              priority:
                                                type: integer
                                                minimum: -9007199254740991
                                                maximum: 9007199254740991
                                                description: >-
                                                  Breaks ties between dimensions that
                                                  match the same number of keys. Higher
                                                  wins.
                                              credit_cost:
                                                type: number
                                                minimum: 0
                                                description: >-
                                                  Credits consumed per billing-unit group
                                                  when this dimension matches.
                                            required:
                                              - match
                                              - credit_cost
                                            additionalProperties: false
                                      description: >-
                                        Named rates chosen by event properties.
                                        The most specific match sets the rate;
                                        with no match the item's own rate
                                        applies.
                                    multipliers:
                                      type: object
                                      propertyNames:
                                        type: string
                                        minLength: 1
                                        maxLength: 64
                                      additionalProperties:
                                        type: object
                                        properties:
                                          match:
                                            type: object
                                            propertyNames:
                                              type: string
                                            additionalProperties:
                                              type: string
                                            description: >-
                                              Event properties this entry applies to.
                                              Every key must equal the tracked
                                              property, compared as strings.
                                          factor:
                                            type: number
                                            exclusiveMinimum: 0
                                            description: >-
                                              Multiplies the matched rate. All
                                              matching multipliers stack.
                                          add:
                                            type: number
                                            description: >-
                                              Added to the rate after every factor is
                                              applied, in credits per billing-unit
                                              group.
                                        required:
                                          - match
                                        additionalProperties: false
                                      description: >-
                                        Named adjustments chosen by event
                                        properties. Every match applies: factors
                                        multiply, then adds are summed.
                                    credit_cost:
                                      type: number
                                      minimum: 0
                                      description: Credits consumed per billing-unit group.
                                  required:
                                    - metered_feature_id
                                    - credit_cost
                                  additionalProperties: false
                            description: >-
                              For credit system features: replaces the feature's
                              credit_schema entirely for customers on this plan.
                          markups:
                            type: object
                            properties:
                              default_markup:
                                type: number
                                minimum: -100
                                description: >-
                                  Default percentage markup for customers on
                                  this plan. Use -100 to make usage free.
                              provider_markups:
                                anyOf:
                                  - type: object
                                    propertyNames:
                                      type: string
                                    additionalProperties:
                                      type: object
                                      properties:
                                        markup:
                                          type: number
                                          minimum: -100
                                      required:
                                        - markup
                                  - type: 'null'
                                description: >-
                                  Per-provider markup percentages for customers
                                  on this plan.
                              model_markups:
                                anyOf:
                                  - type: object
                                    propertyNames:
                                      type: string
                                      pattern: .+\/.+
                                    additionalProperties:
                                      type: object
                                      properties:
                                        markup:
                                          type: number
                                          minimum: -100
                                        input_cost:
                                          type: number
                                          minimum: 0
                                        output_cost:
                                          type: number
                                          minimum: 0
                                  - type: 'null'
                                description: >-
                                  Per-model markup overrides for customers on
                                  this plan.
                            additionalProperties: false
                            description: >-
                              For AI credit system features: replaces the
                              feature's markup chain entirely for customers on
                              this plan. An unset level means no markup at that
                              level rather than inheriting the feature's.
                        additionalProperties: false
                        description: >-
                          Overrides fields of this item's feature for customers
                          on this plan (e.g. a credit system's credit_schema).
                    required:
                      - feature_id
                    title: PlanItem
                    description: >-
                      Configuration for a feature item in a plan, including
                      usage limits, pricing, and rollover settings.
                  description: Items to add to the plan.
                remove_items:
                  type: array
                  items:
                    type: object
                    properties:
                      feature_id:
                        type: string
                        description: Match items linked to this feature.
                      billing_method:
                        enum:
                          - prepaid
                          - usage_based
                        type: string
                        description: >-
                          Match items with this billing method (prepaid or
                          usage_based).
                      interval:
                        anyOf:
                          - enum:
                              - one_off
                              - week
                              - month
                              - quarter
                              - semi_annual
                              - year
                            type: string
                          - enum:
                              - one_off
                              - minute
                              - hour
                              - day
                              - week
                              - month
                              - quarter
                              - semi_annual
                              - year
                            type: string
                        description: >-
                          Match items with this interval. Accepts either a
                          BillingInterval (price-side) or a ResetInterval
                          (reset-side, includes day/hour/minute) so price-less
                          items keyed by reset.interval can be disambiguated.
                      interval_count:
                        type: integer
                        minimum: -9007199254740991
                        maximum: 9007199254740991
                        exclusiveMinimum: 0
                        description: >-
                          Match items with this interval_count. Disambiguates
                          between items that share an interval but differ in
                          count.
                      included:
                        type: number
                        maximum: 10000000000000
                        description: >-
                          Match items whose grant equals this included usage.
                          Omitted is a wildcard.
                    title: PlanItemFilter
                    description: >-
                      Filter for matching plan items. All provided fields must
                      match (AND).
                  description: Filters selecting items to remove from the plan.
                free_trial:
                  anyOf:
                    - type: object
                      properties:
                        duration_length:
                          type: number
                          description: Number of duration_type periods the trial lasts.
                        duration_type:
                          enum:
                            - day
                            - month
                            - year
                          type: string
                          default: month
                          description: Unit of time for the trial ('day', 'month', 'year').
                        card_required:
                          type: boolean
                          default: false
                          description: >-
                            If true, a payment method is required to start the
                            trial and the customer is charged when it ends.
                            Defaults to false.
                        on_end:
                          enum:
                            - bill
                            - revert
                          type: string
                          description: >-
                            Behavior when the trial ends. 'bill' charges the
                            customer (default). 'revert' expires the trial and
                            restores the customer's previous plan.
                      required:
                        - duration_length
                      title: FreeTrialParams
                      description: Free trial configuration for a plan.
                    - type: 'null'
                  description: >-
                    Override the plan's default free trial. Pass an object to
                    set a custom trial, or null to remove the trial entirely.
                billing_controls:
                  type: object
                  properties:
                    auto_topups:
                      type: array
                      items:
                        type: object
                        properties:
                          feature_id:
                            type: string
                            description: >-
                              The ID of the feature (credit balance) to auto
                              top-up.
                          enabled:
                            type: boolean
                            default: false
                            description: Whether auto top-up is enabled.
                          threshold:
                            type: number
                            description: >-
                              When the balance drops below this threshold, an
                              auto top-up will be purchased.
                          quantity:
                            type: number
                            minimum: 1
                            description: Amount of credits to add per auto top-up.
                          purchase_limit:
                            type: object
                            properties:
                              interval:
                                enum:
                                  - hour
                                  - day
                                  - week
                                  - month
                                type: string
                                description: >-
                                  The time interval for the purchase limit
                                  window.
                              interval_count:
                                type: number
                                minimum: 1
                                default: 1
                                description: >-
                                  Number of intervals in the purchase limit
                                  window.
                              limit:
                                type: number
                                minimum: 1
                                description: >-
                                  Maximum number of auto top-ups allowed within
                                  the interval.
                              count:
                                type: number
                                minimum: 0
                                description: >-
                                  Set the current window's consumed auto top-up
                                  count. Omit to leave runtime state unchanged.
                            required:
                              - interval
                              - limit
                            description: >-
                              Optional rate limit to cap how often auto top-ups
                              occur. Pass count to set the current window's
                              consumed top-ups.
                          invoice_mode:
                            type: boolean
                            description: >-
                              When true, auto top-up creates a send_invoice
                              invoice instead of auto-charging.
                        required:
                          - feature_id
                          - threshold
                          - quantity
                      description: List of auto top-up configurations per feature.
                    spend_limits:
                      type: array
                      items:
                        type: object
                        properties:
                          feature_id:
                            type: string
                            description: Optional feature ID this spend limit applies to.
                          enabled:
                            type: boolean
                            default: false
                            description: Whether the overage spend limit is enabled.
                          limit_type:
                            enum:
                              - absolute
                              - usage_percentage
                            type: string
                            description: >-
                              How overage_limit is interpreted: an absolute
                              overage cap (default) or a percentage of the
                              main-plan allowance.
                          overage_limit:
                            type: number
                            minimum: 0
                            description: >-
                              Overage cap for the feature: absolute units, or a
                              percent (e.g. 120) when limit_type is
                              usage_percentage.
                          skip_overage_billing:
                            type: boolean
                            description: >-
                              When true, overage for this feature is not posted
                              to Stripe. Usage tracking and balance resets still
                              behave normally.
                      description: >-
                        List of overage spend limits per feature (caps overage
                        spend).
                    usage_limits:
                      type: array
                      items:
                        type: object
                        properties:
                          feature_id:
                            type: string
                            description: The feature this usage limit applies to.
                          enabled:
                            type: boolean
                            default: true
                            description: Whether this usage limit is enabled.
                          limit:
                            type: number
                            minimum: 0
                            description: Maximum units allowed per interval.
                          interval:
                            enum:
                              - day
                              - week
                              - month
                              - year
                            type: string
                            description: >-
                              Interval for the cap, aligned to the customer's
                              billing cycle.
                          anchor:
                            enum:
                              - billing_cycle
                              - utc
                            type: string
                            description: >-
                              Window alignment. 'billing_cycle' phases the
                              interval to the customer's renewal time; 'utc'
                              aligns to the UTC calendar.
                          filter:
                            type: object
                            properties:
                              properties:
                                type: object
                                propertyNames:
                                  type: string
                                  minLength: 1
                                  maxLength: 64
                                additionalProperties:
                                  type: string
                            required:
                              - properties
                            description: >-
                              When set, only usage from events whose properties
                              match counts toward this cap. Omit to count all
                              usage of the feature.
                        required:
                          - feature_id
                          - limit
                          - interval
                      description: >-
                        List of hard usage caps per feature (max units per
                        interval).
                    usage_alerts:
                      type: array
                      items:
                        type: object
                        properties:
                          feature_id:
                            type: string
                            description: The feature ID this alert applies to.
                          enabled:
                            type: boolean
                            default: true
                            description: Whether this usage alert is enabled.
                          threshold:
                            type: number
                            minimum: 0
                            description: >-
                              The threshold value that triggers the alert. For
                              usage or remaining, this is an absolute count. For
                              usage_percentage or remaining_percentage, this is
                              a percentage (0-100).
                          threshold_type:
                            enum:
                              - usage
                              - usage_percentage
                              - remaining
                              - remaining_percentage
                            type: string
                            description: >-
                              Whether the threshold is an absolute count or a
                              percentage of the usage allowance or remaining
                              balance.
                          basis:
                            enum:
                              - balance
                              - included
                              - recurring
                              - usage_limit
                            type: string
                            default: balance
                            description: >-
                              What 100% means. balance: every grant on the
                              feature. included: the plan allowance only.
                              recurring: grants that reset. usage_limit: the cap
                              of the usage limit with the same feature and
                              filter.
                          filter:
                            type: object
                            properties:
                              properties:
                                type: object
                                propertyNames:
                                  type: string
                                  minLength: 1
                                  maxLength: 64
                                additionalProperties:
                                  type: string
                            required:
                              - properties
                            description: >-
                              Only valid with basis usage_limit. Points the
                              alert at the usage limit carrying the same filter.
                          name:
                            type: string
                            description: >-
                              Optional user-defined label to distinguish
                              multiple alerts on the same feature.
                        required:
                          - threshold
                          - threshold_type
                      description: List of usage alert configurations per feature.
                    overage_allowed:
                      type: array
                      items:
                        type: object
                        properties:
                          feature_id:
                            type: string
                            description: >-
                              The feature ID this overage allowed control
                              applies to.
                          enabled:
                            type: boolean
                            default: false
                            description: Whether overage is allowed for this feature.
                        required:
                          - feature_id
                      description: >-
                        List of overage allowed controls per feature. When
                        enabled, usage can exceed balance.
                  description: >-
                    Override the plan's billing controls (auto top-ups, spend
                    limits, usage limits, usage alerts, overage allowed) for
                    this customer.
                upsert_licenses:
                  type: array
                  items:
                    type: object
                    properties:
                      license_plan_id:
                        type: string
                      version_slug:
                        type: string
                      included:
                        type: integer
                        minimum: 0
                        maximum: 9007199254740991
                      prepaid_only:
                        type: boolean
                      customize:
                        anyOf:
                          - type: object
                            properties:
                              price:
                                anyOf:
                                  - type: object
                                    properties:
                                      amount:
                                        type: number
                                        description: >-
                                          Base price amount for the plan, in major
                                          currency units (e.g. dollars).
                                      interval:
                                        enum:
                                          - one_off
                                          - week
                                          - month
                                          - quarter
                                          - semi_annual
                                          - year
                                        type: string
                                        description: Billing interval (e.g. 'month', 'year').
                                      interval_count:
                                        type: number
                                        description: >-
                                          Number of intervals per billing cycle.
                                          Defaults to 1.
                                      additional_currencies:
                                        type: array
                                        items:
                                          type: object
                                          properties:
                                            currency:
                                              type: string
                                              description: >-
                                                Three-letter Stripe-supported currency
                                                code (e.g. 'eur', 'gbp').
                                            amount:
                                              type: number
                                              description: >-
                                                Price amount in this currency. Set
                                                explicitly per currency, not converted
                                                from the base amount.
                                          required:
                                            - currency
                                            - amount
                                        description: >-
                                          Base price amounts in additional
                                          currencies. The base 'amount' is in the
                                          org's default currency.
                                    required:
                                      - amount
                                      - interval
                                    title: BasePrice
                                    description: Base price configuration for a plan.
                                  - type: 'null'
                              add_items:
                                type: array
                                items:
                                  type: object
                                  properties:
                                    feature_id:
                                      type: string
                                      description: The ID of the feature to configure.
                                    included:
                                      type: number
                                      maximum: 10000000000000
                                      description: >-
                                        Number of free units included. Balance
                                        resets to this each interval for
                                        consumable features.
                                    unlimited:
                                      type: boolean
                                      description: >-
                                        If true, customer has unlimited access
                                        to this feature.
                                    pooled:
                                      type: boolean
                                      default: false
                                      description: >-
                                        Whether entity-level grants contribute
                                        to a shared customer balance.
                                    reset:
                                      type: object
                                      properties:
                                        interval:
                                          enum:
                                            - one_off
                                            - minute
                                            - hour
                                            - day
                                            - week
                                            - month
                                            - quarter
                                            - semi_annual
                                            - year
                                          type: string
                                          description: >-
                                            Interval at which balance resets (e.g.
                                            'month', 'year'). For consumable
                                            features only.
                                        interval_count:
                                          type: number
                                          description: >-
                                            Number of intervals between resets.
                                            Defaults to 1.
                                      required:
                                        - interval
                                      description: >-
                                        Reset configuration for consumable
                                        features. Omit for non-consumable
                                        features like seats.
                                    price:
                                      type: object
                                      properties:
                                        amount:
                                          type: number
                                          description: >-
                                            Price per billing_units after included
                                            usage. Either 'amount' or 'tiers' is
                                            required.
                                        additional_currencies:
                                          type: array
                                          items:
                                            type: object
                                            properties:
                                              currency:
                                                type: string
                                                description: >-
                                                  Three-letter Stripe-supported currency
                                                  code (e.g. 'eur', 'gbp').
                                              amount:
                                                type: number
                                                description: >-
                                                  Price amount in this currency. Set
                                                  explicitly per currency, not converted
                                                  from the base amount.
                                            required:
                                              - currency
                                              - amount
                                          description: >-
                                            Amounts in additional currencies for
                                            this flat price. The base 'amount' is in
                                            the org's default currency. Only valid
                                            with 'amount', not 'tiers'.
                                        tiers:
                                          type: array
                                          items:
                                            type: object
                                            properties:
                                              to:
                                                anyOf:
                                                  - type: number
                                                  - const: inf
                                              amount:
                                                type: number
                                              flat_amount:
                                                type: number
                                              additional_currencies:
                                                type: array
                                                items:
                                                  type: object
                                                  properties:
                                                    currency:
                                                      type: string
                                                      description: >-
                                                        Three-letter Stripe-supported currency
                                                        code (e.g. 'eur', 'gbp').
                                                    amount:
                                                      type: number
                                                      description: >-
                                                        Per-unit amount for this tier in this
                                                        currency.
                                                    flat_amount:
                                                      type: number
                                                      description: >-
                                                        Flat amount for this tier in this
                                                        currency, if the tier uses one.
                                                  required:
                                                    - currency
                                            required:
                                              - to
                                              - amount
                                          description: >-
                                            Tiered pricing.  Either 'amount' or
                                            'tiers' is required.
                                        tier_behavior:
                                          enum:
                                            - graduated
                                            - volume
                                          type: string
                                        interval:
                                          enum:
                                            - one_off
                                            - week
                                            - month
                                            - quarter
                                            - semi_annual
                                            - year
                                          type: string
                                          description: >-
                                            Billing interval. For consumable
                                            features, should match reset.interval.
                                        interval_count:
                                          type: number
                                          default: 1
                                          description: >-
                                            Number of intervals per billing cycle.
                                            Defaults to 1.
                                        billing_units:
                                          type: number
                                          default: 1
                                          description: >-
                                            Units per price increment. Usage is
                                            rounded UP when billed (e.g.
                                            billing_units=100 means 101 rounds to
                                            200).
                                        billing_method:
                                          enum:
                                            - prepaid
                                            - usage_based
                                          type: string
                                          description: >-
                                            'prepaid' for upfront payment (seats),
                                            'usage_based' for pay-as-you-go.
                                        max_purchase:
                                          anyOf:
                                            - type: number
                                            - type: 'null'
                                          description: >-
                                            Max units purchasable beyond included.
                                            E.g. included=100, max_purchase=300
                                            allows 400 total. Null for no limit.
                                      required:
                                        - interval
                                        - billing_method
                                      description: >-
                                        Pricing for usage beyond included units.
                                        Omit for free features.
                                    proration:
                                      type: object
                                      properties:
                                        on_increase:
                                          enum:
                                            - bill_immediately
                                            - prorate_immediately
                                            - prorate_next_cycle
                                            - bill_next_cycle
                                          type: string
                                          description: >-
                                            Billing behavior when quantity increases
                                            mid-cycle.
                                        on_decrease:
                                          enum:
                                            - prorate
                                            - prorate_immediately
                                            - prorate_next_cycle
                                            - none
                                            - no_prorations
                                          type: string
                                          description: >-
                                            Credit behavior when quantity decreases
                                            mid-cycle.
                                      required:
                                        - on_increase
                                        - on_decrease
                                      description: >-
                                        Proration settings for prepaid features.
                                        Controls mid-cycle quantity change
                                        billing.
                                    rollover:
                                      type: object
                                      properties:
                                        max:
                                          type: number
                                          description: >-
                                            Max rollover units. Omit for unlimited
                                            rollover.
                                        max_percentage:
                                          type: number
                                          description: >-
                                            Maximum rollover as a percentage (0-100)
                                            of included + prepaid grant. Mutually
                                            exclusive with max.
                                        expiry_duration_type:
                                          enum:
                                            - month
                                            - forever
                                          type: string
                                          description: When rolled over units expire.
                                        expiry_duration_length:
                                          type: number
                                          description: Number of periods before expiry.
                                      required:
                                        - expiry_duration_type
                                      description: >-
                                        Rollover config for unused units. If
                                        set, unused included units carry over.
                                    feature_override:
                                      type: object
                                      properties:
                                        credit_schema:
                                          type: array
                                          items:
                                            anyOf:
                                              - type: object
                                                properties:
                                                  metered_feature_id:
                                                    type: string
                                                    minLength: 1
                                                    description: >-
                                                      ID of the metered feature that draws
                                                      from this credit system.
                                                  billing_units:
                                                    type: number
                                                    exclusiveMinimum: 0
                                                    description: >-
                                                      Number of metered-feature units priced
                                                      together. Defaults to one when omitted.
                                                  dimensions:
                                                    type: object
                                                    propertyNames:
                                                      type: string
                                                      minLength: 1
                                                      maxLength: 64
                                                    additionalProperties:
                                                      anyOf:
                                                        - type: object
                                                          properties:
                                                            match:
                                                              type: object
                                                              propertyNames:
                                                                type: string
                                                              additionalProperties:
                                                                type: string
                                                              description: >-
                                                                Event properties this entry applies to.
                                                                Every key must equal the tracked
                                                                property, compared as strings.
                                                            priority:
                                                              type: integer
                                                              minimum: -9007199254740991
                                                              maximum: 9007199254740991
                                                              description: >-
                                                                Breaks ties between dimensions that
                                                                match the same number of keys. Higher
                                                                wins.
                                                            tier_behavior:
                                                              const: graduated
                                                            tiers:
                                                              type: array
                                                              minItems: 1
                                                              items:
                                                                type: object
                                                                properties:
                                                                  to:
                                                                    anyOf:
                                                                      - {}
                                                                      - {}
                                                                    description: >-
                                                                      Inclusive upper usage boundary for this
                                                                      graduated tier. The final tier must be
                                                                      'inf'.
                                                                  credit_cost:
                                                                    type: number
                                                                    minimum: 0
                                                                    description: >-
                                                                      Credits consumed per billing-unit group
                                                                      within this tier.
                                                                required:
                                                                  - to
                                                                  - credit_cost
                                                          required:
                                                            - match
                                                            - tier_behavior
                                                            - tiers
                                                          additionalProperties: false
                                                        - type: object
                                                          properties:
                                                            match:
                                                              type: object
                                                              propertyNames:
                                                                type: string
                                                              additionalProperties:
                                                                type: string
                                                              description: >-
                                                                Event properties this entry applies to.
                                                                Every key must equal the tracked
                                                                property, compared as strings.
                                                            priority:
                                                              type: integer
                                                              minimum: -9007199254740991
                                                              maximum: 9007199254740991
                                                              description: >-
                                                                Breaks ties between dimensions that
                                                                match the same number of keys. Higher
                                                                wins.
                                                            credit_cost:
                                                              type: number
                                                              minimum: 0
                                                              description: >-
                                                                Credits consumed per billing-unit group
                                                                when this dimension matches.
                                                          required:
                                                            - match
                                                            - credit_cost
                                                          additionalProperties: false
                                                    description: >-
                                                      Named rates chosen by event properties.
                                                      The most specific match sets the rate;
                                                      with no match the item's own rate
                                                      applies.
                                                  multipliers:
                                                    type: object
                                                    propertyNames:
                                                      type: string
                                                      minLength: 1
                                                      maxLength: 64
                                                    additionalProperties:
                                                      type: object
                                                      properties:
                                                        match:
                                                          type: object
                                                          propertyNames:
                                                            type: string
                                                          additionalProperties:
                                                            type: string
                                                          description: >-
                                                            Event properties this entry applies to.
                                                            Every key must equal the tracked
                                                            property, compared as strings.
                                                        factor:
                                                          type: number
                                                          exclusiveMinimum: 0
                                                          description: >-
                                                            Multiplies the matched rate. All
                                                            matching multipliers stack.
                                                        add:
                                                          type: number
                                                          description: >-
                                                            Added to the rate after every factor is
                                                            applied, in credits per billing-unit
                                                            group.
                                                      required:
                                                        - match
                                                      additionalProperties: false
                                                    description: >-
                                                      Named adjustments chosen by event
                                                      properties. Every match applies: factors
                                                      multiply, then adds are summed.
                                                  tier_behavior:
                                                    const: graduated
                                                  tiers:
                                                    type: array
                                                    minItems: 1
                                                    items:
                                                      type: object
                                                      properties:
                                                        to:
                                                          anyOf:
                                                            - type: number
                                                              exclusiveMinimum: 0
                                                            - enum:
                                                                - inf
                                                              type: string
                                                          description: >-
                                                            Inclusive upper usage boundary for this
                                                            graduated tier. The final tier must be
                                                            'inf'.
                                                        credit_cost:
                                                          type: number
                                                          minimum: 0
                                                          description: >-
                                                            Credits consumed per billing-unit group
                                                            within this tier.
                                                      required:
                                                        - to
                                                        - credit_cost
                                                required:
                                                  - metered_feature_id
                                                  - tier_behavior
                                                  - tiers
                                                additionalProperties: false
                                              - type: object
                                                properties:
                                                  metered_feature_id:
                                                    type: string
                                                    minLength: 1
                                                    description: >-
                                                      ID of the metered feature that draws
                                                      from this credit system.
                                                  billing_units:
                                                    type: number
                                                    exclusiveMinimum: 0
                                                    description: >-
                                                      Number of metered-feature units priced
                                                      together. Defaults to one when omitted.
                                                  dimensions:
                                                    type: object
                                                    propertyNames:
                                                      type: string
                                                      minLength: 1
                                                      maxLength: 64
                                                    additionalProperties:
                                                      anyOf:
                                                        - type: object
                                                          properties:
                                                            match:
                                                              type: object
                                                              propertyNames:
                                                                type: string
                                                              additionalProperties:
                                                                type: string
                                                              description: >-
                                                                Event properties this entry applies to.
                                                                Every key must equal the tracked
                                                                property, compared as strings.
                                                            priority:
                                                              type: integer
                                                              minimum: -9007199254740991
                                                              maximum: 9007199254740991
                                                              description: >-
                                                                Breaks ties between dimensions that
                                                                match the same number of keys. Higher
                                                                wins.
                                                            tier_behavior:
                                                              const: graduated
                                                            tiers:
                                                              type: array
                                                              minItems: 1
                                                              items:
                                                                type: object
                                                                properties:
                                                                  to:
                                                                    anyOf:
                                                                      - {}
                                                                      - {}
                                                                    description: >-
                                                                      Inclusive upper usage boundary for this
                                                                      graduated tier. The final tier must be
                                                                      'inf'.
                                                                  credit_cost:
                                                                    type: number
                                                                    minimum: 0
                                                                    description: >-
                                                                      Credits consumed per billing-unit group
                                                                      within this tier.
                                                                required:
                                                                  - to
                                                                  - credit_cost
                                                          required:
                                                            - match
                                                            - tier_behavior
                                                            - tiers
                                                          additionalProperties: false
                                                        - type: object
                                                          properties:
                                                            match:
                                                              type: object
                                                              propertyNames:
                                                                type: string
                                                              additionalProperties:
                                                                type: string
                                                              description: >-
                                                                Event properties this entry applies to.
                                                                Every key must equal the tracked
                                                                property, compared as strings.
                                                            priority:
                                                              type: integer
                                                              minimum: -9007199254740991
                                                              maximum: 9007199254740991
                                                              description: >-
                                                                Breaks ties between dimensions that
                                                                match the same number of keys. Higher
                                                                wins.
                                                            credit_cost:
                                                              type: number
                                                              minimum: 0
                                                              description: >-
                                                                Credits consumed per billing-unit group
                                                                when this dimension matches.
                                                          required:
                                                            - match
                                                            - credit_cost
                                                          additionalProperties: false
                                                    description: >-
                                                      Named rates chosen by event properties.
                                                      The most specific match sets the rate;
                                                      with no match the item's own rate
                                                      applies.
                                                  multipliers:
                                                    type: object
                                                    propertyNames:
                                                      type: string
                                                      minLength: 1
                                                      maxLength: 64
                                                    additionalProperties:
                                                      type: object
                                                      properties:
                                                        match:
                                                          type: object
                                                          propertyNames:
                                                            type: string
                                                          additionalProperties:
                                                            type: string
                                                          description: >-
                                                            Event properties this entry applies to.
                                                            Every key must equal the tracked
                                                            property, compared as strings.
                                                        factor:
                                                          type: number
                                                          exclusiveMinimum: 0
                                                          description: >-
                                                            Multiplies the matched rate. All
                                                            matching multipliers stack.
                                                        add:
                                                          type: number
                                                          description: >-
                                                            Added to the rate after every factor is
                                                            applied, in credits per billing-unit
                                                            group.
                                                      required:
                                                        - match
                                                      additionalProperties: false
                                                    description: >-
                                                      Named adjustments chosen by event
                                                      properties. Every match applies: factors
                                                      multiply, then adds are summed.
                                                  credit_cost:
                                                    type: number
                                                    minimum: 0
                                                    description: Credits consumed per billing-unit group.
                                                required:
                                                  - metered_feature_id
                                                  - credit_cost
                                                additionalProperties: false
                                          description: >-
                                            For credit system features: replaces the
                                            feature's credit_schema entirely for
                                            customers on this plan.
                                        markups:
                                          type: object
                                          properties:
                                            default_markup:
                                              type: number
                                              minimum: -100
                                              description: >-
                                                Default percentage markup for customers
                                                on this plan. Use -100 to make usage
                                                free.
                                            provider_markups:
                                              anyOf:
                                                - type: object
                                                  propertyNames:
                                                    type: string
                                                  additionalProperties:
                                                    type: object
                                                    properties:
                                                      markup:
                                                        type: number
                                                        minimum: -100
                                                    required:
                                                      - markup
                                                - type: 'null'
                                              description: >-
                                                Per-provider markup percentages for
                                                customers on this plan.
                                            model_markups:
                                              anyOf:
                                                - type: object
                                                  propertyNames:
                                                    type: string
                                                    pattern: .+\/.+
                                                  additionalProperties:
                                                    type: object
                                                    properties:
                                                      markup:
                                                        type: number
                                                        minimum: -100
                                                      input_cost:
                                                        type: number
                                                        minimum: 0
                                                      output_cost:
                                                        type: number
                                                        minimum: 0
                                                - type: 'null'
                                              description: >-
                                                Per-model markup overrides for customers
                                                on this plan.
                                          additionalProperties: false
                                          description: >-
                                            For AI credit system features: replaces
                                            the feature's markup chain entirely for
                                            customers on this plan. An unset level
                                            means no markup at that level rather
                                            than inheriting the feature's.
                                      additionalProperties: false
                                      description: >-
                                        Overrides fields of this item's feature
                                        for customers on this plan (e.g. a
                                        credit system's credit_schema).
                                  required:
                                    - feature_id
                                  title: PlanItem
                                  description: >-
                                    Configuration for a feature item in a plan,
                                    including usage limits, pricing, and
                                    rollover settings.
                              remove_items:
                                type: array
                                items:
                                  type: object
                                  properties:
                                    feature_id:
                                      type: string
                                      description: Match items linked to this feature.
                                    billing_method:
                                      enum:
                                        - prepaid
                                        - usage_based
                                      type: string
                                      description: >-
                                        Match items with this billing method
                                        (prepaid or usage_based).
                                    interval:
                                      anyOf:
                                        - enum:
                                            - one_off
                                            - week
                                            - month
                                            - quarter
                                            - semi_annual
                                            - year
                                          type: string
                                        - enum:
                                            - one_off
                                            - minute
                                            - hour
                                            - day
                                            - week
                                            - month
                                            - quarter
                                            - semi_annual
                                            - year
                                          type: string
                                      description: >-
                                        Match items with this interval. Accepts
                                        either a BillingInterval (price-side) or
                                        a ResetInterval (reset-side, includes
                                        day/hour/minute) so price-less items
                                        keyed by reset.interval can be
                                        disambiguated.
                                    interval_count:
                                      type: integer
                                      minimum: -9007199254740991
                                      maximum: 9007199254740991
                                      exclusiveMinimum: 0
                                      description: >-
                                        Match items with this interval_count.
                                        Disambiguates between items that share
                                        an interval but differ in count.
                                    included:
                                      type: number
                                      maximum: 10000000000000
                                      description: >-
                                        Match items whose grant equals this
                                        included usage. Omitted is a wildcard.
                                  title: PlanItemFilter
                                  description: >-
                                    Filter for matching plan items. All provided
                                    fields must match (AND).
                          - type: 'null'
                      metadata:
                        type: object
                        propertyNames:
                          type: string
                        additionalProperties: {}
                    required:
                      - license_plan_id
                  description: >-
                    License links to add or override for this customer, keyed by
                    license_plan_id. Omitted fields inherit the plan catalog
                    link (included defaults to 1 when the license is not in the
                    catalog). A bare entry restores the license to pure catalog
                    inheritance.
                remove_licenses:
                  type: array
                  items:
                    type: object
                    properties:
                      license_plan_id:
                        type: string
                    required:
                      - license_plan_id
                  description: >-
                    License links to drop, keyed by license_plan_id. Parallel to
                    remove_items.
              additionalProperties: false
              description: >-
                The customization that transforms the base plan into this
                variant.
          required:
            - base_plan_id
          description: Details about how this variant relates to its latest base plan.
      required:
        - id
        - name
        - description
        - group
        - version
        - add_on
        - auto_enable
        - price
        - items
        - created_at
        - env
        - archived
        - config
        - metadata
        - base_variant_id
    Balance:
      type: object
      properties:
        feature_id:
          type: string
          description: The feature ID this balance is for.
        feature:
          type: object
          properties:
            id:
              type: string
              description: >-
                The unique identifier for this feature, used in /check and
                /track calls.
            name:
              type: string
              description: Human-readable name displayed in the dashboard and billing UI.
            type:
              enum:
                - boolean
                - metered
                - credit_system
                - ai_credit_system
              type: string
              description: >-
                Feature type: 'boolean' for on/off access, 'metered' for
                usage-tracked features, 'credit_system' for unified credit
                pools, 'ai_credit_system' for model-based token pricing.
            consumable:
              type: boolean
              description: >-
                For metered features: true if usage resets periodically (API
                calls, credits), false if allocated persistently (seats,
                storage).
            event_names:
              type: array
              items:
                type: string
              description: >-
                Event names that trigger this feature's balance. Allows multiple
                features to respond to a single event.
            credit_schema:
              type: array
              items:
                anyOf:
                  - type: object
                    properties:
                      metered_feature_id:
                        type: string
                        minLength: 1
                        description: >-
                          ID of the metered feature that draws from this credit
                          system.
                      billing_units:
                        type: number
                        exclusiveMinimum: 0
                        description: >-
                          Number of metered-feature units priced together.
                          Defaults to one when omitted.
                      dimensions:
                        type: object
                        propertyNames:
                          type: string
                          minLength: 1
                          maxLength: 64
                        additionalProperties:
                          anyOf:
                            - type: object
                              properties:
                                match:
                                  type: object
                                  propertyNames:
                                    type: string
                                  additionalProperties:
                                    type: string
                                  description: >-
                                    Event properties this entry applies to.
                                    Every key must equal the tracked property,
                                    compared as strings.
                                priority:
                                  type: integer
                                  minimum: -9007199254740991
                                  maximum: 9007199254740991
                                  description: >-
                                    Breaks ties between dimensions that match
                                    the same number of keys. Higher wins.
                                tier_behavior:
                                  const: graduated
                                tiers:
                                  type: array
                                  minItems: 1
                                  items:
                                    type: object
                                    properties:
                                      to:
                                        anyOf:
                                          - type: number
                                            exclusiveMinimum: 0
                                          - enum:
                                              - inf
                                            type: string
                                        description: >-
                                          Inclusive upper usage boundary for this
                                          graduated tier. The final tier must be
                                          'inf'.
                                      credit_cost:
                                        type: number
                                        minimum: 0
                                        description: >-
                                          Credits consumed per billing-unit group
                                          within this tier.
                                    required:
                                      - to
                                      - credit_cost
                              required:
                                - match
                                - tier_behavior
                                - tiers
                              additionalProperties: false
                            - type: object
                              properties:
                                match:
                                  type: object
                                  propertyNames:
                                    type: string
                                  additionalProperties:
                                    type: string
                                  description: >-
                                    Event properties this entry applies to.
                                    Every key must equal the tracked property,
                                    compared as strings.
                                priority:
                                  type: integer
                                  minimum: -9007199254740991
                                  maximum: 9007199254740991
                                  description: >-
                                    Breaks ties between dimensions that match
                                    the same number of keys. Higher wins.
                                credit_cost:
                                  type: number
                                  minimum: 0
                                  description: >-
                                    Credits consumed per billing-unit group when
                                    this dimension matches.
                              required:
                                - match
                                - credit_cost
                              additionalProperties: false
                        description: >-
                          Named rates chosen by event properties. The most
                          specific match sets the rate; with no match the item's
                          own rate applies.
                      multipliers:
                        type: object
                        propertyNames:
                          type: string
                          minLength: 1
                          maxLength: 64
                        additionalProperties:
                          type: object
                          properties:
                            match:
                              type: object
                              propertyNames:
                                type: string
                              additionalProperties:
                                type: string
                              description: >-
                                Event properties this entry applies to. Every
                                key must equal the tracked property, compared as
                                strings.
                            factor:
                              type: number
                              exclusiveMinimum: 0
                              description: >-
                                Multiplies the matched rate. All matching
                                multipliers stack.
                            add:
                              type: number
                              description: >-
                                Added to the rate after every factor is applied,
                                in credits per billing-unit group.
                          required:
                            - match
                          additionalProperties: false
                        description: >-
                          Named adjustments chosen by event properties. Every
                          match applies: factors multiply, then adds are summed.
                      tier_behavior:
                        const: graduated
                      tiers:
                        type: array
                        minItems: 1
                        items:
                          type: object
                          properties:
                            to:
                              anyOf:
                                - type: number
                                  exclusiveMinimum: 0
                                - enum:
                                    - inf
                                  type: string
                              description: >-
                                Inclusive upper usage boundary for this
                                graduated tier. The final tier must be 'inf'.
                            credit_cost:
                              type: number
                              minimum: 0
                              description: >-
                                Credits consumed per billing-unit group within
                                this tier.
                          required:
                            - to
                            - credit_cost
                    required:
                      - metered_feature_id
                      - tier_behavior
                      - tiers
                    additionalProperties: false
                  - type: object
                    properties:
                      metered_feature_id:
                        type: string
                        minLength: 1
                        description: >-
                          ID of the metered feature that draws from this credit
                          system.
                      billing_units:
                        type: number
                        exclusiveMinimum: 0
                        description: >-
                          Number of metered-feature units priced together.
                          Defaults to one when omitted.
                      dimensions:
                        type: object
                        propertyNames:
                          type: string
                          minLength: 1
                          maxLength: 64
                        additionalProperties:
                          anyOf:
                            - type: object
                              properties:
                                match:
                                  type: object
                                  propertyNames:
                                    type: string
                                  additionalProperties:
                                    type: string
                                  description: >-
                                    Event properties this entry applies to.
                                    Every key must equal the tracked property,
                                    compared as strings.
                                priority:
                                  type: integer
                                  minimum: -9007199254740991
                                  maximum: 9007199254740991
                                  description: >-
                                    Breaks ties between dimensions that match
                                    the same number of keys. Higher wins.
                                tier_behavior:
                                  const: graduated
                                tiers:
                                  type: array
                                  minItems: 1
                                  items:
                                    type: object
                                    properties:
                                      to:
                                        anyOf:
                                          - type: number
                                            exclusiveMinimum: 0
                                          - enum:
                                              - inf
                                            type: string
                                        description: >-
                                          Inclusive upper usage boundary for this
                                          graduated tier. The final tier must be
                                          'inf'.
                                      credit_cost:
                                        type: number
                                        minimum: 0
                                        description: >-
                                          Credits consumed per billing-unit group
                                          within this tier.
                                    required:
                                      - to
                                      - credit_cost
                              required:
                                - match
                                - tier_behavior
                                - tiers
                              additionalProperties: false
                            - type: object
                              properties:
                                match:
                                  type: object
                                  propertyNames:
                                    type: string
                                  additionalProperties:
                                    type: string
                                  description: >-
                                    Event properties this entry applies to.
                                    Every key must equal the tracked property,
                                    compared as strings.
                                priority:
                                  type: integer
                                  minimum: -9007199254740991
                                  maximum: 9007199254740991
                                  description: >-
                                    Breaks ties between dimensions that match
                                    the same number of keys. Higher wins.
                                credit_cost:
                                  type: number
                                  minimum: 0
                                  description: >-
                                    Credits consumed per billing-unit group when
                                    this dimension matches.
                              required:
                                - match
                                - credit_cost
                              additionalProperties: false
                        description: >-
                          Named rates chosen by event properties. The most
                          specific match sets the rate; with no match the item's
                          own rate applies.
                      multipliers:
                        type: object
                        propertyNames:
                          type: string
                          minLength: 1
                          maxLength: 64
                        additionalProperties:
                          type: object
                          properties:
                            match:
                              type: object
                              propertyNames:
                                type: string
                              additionalProperties:
                                type: string
                              description: >-
                                Event properties this entry applies to. Every
                                key must equal the tracked property, compared as
                                strings.
                            factor:
                              type: number
                              exclusiveMinimum: 0
                              description: >-
                                Multiplies the matched rate. All matching
                                multipliers stack.
                            add:
                              type: number
                              description: >-
                                Added to the rate after every factor is applied,
                                in credits per billing-unit group.
                          required:
                            - match
                          additionalProperties: false
                        description: >-
                          Named adjustments chosen by event properties. Every
                          match applies: factors multiply, then adds are summed.
                      credit_cost:
                        type: number
                        minimum: 0
                        description: Credits consumed per billing-unit group.
                    required:
                      - metered_feature_id
                      - credit_cost
                    additionalProperties: false
                  - type: object
                    properties:
                      metered_feature_id:
                        const: ''
                      billing_units:
                        type: number
                        exclusiveMinimum: 0
                        description: >-
                          Number of metered-feature units priced together.
                          Defaults to one when omitted.
                      dimensions:
                        type: object
                        propertyNames:
                          type: string
                          minLength: 1
                          maxLength: 64
                        additionalProperties:
                          anyOf:
                            - type: object
                              properties:
                                match:
                                  type: object
                                  propertyNames:
                                    type: string
                                  additionalProperties:
                                    type: string
                                  description: >-
                                    Event properties this entry applies to.
                                    Every key must equal the tracked property,
                                    compared as strings.
                                priority:
                                  type: integer
                                  minimum: -9007199254740991
                                  maximum: 9007199254740991
                                  description: >-
                                    Breaks ties between dimensions that match
                                    the same number of keys. Higher wins.
                                tier_behavior:
                                  const: graduated
                                tiers:
                                  type: array
                                  minItems: 1
                                  items:
                                    type: object
                                    properties:
                                      to:
                                        anyOf:
                                          - type: number
                                            exclusiveMinimum: 0
                                          - enum:
                                              - inf
                                            type: string
                                        description: >-
                                          Inclusive upper usage boundary for this
                                          graduated tier. The final tier must be
                                          'inf'.
                                      credit_cost:
                                        type: number
                                        minimum: 0
                                        description: >-
                                          Credits consumed per billing-unit group
                                          within this tier.
                                    required:
                                      - to
                                      - credit_cost
                              required:
                                - match
                                - tier_behavior
                                - tiers
                              additionalProperties: false
                            - type: object
                              properties:
                                match:
                                  type: object
                                  propertyNames:
                                    type: string
                                  additionalProperties:
                                    type: string
                                  description: >-
                                    Event properties this entry applies to.
                                    Every key must equal the tracked property,
                                    compared as strings.
                                priority:
                                  type: integer
                                  minimum: -9007199254740991
                                  maximum: 9007199254740991
                                  description: >-
                                    Breaks ties between dimensions that match
                                    the same number of keys. Higher wins.
                                credit_cost:
                                  type: number
                                  minimum: 0
                                  description: >-
                                    Credits consumed per billing-unit group when
                                    this dimension matches.
                              required:
                                - match
                                - credit_cost
                              additionalProperties: false
                        description: >-
                          Named rates chosen by event properties. The most
                          specific match sets the rate; with no match the item's
                          own rate applies.
                      multipliers:
                        type: object
                        propertyNames:
                          type: string
                          minLength: 1
                          maxLength: 64
                        additionalProperties:
                          type: object
                          properties:
                            match:
                              type: object
                              propertyNames:
                                type: string
                              additionalProperties:
                                type: string
                              description: >-
                                Event properties this entry applies to. Every
                                key must equal the tracked property, compared as
                                strings.
                            factor:
                              type: number
                              exclusiveMinimum: 0
                              description: >-
                                Multiplies the matched rate. All matching
                                multipliers stack.
                            add:
                              type: number
                              description: >-
                                Added to the rate after every factor is applied,
                                in credits per billing-unit group.
                          required:
                            - match
                          additionalProperties: false
                        description: >-
                          Named adjustments chosen by event properties. Every
                          match applies: factors multiply, then adds are summed.
                      credit_cost:
                        type: number
                        minimum: 0
                        description: Credits consumed per billing-unit group.
                    required:
                      - metered_feature_id
                      - credit_cost
                    additionalProperties: false
              description: >-
                For classic credit systems: maps metered features to flat or
                graduated credit costs.
            invoice_credit:
              type: boolean
              description: >-
                Whether usage of this classic credit system should be itemized
                as invoice credits.
            model_markups:
              anyOf:
                - type: object
                  propertyNames:
                    type: string
                    pattern: .+\/.+
                  additionalProperties:
                    type: object
                    properties:
                      markup:
                        type: number
                        minimum: -100
                      input_cost:
                        type: number
                        minimum: 0
                      output_cost:
                        type: number
                        minimum: 0
                - type: 'null'
              description: Per-model markup overrides for AI credit systems.
            default_markup:
              type: number
              minimum: -100
              description: >-
                Default percentage markup for AI credit systems. Use -100 to
                make usage free.
            provider_markups:
              anyOf:
                - type: object
                  propertyNames:
                    type: string
                  additionalProperties:
                    type: object
                    properties:
                      markup:
                        type: number
                        minimum: -100
                    required:
                      - markup
                - type: 'null'
              description: Per-provider default markup percentages for AI credit systems.
            display:
              type: object
              properties:
                singular:
                  anyOf:
                    - type: string
                    - type: 'null'
                  description: Singular form for UI display (e.g., 'API call', 'seat').
                plural:
                  anyOf:
                    - type: string
                    - type: 'null'
                  description: Plural form for UI display (e.g., 'API calls', 'seats').
              description: >-
                Display names for the feature in billing UI and customer-facing
                components.
            archived:
              type: boolean
              description: Whether the feature is archived and hidden from the dashboard.
            processors:
              type: object
              properties:
                stripe:
                  type: object
                  properties:
                    product_id:
                      type: string
                      description: >-
                        Stripe product ID this feature's usage prices bill
                        under.
                    meter_id:
                      type: string
                      description: >-
                        Stripe meter ID used to create this feature's metered
                        price.
              description: >-
                Processor mappings for this feature. Present when a Stripe
                product or meter is set.
          required:
            - id
            - name
            - type
            - consumable
            - archived
          description: The full feature object if expanded.
        granted:
          type: number
          description: Total balance granted (included + prepaid).
        remaining:
          type: number
          minimum: 0
          description: Remaining balance available for use.
        usage:
          type: number
          description: Total usage consumed in the current period.
        unlimited:
          type: boolean
          description: Whether this feature has unlimited usage.
        overage_allowed:
          type: boolean
          description: >-
            Whether usage beyond the granted balance is allowed (with overage
            charges).
        max_purchase:
          anyOf:
            - type: number
            - type: 'null'
          description: >-
            Maximum quantity that can be purchased as a top-up, or null for
            unlimited.
        next_reset_at:
          anyOf:
            - type: number
            - type: 'null'
          description: Timestamp when the balance will reset, or null for no reset.
        breakdown:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                default: ''
                description: The unique identifier for this balance breakdown.
              plan_id:
                anyOf:
                  - type: string
                  - type: 'null'
                description: >-
                  The plan ID this balance originates from, or null for
                  standalone balances.
              included_grant:
                type: number
                description: Amount granted from the plan's included usage.
              prepaid_grant:
                type: number
                description: Amount granted from prepaid purchases or top-ups.
              remaining:
                type: number
                description: Remaining balance available for use.
              usage:
                type: number
                description: Amount consumed in the current period.
              unlimited:
                type: boolean
                description: Whether this balance has unlimited usage.
              reset:
                anyOf:
                  - type: object
                    properties:
                      interval:
                        anyOf:
                          - enum:
                              - one_off
                              - minute
                              - hour
                              - day
                              - week
                              - month
                              - quarter
                              - semi_annual
                              - year
                            type: string
                          - const: multiple
                        description: >-
                          The reset interval (hour, day, week, month, etc.) or
                          'multiple' if combined from different intervals.
                      interval_count:
                        type: number
                        description: >-
                          Number of intervals between resets (eg. 2 for
                          bi-monthly).
                      resets_at:
                        anyOf:
                          - type: number
                          - type: 'null'
                        description: Timestamp when the balance will next reset.
                    required:
                      - interval
                      - resets_at
                  - type: 'null'
                description: Reset configuration for this balance, or null if no reset.
              price:
                anyOf:
                  - type: object
                    properties:
                      amount:
                        type: number
                        description: The per-unit price amount.
                      tiers:
                        type: array
                        items:
                          type: object
                          properties:
                            to:
                              anyOf:
                                - type: number
                                - const: inf
                            amount:
                              type: number
                            flat_amount:
                              type: number
                          required:
                            - to
                            - amount
                        description: Tiered pricing configuration if applicable.
                      tier_behavior:
                        enum:
                          - graduated
                          - volume
                        type: string
                        description: >-
                          How tiers are applied: graduated (split across bands)
                          or volume (flat rate for the matched tier).
                      billing_units:
                        type: number
                        description: >-
                          The number of units per billing increment (eg. $9 /
                          250 units).
                      billing_method:
                        enum:
                          - prepaid
                          - usage_based
                        type: string
                        description: Whether usage is prepaid or billed pay-per-use.
                      max_purchase:
                        anyOf:
                          - type: number
                          - type: 'null'
                        description: >-
                          Maximum quantity that can be purchased, or null for
                          unlimited.
                    required:
                      - billing_units
                      - billing_method
                      - max_purchase
                  - type: 'null'
                description: Pricing configuration if this balance has usage-based pricing.
              expires_at:
                anyOf:
                  - type: number
                  - type: 'null'
                description: >-
                  Timestamp when this balance expires, or null for no
                  expiration.
            required:
              - plan_id
              - included_grant
              - prepaid_grant
              - remaining
              - usage
              - unlimited
              - reset
              - price
              - expires_at
          description: >-
            Detailed breakdown of balance sources when stacking multiple plans
            or grants.
        rollovers:
          type: array
          items:
            type: object
            properties:
              granted:
                type: number
                description: >-
                  Amount originally rolled over from a previous period, before
                  any of it was consumed.
              balance:
                type: number
                description: Amount of balance rolled over from a previous period.
              expires_at:
                type: number
                description: Timestamp when the rollover balance expires.
            required:
              - granted
              - balance
              - expires_at
          description: Rollover balances carried over from previous periods.
      required:
        - feature_id
        - granted
        - remaining
        - usage
        - unlimited
        - overage_allowed
        - max_purchase
        - next_reset_at
      examples:
        - feature_id: messages
          granted: 100
          remaining: 72
          usage: 28
          unlimited: false
          overage_allowed: false
          max_purchase: null
          next_reset_at: 1773851121437
          breakdown:
            - id: cus_ent_39qmLooixXLAqMywgXywjAz96rV
              plan_id: pro_plan
              included_grant: 100
              prepaid_grant: 0
              remaining: 72
              usage: 28
              unlimited: false
              reset:
                interval: month
                resets_at: 1773851121437
              price: null
              expires_at: null
  securitySchemes:
    secretKey:
      type: http
      scheme: bearer
      bearerFormat: JWT

````