UNPKG

orb-billing

Version:

The official TypeScript library for the Orb API

1,684 lines (1,404 loc) 113 kB
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. import { APIResource } from '../../core/resource'; import * as Shared from '../shared'; import * as ExternalPlanIDAPI from './external-plan-id'; import { ExternalPlanID, ExternalPlanIDCreatePlanVersionParams, ExternalPlanIDFetchPlanVersionParams, ExternalPlanIDSetDefaultPlanVersionParams, } from './external-plan-id'; import * as PlansAPI from '../plans/plans'; import { APIPromise } from '../../core/api-promise'; import { RequestOptions } from '../../internal/request-options'; import { path } from '../../internal/utils/path'; /** * 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 class Beta extends APIResource { externalPlanID: ExternalPlanIDAPI.ExternalPlanID = new ExternalPlanIDAPI.ExternalPlanID(this._client); /** * This endpoint allows the creation of a new plan version for an existing plan. */ createPlanVersion( planID: string, body: BetaCreatePlanVersionParams, options?: RequestOptions, ): APIPromise<PlanVersion> { return this._client.post(path`/plans/${planID}/versions`, { body, ...options }); } /** * This endpoint is used to fetch a plan version. It returns the phases, prices, * and adjustments present on this version of the plan. */ fetchPlanVersion( version: string, params: BetaFetchPlanVersionParams, options?: RequestOptions, ): APIPromise<PlanVersion> { const { plan_id } = params; return this._client.get(path`/plans/${plan_id}/versions/${version}`, options); } /** * This endpoint allows setting the default version of a plan. */ setDefaultPlanVersion( planID: string, body: BetaSetDefaultPlanVersionParams, options?: RequestOptions, ): APIPromise<PlansAPI.Plan> { return this._client.post(path`/plans/${planID}/set_default_version`, { body, ...options }); } } /** * The PlanVersion resource represents the prices and adjustments present on a * specific version of a plan. */ export interface PlanVersion { /** * 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 | PlanVersion.PlanPhaseTieredPercentageDiscountAdjustment | Shared.PlanPhaseMinimumAdjustment | Shared.PlanPhaseMaximumAdjustment >; created_at: string; plan_phases: Array<PlanVersionPhase> | null; /** * Prices for this plan. If the plan has phases, this includes prices across all * phases of the plan. */ prices: Array<Shared.Price>; version: number; } export namespace PlanVersion { export interface PlanPhaseTieredPercentageDiscountAdjustment { id: string; adjustment_type: 'tiered_percentage_discount'; /** * @deprecated The price IDs that this adjustment applies to. */ applies_to_price_ids: Array<string>; /** * The filters that determine which prices to apply this adjustment to. */ filters: Array<PlanPhaseTieredPercentageDiscountAdjustment.Filter>; /** * True for adjustments that apply to an entire invoice, false for adjustments that * apply to only one price. */ is_invoice_level: boolean; /** * The plan phase in which this adjustment is active. */ plan_phase_order: number | null; /** * The reason for the adjustment. */ reason: string | null; /** * The adjustment id this adjustment replaces. This adjustment will take the place * of the replaced adjustment in plan version migrations. */ replaces_adjustment_id: string | null; /** * The ordered, contiguous bands of cumulative eligible spend, each discounted at * its own percentage (progressive fill-a-tier), applied to the prices this * adjustment covers in a given billing period. */ tiers: Array<PlanPhaseTieredPercentageDiscountAdjustment.Tier>; } export namespace PlanPhaseTieredPercentageDiscountAdjustment { export interface Filter { /** * The property of the price to filter on. */ field: 'price_id' | 'item_id' | 'price_type' | 'currency' | 'pricing_unit_id'; /** * Should prices that match the filter be included or excluded. */ operator: 'includes' | 'excludes'; /** * The IDs or values that match this filter. */ values: Array<string>; } /** * One band of a tiered percentage discount. Bounds are denominated in the * discount's currency. `lower_bound` is the exclusive start of the band and * `upper_bound` is the inclusive end; `upper_bound` is null only for the * open-ended final tier. */ export interface Tier { /** * Exclusive lower bound of cumulative spend for this tier. */ lower_bound: number; /** * The percentage (between 0 and 1) discounted from spend that falls within this * tier. */ percentage: number; /** * Inclusive upper bound of cumulative spend for this tier; null for the final * open-ended tier. */ upper_bound?: number | null; } } } export interface PlanVersionPhase { id: string; description: string | 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; name: string; /** * Determines the ordering of the phase in a plan's lifecycle. 1 = first phase. */ order: number; } export interface BetaCreatePlanVersionParams { /** * New version number. */ version: number; /** * Additional adjustments to be added to the plan. */ add_adjustments?: Array<BetaCreatePlanVersionParams.AddAdjustment> | null; /** * Additional prices to be added to the plan. */ add_prices?: Array<BetaCreatePlanVersionParams.AddPrice> | null; /** * Adjustments to be removed from the plan. */ remove_adjustments?: Array<BetaCreatePlanVersionParams.RemoveAdjustment> | null; /** * Prices to be removed from the plan. */ remove_prices?: Array<BetaCreatePlanVersionParams.RemovePrice> | null; /** * Adjustments to be replaced with additional adjustments on the plan. */ replace_adjustments?: Array<BetaCreatePlanVersionParams.ReplaceAdjustment> | null; /** * Prices to be replaced with additional prices on the plan. */ replace_prices?: Array<BetaCreatePlanVersionParams.ReplacePrice> | null; /** * Set this new plan version as the default */ set_as_default?: boolean | null; } export namespace BetaCreatePlanVersionParams { export interface AddAdjustment { /** * The definition of a new adjustment to create and add to the plan. */ adjustment: | Shared.NewPercentageDiscount | Shared.NewUsageDiscount | Shared.NewAmountDiscount | Shared.NewMinimum | Shared.NewMaximum | AddAdjustment.NewTieredPercentageDiscount; /** * The phase to add this adjustment to. */ plan_phase_order?: number | null; } export namespace AddAdjustment { export interface NewTieredPercentageDiscount { adjustment_type: 'tiered_percentage_discount'; tiers: Array<NewTieredPercentageDiscount.Tier>; /** * If set, the adjustment will apply to every price on the subscription. */ applies_to_all?: true | null; /** * The set of item IDs to which this adjustment applies. */ applies_to_item_ids?: Array<string> | null; /** * The set of price IDs to which this adjustment applies. */ applies_to_price_ids?: Array<string> | null; /** * If set, only prices in the specified currency will have the adjustment applied. */ currency?: string | null; /** * A list of filters that determine which prices this adjustment will apply to. */ filters?: Array<NewTieredPercentageDiscount.Filter> | null; /** * When false, this adjustment will be applied to a single price. Otherwise, it * will be applied at the invoice level, possibly to multiple prices. */ is_invoice_level?: boolean; /** * If set, only prices of the specified type will have the adjustment applied. */ price_type?: 'usage' | 'fixed_in_advance' | 'fixed_in_arrears' | 'fixed' | 'in_arrears' | null; } export namespace NewTieredPercentageDiscount { export interface Tier { /** * Exclusive lower bound of cumulative spend for this tier. */ lower_bound: number; /** * The percentage (0-1) discounted from spend in this tier. */ percentage: number; /** * Inclusive upper bound of cumulative spend; null for the final open-ended tier. */ upper_bound?: number | null; } export interface Filter { /** * The property of the price to filter on. */ field: 'price_id' | 'item_id' | 'price_type' | 'currency' | 'pricing_unit_id'; /** * Should prices that match the filter be included or excluded. */ operator: 'includes' | 'excludes'; /** * The IDs or values that match this filter. */ values: Array<string>; } } } export interface AddPrice { /** * The allocation price to add to the plan. */ allocation_price?: Shared.NewAllocationPrice | null; /** * The license allocation price to add to the plan. */ license_allocation_price?: AddPrice.LicenseAllocationPrice | 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 | AddPrice.NewPlanBulkWithFiltersPrice | Shared.NewPlanPackagePrice | Shared.NewPlanMatrixPrice | Shared.NewPlanThresholdTotalAmountPrice | Shared.NewPlanTieredPackagePrice | Shared.NewPlanTieredWithMinimumPrice | Shared.NewPlanGroupedTieredPrice | AddPrice.NewPlanGroupedTieredMatrixPrice | Shared.NewPlanTieredPackageWithMinimumPrice | Shared.NewPlanPackageWithAllocationPrice | Shared.NewPlanUnitWithPercentPrice | Shared.NewPlanMatrixWithAllocationPrice | AddPrice.NewPlanMatrixWithThresholdDiscountsPrice | AddPrice.NewPlanTieredWithProrationPrice | Shared.NewPlanUnitWithProrationPrice | Shared.NewPlanGroupedAllocationPrice | Shared.NewPlanBulkWithProrationPrice | Shared.NewPlanGroupedWithProratedMinimumPrice | Shared.NewPlanGroupedWithMeteredMinimumPrice | AddPrice.NewPlanGroupedWithMinMaxThresholdsPrice | Shared.NewPlanMatrixWithDisplayNamePrice | Shared.NewPlanGroupedTieredPackagePrice | Shared.NewPlanMaxGroupTieredPackagePrice | Shared.NewPlanScalableMatrixWithUnitPricingPrice | Shared.NewPlanScalableMatrixWithTieredPricingPrice | Shared.NewPlanCumulativeGroupedBulkPrice | AddPrice.NewPlanCumulativeGroupedAllocationPrice | AddPrice.NewPlanDailyCreditAllowancePrice | AddPrice.NewPlanMeteredAllowancePrice | Shared.NewPlanMinimumCompositePrice | AddPrice.NewPlanPercentCompositePrice | AddPrice.NewPlanEventOutputPrice | null; } export namespace AddPrice { /** * The license allocation price to add to the plan. */ export interface LicenseAllocationPrice { /** * 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; /** * License allocations to associate with this price. Each entry defines a * per-license credit pool granted each cadence. Requires license_type_id or * license_type_configuration to be set. */ license_allocations: Array<LicenseAllocationPrice.LicenseAllocation>; /** * The pricing model type */ model_type: 'unit'; /** * The name of the price. */ name: string; /** * Configuration for unit pricing */ unit_config: Shared.UnitConfig; /** * 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; /** * The ID of the license type to associate with this price. */ license_type_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; /** * A transient ID that can be used to reference this price when adding adjustments * in the same API call. */ reference_id?: string | null; } export namespace LicenseAllocationPrice { export interface LicenseAllocation { /** * The amount of credits granted per active license per cadence. */ amount: string; /** * The currency of the license allocation. */ currency: string; /** * When True, overage beyond the allocation is written off. */ write_off_overage?: boolean | null; } } export 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; /** * The ID of the license type to associate with this price. */ license_type_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; /** * A transient ID that can be used to reference this price when adding adjustments * in the same API call. */ reference_id?: string | null; } export namespace NewPlanBulkWithFiltersPrice { /** * Configuration for bulk_with_filters pricing */ export 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>; } export namespace BulkWithFiltersConfig { /** * Configuration for a single property filter */ export 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 */ export interface Tier { /** * Amount per unit */ unit_amount: string; /** * The lower bound for this tier */ tier_lower_bound?: string | null; } } } export interface NewPlanGroupedTieredMatrixPrice { /** * The cadence to bill for this price on. */ cadence: 'annual' | 'semi_annual' | 'monthly' | 'quarterly' | 'one_time' | 'custom'; /** * Configuration for grouped_tiered_matrix pricing */ grouped_tiered_matrix_config: NewPlanGroupedTieredMatrixPrice.GroupedTieredMatrixConfig; /** * The id of the item the price will be associated with. */ item_id: string; /** * The pricing model type */ model_type: 'grouped_tiered_matrix'; /** * 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; /** * The ID of the license type to associate with this price. */ license_type_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; /** * A transient ID that can be used to reference this price when adding adjustments * in the same API call. */ reference_id?: string | null; } export namespace NewPlanGroupedTieredMatrixPrice { /** * Configuration for grouped_tiered_matrix pricing */ export interface GroupedTieredMatrixConfig { /** * Per unit rate for usage whose dimension value has no configured tiers */ default_unit_amount: string; /** * The billable metric property used to group usage before tiering */ dimension: string; /** * Graduated tiers keyed by dimension value; usage for a value is tiered only * against its own rows */ tiers: Array<GroupedTieredMatrixConfig.Tier>; } export namespace GroupedTieredMatrixConfig { /** * Configuration for a single tier scoped to a dimension value */ export interface Tier { /** * The dimension value this tier applies to */ dimension_value: string; tier_lower_bound: string; /** * Per unit amount */ unit_amount: string; } } } export interface NewPlanMatrixWithThresholdDiscountsPrice { /** * 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; /** * Configuration for matrix_with_threshold_discounts pricing */ matrix_with_threshold_discounts_config: NewPlanMatrixWithThresholdDiscountsPrice.MatrixWithThresholdDiscountsConfig; /** * The pricing model type */ model_type: 'matrix_with_threshold_discounts'; /** * 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; /** * The ID of the license type to associate with this price. */ license_type_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; /** * A transient ID that can be used to reference this price when adding adjustments * in the same API call. */ reference_id?: string | null; } export namespace NewPlanMatrixWithThresholdDiscountsPrice { /** * Configuration for matrix_with_threshold_discounts pricing */ export interface MatrixWithThresholdDiscountsConfig { /** * Unit price used for usage that does not match any defined matrix cell. */ default_unit_amount: string; /** * First matrix dimension key. */ first_dimension: string; /** * Per-cell unit prices. */ matrix_values: Array<MatrixWithThresholdDiscountsConfig.MatrixValue>; /** * Optional second matrix dimension key. */ second_dimension?: string | null; threshold_discount_groups?: Array<MatrixWithThresholdDiscountsConfig.ThresholdDiscountGroup>; } export namespace MatrixWithThresholdDiscountsConfig { export interface MatrixValue { first_dimension_value: string; unit_amount: string; second_dimension_value?: string | null; } export interface ThresholdDiscountGroup { /** * Discount rate applied to spend above the threshold. */ above_threshold_discount_percentage: string; /** * Discount rate applied to spend at or below the threshold. Set to 0 for no * baseline discount. */ below_threshold_discount_percentage: string; /** * Semicolon-separated list of matrix cell coordinates targeted by this group. Each * coordinate is `first,second` when the matrix has two dimensions, or just `first` * for a single-dimension matrix. Example: `blue,circle;green,triangle`. */ cell_coordinates: string; threshold_amount: string; description?: string | null; } } } export 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; /** * The ID of the license type to associate with this price. */ license_type_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; /** * A transient ID that can be used to reference this price when adding adjustments * in the same API call. */ reference_id?: string | null; } export namespace NewPlanTieredWithProrationPrice { /** * Configuration for tiered_with_proration pricing */ export interface TieredWithProrationConfig { /** * Tiers for rating based on total usage quantities into the specified tier with * proration */ tiers: Array<TieredWithProrationConfig.Tier>; } export namespace TieredWithProrationConfig { /** * Configuration for a single tiered with proration tier */ export interface Tier { /** * Inclusive tier starting value */ tier_lower_bound: string; /** * Amount per unit */ unit_amount: string; } } } export 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; /** * The ID of the license type to associate with this price. */ license_type_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; /** * A transient ID that can be used to reference this price when adding adjustments * in the same API call. */ reference_id?: string | null; } export namespace NewPlanGroupedWithMinMaxThresholdsPrice { /** * Configuration for grouped_with_min_max_thresholds pricing */ export 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; } } export 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; /** * The ID of the license type to associate with this price. */ license_type_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; /** * A transient ID that can be used to reference this price when adding adjustments * in the same API call. */ reference_id?: string | null; } export namespace NewPlanCumulativeGroupedAllocationPrice { /** * Configuration for cumulative_grouped_allocation pricing */ export 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; } } export interface NewPlanDailyCreditAllowancePrice { /** * The cadence to bill for this price on. */ cadence: 'annual' | 'semi_annual' | 'monthly' | 'quarterly' | 'one_time' | 'custom'; /** * Configuration for daily_credit_allowance pricing */ daily_credit_allowance_config: NewPlanDailyCreditAllowancePrice.DailyCreditAllowanceConfig; /** * The id of the item the price will be associated with. */ item_id: string; /** * The pricing model type */ model_type: 'daily_credit_allowance'; /** * 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; /** * The ID of the license type to associate with this price. */ license_type_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; /** * A transient ID that can be used to reference this price when adding adjustments * in the same API call. */ reference_id?: string | null; } export namespace NewPlanDailyCreditAllowancePrice { /** * Configuration for daily_credit_allowance pricing */ export interface DailyCreditAllowanceConfig { /** * Credits granted per day. Lose-it-or-use-it; does not roll over. */ daily_allowance: string; /** * Default per-unit credit rate for any usage not bucketed into a specified * matrix_value */ default_unit_amount: string; /** * One or two event property values to evaluate matrix groups by */ dimensions: Array<string | null>; /** * Event property whose value identifies the day bucket the event belongs to (e.g. * 'event_day' set to an ISO date string in the customer's timezone). The allowance * resets per distinct value of this property. */ event_day_property: string; /** * Per-dimension credit rates */ matrix_values: Array<DailyCreditAllowanceConfig.MatrixValue>; } export namespace DailyCreditAllowanceConfig { /** * Per-dimension credit price for the daily credit allowance model. */ export interface MatrixValue { /** * One or two matrix keys to filter usage to this value by. For example, ["model"] * could be used to apply a different credit rate to each AI model. */ dimension_values: Array<string | null>; /** * Credits charged per unit of usage matching the specified dimension_values */ unit_amount: string; } } } export interface NewPlanMeteredAllowancePrice { /** * 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; /** * Configuration for metered_allowance pricing */ metered_allowance_config: NewPlanMeteredAllowancePrice.MeteredAllowanceConfig; /** * The pricing model type */ model_type: 'metered_allowance'; /** * 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; /** * The ID of the license type to associate with this price. */ license_type_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; /** * A transient ID that can be used to reference this price when adding adjustments * in the same API call. */ reference_id?: string | null; } export namespace NewPlanMeteredAllowancePrice { /** * Configuration for metered_allowance pricing */ export interface MeteredAllowanceConfig { /**