# Create a product rate plan Create a product rate plan (Plan) under an existing product. A plan includes one or more charges. Each charge must include: - name - charge_model - charge_type - bill_cycle - trigger_event - end_date_condition - pricing Optional charge fields include: unit_of_measure, list_price_base, and accounting (with accounting_code, deferred_revenue_account, recognized_revenue_account). Endpoint: POST /commerce/plans Version: 2026-02-20 Security: bearerAuth ## Header parameters: - `Idempotency-Key` (string) Specify a unique idempotency key if you want to perform an idempotent POST or PATCH request. Do not use this header in other request types. With this header specified, the Zuora server can identify subsequent retries of the same request using this value, which prevents the same operation from being performed multiple times by accident. - `Accept-Encoding` (string) Include the Accept-Encoding: gzip header to compress responses as a gzipped file. It can significantly reduce the bandwidth required for a response. If specified, Zuora automatically compresses responses that contain over 1000 bytes of data, and the response contains a Content-Encoding header with the compression algorithm so that your client can decompress it. - `Content-Encoding` (string) Include the Content-Encoding: gzip header to compress a request. With this header specified, you should upload a gzipped file for the request payload instead of sending the JSON payload. - `Zuora-Entity-Ids` (string) An entity ID. If you have Zuora Multi-entity enabled and the OAuth token is valid for more than one entity, you must use this header to specify which entity to perform the operation in. If the OAuth token is only valid for a single entity, or you do not have Zuora Multi-entity enabled, you should not set this header. - `Zuora-Org-Ids` (string) Comma separated IDs. If you have Zuora Multi-Org enabled, you can use this header to specify which orgs to perform the operation in. If you do not have Zuora Multi-Org enabled, you should not set this header. The IDs must be a sub-set of the user's accessible orgs. If you specify an org that the user does not have access to, the operation fails. This header is important in Multi-Org (MO) setups because it defines the organization context under which the API should operate—mainly used for read access or data visibility filtering. If the header is not set, the operation is performed in scope of the user's accessible orgs. - `Zuora-Track-Id` (string) A custom identifier for tracing the API call. If you set a value for this header, Zuora returns the same value in the response headers. This header enables you to associate your system process identifiers with Zuora API calls, to assist with troubleshooting in the event of an issue. The value of this field must use the US-ASCII character set and must not include any of the following characters: colon (:), semicolon (;), double quote ("), and quote ('). ## Request fields (application/json): - `product_key` (string, required) The unique identifier of the product under which the plan is created. Example: "6b14067136304e64b090daccae6680cb" - `name` (string, required) The name of the rate plan. Example: "New plan" - `start_date` (string, required) Plan effective start date (UTC, YYYY-MM-DD). Example: "2024-01-01" - `end_date` (string, required) Plan effective end date (UTC, YYYY-MM-DD). Example: "2049-12-31" - `active_currencies` (array, required) ISO currency codes enabled for this plan. Example: ["USD"] - `charges` (array, required) The list of product rate plan charges to create under the plan. Example: [{"name":"Flat PRPC 1","charge_model":"flat_fee","charge_type":"recurring","pricing":{"flat_amounts":{"USD":100}},"bill_cycle":{"type":"specific_day_of_month","day_of_month":5,"period_alignment":"align_to_charge","period":"bill_cycle_period_month","timing":"in_advance"},"end_date_condition":"subscription_end","trigger_event":"contract_effective","accounting":{"accounting_code":"PRPC-REV-002","accounts_receivable_account":"Accounts Receivable","deferred_revenue_account":"Deferred Revenue","recognized_revenue_account":"Recognized Revenue","adjustment_liability_account":"adjustL-2","adjustment_revenue_account":"adjustRev-2","contract_asset_account":"CA-3","contract_liability_account":"CL-3","contract_recognized_revenue_account":"Contract Recognized Revenue","unbilled_receivables_account":"unbilledR-2"}},{"name":"Flat PRPC 2","charge_model":"flat_fee","charge_type":"recurring","pricing":{"flat_amounts":{"USD":100}},"bill_cycle":{"type":"specific_day_of_month","day_of_month":5,"period_alignment":"align_to_charge","period":"bill_cycle_period_month","timing":"in_advance"},"end_date_condition":"subscription_end","trigger_event":"contract_effective","accounting":{"accounting_code":"PRPC-REV-002","accounts_receivable_account":"Accounts Receivable","deferred_revenue_account":"Deferred Revenue","recognized_revenue_account":"Recognized Revenue","adjustment_liability_account":"adjustL-2","adjustment_revenue_account":"adjustRev-2","contract_asset_account":"CA-3","contract_liability_account":"CL-3","contract_recognized_revenue_account":"Contract Recognized Revenue","unbilled_receivables_account":"unbilledR-2"}}] - `charges.name` (string, required) The name of the charge. Example: "Flat PRPC 1" - `charges.charge_model` (string, required) Charge model that defines how pricing is calculated. Enum: "flat_fee", "per_unit", "overage", "volume", "tiered", "tiered_overage", "discount_fixed_amount", "discount_percentage", "custom_charge_model", "delivery", "minimum_commitment_true_up", "calculated", "high_water_mark_volume_pricing", "high_water_mark_tiered_pricing", "multi_attribute_pricing", "prerated_pricing", "prerated_per_unit" - `charges.charge_type` (string, required) Charge type (recurring, usage, or one-time). Enum: "one_time", "recurring", "usage" - `charges.unit_of_measure` (string) Unit of measure for per-unit or usage charges. Example: "Each" - `charges.list_price_base` (string) Optional list price base, if supported by the charge model. Enum: "Per_Billing_Period", "Per_Month", "Per_Week", "Per_Year", "Per_Specific_Months", "Per_Validity_Period" - `charges.specific_list_price_base` (number) Optional specific value used when list_price_base requires an explicit quantity (for example, number of months for Per_Specific_Months). - `charges.pricing` (object, required) Defines the pricing for the charge. Provide exactly one structure per charge model. - `charges.bill_cycle` (object, required) Defines how billing occurs for this charge. - `charges.bill_cycle.type` (string, required) Determines how the billing day is selected for this charge. Enum: "default_from_customer", "specific_day_of_month", "subscription_start_day", "charge_trigger_day", "specific_day_of_week", "term_start_day", "term_end_day" - `charges.bill_cycle.day_of_month` (integer) Required "when type is specific_day_of_month". Example: 5 - `charges.bill_cycle.day_of_week` (string) Used "when type is specific_day_of_week". Enum: "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday" - `charges.bill_cycle.period` (string, required) Billing period length. Enum: "bill_cycle_period_month", "bill_cycle_period_quarter", "bill_cycle_period_semi_annual", "bill_cycle_period_annual", "bill_cycle_period_eighteen_months", "bill_cycle_period_two_years", "bill_cycle_period_three_years", "bill_cycle_period_five_years", "bill_cycle_period_specific_months", "bill_cycle_period_subscription_term", "bill_cycle_period_week", "bill_cycle_period_specific_weeks", "bill_cycle_period_specific_days" - `charges.bill_cycle.period_alignment` (string, required) How the billing period start aligns. Enum: "align_to_charge", "align_to_subscription_start", "align_to_term_start", "align_to_term_end" - `charges.bill_cycle.timing` (string) When the charge is billed relative to the service period. Enum: "in_advance", "in_arrears" - `charges.end_date_condition` (string, required) Defines when the charge ends. Enum: "subscription_end", "end_date_one_time", "fixed_period", "specific_end_date" - `charges.up_to_periods_type` (string) Granularity used with end_date_condition = fixed_period to express how long the charge remains active. When end_date_condition = subscription_end, this field is ignored. Enum: "billing_periods", "days", "weeks", "months", "years" - `charges.up_to_periods` (integer) Number of periods used with end_date_condition = fixed_period. Combined with up_to_periods_type to determine the fixed duration of the charge. Ignored when end_date_condition = subscription_end. - `charges.trigger_event` (string, required) Event that triggers the charge. Enum: "contract_effective", "service_activation", "customer_acceptance", "specific_date" - `charges.accounting` (object) Accounting fields accepted on create/update requests. Field names use snake_case. Conditional requirement rules - If Allow blank Accounting Codes = Yes → Accounting fields are optional. - If Allow blank Accounting Codes = No and the tenant has Zuora Revenue → all Accounting fields except accounting_code are required. - If Allow blank Accounting Codes = No and the tenant does NOT have Zuora Revenue → only recognized_revenue_account and deferred_revenue_account are required. These rules apply to all operations that accept accounting in the payload. Example: {"accounting_code":"PRPC-REV-001","accounts_receivable_account":"Accounts Receivable","adjustment_liability_account":"adjustL-1","adjustment_revenue_account":"adjustRev-1","contract_asset_account":"CA-2","contract_liability_account":"CL-2","contract_recognized_revenue_account":"Contract Recognized Revenue","deferred_revenue_account":"Deferred Revenue","recognized_revenue_account":"ContractRevRec-1","unbilled_receivables_account":"unbilledR-1"} - `charges.accounting.accounting_code` (string) An accounting code associated with the charge for reporting/ERP mapping. Typically a short code or identifier, not the GL account name. Example: "PRPC-REV-001" - `charges.accounting.accounts_receivable_account` (string) Accounts Receivable (AR) account to book invoices for this charge. Must match an existing account in the tenant's chart of accounts. Example: "Accounts Receivable" - `charges.accounting.accounts_receivable_account_type` (string) The account type associated with accounts_receivable_account. Maps to the accountsReceivableAccountType field in the accounting object. - `charges.accounting.deferred_revenue_account` (string) Deferred revenue (liability) account to book revenue before recognition. Must match an existing account in the tenant's chart of accounts. Example: "Deferred Revenue" - `charges.accounting.deferred_revenue_accounting_type` (string) Accounting method/type applied to deferred revenue. Maps to the deferredRevenueAccountingType field in the accounting object. - `charges.accounting.recognized_revenue_account` (string) The name of the account where the Account Type is "Recognized Revenue". Example: "ContractRevRec-1" - `charges.accounting.recognized_revenue_account_type` (string) The account type associated with recognized_revenue_account. Maps to the recognizedRevenueAccountType field in the accounting object. - `charges.accounting.adjustment_liability_account` (string) The name of the account where the Account Type is "Adjustment Liability". Example: "adjustL-1" - `charges.accounting.adjustment_liability_account_type` (string) The account type associated with adjustment_liability_account. Maps to the adjustmentLiabilityAccountType field in the accounting object. - `charges.accounting.adjustment_revenue_account` (string) The name of the account where the Account Type is "Adjustment Revenue". Example: "adjustRev-1" - `charges.accounting.adjustment_revenue_account_type` (string) The account type associated with adjustment_revenue_account. Maps to the adjustmentRevenueAccountType field in the accounting object. - `charges.accounting.contract_asset_account` (string) The name of the account where the Account Type is "Contract Asset". Example: "CA-2" - `charges.accounting.contract_asset_account_type` (string) The account type associated with contract_asset_account. Maps to the contractAssetAccountType field in the accounting object. - `charges.accounting.contract_liability_account` (string) The name of the account where the Account Type is "Contract Liability". Example: "CL-2" - `charges.accounting.contract_liability_account_type` (string) The account type associated with contract_liability_account. Maps to the contractLiabilityAccountType field in the accounting object. - `charges.accounting.contract_recognized_revenue_account` (string) Recognized revenue account used specifically for contract-based recognition flows. Must match an existing account in the tenant's chart of accounts. Example: "Contract Recognized Revenue" - `charges.accounting.contract_recognized_revenue_account_type` (string) The account type associated with contract_recognized_revenue_account. Maps to the contractRecognizedRevenueAccountType field in the accounting object. - `charges.accounting.unbilled_receivables_account` (string) The name of the account where the Account Type is "Unbilled Receivables". Example: "unbilledR-1" - `charges.accounting.unbilled_receivables_account_type` (string) The account type associated with unbilled_receivables_account. Maps to the unbilledReceivablesAccountType field in the accounting object. ## Response 200 fields (application/json): - `id` (string, required) The unique identifier of the created plan (product rate plan). Example: "ee2d1ce1036c4dd6ae9d6945565ff7a0" - `name` (string, required) Plan display name. Example: "New plan" - `displayName` (string) The display name of the plan. - `description` (string) Free-form plan description. - `state` (string) Current lifecycle state of the plan. Example: "active" - `startDate` (string, required) Plan effective start date (UTC, YYYY-MM-DD). Example: "2024-01-01" - `endDate` (string, required) Plan effective end date (UTC, YYYY-MM-DD). Example: "2049-12-31" - `activeCurrencies` (array, required) ISO currency codes enabled for the plan. Example: ["USD"] - `createTime` (string) Timestamp when the plan was created. Example: "2025-10-13T07:46:02.314-07:00" - `updateTime` (string) Timestamp when the plan was last updated. Example: "2025-10-13T07:46:02.314-07:00" - `createdBy` (string) User ID that created the plan. Example: "53c162482f054f3ca08e1ec82dccfec9" - `updatedBy` (string) User ID that last updated the plan. Example: "53c162482f054f3ca08e1ec82dccfec9" - `productId` (string) The product ID (key) this plan belongs to. Example: "7228c9e6fd814e3a9e59bcdf0117e34f" - `productRatePlanNumber` (string) Plan number Example: "PRP-00000195" - `customFields` (object) Custom field values on the plan. - `attributes` (array) Attribute metadata defined at the plan level (if any). - `contextFilters` (array) Contextual filters used to limit plan applicability. - `entitlements` (array) Entitlements included with the plan. - `externalIdSourceSystem` (string) Source system identifier for external integrations. - `externalRateplanId` (array) External rate plan identifiers, if any. - `organizationLabels` (array) Organization-level labels associated with the plan. - `netsuite` (object,null) NetSuite integration metadata (if present). - `productRatePlanCharges` (array) Charges created under this plan. - `productRatePlanCharges.id` (string, required) Unique identifier of the product rate plan charge (PRPC). Example: "ad95b694d2b8442b84dc8ad26561c7d7" - `productRatePlanCharges.name` (string, required) Charge display name within the plan. Example: "Flat PRPC 1" - `productRatePlanCharges.chargeModel` (string, required) Pricing model that determines how the amount is calculated. Example: "flat_fee" - `productRatePlanCharges.chargeType` (string, required) Whether the charge recurs, rates usage, or is a one-time fee. Example: "recurring" - `productRatePlanCharges.chargeFunction` (string) Internal function identifier for the charge. Example: "charge_function_standard" - `productRatePlanCharges.productRatePlanChargeNumber` (string) PRPC number Example: "PRPC-00000279" - `productRatePlanCharges.triggerEvent` (string) Event that triggers the charge to start billing. Example: "contract_effective" - `productRatePlanCharges.endDateCondition` (string) Rule for when the charge ends, for example, subscription_end. Example: "subscription_end" - `productRatePlanCharges.upToPeriodsType` (string) Unit applied when charge ends after a fixed duration. Example: "billing_periods" - `productRatePlanCharges.upToPeriods` (number) Number of periods defining fixed charge duration. - `productRatePlanCharges.listPriceBase` (string) List price basis, for example, Per_Billing_Period. Example: "Per_Billing_Period" - `productRatePlanCharges.specificListPriceBase` (number) Optional override for list price base when billing uses a specific period configuration. - `productRatePlanCharges.billCycle` (object, required) How and when this charge bills within each billing period. - `productRatePlanCharges.billCycle.type` (string) Bill-cycle mode (inherit defaults or set specific day rules). Example: "specific_day_of_month" - `productRatePlanCharges.billCycle.dayOfMonth` (integer) Specific bill day when type = specific_day_of_month. Example: 5 - `productRatePlanCharges.billCycle.period` (string) Billing period length, for example, bill_cycle_period_month. Example: "bill_cycle_period_month" - `productRatePlanCharges.billCycle.periodAlignment` (string) How the billing period start aligns, for example, align_to_charge. Example: "align_to_charge" - `productRatePlanCharges.billCycle.timing` (string) Whether the charge bills before or after the service period. Example: "in_advance" - `productRatePlanCharges.accounting` (object) Accounting fields returned by the API. *Type fields are derived from the tenant's chart of accounts and are read-only. - `productRatePlanCharges.accounting.accountingCode` (string) An accounting code associated with the charge for reporting or ERP mapping. Typically a short code or identifier, not the GL account name. Example: "PRPC-REV-001" - `productRatePlanCharges.accounting.accountsReceivableAccount` (string) Accounts Receivable (AR) account to book invoices for this charge. Must match an existing account in the tenant's chart of accounts. - `productRatePlanCharges.accounting.accountsReceivableAccountType` (string) System-derived type/category of the AR account from the chart of accounts. Examples include "AccountsReceivable". - `productRatePlanCharges.accounting.adjustmentLiabilityAccount` (string) The name of the account where the Account Type is "Adjustment Liability". Example: "adjustL-1" - `productRatePlanCharges.accounting.adjustmentLiabilityAccountType` (string) System-derived type/category of the Adjustment Liability account from the chart of accounts. Examples include "AdjustmentLiability". - `productRatePlanCharges.accounting.adjustmentRevenueAccount` (string) The name of the account where the Account Type is "Adjustment Revenue". Example: "adjustRev-1" - `productRatePlanCharges.accounting.adjustmentRevenueAccountType` (string) System-derived type/category of the Adjustment Revenue account from the chart of accounts. Examples include "AdjustmentRevenue". - `productRatePlanCharges.accounting.contractAssetAccount` (string) The name of the account where the Account Type is "Contract Asset". Example: "CA-2" - `productRatePlanCharges.accounting.contractAssetAccountType` (string) System-derived type/category of the Contract Asset account from the chart of accounts. Example: "ContractAsset" - `productRatePlanCharges.accounting.contractLiabilityAccount` (string) The name of the account where the Account Type is "Contract Liability". Example: "CL-2" - `productRatePlanCharges.accounting.contractLiabilityAccountType` (string) System-derived type/category of the Contract Liability account from the chart of accounts. Examples include "ContractLiability". - `productRatePlanCharges.accounting.contractRecognizedRevenueAccount` (string) Recognized revenue account used specifically for contract-based recognition flows. Must match an existing account in the tenant's chart of accounts. - `productRatePlanCharges.accounting.contractRecognizedRevenueAccountType` (string) System-derived type/category of the Contract Recognized Revenue account from the chart of accounts. Example: "RecognizedRevenue" - `productRatePlanCharges.accounting.deferredRevenueAccount` (string) Deferred revenue (liability) account to book revenue before recognition. Must match an existing account in the tenant's chart of accounts. - `productRatePlanCharges.accounting.deferredRevenueAccountType` (string) System-derived type/category of the Deferred Revenue account from the chart of accounts. Example: "DeferredRevenue" - `productRatePlanCharges.accounting.recognizedRevenueAccount` (string) The name of the account where the Account Type is "Recognized Revenue". Example: "ContractRevRec-1" - `productRatePlanCharges.accounting.recognizedRevenueAccountType` (string) System-derived type/category of the Recognized Revenue account from the chart of accounts. Example: "RecognizedRevenue" - `productRatePlanCharges.accounting.unbilledReceivablesAccount` (string) The name of the account where the Account Type is "Unbilled Receivables". Example: "unbilledR-1" - `productRatePlanCharges.accounting.unbilledReceivablesAccountType` (string) System-derived type/category of the Unbilled Receivables account from the chart of accounts. Example: "UnbilledReceivables" - `productRatePlanCharges.accounting.productRatePlanChargeId` (string) The ID of your product rate plan charge. Example: "2c92c0f962470b8101624b869fcd45fc" - `productRatePlanCharges.pricing` (object, required) Default (charge-level) price configuration by model/currency. - `productRatePlanCharges.pricing.flatAmounts` (object) Flat amounts by currency for flat-fee pricing. Example: {"USD":100} - `productRatePlanCharges.pricing.unitAmounts` (object) Per-unit amounts by currency for per-unit/usage pricing. - `productRatePlanCharges.pricing.tiers` (array) Tier definitions for tiered/volume pricing. - `productRatePlanCharges.pricing.discountAmounts` (object) Fixed discount amounts by currency. - `productRatePlanCharges.pricing.discountPercentages` (object) Percentage discount values by currency. - `productRatePlanCharges.pricing.minAmounts` (object) Minimum charge amounts by currency. - `productRatePlanCharges.pricing.maxAmounts` (object) Maximum charge amounts by currency. - `productRatePlanCharges.pricing.percentages` (object) Percentage price values by currency (model-dependent). - `productRatePlanCharges.priceChangeOption` (string) How price changes are applied across renewals/amendments. Example: "no_change" - `productRatePlanCharges.prorationOption` (string) How proration is handled relative to tenant defaults. Example: "default_from_tenant_setting" - `productRatePlanCharges.taxable` (boolean) Whether the charge is taxable. - `productRatePlanCharges.discountOptions` (object) How discount charges apply and interact with other discounts. - `productRatePlanCharges.discountOptions.stackedDiscount` (boolean) Whether this discount stacks with other discounts. - `productRatePlanCharges.discountOptions.applyToBillingPeriodPartially` (boolean) Whether the discount can partially align to a billing period. - `productRatePlanCharges.discountOptions.reflectDiscountInNetAmount` (boolean) Whether discounts reduce the net amount on invoices. - `productRatePlanCharges.discountOptions.rollover` (boolean) Whether unused discount can roll over to future periods. - `productRatePlanCharges.attributes` (array) Attribute metadata for this charge. - `productRatePlanCharges.createdById` (string) User ID that created the charge record. Example: "53c162482f054f3ca08e1ec82dccfec9" - `productRatePlanCharges.createdTime` (string) Timestamp when the charge record was created. Example: "2025-10-13T07:46:02.375-07:00" - `productRatePlanCharges.updatedById` (string) User ID that last updated the charge record. Example: "53c162482f054f3ca08e1ec82dccfec9" - `productRatePlanCharges.updatedTime` (string) Timestamp when the charge record was last updated. Example: "2025-10-13T07:46:02.375-07:00" - `productRatePlanCharges.labels` (object) Free-form labels/tags attached to the charge. - `productRatePlanCharges.mergedRateCards` (array) Effective rate-card rows after merges (if any). - `productRatePlanCharges.negotiatedRateCards` (array) Customer- or deal-specific rate-card rows. - `productRatePlanCharges.ocmJsonByCurrency` (object) Offer/OCM metadata keyed by currency (internal use). - `productRatePlanCharges.productChargeDefinitions` (array) Underlying charge definitions referenced for pricing. - `productRatePlanCharges.rateCards` (array) Dynamic Pricing rate-card rows configured on the charge. - `productRatePlanCharges.pricingSummary` (array) Structured price summary breakdown (if returned). - `productRatePlanCharges.pricingWaterfalls` (object) Detailed pricing/waterfall breakdown (if returned). - `productRatePlanCharges.overageOptions` (object) Overage settings for usage charges. - `productRatePlanCharges.overageOptions.includedUnits` (number) Included units before overage starts. - `productRatePlanCharges.overageOptions.unusedUnitsCreditRates` (object) Credit rates for unused units (by currency). - `productRatePlanCharges.prepaid` (boolean) Indicates whether the charge is prepaid. - `productRatePlanCharges.prepayment` (object) Prepayment handling and rollover behavior. - `productRatePlanCharges.prepayment.rollover` (boolean) Whether unused prepayment rolls over. - `productRatePlanCharges.prepayment.rolloverApply` (string) Order in which rollover is applied. Example: "apply_last" - `productRatePlanCharges.prepayment.rolloverPeriodLength` (integer) Length of each rollover period. - `productRatePlanCharges.prepayment.rolloverPeriods` (integer) Number of rollover periods allowed. - `productRatePlanCharges.isChargeLevelMinCommit` (boolean) Whether a minimum commit is enforced at the charge level. - `productRatePlanCharges.isCommitted` (boolean) Indicates if the charge definition is committed/finalized. - `productRatePlanCharges.useTenantDefaultForPriceChange` (boolean) Whether tenant defaults govern price change behavior. Example: true - `productRatePlanCharges.revenue` (object) Revenue policy settings for this charge. - `productRatePlanCharges.revenue.excludeItemBillingFromRevenueAccounting` (boolean) If true, item billing is excluded from revenue accounting. - `productRatePlanCharges.revenue.excludeItemBookingFromRevenueAccounting` (boolean) If true, item booking is excluded from revenue accounting. - `productRatePlanCharges.revenue.legacyReporting` (boolean) Indicator for legacy revenue reporting behaviors. - `productRatePlanCharges.revenue.revenueRecognitionRuleName` (string) Name of the revenue recognition rule applied. Example: "Recognize upon invoicing" ## Response 400 fields (application/json): - `errors` (array) - `errors.code` (string) Machine-readable error code identifying the failure type. - `errors.message` (string) Human-readable description of the error that provides more context about what went wrong. - `success` (boolean)