Skip to content

Commit e995c09

Browse files
feat(api): price schema updates (#156)
1 parent 063de43 commit e995c09

File tree

3 files changed

+9
-924
lines changed

3 files changed

+9
-924
lines changed

src/orb/types/customers/cost_list_by_external_id_response.py

+3-308
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,15 @@
11
# File generated from our OpenAPI spec by Stainless.
22

3-
from typing import List, Union, Optional
3+
from typing import List, Optional
44
from datetime import datetime
55

66
from ..price import Price
77
from ..._models import BaseModel
88

9-
__all__ = [
10-
"CostListByExternalIDResponse",
11-
"Data",
12-
"DataPerPriceCost",
13-
"DataPerPriceCostPerPriceCost",
14-
"DataPerPriceCostPerPriceCostPriceGroup",
15-
"DataPerPriceCostPerPriceCostV2",
16-
"DataPerPriceCostPerPriceCostV2PriceGroup",
17-
]
9+
__all__ = ["CostListByExternalIDResponse", "Data", "DataPerPriceCost"]
1810

1911

20-
class DataPerPriceCostPerPriceCostPriceGroup(BaseModel):
21-
grouping_key: str
22-
"""Grouping key to break down a single price's costs"""
23-
24-
grouping_value: Optional[str] = None
25-
26-
secondary_grouping_key: Optional[str] = None
27-
"""If the price is a matrix price, this is the second dimension key"""
28-
29-
secondary_grouping_value: Optional[str] = None
30-
31-
total: str
32-
"""Total costs for this group for the timeframe.
33-
34-
Note that this does not account for any minimums or discounts.
35-
"""
36-
37-
38-
class DataPerPriceCostPerPriceCost(BaseModel):
12+
class DataPerPriceCost(BaseModel):
3913
price: Price
4014
"""
4115
The Price resource represents a price that can be billed on a subscription,
@@ -277,289 +251,10 @@ class DataPerPriceCostPerPriceCost(BaseModel):
277251
total: str
278252
"""Price's contributions for the timeframe, including minimums and discounts."""
279253

280-
price_groups: Optional[List[DataPerPriceCostPerPriceCostPriceGroup]] = None
281-
"""
282-
If a `group_by` attribute is passed in, array of costs per `grouping_key`,
283-
`grouping_value` or `secondary_grouping_key`, `secondary_grouping_value`.
284-
"""
285-
286254
quantity: Optional[float] = None
287255
"""The price's quantity for the timeframe"""
288256

289257

290-
class DataPerPriceCostPerPriceCostV2PriceGroup(BaseModel):
291-
grouping_key: str
292-
"""Grouping key to break down a single price's costs"""
293-
294-
grouping_value: Optional[str] = None
295-
296-
secondary_grouping_key: Optional[str] = None
297-
"""If the price is a matrix price, this is the second dimension key"""
298-
299-
secondary_grouping_value: Optional[str] = None
300-
301-
total: str
302-
"""Total costs for this group for the timeframe.
303-
304-
Note that this does not account for any minimums or discounts.
305-
"""
306-
307-
308-
class DataPerPriceCostPerPriceCostV2(BaseModel):
309-
price: Price
310-
"""
311-
The Price resource represents a price that can be billed on a subscription,
312-
resulting in a charge on an invoice in the form of an invoice line item. Prices
313-
take a quantity and determine an amount to bill.
314-
315-
Orb supports a few different pricing models out of the box. Each of these models
316-
is serialized differently in a given Price object. The model_type field
317-
determines the key for the configuration object that is present.
318-
319-
## Unit pricing
320-
321-
With unit pricing, each unit costs a fixed amount.
322-
323-
```json
324-
{
325-
...
326-
"model_type": "unit",
327-
"unit_config": {
328-
"unit_amount": "0.50"
329-
}
330-
...
331-
}
332-
```
333-
334-
## Tiered pricing
335-
336-
In tiered pricing, the cost of a given unit depends on the tier range that it
337-
falls into, where each tier range is defined by an upper and lower bound. For
338-
example, the first ten units may cost $0.50 each and all units thereafter may
339-
cost $0.10 each.
340-
341-
```json
342-
{
343-
...
344-
"model_type": "tiered",
345-
"tiered_config": {
346-
"tiers": [
347-
{
348-
"first_unit": 1,
349-
"last_unit": 10,
350-
"unit_amount": "0.50"
351-
},
352-
{
353-
"first_unit": 11,
354-
"last_unit": null,
355-
"unit_amount": "0.10"
356-
}
357-
]
358-
}
359-
...
360-
```
361-
362-
## Bulk pricing
363-
364-
Bulk pricing applies when the number of units determine the cost of all units.
365-
For example, if you've bought less than 10 units, they may each be $0.50 for a
366-
total of $5.00. Once you've bought more than 10 units, all units may now be
367-
priced at $0.40 (i.e. 101 units total would be $40.40).
368-
369-
```json
370-
{
371-
...
372-
"model_type": "bulk",
373-
"bulk_config": {
374-
"tiers": [
375-
{
376-
"maximum_units": 10,
377-
"unit_amount": "0.50"
378-
},
379-
{
380-
"maximum_units": 1000,
381-
"unit_amount": "0.40"
382-
}
383-
]
384-
}
385-
...
386-
}
387-
```
388-
389-
## Package pricing
390-
391-
Package pricing defines the size or granularity of a unit for billing purposes.
392-
For example, if the package size is set to 5, then 4 units will be billed as 5
393-
and 6 units will be billed at 10.
394-
395-
```json
396-
{
397-
...
398-
"model_type": "package",
399-
"package_config": {
400-
"package_amount": "0.80",
401-
"package_size": 10
402-
}
403-
...
404-
}
405-
```
406-
407-
## BPS pricing
408-
409-
BPS pricing specifies a per-event (e.g. per-payment) rate in one hundredth of a
410-
percent (the number of basis points to charge), as well as a cap per event to
411-
assess. For example, this would allow you to assess a fee of 0.25% on every
412-
payment you process, with a maximum charge of $25 per payment.
413-
414-
```json
415-
{
416-
...
417-
"model_type": "bps",
418-
"bps_config": {
419-
"bps": 125,
420-
"per_unit_maximum": "11.00"
421-
}
422-
...
423-
}
424-
```
425-
426-
## Bulk BPS pricing
427-
428-
Bulk BPS pricing specifies BPS parameters in a tiered manner, dependent on the
429-
total quantity across all events. Similar to bulk pricing, the BPS parameters of
430-
a given event depends on the tier range that the billing period falls into. Each
431-
tier range is defined by an upper bound. For example, after $1.5M of payment
432-
volume is reached, each individual payment may have a lower cap or a smaller
433-
take-rate.
434-
435-
```json
436-
...
437-
"model_type": "bulk_bps",
438-
"bulk_bps_config": {
439-
"tiers": [
440-
{
441-
"maximum_amount": "1000000.00",
442-
"bps": 125,
443-
"per_unit_maximum": "19.00"
444-
},
445-
{
446-
"maximum_amount": null,
447-
"bps": 115,
448-
"per_unit_maximum": "4.00"
449-
}
450-
]
451-
}
452-
...
453-
}
454-
```
455-
456-
## Tiered BPS pricing
457-
458-
Tiered BPS pricing specifies BPS parameters in a graduated manner, where an
459-
event's applicable parameter is a function of its marginal addition to the
460-
period total. Similar to tiered pricing, the BPS parameters of a given event
461-
depends on the tier range that it falls into, where each tier range is defined
462-
by an upper and lower bound. For example, the first few payments may have a 0.8
463-
BPS take-rate and all payments after a specific volume may incur a take-rate of
464-
0.5 BPS each.
465-
466-
```json
467-
...
468-
"model_type": "tiered_bps",
469-
"tiered_bps_config": {
470-
"tiers": [
471-
{
472-
"minimum_amount": "0",
473-
"maximum_amount": "1000000.00",
474-
"bps": 125,
475-
"per_unit_maximum": "19.00"
476-
},
477-
{
478-
"minimum_amount": "1000000.00",
479-
"maximum_amount": null,
480-
"bps": 115,
481-
"per_unit_maximum": "4.00"
482-
}
483-
]
484-
}
485-
...
486-
}
487-
```
488-
489-
## Matrix pricing
490-
491-
Matrix pricing defines a set of unit prices in a one or two-dimensional matrix.
492-
`dimensions` defines the two event property values evaluated in this pricing
493-
model. In a one-dimensional matrix, the second value is `null`. Every
494-
configuration has a list of `matrix_values` which give the unit prices for
495-
specified property values. In a one-dimensional matrix, the matrix values will
496-
have `dimension_values` where the second value of the pair is null. If an event
497-
does not match any of the dimension values in the matrix, it will resort to the
498-
`default_unit_amount`.
499-
500-
```json
501-
{
502-
"model_type": "matrix"
503-
"matrix_config": {
504-
"default_unit_amount": "3.00",
505-
"dimensions": [
506-
"cluster_name",
507-
"region"
508-
],
509-
"matrix_values": [
510-
{
511-
"dimension_values": [
512-
"alpha",
513-
"west"
514-
],
515-
"unit_amount": "2.00"
516-
},
517-
...
518-
]
519-
}
520-
}
521-
```
522-
523-
### Fixed fees
524-
525-
Fixed fees are prices that are applied independent of usage quantities, and
526-
follow unit pricing. They also have an additional parameter
527-
`fixed_price_quantity`. If the Price represents a fixed cost, this represents
528-
the quantity of units applied.
529-
530-
```json
531-
{
532-
...
533-
"id": "price_id",
534-
"model_type": "unit",
535-
"unit_config": {
536-
"unit_amount": "2.00"
537-
},
538-
"fixed_price_quantity": 3.0
539-
...
540-
}
541-
```
542-
"""
543-
544-
subtotal: str
545-
"""Price's contributions for the timeframe, excluding any minimums and discounts."""
546-
547-
total: str
548-
"""Price's contributions for the timeframe, including minimums and discounts."""
549-
550-
price_groups: Optional[List[DataPerPriceCostPerPriceCostV2PriceGroup]] = None
551-
"""
552-
If a `group_by` attribute is passed in, array of costs per `grouping_key`,
553-
`grouping_value` or `secondary_grouping_key`, `secondary_grouping_value`.
554-
"""
555-
556-
quantity: Optional[float] = None
557-
"""The price's quantity for the timeframe"""
558-
559-
560-
DataPerPriceCost = Union[DataPerPriceCostPerPriceCost, DataPerPriceCostPerPriceCostV2]
561-
562-
563258
class Data(BaseModel):
564259
per_price_costs: List[DataPerPriceCost]
565260

0 commit comments

Comments
 (0)