# Update product price

By using this method, you can update an existing <a href="https://docs.solidgate.com/billing/manage-products/#edit-price" target="_blank">product price</a>.
<blockquote>
<p>You can update a price only when all associated subscriptions are in <code>expired</code> status. If the price has no associated subscriptions, you can update it without restrictions.</p>
<p>This restriction does not apply when you only promote a price to <code>default</code>. Promoting a price to <code>default</code> only changes which price is used as default. This works regardless of subscription status. If you also update <code>product_price</code>, <code>trial_price</code>, or <code>currency</code>, the restriction still applies.</p>
</blockquote>

Endpoint: PATCH /products/{product_id}/prices/{product_price_id}
Version: 1.0.0
Security: MerchantID

## Path parameters:

  - `product_id` (string, required)

  - `product_price_id` (string, required)

## Header parameters:

  - `merchant` (string, required)

  - `signature` (string, required)

## Request fields (application/json):

  - `status` (string)
    Product price status.
    Enum: "disabled", "active"

  - `product_price` (integer)
    Product price.
    Example: 1000

  - `trial_price` (integer)
    Trial price.
    Example: 500

  - `currency` (string)
    Three-letter ISO-4217 currency code of the product price currency.
    Example: USD

  - `country` (string)
    Country code.
Not returned or expected for default prices.
    Example: USA

  - `default` (boolean)
    Promotes the price to the product's default price. The previous default price remains active but is no longer the default. Archive it separately if it should no longer be available.
Only an active price without a country can become the default. You can combine default with product_price, trial_price, and currency in the same request. These values are applied after the price becomes the default. Because a default price cannot have a country or a disabled status, combining default with either fails.If the price has associated subscriptions, you cannot combine default with product_price, trial_price, or currency. The same restriction applies when updating those fields directly. Promoting a price to the default without changing any other fields is always allowed.Setting default to false on the current default price fails. To remove the current default, promote another price to default instead.
    Example: true

## Response 200 fields (application/json):

  - `id` (string, required)
    Unique product price identifier.
    Example: cb43b415-5522-4373-b026-a365462f9114

  - `default` (boolean, required)
    Indicates whether the price is the default for the product.
    Example: false

  - `status` (string, required)
    Product price status.
    Enum: "disabled", "active"

  - `created_at` (string, required)
    Datetime of the product price creation.
    Example: 2025-05-31 12:53:12

  - `updated_at` (string, required)
    Datetime of the product price update.
    Example: 2025-05-31 12:53:13

  - `product_price` (integer, required)
    Product price.
    Example: 1000

  - `trial_price` (integer)
    Trial price.
    Example: 500

  - `currency` (string, required)
    Three-letter ISO-4217 currency code of the product price currency.
    Example: USD

  - `country` (string)
    Country code.
Not returned or expected for default prices.
    Example: USA

## Response 400 fields (application/json):

  - `error` (object, required)
    Error object.

  - `error.code` (string, required)
    Error code.
    Example: 2.01

  - `error.message` (string, required)
    Error message.
    Example: Validation error

## Response 401 fields (application/json):

  - `error` (object, required)
    Error object.

  - `error.code` (string, required)
    Error code indicating the specific authorization failure.
    Example: 1.01

  - `error.message` (string, required)
    Descriptive message providing more details about the authorization failure.
    Example: Authorization failed

## Response 403 fields (application/json):

  - `error` (object, required)
    Error object.

  - `error.code` (string, required)
    Error code indicating that access to the service is denied.
    Example: 1.02

  - `error.message` (string, required)
    Message informing that the service is not allowed for the account.
    Example: Access denied

## Response 404 fields (application/json):

  - `error` (object, required)
    Error object.

  - `error.code` (string, required)
    Error code.
    Example: 2.01

  - `error.message` (string, required)
    Error message.
    Example: {entityName} not found with id: {entityId}

