# Update a product rate plan charge with Dynamic Pricing Update an existing product rate plan charge (PRPC). Use this API to update default pricing and/or conditional rate cards. Endpoint: PUT /commerce/charges Version: 2026-02-20 Security: bearerAuth ## Header parameters: - `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-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 ('). - `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. ## Request fields (application/json): - `charge` (object, required) Fields to update on the product rate plan charge (PRPC). Only the properties provided will be considered for update (patch semantics). Unsupported updates are ignored by the service. - `charge.id` (string, required) Unique identifier of the product rate plan charge (PRPC) to update. Example: "9c4867ed55db43a89731605d5654d4ed" - `charge.name` (string) Optional new display name for the charge. - `charge.description` (string) Optional new description for the charge. - `charge.trigger_event` (string) Event that triggers the charge (if update is supported). Enum: "contract_effective", "service_activation", "customer_acceptance" - `charge.unit_of_measure` (string) Unit of measure label for the charge, for example, Each, Seat. May be read-only in some tenants. - `charge.default_quantity` (number) Default quantity when the charge is added to a product/offer. - `charge.min_quantity` (number) Optional minimum quantity constraint (if supported). - `charge.max_quantity` (number) Optional maximum quantity constraint (if supported) - `charge.list_price_base` (string) List price basis (e.g., Per_Billing_Period). Typically read-only after creation. - `charge.bill_cycle` (object) Billing period configuration controlling frequency, alignment, and timing. - `charge.bill_cycle.type` (string) Source of the default billing period, for example, default_from_customer, specific_day_of_month. - `charge.bill_cycle.day_of_month` (integer) Day of month to bill when type = specific_day_of_month. - `charge.bill_cycle.day_of_week` (string) Day of week to bill when using weekly modes. - `charge.bill_cycle.period` (string) Billing period, for example, bill_cycle_period_month, bill_cycle_period_quarter. - `charge.bill_cycle.specific_period` (string) Custom period text when applicable. - `charge.bill_cycle.period_alignment` (string) Alignment behavior, for example, align_to_charge, align_to_term_start. - `charge.bill_cycle.timing` (string) Indicates whether billing occurs in advance or in arrears. Enum: "in_advance", "in_arrears" - `charge.pricing` (object) Default (charge-level) pricing used when no rate-card row matches. Structure depends on the charge model: - flat_fee → flat_amounts - per_unit → unit_amounts - volume/tiered → tiers - discount_fixed_amount → discount_amounts - discount_percentage → discount_percentage - `charge.rate_cards` (array) Conditional pricing rows (rate cards). Each row defines match attributes and a price to apply. If multiple rows match, the first match wins. If none match, pricing is used. - `charge.rate_cards.attributes` (array, required) Match conditions that must all evaluate to true for the row to apply. Use between for ranges or dates. - `charge.rate_cards.attributes.name` (string, required) Attribute name, for example, Age, Region, EffectiveDate. Example: "Age" - `charge.rate_cards.attributes.operator` (string) Comparison operator. Enum: ">", ">=", "<", "<=", "==", "between", "between-inclusive" - `charge.rate_cards.attributes.value` (any) Comparison value. For between, provide an array of two values. The value type must align with the attribute’s declared type. Example: 12 - `charge.rate_cards.pricing` (object, required) Price to apply when this row matches. Structure mirrors pricing above. - `charge.tax_code` (string) Optional tax code to associate with the charge. - `charge.tax_mode` (string) Tax mode, for example, tax_exclusive, non_taxable, if supported. - `charge.price_change_option` (string) How price changes apply on updates, for example, no_change. - `charge.use_tenant_default_for_price_change` (boolean) If true, tenant defaults govern price change behavior. - `charge.delivery_schedule` (object) Day-of-week delivery configuration (if enabled). - `charge.prepayment` (object) Prepayment settings (credit option, rollover, validity). - `charge.prepaid` (boolean) Indicates whether the charge is prepaid. - `charge.overage_options` (object) Overage configuration for usage charges. - `charge.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"} - `charge.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" - `charge.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" - `charge.accounting.accounts_receivable_account_type` (string) The account type associated with accounts_receivable_account. Maps to the accountsReceivableAccountType field in the accounting object. - `charge.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" - `charge.accounting.deferred_revenue_accounting_type` (string) Accounting method/type applied to deferred revenue. Maps to the deferredRevenueAccountingType field in the accounting object. - `charge.accounting.recognized_revenue_account` (string) The name of the account where the Account Type is "Recognized Revenue". Example: "ContractRevRec-1" - `charge.accounting.recognized_revenue_account_type` (string) The account type associated with recognized_revenue_account. Maps to the recognizedRevenueAccountType field in the accounting object. - `charge.accounting.adjustment_liability_account` (string) The name of the account where the Account Type is "Adjustment Liability". Example: "adjustL-1" - `charge.accounting.adjustment_liability_account_type` (string) The account type associated with adjustment_liability_account. Maps to the adjustmentLiabilityAccountType field in the accounting object. - `charge.accounting.adjustment_revenue_account` (string) The name of the account where the Account Type is "Adjustment Revenue". Example: "adjustRev-1" - `charge.accounting.adjustment_revenue_account_type` (string) The account type associated with adjustment_revenue_account. Maps to the adjustmentRevenueAccountType field in the accounting object. - `charge.accounting.contract_asset_account` (string) The name of the account where the Account Type is "Contract Asset". Example: "CA-2" - `charge.accounting.contract_asset_account_type` (string) The account type associated with contract_asset_account. Maps to the contractAssetAccountType field in the accounting object. - `charge.accounting.contract_liability_account` (string) The name of the account where the Account Type is "Contract Liability". Example: "CL-2" - `charge.accounting.contract_liability_account_type` (string) The account type associated with contract_liability_account. Maps to the contractLiabilityAccountType field in the accounting object. - `charge.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" - `charge.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. - `charge.accounting.unbilled_receivables_account` (string) The name of the account where the Account Type is "Unbilled Receivables". Example: "unbilledR-1" - `charge.accounting.unbilled_receivables_account_type` (string) The account type associated with unbilled_receivables_account. Maps to the unbilledReceivablesAccountType field in the accounting object. - `charge.revenue` (object) Revenue recognition settings (rule names, timing). - `charge.netsuite` (object) NetSuite integration attributes for the charge. - `charge.custom_fields` (object) Tenant-specific custom field values on the charge. - `charge.labels` (object) Free-form labels/tags attached to the charge. - `charge.organization_labels` (array) Organization-level labels associated with the charge. - `charge.ocm_json_by_currency` (object) Offer/OCM metadata keyed by currency (internal use). - `charge.attributes` (array) Attribute declarations for Dynamic Pricing (name/type/mapping). - `charge.attributes.name` (string, required) Attribute name, for example, Region, Age, EffectiveDate. - `charge.attributes.type` (string) Attribute data type. Enum: "string", "integer", "double", "boolean", "date", "datetime" - `charge.attributes.mapping` (object) Optional mapping to resolve values from Zuora objects. - `charge.attributes.mapping.object` (string, required) Target Zuora object, for example, account, subscription. - `charge.attributes.mapping.field` (string, required) Field on the target object, for example, age__c. ## Response 200 fields (application/json): - `accounting` (object) Accounting fields returned by the API. *Type fields are derived from the tenant's chart of accounts and are read-only. - `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" - `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. - `accounting.accountsReceivableAccountType` (string) System-derived type/category of the AR account from the chart of accounts. Examples include "AccountsReceivable". - `accounting.adjustmentLiabilityAccount` (string) The name of the account where the Account Type is "Adjustment Liability". Example: "adjustL-1" - `accounting.adjustmentLiabilityAccountType` (string) System-derived type/category of the Adjustment Liability account from the chart of accounts. Examples include "AdjustmentLiability". - `accounting.adjustmentRevenueAccount` (string) The name of the account where the Account Type is "Adjustment Revenue". Example: "adjustRev-1" - `accounting.adjustmentRevenueAccountType` (string) System-derived type/category of the Adjustment Revenue account from the chart of accounts. Examples include "AdjustmentRevenue". - `accounting.contractAssetAccount` (string) The name of the account where the Account Type is "Contract Asset". Example: "CA-2" - `accounting.contractAssetAccountType` (string) System-derived type/category of the Contract Asset account from the chart of accounts. Example: "ContractAsset" - `accounting.contractLiabilityAccount` (string) The name of the account where the Account Type is "Contract Liability". Example: "CL-2" - `accounting.contractLiabilityAccountType` (string) System-derived type/category of the Contract Liability account from the chart of accounts. Examples include "ContractLiability". - `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. - `accounting.contractRecognizedRevenueAccountType` (string) System-derived type/category of the Contract Recognized Revenue account from the chart of accounts. Example: "RecognizedRevenue" - `accounting.deferredRevenueAccount` (string) Deferred revenue (liability) account to book revenue before recognition. Must match an existing account in the tenant's chart of accounts. - `accounting.deferredRevenueAccountType` (string) System-derived type/category of the Deferred Revenue account from the chart of accounts. Example: "DeferredRevenue" - `accounting.recognizedRevenueAccount` (string) The name of the account where the Account Type is "Recognized Revenue". Example: "ContractRevRec-1" - `accounting.recognizedRevenueAccountType` (string) System-derived type/category of the Recognized Revenue account from the chart of accounts. Example: "RecognizedRevenue" - `accounting.unbilledReceivablesAccount` (string) The name of the account where the Account Type is "Unbilled Receivables". Example: "unbilledR-1" - `accounting.unbilledReceivablesAccountType` (string) System-derived type/category of the Unbilled Receivables account from the chart of accounts. Example: "UnbilledReceivables" - `accounting.productRatePlanChargeId` (string) The ID of your product rate plan charge. Example: "2c92c0f962470b8101624b869fcd45fc" - `attributes` (array) Attribute metadata associated with Dynamic Pricing for this charge. Example: [] - `billCycle` (object) Example: {"dayOfMonth":5,"period":"bill_cycle_period_month","periodAlignment":"align_to_charge","timing":"in_advance","type":"specific_day_of_month"} - `billCycle.dayOfMonth` (integer) Specific day of month to bill when type = specific_day_of_month. Example: 5 - `billCycle.period` (string) Billing period length. Example: "bill_cycle_period_month" - `billCycle.periodAlignment` (string) How the billing period start aligns. Example: "align_to_charge" - `billCycle.timing` (string) Whether the charge bills before or after the service period. Example: "in_advance" - `billCycle.type` (string) Bill-cycle mode (inherit defaults or set specific day rules). Example: "specific_day_of_month" - `chargeFunction` (string) Internal function/category of the charge used by rating. Example: "charge_function_standard" - `chargeModel` (string) Pricing model that determines how the amount is calculated. Example: "flat_fee" - `chargeType` (string) Whether the charge recurs, rates usage, or is a one-time fee. Example: "recurring" - `createdById` (string) User ID that created the charge record. Example: "53c162482f054f3ca08e1ec82dccfec9" - `createdTime` (string) Timestamp when the charge record was created. Example: "2025-10-13T07:46:02.000+00:00" - `customFields` (object) Tenant-specific custom field values on the charge. Example: {} - `deliverySchedule` (object) Day-of-week delivery settings when delivery scheduling is enabled. - `deliverySchedule.frequency` (string) Delivery frequency label for schedule rules. - `deliverySchedule.friday` (boolean) Deliver on Friday. - `deliverySchedule.monday` (boolean) Deliver on Monday. - `deliverySchedule.saturday` (boolean) Deliver on Saturday. - `deliverySchedule.sunday` (boolean) Deliver on Sunday. - `deliverySchedule.thursday` (boolean) Deliver on Thursday. - `deliverySchedule.tuesday` (boolean) Deliver on Tuesday. - `deliverySchedule.wednesday` (boolean) Deliver on Wednesday. - `discountOptions` (object) How discount charges apply and interact with other discounts. Example: {"applyDetails":[],"applyTo":[],"applyToBillingPeriodPartially":false,"reflectDiscountInNetAmount":false,"rollover":false,"stackedDiscount":false} - `discountOptions.applyDetails` (array) Per-target discount application details (if populated). Example: [] - `discountOptions.applyTo` (array) Which components or charges the discount applies to. Example: [] - `discountOptions.applyToBillingPeriodPartially` (boolean) Whether the discount duration can partially align to a period. - `discountOptions.reflectDiscountInNetAmount` (boolean) Whether discounts reduce the net amount on invoices. - `discountOptions.rollover` (boolean) Whether unused discount can roll over to future periods. - `discountOptions.stackedDiscount` (boolean) Whether this discount stacks with other discounts. - `drawdown` (object) Prepaid/drawdown configuration when using prepaid with drawdown. Example: {} - `endDateCondition` (string) Rule for when the charge ends. Example: "subscription_end" - `upToPeriodsType` (string) Unit used for the fixed period when endDateCondition is fixed_period, for example, billing periods or days. Example: "billing_periods" - `upToPeriods` (integer) Number of periods, in units of upToPeriodsType, that the charge remains active when endDateCondition is fixed_period. - `extendedPrice` (object) Calculated extended price details (model-dependent). Example: {} - `id` (string) Unique identifier of the product rate plan charge (PRPC). Example: "ad95b694d2b8442b84dc8ad26561c7d7" - `isChargeLevelMinCommit` (boolean) Whether a minimum commit is enforced at the charge level. - `isCommitted` (boolean) Indicates if the charge definition is committed/finalized. - `labels` (object) Free-form labels/tags attached to the charge. Example: {} - `listPriceBase` (string) List price basis, for example, Per Billing Period, Per Month, Per Year. Example: "Per_Billing_Period" - `specificListPriceBase` (integer) The number of months for the list price base of the charge. This field is used when the value of the ListPriceBase field to Per Specific Months. The value must be a positive integer between 1 and 120 inclusive. Notes: - This field is available only if you have the Annual List Price feature enabled. - To use this field, you must set the X-Zuora-WSDL-Version request header to 129 or later. Otherwise, an error occurs. - The value of this field is null if you do not set the value of the ListPriceBase field to Per Specific Months. - `mergedRateCards` (array) Effective rate-card rows after merges (if any). Example: [] - `name` (string) Display name of the charge in the plan. Example: "Flat PRPC 1" - `negotiatedRateCards` (array) Customer- or deal-specific rate-card rows applied by negotiation. Example: [] - `netsuite` (object) NetSuite integration attributes mapped for this charge. Example: {} - `ocmJsonByCurrency` (object) Offer/OCM metadata keyed by currency (internal use). Example: {} - `organizationLabels` (array) Organization-level labels associated with the charge. Example: [] - `overageOptions` (object) Overage settings for usage charges. Example: {"includedUnits":0,"unusedUnitsCreditRates":{}} - `overageOptions.includedUnits` (number) Included units before overage starts. - `overageOptions.unusedUnitsCreditRates` (object) Credit rates for unused units (by currency). Example: {} - `prepaid` (boolean) Indicates whether the charge is prepaid. - `prepayment` (object) Prepayment handling and rollover behavior. Example: {"rollover":false,"rolloverApply":"apply_last","rolloverPeriodLength":0,"rolloverPeriods":0} - `prepayment.creditOption` (string) How prepayment credits are applied (if supported). - `prepayment.rollover` (boolean) Whether unused prepayment rolls over. - `prepayment.rolloverApply` (string) Order in which rollover is applied (e.g., apply_last). Example: "apply_last" - `prepayment.rolloverPeriodLength` (integer) Length of each rollover period. - `prepayment.rolloverPeriods` (integer) Number of rollover periods allowed. - `priceChangeOption` (string) How price changes are applied across renewals/amendments. Example: "no_change" - `pricing` (object) Default (charge-level) price configuration by model/currency. Example: {"adjustments":{},"discountAmounts":{},"discountPercentages":{},"flatAmounts":{"USD":100},"maxAmounts":{},"minAmounts":{},"percentages":{},"tiers":[],"unitAmounts":{}} - `pricing.adjustments` (object) Price adjustments metadata. Example: {} - `pricing.discountAmounts` (object) Fixed discount amounts by currency. Example: {} - `pricing.discountPercentages` (object) Percentage discount values by currency. Example: {} - `pricing.flatAmounts` (object) Flat amounts by currency for flat-fee pricing. Example: {"USD":100} - `pricing.maxAmounts` (object) Maximum caps by currency. Example: {} - `pricing.minAmounts` (object) Minimum charges by currency. Example: {} - `pricing.percentages` (object) Percentage price values by currency (model-dependent). Example: {} - `pricing.tiers` (array) Tier definitions for tiered/volume pricing. Example: [] - `pricing.unitAmounts` (object) Per-unit amounts by currency for per-unit/usage pricing. Example: {} - `pricingSummary` (array) Human-readable price summary strings, for example, USD100. Example: ["USD100"] - `pricingWaterfalls` (object) Detailed pricing/waterfall breakdown (if available). Example: {} - `productChargeDefinitions` (array) Underlying charge definitions referenced for pricing lookup. Example: [] - `productRatePlanChargeNumber` (string) PRPC number. Example: "PRPC-00000279" - `productRatePlanId` (string) ID of the plan (PRP) that owns this charge. Example: "ee2d1ce1036c4dd6ae9d6945565ff7a0" - `prorationOption` (string) How proration is handled relative to tenant defaults. Example: "default_from_tenant_setting" - `rateCards` (array) Dynamic Pricing rate-card rows configured on the charge. Example: [] - `revenue` (object) Revenue policy settings for this charge. Example: {"excludeItemBillingFromRevenueAccounting":false,"excludeItemBookingFromRevenueAccounting":false,"legacyReporting":false,"revenueRecognitionRuleName":"Recognize upon invoicing"} - `revenue.excludeItemBillingFromRevenueAccounting` (boolean) If true, item billing is excluded from revenue accounting. - `revenue.excludeItemBookingFromRevenueAccounting` (boolean) If true, item booking is excluded from revenue accounting. - `revenue.legacyReporting` (boolean) Indicator for legacy revenue reporting behaviors. - `revenue.revenueRecognitionRuleName` (string) Name of the revenue rule to apply, for example, "Recognize upon invoicing". Example: "Recognize upon invoicing" - `taxCode` (string) Tax code applied to the charge (for example, a tax category code). Example: "TAX_EXEMPT" - `taxMode` (string) Tax mode for the charge. Example: "non_taxable" - `taxable` (boolean) Whether the charge is taxable. - `triggerEvent` (string) Event that triggers the charge. Example: "contract_effective" - `unitOfMeasure` (string) Unit of measure used for pricing (for example, Each, Seats). Example: "Each" - `updatedById` (string) User ID that last updated the charge record. Example: "53c162482f054f3ca08e1ec82dccfec9" - `updatedTime` (string) Timestamp when the charge record was last updated. Example: "2025-10-13T07:46:02.000+00:00" - `useTenantDefaultForPriceChange` (boolean) Whether tenant defaults govern price change behavior. Example: true ## Response 400 fields (application/json): - `processId` (string) The ID of the process that handles the operation. - `reasons` (array) The container of the error code and message. This field is available only if the success field is false. - `reasons.code` (string) The error code of response. - `reasons.message` (string) The detail information of the error response - `requestId` (string) Unique identifier of the request. - `success` (boolean) Indicates whether the call succeeded. ## Response 401 fields (application/json): - `message` (string) Error message. If the error message is "Authentication error", ensure that the Authorization request header contains valid authentication credentials, then retry the request. See [Authentication](https://developer.zuora.com/docs/guides/authentication/) for more information. If the error message is "Failed to get user info", retry the request. ## Response 500 fields (application/json): - `reasons` (array) Example: [{"code":"ObjectNotFound","message":"Notification definition with id 6e569e1e05f040eda51a927b140c0ac1 does not exist"}] - `reasons.code` (string) The error code of response. - `reasons.message` (string) The detail information of the error response