# Differential prices

> For the complete machine-readable documentation index, see [llms.txt](https://apidocs.chargebee.com/llms.txt).


Differential pricing helps implement a pricing strategy for addons and charges based on the plans they're purchased with. A differential price a specific price for an addon- or charge-[item price](/docs/api/item_prices) when purchased along with a particular plan.

## Differential pricing for addons[](#differential-pricing-for-addons)

Consider an addon called 24x7 Customer Support provided with a cloud storage service. You can configure differential prices for each of the addon-item prices based on the plan they are purchased with, as follows:

**Addon item price**

**Price when applied to _Standard_** **Plan**

**Price when applied to** _**Enterprise**_ **Plan**

1

24x7 Customer Support, USD, Monthly, Flat fee, $100

$90

$150

2

24x7 Customer Support, USD, Yearly, Flat fee, $1000

$900

$1500

## Differential pricing for charges[](#differential-pricing-for-charges)

Consider a charge, called Setup fee, for installing and configuring a cloud-based project management platform. There are two modes in which you can set up differential pricing for a charge:

#### Mode A: One charge differential price per plan-item[](#mode-a-one-charge-differential-price-per-plan-item)

This mode is used to specify one differential price for the charge-item price per [plan-item](/docs/api/items) it is applied to.

**Charge-item price**

**Price when applied to** _**Standard**_ **plan**

**Price when applied to** _**Enterprise**_ **plan**

Setup fee, USD, Flat fee $500

$400

$700

#### Mode B: Multiple charge differential prices per plan item[](#mode-b-multiple-charge-differential-prices-per-plan-item)

This mode is used to specify multiple differential prices for the charge per plan-item, based on the plan period.

**Charge-item price**

**Price when applied to** _**Standard**_ **plan, 6 months**

**Price when applied to** _**Standard**_ **plan, yearly**

Setup fee, USD, Flat fee $500

$400

$300

In the above example, even if the "6 month" or "yearly" plan-item prices do not exist, the differential prices for the charge can still be created. They take effect whenever the plan-item prices are eventually created and used in subscriptions.

## Sample Differential price

```json
{
  "created_at": 1594110588,
  "currency_code": "USD",
  "id": "9d6e5ac7-5c3a-4b63-a148-c182d51ed122",
  "item_price_id": "sample-addon-weekly-usd",
  "object": "differential_price",
  "parent_item_id": "basic",
  "price": 100,
  "resource_version": 1594110588325,
  "status": "active",
  "updated_at": 1594110588
}
```

## Differential prices attributes

## Input Parameters

- `id` (required, string, max chars=100)
  A unique and immutable ID for the differential price. It is auto-generated when the differential price is created.

- `item_price_id` (required, string, max chars=100)
  The ID of the item price (`addon` or `charge` ) whose price should change according to the plan-item it is applied to.

- `parent_item_id` (required, string, max chars=100)
  The ID of the plan-item, in relation to which, the differential pricing for the addon or charge is defined. For example, this would be the id of the _Standard_ or _Enterprise_ plans-items mentioned in the [examples above](/docs/api/differential_prices) .

- `price` (optional, in cents, min=0)
  The differential price. If the pricing model of the `item_price_id` is `tiered` , `volume` , or `stairstep` , pass `tiers` instead of this.

- `price_in_decimal` (optional, string, max chars=39)
  The price of the item when the pricing\_model is `flat_fee`. When the pricing model is `per_unit` , it is the price per unit quantity of the item. Not applicable for the other pricing models. The value is in decimal and in major units of the currency. Also, this is only applicable when [multi-decimal pricing](/docs/api/currencies) is enabled.

- `status` (optional, enumerated string)
  The item family state.
  Possible enum values:
    - `active`
      New items can be created with the item family.
    - `deleted`
      No items allowed for the item family.

- `resource_version` (optional, long)
  Version number of this resource. The `resource_version` is updated with a new timestamp in milliseconds for every change made to the resource. This attribute will be present only if the resource has been updated after 2016-09-28.

- `updated_at` (optional, timestamp(UTC) in seconds)
  Timestamp when this differential price was last updated.

- `created_at` (required, timestamp(UTC) in seconds)
  Timestamp at which this differential price was created.

- `modified_at` (required, timestamp(UTC) in seconds)
  Timestamp at which this differential price was last modified.

- `currency_code` (required, string, max chars=3)
  The currency code (ISO 4217 format) of the plan

- `business_entity_id` (optional, string, max chars=50)
  The unique ID of the [business entity](/docs/api/getting-started) of this subscription. This is applicable only when multiple business entities have been created for the site. The value of this attribute indicates that the resource is specific to the given business entity.

- `deleted` (required, boolean)
  Indicates whether the differential price has been deleted or not.

- `tiers` (optional, list of tier)
  List of quantity-based pricing tiers for the differential price. Applicable only for `tiered` , `volume` , and `stairstep` `pricing_model` s. The tiers are exactly the same as those set for the item price. Only the `price` attribute for the various tiers can be overridden for the differential price.
  - `starting_unit` (required, integer, min=1)
    The lower limit of a range of units for the tier
  - `ending_unit` (optional, integer)
    The upper limit of a range of units for the tier
  - `price` (required, in cents, default=0, min=0)
    The per-unit price for the tier when the `pricing_model` is `tiered` or `volume` ; the total cost for the item price when the `pricing_model` is `stairstep`. The value is in the [minor unit of the currency](/docs/api/currencies) .
  - `pricing_type` (optional, enumerated string)
    Pricing type for the tier.
    Possible enum values:
      - `per_unit`
        Indicates that the tier pricing is based on individual units. Customers are charged a fixed price per unit. For example, if the price per unit is $2 and the customer consumes 150 units, they will be charged $300 (150 × $2).
      - `flat_fee`
        Indicates that the tier pricing is a flat fee, applied to the entire tier regardless of the number of units consumed. For the **stairstep** pricing model, `pricing_type` will be set to `flat_fee` by default. For example, if the flat fee for a tier is $100, the customer pays $100 whether they consume 1 unit or the maximum number of units within that tier.
      - `package`
        Indicates that the tier pricing is based on a package of units. Customers are charged for each block or package of units. For example, if the package size is 100 units and the cost per block is $20 consuming 400 units will result in a charge of $80 (4 × $20).
  - `package_size` (optional, integer, min=1)
    Package size for the tier when pricing type is `package`. Specify the number of units that make up one package. For example, if 1000 API hits are grouped into a single package, set the package size to 1000.

- `parent_periods` (optional, list of parent_period)
  When `item_price_id` is a charge-item, you can specify the plan period for which the price applies. Although an array, currently you can specify only one period. In other words, only index `0` is allowed. Create another differential price to specify another period. Is permitted only when `item_price_id` is a charge-item.
  - `period_unit` (required, enumerated string)
    The unit of time for `period` .
    Possible enum values:
      - `day`
        A period of 24 hours.
      - `week`
        A period of 7 days.
      - `month`
        A period of 1 calendar month.
      - `year`
        A period of 1 calendar year.
  - `period` (optional)
    The billing period of the plan in `period_unit` s. For example, a 6 month plan has `period` as 6 and `period_unit` as `month` .

