Products Create

POST{{api_url}}/shop/products/

Creates new products, or updates the basic product information of SKUs that already exist. Send one row per SKU. One call can create and update any number of products, with no fixed limit on rows. It works exactly like the Product Upload tool in the OMS.

Body

A JSON array as the body root, one object per product:

FieldTypeDescription
skustringThe product's SKU. If the SKU already exists, the row updates it instead of creating a new product.
titlestringThe product title.
pricenumberThe product's price. Used when the product is created.
image_urlstringA URL to the product image, for display. Used when the product is created.
ship_weight_oznumberShipping weight, in ounces.
ship_length_inchesnumberShipping length, in inches.
ship_width_inchesnumberShipping width, in inches.
ship_height_inchesnumberShipping height, in inches.
gtinstringGTIN.
upcstringUPC.
isbnstringISBN.
asinstringAmazon ASIN.
barcodestringBarcode.

Example

Create two products:

{{api_url}}/shop/products/
[
    {"sku": "ABC123", "title": "Product Title ABC", "price": 5.5, "image_url": "https://example.com/example.jpg", "ship_weight_oz": 8, "ship_length_inches": 5, "ship_width_inches": 6, "ship_height_inches": 7, "gtin": "", "upc": "", "isbn": "", "asin": "", "barcode": ""},
    {"sku": "DEF456", "title": "Product Title DEF", "price": 1, "image_url": "https://example.com/example2.jpg", "ship_weight_oz": 1, "ship_length_inches": 2, "ship_width_inches": 3, "ship_height_inches": 4, "gtin": "", "upc": "", "isbn": "", "asin": "", "barcode": ""}
]

Response

One result per row:

[
    {"sku": "ABC123", "message": "Product Created"},
    {"sku": "DEF456", "message": "Product basic info updated. Price and image NOT updated"}
]
FieldTypeDescription
skustringThe SKU from the row.
messagestringProduct Created for a new SKU. Product basic info updated. Price and image NOT updated for a SKU that already existed.

Updating existing SKUs

For a SKU that already exists, a row updates the title, weight, dimensions, and identifier fields only. It does not change price, inventory, or the image. To change those, use Price Set and Inventory Set.

A blank field clears that field on an existing SKU. Always send the full data for existing SKUs. A row with "upc": "" removes the SKU's stored UPC.

After you create products

  1. Set inventory with Inventory Set or Inventory Set Bulk.
  2. Flag each SKU as sold on the channels it's listed on, at Sell On > \[marketplace\] > Set SKU Sold On in the OMS. A SKU that isn't flagged as sold on a channel doesn't send inventory to it.

Before you build

  • Weights are in ounces and dimensions are in inches.
  • Check message on every row. It tells you whether the row created a product or updated one, and on an update, that price and image were left as they were.
  • The identifiers you send are searchable. Inventory Search's search_term matches the base SKU, ASIN, GTIN, UPC, ISBN, and barcode.
  • Your API key needs Products write permission. A key without it gets 403 Forbidden.

Related guides:

Authorization

Bearer token, sent in the Authorization header. Inherited from the collection.

Headers

KeyValueDescription
Content-Typeapplication/json

Body

[
    {
        "sku": "ABC123",
        "title": "Product Title ABC",
        "price": 5.5,
        "image_url": "https://example.com/example.jpg",
        "ship_weight_oz": 8,
        "ship_length_inches": 5,
        "ship_width_inches": 6,
        "ship_height_inches": 7,
        "gtin": "",
        "upc": "",
        "isbn": "",
        "asin": "",
        "barcode": ""
    },
    {
        "sku": "DEF456",
        "title": "Product Title DEF",
        "price": 1,
        "image_url": "https://example.com/example2.jpg",
        "ship_weight_oz": 1,
        "ship_length_inches": 2,
        "ship_width_inches": 3,
        "ship_height_inches": 4,
        "gtin": "",
        "upc": "",
        "isbn": "",
        "asin": "",
        "barcode": ""
    }
]

Example Request

curl --location --request POST '{{api_url}}/shop/products/' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{auth_token}}' \
--data '[
    {
        "sku": "ABC123",
        "title": "Product Title ABC",
        "price": 5.5,
        "image_url": "https://example.com/example.jpg",
        "ship_weight_oz": 8,
        "ship_length_inches": 5,
        "ship_width_inches": 6,
        "ship_height_inches": 7,
        "gtin": "",
        "upc": "",
        "isbn": "",
        "asin": "",
        "barcode": ""
    },
    {
        "sku": "DEF456",
        "title": "Product Title DEF",
        "price": 1,
        "image_url": "https://example.com/example2.jpg",
        "ship_weight_oz": 1,
        "ship_length_inches": 2,
        "ship_width_inches": 3,
        "ship_height_inches": 4,
        "gtin": "",
        "upc": "",
        "isbn": "",
        "asin": "",
        "barcode": ""
    }
]'

Example Responses

Products Create

Request

curl --location --request POST 'https://example.com/api/admin/shop/products/' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '[
    {
        "sku": "ABC123",
        "title": "Product Title ABC",
        "price": 5.5,
        "image_url": "https://example.com/example.jpg",
        "ship_weight_oz": 8,
        "ship_length_inches": 5,
        "ship_width_inches": 6,
        "ship_height_inches": 7,
        "gtin": "",
        "upc": "",
        "isbn": "",
        "asin": "",
        "barcode": ""
    },
    {
        "sku": "DEF456",
        "title": "Product Title DEF",
        "price": 1,
        "image_url": "https://example.com/example2.jpg",
        "ship_weight_oz": 1,
        "ship_length_inches": 2,
        "ship_width_inches": 3,
        "ship_height_inches": 4,
        "gtin": "",
        "upc": "",
        "isbn": "",
        "asin": "",
        "barcode": ""
    }
]'

Response 200 OK

[
    {
        "sku": "ABC123",
        "message": "Product Created"
    },
    {
        "sku": "DEF456",
        "message": "Product Created"
    }
]