diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 0c37ae42..4bce58a1 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.40.0" + ".": "1.41.0" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 1f2a18f2..cfcfd411 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 1.41.0 (2024-01-30) + +Full Changelog: [v1.40.0...v1.41.0](https://github.com/orbcorp/orb-python/compare/v1.40.0...v1.41.0) + +### Features + +* **api:** price schema updates ([#156](https://github.com/orbcorp/orb-python/issues/156)) ([e995c09](https://github.com/orbcorp/orb-python/commit/e995c090615a17b3f622b001639ff1a3f619006e)) + ## 1.40.0 (2024-01-30) Full Changelog: [v1.39.1...v1.40.0](https://github.com/orbcorp/orb-python/compare/v1.39.1...v1.40.0) diff --git a/pyproject.toml b/pyproject.toml index 5a501ca5..9dbe5897 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "orb-billing" -version = "1.40.0" +version = "1.41.0" description = "The official Python library for the orb API" readme = "README.md" license = "Apache-2.0" diff --git a/src/orb/_version.py b/src/orb/_version.py index b33348c6..bf3b7ea3 100644 --- a/src/orb/_version.py +++ b/src/orb/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. __title__ = "orb" -__version__ = "1.40.0" # x-release-please-version +__version__ = "1.41.0" # x-release-please-version diff --git a/src/orb/types/customers/cost_list_by_external_id_response.py b/src/orb/types/customers/cost_list_by_external_id_response.py index aab40b51..62f58111 100644 --- a/src/orb/types/customers/cost_list_by_external_id_response.py +++ b/src/orb/types/customers/cost_list_by_external_id_response.py @@ -1,41 +1,15 @@ # File generated from our OpenAPI spec by Stainless. -from typing import List, Union, Optional +from typing import List, Optional from datetime import datetime from ..price import Price from ..._models import BaseModel -__all__ = [ - "CostListByExternalIDResponse", - "Data", - "DataPerPriceCost", - "DataPerPriceCostPerPriceCost", - "DataPerPriceCostPerPriceCostPriceGroup", - "DataPerPriceCostPerPriceCostV2", - "DataPerPriceCostPerPriceCostV2PriceGroup", -] +__all__ = ["CostListByExternalIDResponse", "Data", "DataPerPriceCost"] -class DataPerPriceCostPerPriceCostPriceGroup(BaseModel): - grouping_key: str - """Grouping key to break down a single price's costs""" - - grouping_value: Optional[str] = None - - secondary_grouping_key: Optional[str] = None - """If the price is a matrix price, this is the second dimension key""" - - secondary_grouping_value: Optional[str] = None - - total: str - """Total costs for this group for the timeframe. - - Note that this does not account for any minimums or discounts. - """ - - -class DataPerPriceCostPerPriceCost(BaseModel): +class DataPerPriceCost(BaseModel): price: Price """ The Price resource represents a price that can be billed on a subscription, @@ -277,289 +251,10 @@ class DataPerPriceCostPerPriceCost(BaseModel): total: str """Price's contributions for the timeframe, including minimums and discounts.""" - price_groups: Optional[List[DataPerPriceCostPerPriceCostPriceGroup]] = None - """ - If a `group_by` attribute is passed in, array of costs per `grouping_key`, - `grouping_value` or `secondary_grouping_key`, `secondary_grouping_value`. - """ - quantity: Optional[float] = None """The price's quantity for the timeframe""" -class DataPerPriceCostPerPriceCostV2PriceGroup(BaseModel): - grouping_key: str - """Grouping key to break down a single price's costs""" - - grouping_value: Optional[str] = None - - secondary_grouping_key: Optional[str] = None - """If the price is a matrix price, this is the second dimension key""" - - secondary_grouping_value: Optional[str] = None - - total: str - """Total costs for this group for the timeframe. - - Note that this does not account for any minimums or discounts. - """ - - -class DataPerPriceCostPerPriceCostV2(BaseModel): - price: Price - """ - The Price resource represents a price that can be billed on a subscription, - resulting in a charge on an invoice in the form of an invoice line item. Prices - take a quantity and determine an amount to bill. - - Orb supports a few different pricing models out of the box. Each of these models - is serialized differently in a given Price object. The model_type field - determines the key for the configuration object that is present. - - ## Unit pricing - - With unit pricing, each unit costs a fixed amount. - - ```json - { - ... - "model_type": "unit", - "unit_config": { - "unit_amount": "0.50" - } - ... - } - ``` - - ## Tiered pricing - - In tiered pricing, the cost of a given unit depends on the tier range that it - falls into, where each tier range is defined by an upper and lower bound. For - example, the first ten units may cost $0.50 each and all units thereafter may - cost $0.10 each. - - ```json - { - ... - "model_type": "tiered", - "tiered_config": { - "tiers": [ - { - "first_unit": 1, - "last_unit": 10, - "unit_amount": "0.50" - }, - { - "first_unit": 11, - "last_unit": null, - "unit_amount": "0.10" - } - ] - } - ... - ``` - - ## Bulk pricing - - Bulk pricing applies when the number of units determine the cost of all units. - For example, if you've bought less than 10 units, they may each be $0.50 for a - total of $5.00. Once you've bought more than 10 units, all units may now be - priced at $0.40 (i.e. 101 units total would be $40.40). - - ```json - { - ... - "model_type": "bulk", - "bulk_config": { - "tiers": [ - { - "maximum_units": 10, - "unit_amount": "0.50" - }, - { - "maximum_units": 1000, - "unit_amount": "0.40" - } - ] - } - ... - } - ``` - - ## Package pricing - - Package pricing defines the size or granularity of a unit for billing purposes. - For example, if the package size is set to 5, then 4 units will be billed as 5 - and 6 units will be billed at 10. - - ```json - { - ... - "model_type": "package", - "package_config": { - "package_amount": "0.80", - "package_size": 10 - } - ... - } - ``` - - ## BPS pricing - - BPS pricing specifies a per-event (e.g. per-payment) rate in one hundredth of a - percent (the number of basis points to charge), as well as a cap per event to - assess. For example, this would allow you to assess a fee of 0.25% on every - payment you process, with a maximum charge of $25 per payment. - - ```json - { - ... - "model_type": "bps", - "bps_config": { - "bps": 125, - "per_unit_maximum": "11.00" - } - ... - } - ``` - - ## Bulk BPS pricing - - Bulk BPS pricing specifies BPS parameters in a tiered manner, dependent on the - total quantity across all events. Similar to bulk pricing, the BPS parameters of - a given event depends on the tier range that the billing period falls into. Each - tier range is defined by an upper bound. For example, after $1.5M of payment - volume is reached, each individual payment may have a lower cap or a smaller - take-rate. - - ```json - ... - "model_type": "bulk_bps", - "bulk_bps_config": { - "tiers": [ - { - "maximum_amount": "1000000.00", - "bps": 125, - "per_unit_maximum": "19.00" - }, - { - "maximum_amount": null, - "bps": 115, - "per_unit_maximum": "4.00" - } - ] - } - ... - } - ``` - - ## Tiered BPS pricing - - Tiered BPS pricing specifies BPS parameters in a graduated manner, where an - event's applicable parameter is a function of its marginal addition to the - period total. Similar to tiered pricing, the BPS parameters of a given event - depends on the tier range that it falls into, where each tier range is defined - by an upper and lower bound. For example, the first few payments may have a 0.8 - BPS take-rate and all payments after a specific volume may incur a take-rate of - 0.5 BPS each. - - ```json - ... - "model_type": "tiered_bps", - "tiered_bps_config": { - "tiers": [ - { - "minimum_amount": "0", - "maximum_amount": "1000000.00", - "bps": 125, - "per_unit_maximum": "19.00" - }, - { - "minimum_amount": "1000000.00", - "maximum_amount": null, - "bps": 115, - "per_unit_maximum": "4.00" - } - ] - } - ... - } - ``` - - ## Matrix pricing - - Matrix pricing defines a set of unit prices in a one or two-dimensional matrix. - `dimensions` defines the two event property values evaluated in this pricing - model. In a one-dimensional matrix, the second value is `null`. Every - configuration has a list of `matrix_values` which give the unit prices for - specified property values. In a one-dimensional matrix, the matrix values will - have `dimension_values` where the second value of the pair is null. If an event - does not match any of the dimension values in the matrix, it will resort to the - `default_unit_amount`. - - ```json - { - "model_type": "matrix" - "matrix_config": { - "default_unit_amount": "3.00", - "dimensions": [ - "cluster_name", - "region" - ], - "matrix_values": [ - { - "dimension_values": [ - "alpha", - "west" - ], - "unit_amount": "2.00" - }, - ... - ] - } - } - ``` - - ### Fixed fees - - Fixed fees are prices that are applied independent of usage quantities, and - follow unit pricing. They also have an additional parameter - `fixed_price_quantity`. If the Price represents a fixed cost, this represents - the quantity of units applied. - - ```json - { - ... - "id": "price_id", - "model_type": "unit", - "unit_config": { - "unit_amount": "2.00" - }, - "fixed_price_quantity": 3.0 - ... - } - ``` - """ - - subtotal: str - """Price's contributions for the timeframe, excluding any minimums and discounts.""" - - total: str - """Price's contributions for the timeframe, including minimums and discounts.""" - - price_groups: Optional[List[DataPerPriceCostPerPriceCostV2PriceGroup]] = None - """ - If a `group_by` attribute is passed in, array of costs per `grouping_key`, - `grouping_value` or `secondary_grouping_key`, `secondary_grouping_value`. - """ - - quantity: Optional[float] = None - """The price's quantity for the timeframe""" - - -DataPerPriceCost = Union[DataPerPriceCostPerPriceCost, DataPerPriceCostPerPriceCostV2] - - class Data(BaseModel): per_price_costs: List[DataPerPriceCost] diff --git a/src/orb/types/customers/cost_list_response.py b/src/orb/types/customers/cost_list_response.py index d0df0460..ef17096e 100644 --- a/src/orb/types/customers/cost_list_response.py +++ b/src/orb/types/customers/cost_list_response.py @@ -1,41 +1,15 @@ # File generated from our OpenAPI spec by Stainless. -from typing import List, Union, Optional +from typing import List, Optional from datetime import datetime from ..price import Price from ..._models import BaseModel -__all__ = [ - "CostListResponse", - "Data", - "DataPerPriceCost", - "DataPerPriceCostPerPriceCost", - "DataPerPriceCostPerPriceCostPriceGroup", - "DataPerPriceCostPerPriceCostV2", - "DataPerPriceCostPerPriceCostV2PriceGroup", -] +__all__ = ["CostListResponse", "Data", "DataPerPriceCost"] -class DataPerPriceCostPerPriceCostPriceGroup(BaseModel): - grouping_key: str - """Grouping key to break down a single price's costs""" - - grouping_value: Optional[str] = None - - secondary_grouping_key: Optional[str] = None - """If the price is a matrix price, this is the second dimension key""" - - secondary_grouping_value: Optional[str] = None - - total: str - """Total costs for this group for the timeframe. - - Note that this does not account for any minimums or discounts. - """ - - -class DataPerPriceCostPerPriceCost(BaseModel): +class DataPerPriceCost(BaseModel): price: Price """ The Price resource represents a price that can be billed on a subscription, @@ -277,289 +251,10 @@ class DataPerPriceCostPerPriceCost(BaseModel): total: str """Price's contributions for the timeframe, including minimums and discounts.""" - price_groups: Optional[List[DataPerPriceCostPerPriceCostPriceGroup]] = None - """ - If a `group_by` attribute is passed in, array of costs per `grouping_key`, - `grouping_value` or `secondary_grouping_key`, `secondary_grouping_value`. - """ - quantity: Optional[float] = None """The price's quantity for the timeframe""" -class DataPerPriceCostPerPriceCostV2PriceGroup(BaseModel): - grouping_key: str - """Grouping key to break down a single price's costs""" - - grouping_value: Optional[str] = None - - secondary_grouping_key: Optional[str] = None - """If the price is a matrix price, this is the second dimension key""" - - secondary_grouping_value: Optional[str] = None - - total: str - """Total costs for this group for the timeframe. - - Note that this does not account for any minimums or discounts. - """ - - -class DataPerPriceCostPerPriceCostV2(BaseModel): - price: Price - """ - The Price resource represents a price that can be billed on a subscription, - resulting in a charge on an invoice in the form of an invoice line item. Prices - take a quantity and determine an amount to bill. - - Orb supports a few different pricing models out of the box. Each of these models - is serialized differently in a given Price object. The model_type field - determines the key for the configuration object that is present. - - ## Unit pricing - - With unit pricing, each unit costs a fixed amount. - - ```json - { - ... - "model_type": "unit", - "unit_config": { - "unit_amount": "0.50" - } - ... - } - ``` - - ## Tiered pricing - - In tiered pricing, the cost of a given unit depends on the tier range that it - falls into, where each tier range is defined by an upper and lower bound. For - example, the first ten units may cost $0.50 each and all units thereafter may - cost $0.10 each. - - ```json - { - ... - "model_type": "tiered", - "tiered_config": { - "tiers": [ - { - "first_unit": 1, - "last_unit": 10, - "unit_amount": "0.50" - }, - { - "first_unit": 11, - "last_unit": null, - "unit_amount": "0.10" - } - ] - } - ... - ``` - - ## Bulk pricing - - Bulk pricing applies when the number of units determine the cost of all units. - For example, if you've bought less than 10 units, they may each be $0.50 for a - total of $5.00. Once you've bought more than 10 units, all units may now be - priced at $0.40 (i.e. 101 units total would be $40.40). - - ```json - { - ... - "model_type": "bulk", - "bulk_config": { - "tiers": [ - { - "maximum_units": 10, - "unit_amount": "0.50" - }, - { - "maximum_units": 1000, - "unit_amount": "0.40" - } - ] - } - ... - } - ``` - - ## Package pricing - - Package pricing defines the size or granularity of a unit for billing purposes. - For example, if the package size is set to 5, then 4 units will be billed as 5 - and 6 units will be billed at 10. - - ```json - { - ... - "model_type": "package", - "package_config": { - "package_amount": "0.80", - "package_size": 10 - } - ... - } - ``` - - ## BPS pricing - - BPS pricing specifies a per-event (e.g. per-payment) rate in one hundredth of a - percent (the number of basis points to charge), as well as a cap per event to - assess. For example, this would allow you to assess a fee of 0.25% on every - payment you process, with a maximum charge of $25 per payment. - - ```json - { - ... - "model_type": "bps", - "bps_config": { - "bps": 125, - "per_unit_maximum": "11.00" - } - ... - } - ``` - - ## Bulk BPS pricing - - Bulk BPS pricing specifies BPS parameters in a tiered manner, dependent on the - total quantity across all events. Similar to bulk pricing, the BPS parameters of - a given event depends on the tier range that the billing period falls into. Each - tier range is defined by an upper bound. For example, after $1.5M of payment - volume is reached, each individual payment may have a lower cap or a smaller - take-rate. - - ```json - ... - "model_type": "bulk_bps", - "bulk_bps_config": { - "tiers": [ - { - "maximum_amount": "1000000.00", - "bps": 125, - "per_unit_maximum": "19.00" - }, - { - "maximum_amount": null, - "bps": 115, - "per_unit_maximum": "4.00" - } - ] - } - ... - } - ``` - - ## Tiered BPS pricing - - Tiered BPS pricing specifies BPS parameters in a graduated manner, where an - event's applicable parameter is a function of its marginal addition to the - period total. Similar to tiered pricing, the BPS parameters of a given event - depends on the tier range that it falls into, where each tier range is defined - by an upper and lower bound. For example, the first few payments may have a 0.8 - BPS take-rate and all payments after a specific volume may incur a take-rate of - 0.5 BPS each. - - ```json - ... - "model_type": "tiered_bps", - "tiered_bps_config": { - "tiers": [ - { - "minimum_amount": "0", - "maximum_amount": "1000000.00", - "bps": 125, - "per_unit_maximum": "19.00" - }, - { - "minimum_amount": "1000000.00", - "maximum_amount": null, - "bps": 115, - "per_unit_maximum": "4.00" - } - ] - } - ... - } - ``` - - ## Matrix pricing - - Matrix pricing defines a set of unit prices in a one or two-dimensional matrix. - `dimensions` defines the two event property values evaluated in this pricing - model. In a one-dimensional matrix, the second value is `null`. Every - configuration has a list of `matrix_values` which give the unit prices for - specified property values. In a one-dimensional matrix, the matrix values will - have `dimension_values` where the second value of the pair is null. If an event - does not match any of the dimension values in the matrix, it will resort to the - `default_unit_amount`. - - ```json - { - "model_type": "matrix" - "matrix_config": { - "default_unit_amount": "3.00", - "dimensions": [ - "cluster_name", - "region" - ], - "matrix_values": [ - { - "dimension_values": [ - "alpha", - "west" - ], - "unit_amount": "2.00" - }, - ... - ] - } - } - ``` - - ### Fixed fees - - Fixed fees are prices that are applied independent of usage quantities, and - follow unit pricing. They also have an additional parameter - `fixed_price_quantity`. If the Price represents a fixed cost, this represents - the quantity of units applied. - - ```json - { - ... - "id": "price_id", - "model_type": "unit", - "unit_config": { - "unit_amount": "2.00" - }, - "fixed_price_quantity": 3.0 - ... - } - ``` - """ - - subtotal: str - """Price's contributions for the timeframe, excluding any minimums and discounts.""" - - total: str - """Price's contributions for the timeframe, including minimums and discounts.""" - - price_groups: Optional[List[DataPerPriceCostPerPriceCostV2PriceGroup]] = None - """ - If a `group_by` attribute is passed in, array of costs per `grouping_key`, - `grouping_value` or `secondary_grouping_key`, `secondary_grouping_value`. - """ - - quantity: Optional[float] = None - """The price's quantity for the timeframe""" - - -DataPerPriceCost = Union[DataPerPriceCostPerPriceCost, DataPerPriceCostPerPriceCostV2] - - class Data(BaseModel): per_price_costs: List[DataPerPriceCost] diff --git a/src/orb/types/subscription_fetch_costs_response.py b/src/orb/types/subscription_fetch_costs_response.py index 0506ea15..f661a74f 100644 --- a/src/orb/types/subscription_fetch_costs_response.py +++ b/src/orb/types/subscription_fetch_costs_response.py @@ -1,41 +1,15 @@ # File generated from our OpenAPI spec by Stainless. -from typing import List, Union, Optional +from typing import List, Optional from datetime import datetime from .price import Price from .._models import BaseModel -__all__ = [ - "SubscriptionFetchCostsResponse", - "Data", - "DataPerPriceCost", - "DataPerPriceCostPerPriceCost", - "DataPerPriceCostPerPriceCostPriceGroup", - "DataPerPriceCostPerPriceCostV2", - "DataPerPriceCostPerPriceCostV2PriceGroup", -] +__all__ = ["SubscriptionFetchCostsResponse", "Data", "DataPerPriceCost"] -class DataPerPriceCostPerPriceCostPriceGroup(BaseModel): - grouping_key: str - """Grouping key to break down a single price's costs""" - - grouping_value: Optional[str] = None - - secondary_grouping_key: Optional[str] = None - """If the price is a matrix price, this is the second dimension key""" - - secondary_grouping_value: Optional[str] = None - - total: str - """Total costs for this group for the timeframe. - - Note that this does not account for any minimums or discounts. - """ - - -class DataPerPriceCostPerPriceCost(BaseModel): +class DataPerPriceCost(BaseModel): price: Price """ The Price resource represents a price that can be billed on a subscription, @@ -277,289 +251,10 @@ class DataPerPriceCostPerPriceCost(BaseModel): total: str """Price's contributions for the timeframe, including minimums and discounts.""" - price_groups: Optional[List[DataPerPriceCostPerPriceCostPriceGroup]] = None - """ - If a `group_by` attribute is passed in, array of costs per `grouping_key`, - `grouping_value` or `secondary_grouping_key`, `secondary_grouping_value`. - """ - quantity: Optional[float] = None """The price's quantity for the timeframe""" -class DataPerPriceCostPerPriceCostV2PriceGroup(BaseModel): - grouping_key: str - """Grouping key to break down a single price's costs""" - - grouping_value: Optional[str] = None - - secondary_grouping_key: Optional[str] = None - """If the price is a matrix price, this is the second dimension key""" - - secondary_grouping_value: Optional[str] = None - - total: str - """Total costs for this group for the timeframe. - - Note that this does not account for any minimums or discounts. - """ - - -class DataPerPriceCostPerPriceCostV2(BaseModel): - price: Price - """ - The Price resource represents a price that can be billed on a subscription, - resulting in a charge on an invoice in the form of an invoice line item. Prices - take a quantity and determine an amount to bill. - - Orb supports a few different pricing models out of the box. Each of these models - is serialized differently in a given Price object. The model_type field - determines the key for the configuration object that is present. - - ## Unit pricing - - With unit pricing, each unit costs a fixed amount. - - ```json - { - ... - "model_type": "unit", - "unit_config": { - "unit_amount": "0.50" - } - ... - } - ``` - - ## Tiered pricing - - In tiered pricing, the cost of a given unit depends on the tier range that it - falls into, where each tier range is defined by an upper and lower bound. For - example, the first ten units may cost $0.50 each and all units thereafter may - cost $0.10 each. - - ```json - { - ... - "model_type": "tiered", - "tiered_config": { - "tiers": [ - { - "first_unit": 1, - "last_unit": 10, - "unit_amount": "0.50" - }, - { - "first_unit": 11, - "last_unit": null, - "unit_amount": "0.10" - } - ] - } - ... - ``` - - ## Bulk pricing - - Bulk pricing applies when the number of units determine the cost of all units. - For example, if you've bought less than 10 units, they may each be $0.50 for a - total of $5.00. Once you've bought more than 10 units, all units may now be - priced at $0.40 (i.e. 101 units total would be $40.40). - - ```json - { - ... - "model_type": "bulk", - "bulk_config": { - "tiers": [ - { - "maximum_units": 10, - "unit_amount": "0.50" - }, - { - "maximum_units": 1000, - "unit_amount": "0.40" - } - ] - } - ... - } - ``` - - ## Package pricing - - Package pricing defines the size or granularity of a unit for billing purposes. - For example, if the package size is set to 5, then 4 units will be billed as 5 - and 6 units will be billed at 10. - - ```json - { - ... - "model_type": "package", - "package_config": { - "package_amount": "0.80", - "package_size": 10 - } - ... - } - ``` - - ## BPS pricing - - BPS pricing specifies a per-event (e.g. per-payment) rate in one hundredth of a - percent (the number of basis points to charge), as well as a cap per event to - assess. For example, this would allow you to assess a fee of 0.25% on every - payment you process, with a maximum charge of $25 per payment. - - ```json - { - ... - "model_type": "bps", - "bps_config": { - "bps": 125, - "per_unit_maximum": "11.00" - } - ... - } - ``` - - ## Bulk BPS pricing - - Bulk BPS pricing specifies BPS parameters in a tiered manner, dependent on the - total quantity across all events. Similar to bulk pricing, the BPS parameters of - a given event depends on the tier range that the billing period falls into. Each - tier range is defined by an upper bound. For example, after $1.5M of payment - volume is reached, each individual payment may have a lower cap or a smaller - take-rate. - - ```json - ... - "model_type": "bulk_bps", - "bulk_bps_config": { - "tiers": [ - { - "maximum_amount": "1000000.00", - "bps": 125, - "per_unit_maximum": "19.00" - }, - { - "maximum_amount": null, - "bps": 115, - "per_unit_maximum": "4.00" - } - ] - } - ... - } - ``` - - ## Tiered BPS pricing - - Tiered BPS pricing specifies BPS parameters in a graduated manner, where an - event's applicable parameter is a function of its marginal addition to the - period total. Similar to tiered pricing, the BPS parameters of a given event - depends on the tier range that it falls into, where each tier range is defined - by an upper and lower bound. For example, the first few payments may have a 0.8 - BPS take-rate and all payments after a specific volume may incur a take-rate of - 0.5 BPS each. - - ```json - ... - "model_type": "tiered_bps", - "tiered_bps_config": { - "tiers": [ - { - "minimum_amount": "0", - "maximum_amount": "1000000.00", - "bps": 125, - "per_unit_maximum": "19.00" - }, - { - "minimum_amount": "1000000.00", - "maximum_amount": null, - "bps": 115, - "per_unit_maximum": "4.00" - } - ] - } - ... - } - ``` - - ## Matrix pricing - - Matrix pricing defines a set of unit prices in a one or two-dimensional matrix. - `dimensions` defines the two event property values evaluated in this pricing - model. In a one-dimensional matrix, the second value is `null`. Every - configuration has a list of `matrix_values` which give the unit prices for - specified property values. In a one-dimensional matrix, the matrix values will - have `dimension_values` where the second value of the pair is null. If an event - does not match any of the dimension values in the matrix, it will resort to the - `default_unit_amount`. - - ```json - { - "model_type": "matrix" - "matrix_config": { - "default_unit_amount": "3.00", - "dimensions": [ - "cluster_name", - "region" - ], - "matrix_values": [ - { - "dimension_values": [ - "alpha", - "west" - ], - "unit_amount": "2.00" - }, - ... - ] - } - } - ``` - - ### Fixed fees - - Fixed fees are prices that are applied independent of usage quantities, and - follow unit pricing. They also have an additional parameter - `fixed_price_quantity`. If the Price represents a fixed cost, this represents - the quantity of units applied. - - ```json - { - ... - "id": "price_id", - "model_type": "unit", - "unit_config": { - "unit_amount": "2.00" - }, - "fixed_price_quantity": 3.0 - ... - } - ``` - """ - - subtotal: str - """Price's contributions for the timeframe, excluding any minimums and discounts.""" - - total: str - """Price's contributions for the timeframe, including minimums and discounts.""" - - price_groups: Optional[List[DataPerPriceCostPerPriceCostV2PriceGroup]] = None - """ - If a `group_by` attribute is passed in, array of costs per `grouping_key`, - `grouping_value` or `secondary_grouping_key`, `secondary_grouping_value`. - """ - - quantity: Optional[float] = None - """The price's quantity for the timeframe""" - - -DataPerPriceCost = Union[DataPerPriceCostPerPriceCost, DataPerPriceCostPerPriceCostV2] - - class Data(BaseModel): per_price_costs: List[DataPerPriceCost]