---
title: "Update Product"
method: PUT
path: "/products/{id}"
tags: ["Products"]
---

# Update Product

`PUT /products/{id}`

## Request

- Base URL: `https://api.monei.com/v1`
- URL: `https://api.monei.com/v1/products/{id}`
- Auth: API key in header `Authorization`
- TypeScript: <https://skmtc.dev/monei/apis/monei-api-v1/docs/products/:id/put.ts> (a function with typed inputs; its response is checked against the schema)

Updates a product. Only the fields you send are changed. A field that this endpoint does not accept, such as `id` or `createdAt`, is rejected.

**Clearing fields**:

Send `null` for `slug` or `defaultPriceId` to remove it. Other fields cannot be cleared.

**Default price**:

`defaultPriceId` must be an active price of this product. A price that is archived later stays the default until you change it.

**Archiving**:

Set `active` to `false` to archive the product. Products are never deleted.

## Request body

- UpdateProductRequest: Only the fields you send are changed. Omitted fields keep their current value. A field that is not listed here is rejected.
  - `name` string: The name of the product.
  - `description` string: A description of the product.
  - `images` string[]: Up to 8 image URLs of the product. Each URL must use `https`.
  - `slug` string, nullable: A short name of the product, unique in your account. A slug another product already has is rejected with `409`. Send `null` to remove the slug.
  - `shippable` boolean: Whether the product is shipped to the buyer.
  - `unitLabel` string: The name of one unit of the product, for example `seat` or `hour`.
  - `descriptor` string: A statement descriptor stored on the product and returned in its responses. It is not applied to payments or subscriptions yet: set `descriptor` on the subscription instead.
  - `defaultPriceId` string, uuid, nullable: The ID of an active price of this product. Send `null` to remove the default price.
  - `active` boolean: Whether the product is active. Products are never deleted: set `active` to `false` to archive one. Archiving a product does not archive its prices, and its prices can still start subscriptions.
  - `metadata` Metadata: A set of key-value pairs that you can attach to a resource. This can be useful for storing additional information about the resource in a structured format.

## Response `200`

A product object

- Product
  - `id` string, uuid, required: Unique identifier for the product.
  - `name` string, required: The name of the product.
  - `description` string: A description of the product.
  - `images` string[]: Up to 8 image URLs of the product. Each URL must use `https`.
  - `slug` string: A short name of the product: lowercase letters and digits, joined by single hyphens. A slug is unique in your account. A request that sets a slug another product already has is rejected with `409`. An archived product keeps its slug until you remove it.
  - `shippable` boolean: Whether the product is shipped to the buyer.
  - `unitLabel` string: The name of one unit of the product, for example `seat` or `hour`.
  - `descriptor` string: A statement descriptor stored on the product and returned in its responses. It is not applied to payments or subscriptions yet: set `descriptor` on the subscription instead.
  - `defaultPriceId` string, uuid: The default [price](https://docs.monei.com/apis/rest/prices-create/) of the product. It is always a price of this product. You set it with [Update Product](https://docs.monei.com/apis/rest/products-update/), after you create the price.
  - `active` boolean, required: Whether the product is active. Products are never deleted: set `active` to `false` to archive one. Archiving a product does not archive its prices, and its prices can still start subscriptions.
  - `metadata` Metadata: A set of key-value pairs that you can attach to a resource. This can be useful for storing additional information about the resource in a structured format.
  - `createdAt` integer, required: Time at which the resource was created. Measured in seconds since the Unix epoch.
  - `updatedAt` integer: Time at which the resource updated last time. Measured in seconds since the Unix epoch.

## Other responses

- `400`: The request is incorrect or could not be processed
- `401`: Unauthorized error. Please check your auth credentials
- `404`: The specified resource was not found
- `409`: The request conflicts with the current state of the resource
- `422`: The request was well-formed but could not be processed due to semantic errors
- `500`: Unexpected server error
- `503`: The service is temporarily unavailable

## Changes

- **2026-10-29** `50bc7df2aa43`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/monei/apis/monei-api-v1/changes/products/:id/put.md)

---

[API](https://skmtc.dev/monei/apis/monei-api-v1.md) - [All operations](https://skmtc.dev/monei/apis/monei-api-v1/llms.txt) - [OpenAPI document](https://skmtc.dev/monei/apis/monei-api-v1/revisions/50bc7df2aa43?raw)
