import { APIResource } from "../../resource.js";
import * as Core from "../../core.js";
import * as Shared from "../shared.js";
import * as ExternalPlanIDAPI from "./external-plan-id.js";
import { ExternalPlanID, ExternalPlanIDUpdateParams } from "./external-plan-id.js";
import { Page, type PageParams } from "../../pagination.js";
export declare class Plans extends APIResource {
    externalPlanId: ExternalPlanIDAPI.ExternalPlanID;
    /**
     * This endpoint allows creation of plans including their prices.
     */
    create(body: PlanCreateParams, options?: Core.RequestOptions): Core.APIPromise<Plan>;
    /**
     * This endpoint can be used to update the `external_plan_id`, and `metadata` of an
     * existing plan.
     *
     * Other fields on a plan are currently immutable.
     */
    update(planId: string, body: PlanUpdateParams, options?: Core.RequestOptions): Core.APIPromise<Plan>;
    /**
     * This endpoint returns a list of all [plans](/core-concepts#plan-and-price) for
     * an account in a list format. The list of plans is ordered starting from the most
     * recently created plan. The response also includes
     * [`pagination_metadata`](/api-reference/pagination), which lets the caller
     * retrieve the next page of results if they exist.
     */
    list(query?: PlanListParams, options?: Core.RequestOptions): Core.PagePromise<PlansPage, Plan>;
    list(options?: Core.RequestOptions): Core.PagePromise<PlansPage, Plan>;
    /**
     * This endpoint is used to fetch [plan](/core-concepts#plan-and-price) details
     * given a plan identifier. It returns information about the prices included in the
     * plan and their configuration, as well as the product that the plan is attached
     * to.
     *
     * ## Serialized prices
     *
     * Orb supports a few different pricing models out of the box. Each of these models
     * is serialized differently in a given [Price](/core-concepts#plan-and-price)
     * object. The `model_type` field determines the key for the configuration object
     * that is present. A detailed explanation of price types can be found in the
     * [Price schema](/core-concepts#plan-and-price).
     *
     * ## Phases
     *
     * Orb supports plan phases, also known as contract ramps. For plans with phases,
     * the serialized prices refer to all prices across all phases.
     */
    fetch(planId: string, options?: Core.RequestOptions): Core.APIPromise<Plan>;
}
export declare class PlansPage extends Page<Plan> {
}
/**
 * The [Plan](/core-concepts#plan-and-price) resource represents a plan that can be
 * subscribed to by a customer. Plans define the billing behavior of the
 * subscription. You can see more about how to configure prices in the
 * [Price resource](/reference/price).
 */
export interface Plan {
    id: string;
    /**
     * Adjustments for this plan. If the plan has phases, this includes adjustments
     * across all phases of the plan.
     */
    adjustments: Array<Shared.PlanPhaseUsageDiscountAdjustment | Shared.PlanPhaseAmountDiscountAdjustment | Shared.PlanPhasePercentageDiscountAdjustment | Shared.PlanPhaseMinimumAdjustment | Shared.PlanPhaseMaximumAdjustment>;
    /**
     * @deprecated Legacy field representing the parent plan if the current plan is a
     * 'child plan', overriding prices from the parent.
     */
    base_plan: Plan.BasePlan | null;
    /**
     * @deprecated Legacy field representing the parent plan ID if the current plan is
     * a 'child plan', overriding prices from the parent.
     */
    base_plan_id: string | null;
    created_at: string;
    /**
     * @deprecated An ISO 4217 currency string or custom pricing unit (`credits`) for
     * this plan's prices.
     */
    currency: string;
    /**
     * The default memo text on the invoices corresponding to subscriptions on this
     * plan. Note that each subscription may configure its own memo.
     */
    default_invoice_memo: string | null;
    description: string;
    /**
     * @deprecated
     */
    discount: Shared.Discount | null;
    /**
     * An optional user-defined ID for this plan resource, used throughout the system
     * as an alias for this Plan. Use this field to identify a plan by an existing
     * identifier in your system.
     */
    external_plan_id: string | null;
    /**
     * An ISO 4217 currency string for which this plan is billed in. Matches `currency`
     * unless `currency` is a custom pricing unit.
     */
    invoicing_currency: string;
    /**
     * @deprecated
     */
    maximum: Shared.Maximum | null;
    /**
     * @deprecated
     */
    maximum_amount: string | null;
    /**
     * User specified key-value pairs for the resource. If not present, this defaults
     * to an empty dictionary. Individual keys can be removed by setting the value to
     * `null`, and the entire metadata mapping can be cleared by setting `metadata` to
     * `null`.
     */
    metadata: {
        [key: string]: string;
    };
    /**
     * @deprecated
     */
    minimum: Shared.Minimum | null;
    /**
     * @deprecated
     */
    minimum_amount: string | null;
    name: string;
    /**
     * Determines the difference between the invoice issue date and the due date. A
     * value of "0" here signifies that invoices are due on issue, whereas a value of
     * "30" means that the customer has a month to pay the invoice before its overdue.
     * Note that individual subscriptions or invoices may set a different net terms
     * configuration.
     */
    net_terms: number | null;
    plan_phases: Array<Plan.PlanPhase> | null;
    /**
     * Prices for this plan. If the plan has phases, this includes prices across all
     * phases of the plan.
     */
    prices: Array<Shared.Price>;
    product: Plan.Product;
    status: 'active' | 'archived' | 'draft';
    trial_config: Plan.TrialConfig;
    version: number;
}
export declare namespace Plan {
    /**
     * @deprecated Legacy field representing the parent plan if the current plan is a
     * 'child plan', overriding prices from the parent.
     */
    interface BasePlan {
        id: string | null;
        /**
         * An optional user-defined ID for this plan resource, used throughout the system
         * as an alias for this Plan. Use this field to identify a plan by an existing
         * identifier in your system.
         */
        external_plan_id: string | null;
        name: string | null;
    }
    interface PlanPhase {
        id: string;
        description: string | null;
        discount: Shared.Discount | null;
        /**
         * How many terms of length `duration_unit` this phase is active for. If null, this
         * phase is evergreen and active indefinitely
         */
        duration: number | null;
        duration_unit: 'daily' | 'monthly' | 'quarterly' | 'semi_annual' | 'annual' | null;
        maximum: Shared.Maximum | null;
        maximum_amount: string | null;
        minimum: Shared.Minimum | null;
        minimum_amount: string | null;
        name: string;
        /**
         * Determines the ordering of the phase in a plan's lifecycle. 1 = first phase.
         */
        order: number;
    }
    interface Product {
        id: string;
        created_at: string;
        name: string;
    }
    interface TrialConfig {
        trial_period: number | null;
        trial_period_unit: 'days';
    }
}
export interface PlanCreateParams {
    /**
     * An ISO 4217 currency string for invoices generated by subscriptions on this
     * plan.
     */
    currency: string;
    name: string;
    /**
     * Prices for this plan. If the plan has phases, this includes prices across all
     * phases of the plan.
     */
    prices: Array<PlanCreateParams.Price>;
    /**
     * Adjustments for this plan. If the plan has phases, this includes adjustments
     * across all phases of the plan.
     */
    adjustments?: Array<PlanCreateParams.Adjustment> | null;
    /**
     * Free-form text which is available on the invoice PDF and the Orb invoice portal.
     */
    default_invoice_memo?: string | null;
    external_plan_id?: string | null;
    /**
     * User-specified key/value pairs for the resource. Individual keys can be removed
     * by setting the value to `null`, and the entire metadata mapping can be cleared
     * by setting `metadata` to `null`.
     */
    metadata?: {
        [key: string]: string | null;
    } | null;
    /**
     * The net terms determines the difference between the invoice date and the issue
     * date for the invoice. If you intend the invoice to be due on issue, set this
     * to 0.
     */
    net_terms?: number | null;
    /**
     * Configuration of pre-defined phases, each with their own prices and adjustments.
     * Leave unspecified for plans with a single phase.
     */
    plan_phases?: Array<PlanCreateParams.PlanPhase> | null;
    /**
     * The status of the plan to create (either active or draft). If not specified,
     * this defaults to active.
     */
    status?: 'active' | 'draft';
}
export declare namespace PlanCreateParams {
    interface Price {
        /**
         * The allocation price to add to the plan.
         */
        allocation_price?: Shared.NewAllocationPrice | null;
        /**
         * The phase to add this price to.
         */
        plan_phase_order?: number | null;
        /**
         * New plan price request body params.
         */
        price?: Shared.NewPlanUnitPrice | Shared.NewPlanTieredPrice | Shared.NewPlanBulkPrice | Price.NewPlanBulkWithFiltersPrice | Shared.NewPlanPackagePrice | Shared.NewPlanMatrixPrice | Shared.NewPlanThresholdTotalAmountPrice | Shared.NewPlanTieredPackagePrice | Shared.NewPlanTieredWithMinimumPrice | Shared.NewPlanGroupedTieredPrice | Shared.NewPlanTieredPackageWithMinimumPrice | Shared.NewPlanPackageWithAllocationPrice | Shared.NewPlanUnitWithPercentPrice | Shared.NewPlanMatrixWithAllocationPrice | Price.NewPlanTieredWithProrationPrice | Shared.NewPlanUnitWithProrationPrice | Shared.NewPlanGroupedAllocationPrice | Shared.NewPlanBulkWithProrationPrice | Shared.NewPlanGroupedWithProratedMinimumPrice | Shared.NewPlanGroupedWithMeteredMinimumPrice | Price.NewPlanGroupedWithMinMaxThresholdsPrice | Shared.NewPlanMatrixWithDisplayNamePrice | Shared.NewPlanGroupedTieredPackagePrice | Shared.NewPlanMaxGroupTieredPackagePrice | Shared.NewPlanScalableMatrixWithUnitPricingPrice | Shared.NewPlanScalableMatrixWithTieredPricingPrice | Shared.NewPlanCumulativeGroupedBulkPrice | Price.NewPlanCumulativeGroupedAllocationPrice | Shared.NewPlanMinimumCompositePrice | Price.NewPlanPercentCompositePrice | Price.NewPlanEventOutputPrice | null;
    }
    namespace Price {
        interface NewPlanBulkWithFiltersPrice {
            /**
             * Configuration for bulk_with_filters pricing
             */
            bulk_with_filters_config: NewPlanBulkWithFiltersPrice.BulkWithFiltersConfig;
            /**
             * The cadence to bill for this price on.
             */
            cadence: 'annual' | 'semi_annual' | 'monthly' | 'quarterly' | 'one_time' | 'custom';
            /**
             * The id of the item the price will be associated with.
             */
            item_id: string;
            /**
             * The pricing model type
             */
            model_type: 'bulk_with_filters';
            /**
             * The name of the price.
             */
            name: string;
            /**
             * The id of the billable metric for the price. Only needed if the price is
             * usage-based.
             */
            billable_metric_id?: string | null;
            /**
             * If the Price represents a fixed cost, the price will be billed in-advance if
             * this is true, and in-arrears if this is false.
             */
            billed_in_advance?: boolean | null;
            /**
             * For custom cadence: specifies the duration of the billing period in days or
             * months.
             */
            billing_cycle_configuration?: Shared.NewBillingCycleConfiguration | null;
            /**
             * The per unit conversion rate of the price currency to the invoicing currency.
             */
            conversion_rate?: number | null;
            /**
             * The configuration for the rate of the price currency to the invoicing currency.
             */
            conversion_rate_config?: Shared.UnitConversionRateConfig | Shared.TieredConversionRateConfig | null;
            /**
             * An ISO 4217 currency string, or custom pricing unit identifier, in which this
             * price is billed.
             */
            currency?: string | null;
            /**
             * For dimensional price: specifies a price group and dimension values
             */
            dimensional_price_configuration?: Shared.NewDimensionalPriceConfiguration | null;
            /**
             * An alias for the price.
             */
            external_price_id?: string | null;
            /**
             * If the Price represents a fixed cost, this represents the quantity of units
             * applied.
             */
            fixed_price_quantity?: number | null;
            /**
             * The property used to group this price on an invoice
             */
            invoice_grouping_key?: string | null;
            /**
             * Within each billing cycle, specifies the cadence at which invoices are produced.
             * If unspecified, a single invoice is produced per billing cycle.
             */
            invoicing_cycle_configuration?: Shared.NewBillingCycleConfiguration | null;
            /**
             * User-specified key/value pairs for the resource. Individual keys can be removed
             * by setting the value to `null`, and the entire metadata mapping can be cleared
             * by setting `metadata` to `null`.
             */
            metadata?: {
                [key: string]: string | null;
            } | null;
            /**
             * A transient ID that can be used to reference this price when adding adjustments
             * in the same API call.
             */
            reference_id?: string | null;
        }
        namespace NewPlanBulkWithFiltersPrice {
            /**
             * Configuration for bulk_with_filters pricing
             */
            interface BulkWithFiltersConfig {
                /**
                 * Property filters to apply (all must match)
                 */
                filters: Array<BulkWithFiltersConfig.Filter>;
                /**
                 * Bulk tiers for rating based on total usage volume
                 */
                tiers: Array<BulkWithFiltersConfig.Tier>;
            }
            namespace BulkWithFiltersConfig {
                /**
                 * Configuration for a single property filter
                 */
                interface Filter {
                    /**
                     * Event property key to filter on
                     */
                    property_key: string;
                    /**
                     * Event property value to match
                     */
                    property_value: string;
                }
                /**
                 * Configuration for a single bulk pricing tier
                 */
                interface Tier {
                    /**
                     * Amount per unit
                     */
                    unit_amount: string;
                    /**
                     * The lower bound for this tier
                     */
                    tier_lower_bound?: string | null;
                }
            }
        }
        interface NewPlanTieredWithProrationPrice {
            /**
             * The cadence to bill for this price on.
             */
            cadence: 'annual' | 'semi_annual' | 'monthly' | 'quarterly' | 'one_time' | 'custom';
            /**
             * The id of the item the price will be associated with.
             */
            item_id: string;
            /**
             * The pricing model type
             */
            model_type: 'tiered_with_proration';
            /**
             * The name of the price.
             */
            name: string;
            /**
             * Configuration for tiered_with_proration pricing
             */
            tiered_with_proration_config: NewPlanTieredWithProrationPrice.TieredWithProrationConfig;
            /**
             * The id of the billable metric for the price. Only needed if the price is
             * usage-based.
             */
            billable_metric_id?: string | null;
            /**
             * If the Price represents a fixed cost, the price will be billed in-advance if
             * this is true, and in-arrears if this is false.
             */
            billed_in_advance?: boolean | null;
            /**
             * For custom cadence: specifies the duration of the billing period in days or
             * months.
             */
            billing_cycle_configuration?: Shared.NewBillingCycleConfiguration | null;
            /**
             * The per unit conversion rate of the price currency to the invoicing currency.
             */
            conversion_rate?: number | null;
            /**
             * The configuration for the rate of the price currency to the invoicing currency.
             */
            conversion_rate_config?: Shared.UnitConversionRateConfig | Shared.TieredConversionRateConfig | null;
            /**
             * An ISO 4217 currency string, or custom pricing unit identifier, in which this
             * price is billed.
             */
            currency?: string | null;
            /**
             * For dimensional price: specifies a price group and dimension values
             */
            dimensional_price_configuration?: Shared.NewDimensionalPriceConfiguration | null;
            /**
             * An alias for the price.
             */
            external_price_id?: string | null;
            /**
             * If the Price represents a fixed cost, this represents the quantity of units
             * applied.
             */
            fixed_price_quantity?: number | null;
            /**
             * The property used to group this price on an invoice
             */
            invoice_grouping_key?: string | null;
            /**
             * Within each billing cycle, specifies the cadence at which invoices are produced.
             * If unspecified, a single invoice is produced per billing cycle.
             */
            invoicing_cycle_configuration?: Shared.NewBillingCycleConfiguration | null;
            /**
             * User-specified key/value pairs for the resource. Individual keys can be removed
             * by setting the value to `null`, and the entire metadata mapping can be cleared
             * by setting `metadata` to `null`.
             */
            metadata?: {
                [key: string]: string | null;
            } | null;
            /**
             * A transient ID that can be used to reference this price when adding adjustments
             * in the same API call.
             */
            reference_id?: string | null;
        }
        namespace NewPlanTieredWithProrationPrice {
            /**
             * Configuration for tiered_with_proration pricing
             */
            interface TieredWithProrationConfig {
                /**
                 * Tiers for rating based on total usage quantities into the specified tier with
                 * proration
                 */
                tiers: Array<TieredWithProrationConfig.Tier>;
            }
            namespace TieredWithProrationConfig {
                /**
                 * Configuration for a single tiered with proration tier
                 */
                interface Tier {
                    /**
                     * Inclusive tier starting value
                     */
                    tier_lower_bound: string;
                    /**
                     * Amount per unit
                     */
                    unit_amount: string;
                }
            }
        }
        interface NewPlanGroupedWithMinMaxThresholdsPrice {
            /**
             * The cadence to bill for this price on.
             */
            cadence: 'annual' | 'semi_annual' | 'monthly' | 'quarterly' | 'one_time' | 'custom';
            /**
             * Configuration for grouped_with_min_max_thresholds pricing
             */
            grouped_with_min_max_thresholds_config: NewPlanGroupedWithMinMaxThresholdsPrice.GroupedWithMinMaxThresholdsConfig;
            /**
             * The id of the item the price will be associated with.
             */
            item_id: string;
            /**
             * The pricing model type
             */
            model_type: 'grouped_with_min_max_thresholds';
            /**
             * The name of the price.
             */
            name: string;
            /**
             * The id of the billable metric for the price. Only needed if the price is
             * usage-based.
             */
            billable_metric_id?: string | null;
            /**
             * If the Price represents a fixed cost, the price will be billed in-advance if
             * this is true, and in-arrears if this is false.
             */
            billed_in_advance?: boolean | null;
            /**
             * For custom cadence: specifies the duration of the billing period in days or
             * months.
             */
            billing_cycle_configuration?: Shared.NewBillingCycleConfiguration | null;
            /**
             * The per unit conversion rate of the price currency to the invoicing currency.
             */
            conversion_rate?: number | null;
            /**
             * The configuration for the rate of the price currency to the invoicing currency.
             */
            conversion_rate_config?: Shared.UnitConversionRateConfig | Shared.TieredConversionRateConfig | null;
            /**
             * An ISO 4217 currency string, or custom pricing unit identifier, in which this
             * price is billed.
             */
            currency?: string | null;
            /**
             * For dimensional price: specifies a price group and dimension values
             */
            dimensional_price_configuration?: Shared.NewDimensionalPriceConfiguration | null;
            /**
             * An alias for the price.
             */
            external_price_id?: string | null;
            /**
             * If the Price represents a fixed cost, this represents the quantity of units
             * applied.
             */
            fixed_price_quantity?: number | null;
            /**
             * The property used to group this price on an invoice
             */
            invoice_grouping_key?: string | null;
            /**
             * Within each billing cycle, specifies the cadence at which invoices are produced.
             * If unspecified, a single invoice is produced per billing cycle.
             */
            invoicing_cycle_configuration?: Shared.NewBillingCycleConfiguration | null;
            /**
             * User-specified key/value pairs for the resource. Individual keys can be removed
             * by setting the value to `null`, and the entire metadata mapping can be cleared
             * by setting `metadata` to `null`.
             */
            metadata?: {
                [key: string]: string | null;
            } | null;
            /**
             * A transient ID that can be used to reference this price when adding adjustments
             * in the same API call.
             */
            reference_id?: string | null;
        }
        namespace NewPlanGroupedWithMinMaxThresholdsPrice {
            /**
             * Configuration for grouped_with_min_max_thresholds pricing
             */
            interface GroupedWithMinMaxThresholdsConfig {
                /**
                 * The event property used to group before applying thresholds
                 */
                grouping_key: string;
                /**
                 * The maximum amount to charge each group
                 */
                maximum_charge: string;
                /**
                 * The minimum amount to charge each group, regardless of usage
                 */
                minimum_charge: string;
                /**
                 * The base price charged per group
                 */
                per_unit_rate: string;
            }
        }
        interface NewPlanCumulativeGroupedAllocationPrice {
            /**
             * The cadence to bill for this price on.
             */
            cadence: 'annual' | 'semi_annual' | 'monthly' | 'quarterly' | 'one_time' | 'custom';
            /**
             * Configuration for cumulative_grouped_allocation pricing
             */
            cumulative_grouped_allocation_config: NewPlanCumulativeGroupedAllocationPrice.CumulativeGroupedAllocationConfig;
            /**
             * The id of the item the price will be associated with.
             */
            item_id: string;
            /**
             * The pricing model type
             */
            model_type: 'cumulative_grouped_allocation';
            /**
             * The name of the price.
             */
            name: string;
            /**
             * The id of the billable metric for the price. Only needed if the price is
             * usage-based.
             */
            billable_metric_id?: string | null;
            /**
             * If the Price represents a fixed cost, the price will be billed in-advance if
             * this is true, and in-arrears if this is false.
             */
            billed_in_advance?: boolean | null;
            /**
             * For custom cadence: specifies the duration of the billing period in days or
             * months.
             */
            billing_cycle_configuration?: Shared.NewBillingCycleConfiguration | null;
            /**
             * The per unit conversion rate of the price currency to the invoicing currency.
             */
            conversion_rate?: number | null;
            /**
             * The configuration for the rate of the price currency to the invoicing currency.
             */
            conversion_rate_config?: Shared.UnitConversionRateConfig | Shared.TieredConversionRateConfig | null;
            /**
             * An ISO 4217 currency string, or custom pricing unit identifier, in which this
             * price is billed.
             */
            currency?: string | null;
            /**
             * For dimensional price: specifies a price group and dimension values
             */
            dimensional_price_configuration?: Shared.NewDimensionalPriceConfiguration | null;
            /**
             * An alias for the price.
             */
            external_price_id?: string | null;
            /**
             * If the Price represents a fixed cost, this represents the quantity of units
             * applied.
             */
            fixed_price_quantity?: number | null;
            /**
             * The property used to group this price on an invoice
             */
            invoice_grouping_key?: string | null;
            /**
             * Within each billing cycle, specifies the cadence at which invoices are produced.
             * If unspecified, a single invoice is produced per billing cycle.
             */
            invoicing_cycle_configuration?: Shared.NewBillingCycleConfiguration | null;
            /**
             * User-specified key/value pairs for the resource. Individual keys can be removed
             * by setting the value to `null`, and the entire metadata mapping can be cleared
             * by setting `metadata` to `null`.
             */
            metadata?: {
                [key: string]: string | null;
            } | null;
            /**
             * A transient ID that can be used to reference this price when adding adjustments
             * in the same API call.
             */
            reference_id?: string | null;
        }
        namespace NewPlanCumulativeGroupedAllocationPrice {
            /**
             * Configuration for cumulative_grouped_allocation pricing
             */
            interface CumulativeGroupedAllocationConfig {
                /**
                 * The overall allocation across all groups
                 */
                cumulative_allocation: string;
                /**
                 * The allocation per individual group
                 */
                group_allocation: string;
                /**
                 * The event property used to group usage before applying allocations
                 */
                grouping_key: string;
                /**
                 * The amount to charge for each unit outside of the allocation
                 */
                unit_amount: string;
            }
        }
        interface NewPlanPercentCompositePrice {
            /**
             * The cadence to bill for this price on.
             */
            cadence: 'annual' | 'semi_annual' | 'monthly' | 'quarterly' | 'one_time' | 'custom';
            /**
             * The id of the item the price will be associated with.
             */
            item_id: string;
            /**
             * The pricing model type
             */
            model_type: 'percent';
            /**
             * The name of the price.
             */
            name: string;
            /**
             * Configuration for percent pricing
             */
            percent_config: NewPlanPercentCompositePrice.PercentConfig;
            /**
             * The id of the billable metric for the price. Only needed if the price is
             * usage-based.
             */
            billable_metric_id?: string | null;
            /**
             * If the Price represents a fixed cost, the price will be billed in-advance if
             * this is true, and in-arrears if this is false.
             */
            billed_in_advance?: boolean | null;
            /**
             * For custom cadence: specifies the duration of the billing period in days or
             * months.
             */
            billing_cycle_configuration?: Shared.NewBillingCycleConfiguration | null;
            /**
             * The per unit conversion rate of the price currency to the invoicing currency.
             */
            conversion_rate?: number | null;
            /**
             * The configuration for the rate of the price currency to the invoicing currency.
             */
            conversion_rate_config?: Shared.UnitConversionRateConfig | Shared.TieredConversionRateConfig | null;
            /**
             * An ISO 4217 currency string, or custom pricing unit identifier, in which this
             * price is billed.
             */
            currency?: string | null;
            /**
             * For dimensional price: specifies a price group and dimension values
             */
            dimensional_price_configuration?: Shared.NewDimensionalPriceConfiguration | null;
            /**
             * An alias for the price.
             */
            external_price_id?: string | null;
            /**
             * If the Price represents a fixed cost, this represents the quantity of units
             * applied.
             */
            fixed_price_quantity?: number | null;
            /**
             * The property used to group this price on an invoice
             */
            invoice_grouping_key?: string | null;
            /**
             * Within each billing cycle, specifies the cadence at which invoices are produced.
             * If unspecified, a single invoice is produced per billing cycle.
             */
            invoicing_cycle_configuration?: Shared.NewBillingCycleConfiguration | null;
            /**
             * User-specified key/value pairs for the resource. Individual keys can be removed
             * by setting the value to `null`, and the entire metadata mapping can be cleared
             * by setting `metadata` to `null`.
             */
            metadata?: {
                [key: string]: string | null;
            } | null;
            /**
             * A transient ID that can be used to reference this price when adding adjustments
             * in the same API call.
             */
            reference_id?: string | null;
        }
        namespace NewPlanPercentCompositePrice {
            /**
             * Configuration for percent pricing
             */
            interface PercentConfig {
                /**
                 * What percent of the component subtotals to charge
                 */
                percent: number;
            }
        }
        interface NewPlanEventOutputPrice {
            /**
             * The cadence to bill for this price on.
             */
            cadence: 'annual' | 'semi_annual' | 'monthly' | 'quarterly' | 'one_time' | 'custom';
            /**
             * Configuration for event_output pricing
             */
            event_output_config: NewPlanEventOutputPrice.EventOutputConfig;
            /**
             * The id of the item the price will be associated with.
             */
            item_id: string;
            /**
             * The pricing model type
             */
            model_type: 'event_output';
            /**
             * The name of the price.
             */
            name: string;
            /**
             * The id of the billable metric for the price. Only needed if the price is
             * usage-based.
             */
            billable_metric_id?: string | null;
            /**
             * If the Price represents a fixed cost, the price will be billed in-advance if
             * this is true, and in-arrears if this is false.
             */
            billed_in_advance?: boolean | null;
            /**
             * For custom cadence: specifies the duration of the billing period in days or
             * months.
             */
            billing_cycle_configuration?: Shared.NewBillingCycleConfiguration | null;
            /**
             * The per unit conversion rate of the price currency to the invoicing currency.
             */
            conversion_rate?: number | null;
            /**
             * The configuration for the rate of the price currency to the invoicing currency.
             */
            conversion_rate_config?: Shared.UnitConversionRateConfig | Shared.TieredConversionRateConfig | null;
            /**
             * An ISO 4217 currency string, or custom pricing unit identifier, in which this
             * price is billed.
             */
            currency?: string | null;
            /**
             * For dimensional price: specifies a price group and dimension values
             */
            dimensional_price_configuration?: Shared.NewDimensionalPriceConfiguration | null;
            /**
             * An alias for the price.
             */
            external_price_id?: string | null;
            /**
             * If the Price represents a fixed cost, this represents the quantity of units
             * applied.
             */
            fixed_price_quantity?: number | null;
            /**
             * The property used to group this price on an invoice
             */
            invoice_grouping_key?: string | null;
            /**
             * Within each billing cycle, specifies the cadence at which invoices are produced.
             * If unspecified, a single invoice is produced per billing cycle.
             */
            invoicing_cycle_configuration?: Shared.NewBillingCycleConfiguration | null;
            /**
             * User-specified key/value pairs for the resource. Individual keys can be removed
             * by setting the value to `null`, and the entire metadata mapping can be cleared
             * by setting `metadata` to `null`.
             */
            metadata?: {
                [key: string]: string | null;
            } | null;
            /**
             * A transient ID that can be used to reference this price when adding adjustments
             * in the same API call.
             */
            reference_id?: string | null;
        }
        namespace NewPlanEventOutputPrice {
            /**
             * Configuration for event_output pricing
             */
            interface EventOutputConfig {
                /**
                 * The key in the event data to extract the unit rate from.
                 */
                unit_rating_key: string;
                /**
                 * If provided, this amount will be used as the unit rate when an event does not
                 * have a value for the `unit_rating_key`. If not provided, events missing a unit
                 * rate will be ignored.
                 */
                default_unit_rate?: string | null;
                /**
                 * An optional key in the event data to group by (e.g., event ID). All events will
                 * also be grouped by their unit rate.
                 */
                grouping_key?: string | null;
            }
        }
    }
    interface Adjustment {
        /**
         * The definition of a new adjustment to create and add to the plan.
         */
        adjustment: Shared.NewPercentageDiscount | Shared.NewUsageDiscount | Shared.NewAmountDiscount | Shared.NewMinimum | Shared.NewMaximum;
        /**
         * The phase to add this adjustment to.
         */
        plan_phase_order?: number | null;
    }
    interface PlanPhase {
        /**
         * Determines the ordering of the phase in a plan's lifecycle. 1 = first phase.
         */
        order: number;
        /**
         * Align billing cycle day with phase start date.
         */
        align_billing_with_phase_start_date?: boolean | null;
        /**
         * How many terms of length `duration_unit` this phase is active for. If null, this
         * phase is evergreen and active indefinitely
         */
        duration?: number | null;
        duration_unit?: 'daily' | 'monthly' | 'quarterly' | 'semi_annual' | 'annual' | null;
    }
}
export interface PlanUpdateParams {
    /**
     * An optional user-defined ID for this plan resource, used throughout the system
     * as an alias for this Plan. Use this field to identify a plan by an existing
     * identifier in your system.
     */
    external_plan_id?: string | null;
    /**
     * User-specified key/value pairs for the resource. Individual keys can be removed
     * by setting the value to `null`, and the entire metadata mapping can be cleared
     * by setting `metadata` to `null`.
     */
    metadata?: {
        [key: string]: string | null;
    } | null;
}
export interface PlanListParams extends PageParams {
    'created_at[gt]'?: string | null;
    'created_at[gte]'?: string | null;
    'created_at[lt]'?: string | null;
    'created_at[lte]'?: string | null;
    /**
     * The plan status to filter to ('active', 'archived', or 'draft').
     */
    status?: 'active' | 'archived' | 'draft';
}
export declare namespace Plans {
    export { type Plan as Plan, PlansPage as PlansPage, type PlanCreateParams as PlanCreateParams, type PlanUpdateParams as PlanUpdateParams, type PlanListParams as PlanListParams, };
    export { ExternalPlanID as ExternalPlanID, type ExternalPlanIDUpdateParams as ExternalPlanIDUpdateParams };
}
//# sourceMappingURL=plans.d.ts.map