---
title: "Update a product"
method: PATCH
path: "/v1/products/{id}"
tags: ["Products"]
---

# Update a product

`PATCH /v1/products/{id}`

Update a product. Only supplied fields change; a price change mints a new default price.

## Path parameters

- `id` string, required

## Request body

- UpdateProductRequestEntity
  - `name` string — Name of the product
  - `description` string — Description of the product
  - `image_url` string — URL of the product image
  - `image_urls` string[] — Ordered list of product image URLs (max 8). The first entry is the cover image; when provided it takes precedence over image_url. An empty list removes all images.
  - `default_success_url` string — Redirect URL after successful payment.
  - `price` integer — The price of the product in cents. Must be 0 (free product) or at least 100 (one whole unit of the currency).
  - `currency` 'EUR' | 'USD' — Three-letter uppercase ISO 4217 currency code. Must be one of Creem's supported currencies.
  - `billing_type` 'recurring' | 'onetime' — Billing method for the product: `recurring` subscription or `onetime` payment.
  - `billing_period` 'once' | 'every-day' | 'every-month' | 'every-three-months' | 'every-six-months' | 'every-year' — Billing interval. Required when `billing_type` is `recurring`.
  - `tax_mode` 'inclusive' | 'exclusive' — Specifies the tax calculation mode for the transaction. If set to "inclusive," the tax is included in the price. If set to "exclusive," the tax is added on top of the price.
  - `pay_what_you_want` boolean — Enable pay-what-you-want pricing (one-time only).
  - `suggested_price` integer — Suggested amount in cents when pay_what_you_want is enabled.

## Response `200`

Successfully updated the product

- ProductEntity
  - `id` string, required — Unique identifier for the object.
  - `mode` 'test' | 'prod' | 'sandbox', required — String representing the environment.
  - `object` string, required — String representing the object's type. Objects of the same type share the same value.
  - `name` string, required — The name of the product
  - `description` string, required — A brief description of the product
  - `image_url` string — URL of the product image. Only png as jpg are supported
  - `image_urls` string[] — Ordered list of product image URLs. The first entry is the cover image (mirrored in image_url).
  - `features` FeatureEntity[] — Features of the product.
    - `id` string, required — Unique identifier for the feature.
    - `type` 'custom' | 'file' | 'licenseKey' | 'customerCredits', required — The type of the feature: `custom` (private note), `file` (downloadable files), `licenseKey` (license key), or `customerCredits` (customer credit grant).
    - `description` string, required — A brief description of the feature.
  - `price` number, required — The price of the product in cents. 1000 = $10.00
  - `currency` string, required — Three-letter ISO currency code, in uppercase. Must be a supported currency.
  - `billing_type` 'recurring' | 'onetime', required — Indicates the billing method for the customer. It can either be a `recurring` billing cycle or a `onetime` payment.
  - `billing_period` 'every-month' | 'every-three-months' | 'every-six-months' | 'every-year' | 'every-day' | 'once', required — Billing period
  - `status` 'active' | 'archived', required — Lifecycle status of the product: `active` or `archived`.
  - `tax_mode` 'inclusive' | 'exclusive', required — Specifies the tax calculation mode for the transaction. If set to "inclusive," the tax is included in the price. If set to "exclusive," the tax is added on top of the price.
  - `tax_category` 'saas' | 'digital-goods-service' | 'ebooks', required — Categorizes the type of product or service for tax purposes. This helps determine the applicable tax rules based on the nature of the item or service.
  - `product_url` string — The product page you can redirect your customers to for express checkout.
  - `default_success_url` string, nullable — The URL to which the user will be redirected after successfull payment.
  - `custom_fields` CustomField[], nullable — Custom fields configured for the product. Collect additional information from your customer during checkout.
    - `type` 'text' | 'checkbox', required — The type of the field.
    - `key` string, required — Unique key for custom field. Must be unique to this field, alphanumeric, and up to 200 characters.
    - `label` string, required — The label for the field, displayed to the customer, up to 50 characters
    - `optional` boolean, nullable — Whether the customer is required to complete the field. Defaults to `false`.
    - `text` Text
      - `max_length` number, nullable — Maximum character length constraint for the input.
      - `minimum_length` number, nullable — Minimum character length requirement for the input.
      - `value` string, nullable — The value of the input.
    - `checkbox` Checkbox
      - `label` string, nullable — The markdown text to display for the checkbox.
      - `value` boolean, nullable — The value of the checkbox (checked or not).
  - `created_at` string, date-time, required — Creation date of the product
  - `updated_at` string, date-time, required — Last updated date of the product

## Other responses

- `400` — Bad Request - Invalid input parameters
- `401` — Unauthorized - Invalid or missing API key
- `404` — Not Found - Resource does not exist

---

[API](https://skmtc.net/creem/apis/creem-api.md) · [All operations](https://skmtc.net/creem/apis/creem-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/creem/creem-api/versions/aa593160d96c/schema)
