---
title: "Create a new product."
method: POST
path: "/admin/products.json"
tags: ["Product"]
---

# Create a new product.

`POST /admin/products.json`

Create a new product.

## Request body

- ProductSwaggerRequest
  - `product` ProductDtoSwagger
    - `body_html` string — A description of the product. Supports HTML formatting.
    - `custom_options` DtoCustomOption[] — List of custom options
      - `active` boolean — Check whether option is active or not
      - `default_value` string — Prefill on storefront
      - `default_value_index` integer — Index of default value in list values
      - `font_family` string — Custom font family style
      - `font_path` string — Path to font resource
      - `help_text` string — Custom help text
      - `id` string — Custom option ID
      - `label` string — Custom label, displayed on storefront
      - `layer_name` string — Layer name
      - `name` string — Custom name
      - `placeholder` string — Custom placeholder
      - `rules` DtoRule[] — This fields is in progress...
        - `conditions` DtoCondition[]
          - `relation` string — Condition relation
          - `value` string — Condition value
        - `show_option_ids` string[] — List ids will be shown
      - `type` string — Custom type </br>**text**: Text field type </br>**textarea**: Text area type </br>**file**: File type </br>**radio**: Radio type </br>**select**: Select type </br>**checkbox**: Checkbox type </br>**picture**: Picture type
      - `validations` DtoCustomOptionValidations
        - `allowed_characters` string[] — List character is allowed </br>**characters**: Characters </br>**numbers**: Numbers </br>**symbol**: Special characters </br>**emoji**: Emoji
        - `max_length` integer — Maximum length
        - `min_size` number — Maximum size
        - `required` boolean — Check whether value is required or not
      - `values` DtoCustomOptionValue[] — List option value
        - `text` string — Option's text, unique
        - `thumbnail` string — Option's thumbnail if custom option is picture choice. If thumbnail is empty, picture will be displayed by url from value
        - `value` string — Option's value
    - `display_options` DisplayOptions
      - `group_options_by` integer — Group option by specific field
    - `handle` string — A unique human-friendly string for the product. Automatically generated from the product's `title`. Used by the Liquid templating language to refer to objects.
    - `images` DtoImageRequest[] — List of images
      - `position` integer — Position of list image
      - `src` string — url of image
    - `metafields_global_description_tag` string — A description of the product used for SEO purposes. Generally added to the <meta name='description'> tag.
    - `metafields_global_title_tag` string — The name of the product used for SEO purposes. Generally added to the <meta name='title'> tag.
    - `options` DtoProductOption[] — List of options
      - `id` integer — Id of product option set
      - `name` string — Name of product option set
      - `position` integer — The order of the product image in the list. The first product image is at position 1 and is the main image for the product.
      - `product_id` integer — The id of the product associated with the image.
      - `values` string[] — List of product option
    - `product_availability` integer — 1. Available in all channels 2. Hide from the sitemap.txt 3. Hide from online store listing pages (homepage, collection pages, search page,...) 0. Hide from all channels
    - `product_type` string — A categorization for the product used for filtering and searching products.
    - `published` boolean — Published or not
    - `published_at` integer — The date and time (ISO 8601 format) when the product was published. Can be set to null to unpublish the product from the Online Store channel.
    - `tags` string — A string of comma-separated tags that are used for filtering and search. A product can have up to 250 tags. Each tag can have up to 255 characters.
    - `title` string — The name of the product.
    - `variants` ProductVariantRequestWithOptionValueDtoSwagger[] — List of variants
      - `barcode` string — The code of variant for easy managing
      - `compare_at_price` number — The price compare with
      - `cost_per_item` number
      - `fulfillment_service` string — The name of fulfillment
      - `id` integer — A unique numeric identifier for the product variant. Each id is unique across the ShopBase system. No two products variant will have the same id, even if they're from different shops.
      - `image_id` integer — The unique numeric identifier for a product's image. The image must be associated to the same product as the variant.
      - `inventory_management` string — The name of inventory management
      - `inventory_policy` string — Whether customers are allowed to place an order for the product variant when it's out of stock. Valid values </br>**deny**: Customers are not allowed to place orders for the product variant if it's out of stock </br>**continue**: Customers are allowed to place orders for the product variant if it's out of stock.
      - `inventory_quantity` integer — The quantity in inventory.
      - `is_default` boolean — Option to decide that this variant is default or not
      - `option1` string — A unique identifier for the product variant in the shop. Required in order to connect to a FulfillmentService
      - `price` number — The price of variant.
      - `product_id` integer — A unique numeric identifier for the product. Each id is unique across the ShopBase system. No two products will have the same id, even if they're from different shops.
      - `requires_shipping` boolean — Whether a customer needs to provide a shipping address when placing an order for the product variant.
      - `sku` string — The Metafield resource allows you to add additional information to other Admin API resources. Present, we don't use this field. We use table metafield instead.
      - `taxable` boolean — Whether a tax is charged when the product variant is sold.
      - `title` string — The name of the product.
      - `weight` number — Weight of product
      - `weight_unit` string — unit of weight
    - `vendor` string — The name of the product's vendor.

## Response `200`

OK

- ProductSwaggerResponse
  - `product` ProductDto
    - `body_html` string — A description of the product. Supports HTML formatting.
    - `can_preview` boolean — This product can be previewed by personalize tool or not
    - `collection_ids` integer[]
    - `created_at` integer — Created at time
    - `custom_options` DtoCustomOption[]
      - `active` boolean — Check whether option is active or not
      - `default_value` string — Prefill on storefront
      - `default_value_index` integer — Index of default value in list values
      - `font_family` string — Custom font family style
      - `font_path` string — Path to font resource
      - `help_text` string — Custom help text
      - `id` string — Custom option ID
      - `label` string — Custom label, displayed on storefront
      - `layer_name` string — Layer name
      - `name` string — Custom name
      - `placeholder` string — Custom placeholder
      - `rules` DtoRule[] — This fields is in progress...
        - `conditions` DtoCondition[]
          - `relation` string — Condition relation
          - `value` string — Condition value
        - `show_option_ids` string[] — List ids will be shown
      - `type` string — Custom type </br>**text**: Text field type </br>**textarea**: Text area type </br>**file**: File type </br>**radio**: Radio type </br>**select**: Select type </br>**checkbox**: Checkbox type </br>**picture**: Picture type
      - `validations` DtoCustomOptionValidations
        - `allowed_characters` string[] — List character is allowed </br>**characters**: Characters </br>**numbers**: Numbers </br>**symbol**: Special characters </br>**emoji**: Emoji
        - `max_length` integer — Maximum length
        - `min_size` number — Maximum size
        - `required` boolean — Check whether value is required or not
      - `values` DtoCustomOptionValue[] — List option value
        - `text` string — Option's text, unique
        - `thumbnail` string — Option's thumbnail if custom option is picture choice. If thumbnail is empty, picture will be displayed by url from value
        - `value` string — Option's value
    - `display_options` DisplayOptions
      - `group_options_by` integer — Group option by specific field
    - `fulfillment_services` FulfillmentService[]
      - `can_remove_mapping` boolean — Can remove mapping or not
      - `is_mapped` boolean — Whether is mapped or not
      - `service_name` string — Service name
    - `handle` string — A unique human-friendly string for the product. Automatically generated from the product's `title`. Used by the Liquid templating language to refer to objects.
    - `id` integer — A unique numeric identifier for the product. Each id is unique across the ShopBase system. No two products will have the same id, even if they're from different shops.
    - `image` GitlabProductImage
      - `alt_text` string — The text in alt property of image
      - `height` integer — Height dimension of the image which is determined on upload.
      - `id` integer — A unique numeric identifier for the product image.
      - `position` integer — The order of the product image in the list. The first product image is at position 1 and is the main image for the product.
      - `product_id` integer — The id of the product associated with the image.
      - `src` string — Specifies the location of the product image. This parameter supports URL filters that you can use to retrieve modified copies of the image. For example, add _small, to the filename to retrieve a scaled copy of the image at 100 x 100 px (for example, ipod-nano_small.png), or add _2048x2048 to retrieve a copy of the image constrained at 2048 x 2048 px resolution (for example, ipod-nano_2048x2048.png).
      - `updated_at` integer
      - `width` integer — Width dimension of the image which is determined on upload.
    - `images` GitlabProductImage[]
      - `alt_text` string — The text in alt property of image
      - `height` integer — Height dimension of the image which is determined on upload.
      - `id` integer — A unique numeric identifier for the product image.
      - `position` integer — The order of the product image in the list. The first product image is at position 1 and is the main image for the product.
      - `product_id` integer — The id of the product associated with the image.
      - `src` string — Specifies the location of the product image. This parameter supports URL filters that you can use to retrieve modified copies of the image. For example, add _small, to the filename to retrieve a scaled copy of the image at 100 x 100 px (for example, ipod-nano_small.png), or add _2048x2048 to retrieve a copy of the image constrained at 2048 x 2048 px resolution (for example, ipod-nano_2048x2048.png).
      - `updated_at` integer
      - `width` integer — Width dimension of the image which is determined on upload.
    - `metafields_global_description_tag` string — A description of the product used for SEO purposes. Generally added to the <meta name='description'> tag.
    - `metafields_global_title_tag` string — The name of the product used for SEO purposes. Generally added to the <meta name='title'> tag.
    - `options` DtoProductOption[]
      - `id` integer — Id of product option set
      - `name` string — Name of product option set
      - `position` integer — The order of the product image in the list. The first product image is at position 1 and is the main image for the product.
      - `product_id` integer — The id of the product associated with the image.
      - `values` string[] — List of product option
    - `product_availability` integer — 1. Available in all channels 2. Hide from the sitemap.txt 3. Hide from online store listing pages (homepage, collection pages, search page,...) 0. Hide from all channels
    - `product_type` string — A categorization for the product used for filtering and searching products.
    - `published` boolean — Published or not
    - `published_at` integer — The date and time (ISO 8601 format) when the product was published. Can be set to null to unpublish the product from the Online Store channel.
    - `tags` string — A string of comma-separated tags that are used for filtering and search. A product can have up to 250 tags. Each tag can have up to 255 characters.
    - `title` string — The name of the product.
    - `updated_at` integer — Updated at time
    - `variants` ProductVariantRequestWithOptionValueDto[]
      - `barcode` string — The code of variant for easy managing
      - `body_html` string
      - `compare_at_price` number — The price compare with
      - `cost_per_item` number
      - `fulfillment_service` string — The name of fulfillment
      - `id` integer — A unique numeric identifier for the product variant. Each id is unique across the ShopBase system. No two products variant will have the same id, even if they're from different shops.
      - `image_id` integer — The unique numeric identifier for a product's image. The image must be associated to the same product as the variant.
      - `image_ids` string
      - `inventory_management` string — The name of inventory management
      - `inventory_policy` string — Whether customers are allowed to place an order for the product variant when it's out of stock. Valid values * **deny**: Customers are not allowed to place orders for the product variant if it's out of stock * **continue**: Customers are allowed to place orders for the product variant if it's out of stock.
      - `inventory_quantity` integer — The quantity in inventory.
      - `is_default` boolean — Option to decide that this variant is default or not
      - `metafields` MetaField[]
        - `description` string — Description
        - `key` string — Key
        - `namespace` string — Namespace
        - `value` string — Value
        - `value_type` string — Value type
      - `option1` string — A unique identifier for the product variant in the shop. Required in order to connect to a FulfillmentService
      - `position` integer — The position of variant.
      - `price` number — The price of variant.
      - `product_id` integer — A unique numeric identifier for the product. Each id is unique across the ShopBase system. No two products will have the same id, even if they're from different shops.
      - `requires_shipping` boolean — Whether a customer needs to provide a shipping address when placing an order for the product variant.
      - `sku` string — The Metafield resource allows you to add additional information to other Admin API resources. Present, we don't use this field. We use table metafield instead.
      - `sync_cache_time` integer
      - `taxable` boolean — Whether a tax is charged when the product variant is sold.
      - `title` string — The name of the product.
      - `updated_at` integer
      - `weight` number — Weight of product
      - `weight_unit` string — unit of weight
    - `vendor` string — The name of the product's vendor.

---

[API](https://skmtc.dev/shopbase/apis/shopbase-internal-api.md) · [All operations](https://skmtc.dev/shopbase/apis/shopbase-internal-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/shopbase/shopbase-internal-api/revisions/353ccde6240d/schema)
