---
title: "Update Product"
method: PATCH
path: "/{client_id}/products/{id}/"
---

# Update Product

`PATCH /{client_id}/products/{id}/`

## Request

- Base URL: `https://cf-blast.livelikecdn.com/api/v1/applications`
- URL: `https://cf-blast.livelikecdn.com/api/v1/applications/{client_id}/products/{id}/`
- Auth: API key in header `Authorization`

Updates a product. Send only the fields you want to change. Requires a producer access token for the application.

A published product can't be edited: unpublish it first, then edit, then publish it again. The array fields `category_ids`, `sponsor_ids`, `gating_profile_group_ids`, `attributes` and `image` are full replacements. Send the complete list, and send an empty list to clear them. Omitting a field leaves it unchanged. Once a product has left the draft state it must keep at least one image.

## Path parameters

- `client_id` string, required
- `id` string, uuid, required

## Request body

- object
  - `name` string: Name of the product. Max 255 characters.
  - `product_type` 'badge' | 'multiplier' | 'flair' | 'common_code' | 'unique_code' | 'merchandise' | 'experience' | 'konekt', nullable: The kind of product. Switching to a single-variant type fails if the product has more than one active variant.
  - `redemption_provider` 'konekt', nullable: Must be konekt when product_type is konekt, and empty for every other type.
  - `redemption_method` 'reward_item' | 'cash': How members pay for the product.
  - `description` string: Description of the product, as plain text.
  - `reward_item_id` string, uuid, nullable: Must be one of the reward items attached to the product's store.
  - `redemption_rules` object: Limits on redemption. Only max_redemptions_per_user and max_redemption_days are accepted, and the days value needs the per-user cap.
    - `max_redemptions_per_user` integer
    - `max_redemption_days` integer
  - `gating_profile_group_ids` string[]: Full replace. Profile groups that can redeem the product.
  - `category_ids` object[]: Full replace. Each category must belong to the product's store and be published.
    - `category_id` string, uuid
    - `display_order` integer
  - `sponsor_ids` string[]: Full replace. Sponsors to attach.
  - `start_at` string, date-time: Can't be in the past.
  - `expiry_at` string, date-time: Must be in the future and not before start_at.
  - `redemption_success_message` object: Message shown after a successful redemption, as a JSON object such as {"title": "Success!", "message": "Your reward has been redeemed"}.
  - `redemption_failure_message` object: Message shown when a redemption fails, as a JSON object such as {"title": "Oops!", "message": "We could not redeem your reward"}.
  - `custom_data` string: Free text, for example serialized JSON.
  - `attributes` object[]: Full replace. Both key and value are required on every item.
    - `key` string
    - `value` string
  - `image` object[]: Full replace. Send multipart/form-data with image[0]image, image[0]display_order and so on. Accepts JPG, PNG, GIF, WEBP and GLB, up to 3 MB each by default.
    - `image` string, binary
    - `display_order` integer

## Response `200`

OK. The updated product.

- object
  - `id` string, uuid
  - `name` string
  - `state` 'draft' | 'published' | 'unpublished'

## Other responses

- `400`: Validation error, or the product is published.

---

[API](https://skmtc.dev/livelike/apis/applications.md) - [All operations](https://skmtc.dev/livelike/apis/applications/llms.txt) - [OpenAPI document](https://skmtc.dev/livelike/apis/applications/revisions/841be2451373?raw)
