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

# Create product

`POST /products`

## Request

- Base URL: `https://api.omnisend.com/api`
- URL: `https://api.omnisend.com/api/products`
- Auth: one of:
  - OAuth 2
    - Client credentials
    - Token URL: `https://app.omnisend.com/oauth2/token` scopes: `products.write`
  - API key in header `Authorization`

Creates a new product

**Scopes:**
`products.write`

**Rate Limiting:**
This endpoint is rate limited to 400 requests per minute.

<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
- `504`: Product write timed out, retry later

---

[API](https://skmtc.dev/omnisend/apis/products-api.md) - [All operations](https://skmtc.dev/omnisend/apis/products-api/llms.txt) - [OpenAPI document](https://skmtc.dev/omnisend/apis/products-api/revisions/42e9fa4aefa2?raw)
