---
title: "Add a Product"
method: POST
path: "/api/v1/products"
tags: ["Products"]
---

# Add a Product

`POST /api/v1/products`

Options and variants must be added separately

## Request body

- V1AddProduct
  - `category_id` integer, nullable
  - `name` string, required
  - `description` string, nullable
  - `short_description` string, nullable
  - `number_in_stock` integer
  - `price` number, double
  - `rrp` number, double
  - `product_code` string, nullable
  - `charge_delivery` boolean
  - `special_offer` boolean
  - `brand` string, nullable
  - `condition` string, nullable
  - `gtin` string, nullable
  - `mpn` string, nullable
  - `product_weight` number, double
  - `can_be_added_to_cart` boolean
  - `tax_applicable` boolean
  - `live` boolean
  - `order_note` string, nullable
  - `redirect_url` string, nullable
  - `last_modified` string, date-time
  - `meta_description` string, nullable
  - `meta_keywords` string, nullable
  - `meta_title` string, nullable
  - `total_product_stock` integer

## Response `201`

The added Product

- TempestResponseV1Product
  - `meta` object, nullable
  - `links` TempestLink[], nullable
    - `rel` string, nullable
    - `href` string, nullable
  - `validation_result` TempestValidationError[], nullable
    - `member_names` string[], nullable
    - `error_message` string, nullable
  - `errors` object, nullable
  - `data` V1Product
    - `id` integer
    - `category_id` integer, nullable
    - `name` string, required
    - `description` string, nullable
    - `short_description` string, nullable
    - `number_in_stock` integer
    - `price` number, double
    - `rrp` number, double
    - `product_code` string, nullable
    - `charge_delivery` boolean
    - `special_offer` boolean
    - `brand` string, nullable
    - `condition` string, nullable
    - `gtin` string, nullable
    - `mpn` string, nullable
    - `product_weight` number, double
    - `can_be_added_to_cart` boolean
    - `tax_applicable` boolean
    - `tax_rate_id` integer, nullable
    - `live` boolean
    - `order_note` string, nullable
    - `redirect_url` string, nullable
    - `last_modified` string, date-time
    - `meta_description` string, nullable
    - `meta_keywords` string, nullable
    - `meta_title` string, nullable
    - `total_product_stock` integer
    - `parent_product_id` integer, nullable
    - `options` V1ProductOption[], nullable
      - `id` integer
      - `product_id` integer
      - `name` string, required
      - `is_required` boolean
      - `type` string, required
      - `size` integer, required
      - `option_items` V1ProductOptionItem[], nullable
        - `id` integer
        - `product_option_id` integer
        - `name` string, required
        - `price` number, double
        - `is_placeholder` boolean
    - `variants` V1ProductVariant[], nullable
      - `id` integer
      - `parent_product_id` integer
      - `product_code` string, nullable
      - `rrp` number, double
      - `is_default_variant` boolean
      - `number_in_stock` integer
      - `price` number, double
      - `product_weight` number, double
      - `condition` string, nullable
      - `gtin` string, nullable
      - `mpn` string, nullable
      - `live` boolean
      - `combination_name` string, nullable
      - `variant_combinations` V1VariantCombination[], nullable
        - `variant_name` string, required
        - `variant_choice` string, required
    - `categories` V1ProductCategory[], nullable
      - `category_id` integer
      - `is_category_managed` boolean
    - `attribute_items` V1ProductAttributeItem[], nullable
      - `id` integer
      - `attribute_key` string, nullable
      - `product_id` integer
      - `attribute_value` string, nullable
      - `visible` boolean
      - `ebay_attribute_name` string, nullable
      - `order_location` integer
    - `media_links` V2ProductMedia[], nullable
      - `id` integer
      - `product_id` integer
      - `parent_product_id` integer
      - `position` integer
      - `image_id` integer
      - `video_id` integer, nullable
      - `image` V2ProductMediaImage
        - `id` integer
        - `local` string, nullable
        - `remote` string, nullable
        - `width` integer, nullable
        - `height` integer, nullable
        - `location` string, nullable
        - `upload_date` string, date-time
        - `section_type` string, nullable
        - `cdn` string, nullable
      - `video` V2ProductMediaVideo
        - `id` integer
        - `original_url` string, nullable
        - `width` integer
        - `height` integer
    - `order_location` integer
    - `seo_friendly_url` string, nullable

## Other responses

- `400` — Invalid Request
- `401` — Unauthorized
- `403` — Forbidden

---

[API](https://skmtc.dev/ekm/apis/ekm-partner-api.md) · [All operations](https://skmtc.dev/ekm/apis/ekm-partner-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/ekm/ekm-partner-api/revisions/853bef073bb3/schema)
