---
title: "Create Product"
method: POST
path: "/{client_id}/products/"
---

# Create Product

`POST /{client_id}/products/`

## Request

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

Creates a product in a reward store. It is always created in the `draft` state, so it is not visible to members until you publish it. Variants, which carry the price and stock, are added afterwards through the nested variants endpoint, and a product can't be published until it has at least one. Requires a producer access token for the application.

Send JSON, or `multipart/form-data` when you upload product images.

## Path parameters

- `client_id` string, required

## Request body

- object
  - `product_store_id` string, uuid, required: The reward store this product belongs to. It must be an active store in this application. Write-only.
  - `name` string, required: Name of the product. Max 255 characters.
  - `product_type` 'badge' | 'multiplier' | 'flair' | 'common_code' | 'unique_code' | 'merchandise' | 'experience' | 'konekt', nullable: The kind of product. Optional here, but required before the product can be published.
  - `redemption_provider` 'konekt', nullable: The third party that redeems and fulfils the product. Must be `konekt` when `product_type` is `konekt`, and must be empty for every other `product_type`. Leave it out when you fulfil the product yourself.
  - `redemption_method` 'reward_item' | 'cash': How members pay for the product. `reward_item` debits the member's reward item balance. `cash` means money is collected by an external provider and no reward item is debited.
  - `description` string: Description of the product, as plain text.
  - `reward_item_id` string, uuid, nullable: The reward item that variant prices are denominated in. It must be one of the reward items attached to the product's store. Required before the product can be published.
  - `redemption_rules` object: Limits on redemption. No other keys are accepted.
    - `max_redemptions_per_user` integer: The most times one member can redeem the product.
    - `max_redemption_days` integer: How many days each redemption keeps counting against `max_redemptions_per_user`. Only valid together with `max_redemptions_per_user`.
  - `gating_profile_group_ids` string[]: Profile groups whose members are the only ones who can redeem the product. Each group must belong to this application.
  - `category_ids` object[]: Categories to list the product under. Each category must belong to this product's store and be published.
    - `category_id` string, uuid, required
    - `display_order` integer, nullable: Position within the category. If omitted, the product is placed at the end.
  - `sponsor_ids` string[]: Sponsors to attach. Each sponsor must belong to this application.
  - `start_at` string, date-time: When the product becomes available. Can't be in the past.
  - `expiry_at` string, date-time: When the product stops being available. Must be in the future and not before `start_at`.
  - `redemption_success_message` object: Message shown to the member after a successful redemption, as a JSON object such as {"title": "Success!", "message": "Your reward has been redeemed"}.
  - `redemption_failure_message` object: Message shown to the member 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[]: Key and value pairs. Both `key` and `value` are required on every item.
    - `key` string, required
    - `value` string, required
  - `image` object[]: Product images. Upload files with `multipart/form-data`, using the field names `image[0]image`, `image[0]display_order`, `image[1]image` and so on. Accepts JPG, PNG, GIF, WEBP and GLB files, up to 3 MB each by default. If `display_order` is omitted, upload order is used. At least one image is required before the product can be published.
    - `image` string, binary
    - `display_order` integer

## Response `201`

Created. The product is returned in the draft state.

- object
  - `id` string, uuid
  - `url` string
  - `publish_url` string
  - `unpublish_url` string
  - `variants_url` string: The endpoint for adding variants to this product.
  - `product_store` object
    - `id` string, uuid
    - `name` string
  - `name` string
  - `product_type` string, nullable
  - `redemption_provider` string, nullable
  - `redemption_method` string
  - `state` 'draft' | 'published' | 'unpublished': Always `draft` on create.
  - `display_status` string: How the product reads to a member: draft, unpublished, or, once published, coming soon or expired.
  - `description` string, nullable
  - `is_eligible_to_redeem` boolean
  - `redemption_rules` object, nullable
  - `gating_profile_groups` object[]
    - `id` string
    - `name` string
  - `categories` object[]
    - `id` string
    - `name` string
    - `display_order` integer
  - `sponsors` object[]
    - `id` string
    - `name` string
  - `reward_item` object, nullable
    - `id` string
    - `name` string
  - `images` object[]
    - `id` integer
    - `image_url` string
    - `display_order` integer
  - `start_at` string, date-time, nullable
  - `expiry_at` string, date-time, nullable
  - `redemption_success_message` object, nullable
  - `redemption_failure_message` object, nullable
  - `is_active` boolean
  - `custom_data` string, nullable
  - `attributes` object[]
    - `key` string
    - `value` string
  - `created_at` string, date-time
  - `updated_at` string, date-time
  - `created_by` object, nullable

## Other responses

- `400`: Validation error. The body maps each invalid field to its messages.
- `401`: Missing or invalid access token.
- `403`: The token is not a producer token for this application.
- `404`: No active application with this client ID.

---

[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)
