---
title: "Create product charge definitions"
method: POST
path: "/v1/product-charge-definitions/bulk"
tags: ["Product Charge Definitions"]
---

# Create product charge definitions

`POST /v1/product-charge-definitions/bulk`

Bulk creates product charge definitions for a charge. You can create up to 1000 product charge definitions at a given time for a specific charge.

In the request, you must specify the unique ID or number of the charge for which this charge definition is to be created. 
The ID or number of a product rate plan is optional.

**Note**: This operation requires the [Attribute-based Pricing](https://docs.zuora.com?resourceId=billing-attribute-based-pricing) feature to be enabled, which is in the **Early Adopter** phase.

## Headers

- `Idempotency-Key` string
- `Accept-Encoding` string
- `Content-Encoding` string
- `Zuora-Track-Id` string
- `Zuora-Entity-Ids` string
- `Zuora-Version` string

## Request body

- POSTChargeDefinitionRequestBulk
  - `productChargeDefinitions` POSTChargeDefinitionRequest[] — Container for the array of product charge definition.
    - `billingPeriod` string — The billing period for the product charge definition.
    - `billingTiming` 'IN_ADVANCE' | 'IN_ARREARS' — The billing timing setting for the product charge definition.
    - `chargeModel` 'DiscountFixedAmount' | 'DiscountPercentage' | 'FlatFee' | 'PerUnit' | 'Tiered' | 'Volume' | 'Delivery' — Determines how to calculate charges. Charge models must be individually activated in Zuora Billing administration.
    - `defaultQuantity` number, nullable — The default quantity. This field is applicable only for one-time and recurring charges.
    - `effectiveEndDate` string, date-time — The effective end date of the product charge definition.
    - `effectiveStartDate` string, date-time — The effective start date of the product charge definition.
    - `listPriceBase` 'Per_Billing_Period' | 'Per_Month' | 'Per_Week' | 'Per_Year' — The list price base. This field is applicable only for recurring charges. **Note**: The `Per_Year` enum value is available only if you have the <a href="https://docs.zuora.com?resourceId=billing-annual-list-price" target="_blank">Annual List Price</a> feature enabled.
    - `prices` POSTProductChargeDefinitionPricing[] — Container for the prices of the product charge definition.
      - `currency` string — The currency for the price.
      - `discountAmount` number, double — The specific amount for a fixed discount. The field is applicable only for charges based on the Discount-Fixed Amount charge model.
      - `discountPercentage` number, double — The percentage of discount for a percentage discount. The field is applicable only for charges based on the Discount-Percentage charge model.
      - `price` number — The price of this item. This field is only applicable for charges based on the following charge models: - Flat Fee - Per Unit - Delivery Pricing
      - `tiers` POSTChargeDefinitionPricingTier[] — Container for the tiers of the price item. This field is only applicable for charges based on the following charge models: - Tiered Pricing - Volume Pricing You must specify all relevant fields of all tiers, including pricing information for each currency. For each currency, ensure that the tiers appear in ascending order of `StartingUnit`. For example: ``` [ { "startingUnit": "1", "endingUnit": "150", "currency": "USD", "price": 1.95, "priceFormat": "Per Unit" }, { "startingUnit": "151", "endingUnit": "300", "currency": "USD", "price": 1.45, "priceFormat": "Per Unit" }, { "startingUnit": "1", "endingUnit": "150", "currency": "EUR", "price": 1.75, "priceFormat": "Per Unit" }, { "startingUnit": "151", "endingUnit": "300", "currency": "EUR", "price": 1.30, "priceFormat": "Per Unit" } ] ```
        - object[] — An array of charge pricing tier.
          - `currency` string — The code corresponding to the currency for the tier's price.
          - `endingUnit` number, double — The end number of a range of units for the tier. This field is required for charges based on the Tiered Pricing or Tiered with Overage Pricing charge model.
          - `price` number, double — The price of the tier if the price format is flat fee, or the price of each unit in the tier if the price format is per unit.
          - `priceFormat` 'Flat Fee' | 'Per Unit' — The price format of the tier.
          - `startingUnit` number, double — The starting number of a range of units for the tier. This field is required for charges based on the Tiered Pricing or Tiered with Overage Pricing charge model.
    - `productRatePlanChargeId` string — The unique ID of the charge of the charge definition.
    - `productRatePlanChargeNumber` string — The unique number (natural key) of the charge of the charge definition.
    - `productRatePlanId` string — The unique ID of the product rate plan that uses this charge definition.
    - `productRatePlanNumber` string — The unique number (natural key) of the product rate plan that uses this charge definition.
    - `specificBillingPeriod` number, nullable — The specific number of billing periods for the product charge definition.
    - `specificListPriceBase` integer, nullable — The number of months for the list price base of the charge definition. This field is `null` if the `listPriceBase` field is not set to `Per_Specific_Months`.
    - `taxCode` string — Specifies the tax code for taxation rules. This field is required when the `Taxable` field is set to `True`. **Note**: This value affects the tax calculation of the charge.
    - `taxMode` 'TaxExclusive' | 'TaxInclusive' | 'null', nullable — Determines how to define taxation for the charge. This field is required when the `Taxable` field is set to `True`. **Note**: This value affects the tax calculation of the charge.
    - `taxable` boolean — Determines whether the charge definition is taxable. When this field is set to `True`, the `TaxMode` and `TaxCode` fields are required. **Character limit**: 5 **Values**: `True`, `False` **Note**: This value affects the tax calculation of the charge.
    - `term` number, nullable — The number of periods of a termed subscription that is eligible for this charge definition. This field is applicable when the `termType` field is set to `TERMED`, and is to be used together with the `termPeriodType` field.
    - `termPeriodType` 'Month' | 'Year' | 'Day' | 'Week' | 'null', nullable — Specifies the period type for the subscription term that is eligible for this charge definition.
    - `termType` 'TERMED' | 'EVERGREEN' | 'null', nullable — The type of the subscription that is eligible for this charge definition.
    - `uom` string, nullable — Describes the unit of measure (UOM) configured in **Settings > Billing** for the charge.

## Response `200`

OK

- POSTChargeDefinitionBulkResponse
  - `summary` object — Summary of the results of the bulk operation.
    - `successCount` integer — The number of product charge definitions successfully created.
    - `failureCount` integer — The number of product charge definitions that are not created.
    - `failures` integer[] — An array containing the index of each failed charge definition. Each index is zero-based, and refers to the position of the invalid product charge definition in the bulk payload.
  - `results` object[] — The list of newly created product charge definitions or errors.
    - `success` boolean — Indicates whether the charge definition is successfully created.
    - `chargeDefinitionId` string — The unique ID of the product charge definition. This value is available only if this product charge definition is successfully created.
    - `chargeDefinitionNumber` string — The unique number (natural key) of the product charge definition. This value is available only if this product charge definition is successfully created.
    - `processId` string — The ID of the process that handles the operation. This value is available only if this product charge definition is not created.
    - `reasons` object[] — Array of data containing the error code and reasons for failure. This value is available only if this product charge definition is not created.
      - `message` string — Message explaining the reason for the error.
      - `code` string — Specifies the error code associated with the error.
  - `success` boolean — Indicates whether the request succeeded.

## Other responses

- `500` — Internal Server Error
- `4XX` — Request Errors

---

[API](https://skmtc.dev/zuora/apis/api-reference.md) · [All operations](https://skmtc.dev/zuora/apis/api-reference/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/zuora/api-reference/revisions/d11e237f3e54/schema)
