---
title: "Create product"
method: POST
path: "/products"
tags: ["Products"]
---

# Create product

`POST /products`

Creates a new product

**Scopes:**
`products.write`
<br><a href="https://www.postman.com/omnisend-api/workspace/omnisend/overview" target="_blank">Open Postman collection</a>

## Headers

- `Omnisend-Version` string, required

## Request body

- Product
  - `categoryIDs` string[]
  - `createdAt` string
  - `currency` string, required
  - `defaultImageUrl` string — DefaultImageUrl is recommended if more than one image is needed. Other product images should be added to the Images array.
  - `description` string — Description is a short description of the product. It can be used in the email body.
  - `id` string, required
  - `images` string[]
  - `status` 'inStock' | 'outOfStock' | 'notAvailable', required — Status can be inStock, outOfStock, or notAvailable. We recommended to keep it in sync with your shop product to ensure that Omnisend can avoid sending out-of-stock products to your customers.
  - `tags` string[] — Tags can be used to categorize products.
  - `title` string, required
  - `type` string — Product type can be used to categorize products.
  - `updatedAt` string
  - `url` string, required — Url should point to the product page on the website.
  - `variants` Variant[] — Product variants are different versions of the same product. For example, a T-shirt can have different sizes and colors.
    - `defaultImageUrl` string — DefaultImageUrl is recommended if more than one image is needed. Other product images should be added to the Images array.
    - `description` string — Description is a short description of the product. It can be used in the email body.
    - `id` string, required
    - `images` string[]
    - `price` number, required
    - `sku` string
    - `status` 'inStock' | 'outOfStock' | 'notAvailable' — Status can be inStock, outOfStock, or notAvailable. We recommended to keep it in sync with your shop product to ensure that Omnisend can avoid sending out-of-stock products to your customers.
    - `strikeThroughPrice` number — StrikeThroughPrice is the price before the discount.
    - `title` string, required
    - `url` string, required
  - `vendor` string — Vendor is the manufacturer or the brand of the product.

## Response `201`

Product created successfully with the given ID

- CreateProductResponse
  - `id` string

## Other responses

- `400` — Validation failed
- `401` — Authentication is missing or invalid
- `403` — Insufficient permissions for this operation
- `409` — Product already exists
- `410` — API version has been retired
- `429` — Rate limit exceeded
- `500` — Internal server error

---

[API](https://skmtc.dev/omnisend/apis/events-api.md) · [All operations](https://skmtc.dev/omnisend/apis/events-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/omnisend/events-api/revisions/50214fbc283f/schema)
