For the complete documentation index, see llms.txt. This page is also available as Markdown.

Create a product

Creates a new product. The way the product is created, and which fields are required, depends on the product_type you provide.

General Rules

  • The sku must be unique across the catalog. Creating a product with an SKU that already exists is rejected.

  • Whether the product is publicly listable (is_listable) and whether it requires form input (is_form_required) are determined automatically by the system from the product type and the selected attribute set. Values you send for these fields do not override the computed result.

  • When a product becomes listable, the system generates its storefront URL automatically.

Conditional Field Requirements

Condition
Requirement

Always

name, sku, product_type, attribute_set, and extra_attributes are required.

product_type is Offer (5)

parent is required. The request is rejected if it is missing.

product_type is Offer (5)

data_source is required. The request is rejected if it is missing.

Behavior by Product Type

  • Simple (0)

    • Without a parent, the product is created as listable.

    • With a parent, the product is treated as a variant. It becomes the listable variant of its group only when no other listable sibling already holds that position for the same listable-attribute values. If a listable sibling already exists, the product is created as non-listable.

    • When the LIST_SIMPLE_INSTEAD_OF_META setting is enabled, listability is always evaluated at the individual simple-variant level rather than at the parent level.

  • Miscellaneous (4) — Created as an individual product and never listable.

  • Product Meta (1) — Created as the parent of a variant group. It is listable only when its attribute set defines no listable variant attributes and the LIST_SIMPLE_INSTEAD_OF_META setting is disabled.

  • Grouped (3) — Always created as listable. Any group_products value in the request is ignored during creation.

  • Bundle (2) — Always created as non-listable and always requires form input.

  • Offer (5) — Always created as non-listable. The product's images are synchronized from the offer relationship after creation.

Dynamic Setting

Setting Key
Type
Default
Effect

LIST_SIMPLE_INSTEAD_OF_META

boolean

false

When enabled, an individual simple variant is exposed as the listable product for its group instead of the parent product meta. This changes the listability computed here for Simple and Product Meta types, and determines which product receives a generated storefront URL.

LISTABLE_PRODUCT_RULES

array of strings

["image_rule", "is_listable_rule"]

The ordered rules that decide which variant is chosen as the listable product within a group. Applied here when a new variant competes for the listable position of its group.

You configure these settings in the management panel. For LIST_SIMPLE_INSTEAD_OF_META, when it is not set its value falls back to the corresponding server configuration value, and to false if that is also unset. See the Dynamic Settings & Environment Variables section for full definitions.

post
/products/
Authorizations
AuthorizationstringRequired

Token credential sent in the Authorization header, in the form: Token <your-token>. Requires a staff (admin) account.

Body

The data used to create or fully update a product.

namestringRequired

The product name.

base_codestring · nullableOptional

The base code shared by variants of the same product.

skustringRequired

The unique stock keeping unit.

product_typestring · enumRequired

The product type accepted when creating or updating a product. The value is the numeric code as a string.

The draft types Pre Product (-1) and Pre Miscellaneous (-2) are not accepted here; they are used only for products created through other processes.

  • 0 — Simple
  • 1 — Product Meta
  • 2 — Bundle
  • 3 — Grouped
  • 4 — Miscellaneous
  • 5 — Offer
Possible values:
is_activebooleanOptional

Whether the product is active.

Default: true
parentinteger · nullableOptional

The identifier of the parent product. Required for offer products.

is_seller_productbooleanOptional

Whether the product belongs to a seller.

Default: false
group_productsinteger[] · nullableOptional

The identifiers of products to group under this product.

attribute_setintegerRequired

The identifier of the attribute set that defines the product's attributes.

custom_attribute_setinteger · nullableOptional

The identifier of an additional custom attribute set.

listing_codestring · nullableOptional

The code that identifies the listable variant grouping.

data_sourceinteger · nullableOptional

The identifier of the default data source (seller). Required for offer products.

is_form_requiredbooleanOptional

Whether the product requires form input. This value is determined automatically by the system from the attribute set and product type; any value you send is ignored.

Responses
201

The product was created.

application/json

A product in the catalog.

pkintegerRead-onlyOptional

The unique identifier of the product.

namestringOptional

The product name.

base_codestring · nullableOptional

The base code shared by variants of the same product.

skustringOptional

The unique stock keeping unit.

product_typestring · enumOptional

The product type. The value is the numeric code as a string.

  • -1 — Pre Product
  • 0 — Simple
  • 1 — Product Meta
  • 2 — Bundle
  • 3 — Grouped
  • -2 — Pre Miscellaneous
  • 4 — Miscellaneous
  • 5 — Offer
Possible values:
is_activebooleanOptional

Whether the product is active.

parentinteger · nullableOptional

The identifier of the parent product, when the product is a variant.

is_seller_productbooleanOptional

Whether the product belongs to a seller.

group_productsinteger[] · nullableOptional

The identifiers of products grouped under this product.

attribute_setintegerOptional

The identifier of the attribute set that defines the product's attributes.

custom_attribute_setinteger · nullableOptional

The identifier of an additional custom attribute set.

is_listablebooleanRead-onlyOptional

Whether the product is publicly listable. Determined by the system.

listing_codestring · nullableOptional

The code that identifies the listable variant grouping.

data_sourceinteger · nullableOptional

The identifier of the default data source (seller) for the product.

absolute_urlstring · nullableRead-onlyOptional

The storefront URL of the product, when available.

is_form_requiredbooleanOptional

Whether the product requires form input.

post/products/
POST /api/remote/1/products/ HTTP/1.1
Host: sandbox.akinon.com
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 551

{
  "name": "text",
  "base_code": null,
  "sku": "text",
  "product_type": "0",
  "is_active": true,
  "parent": null,
  "attributes": {
    "ANY_ADDITIONAL_PROPERTY": "anything"
  },
  "attributes_kwargs": {
    "ANY_ADDITIONAL_PROPERTY": "anything"
  },
  "extra_attributes": {
    "ANY_ADDITIONAL_PROPERTY": "anything"
  },
  "is_seller_product": false,
  "group_products": [
    1
  ],
  "attribute_set": 1,
  "custom_attribute_set": null,
  "localized_attributes": {
    "ANY_ADDITIONAL_PROPERTY": "anything"
  },
  "localized_attributes_kwargs": {
    "ANY_ADDITIONAL_PROPERTY": "anything"
  },
  "listing_code": null,
  "data_source": null,
  "is_form_required": true
}
{
  "pk": 1,
  "name": "text",
  "base_code": null,
  "sku": "text",
  "product_type": "-1",
  "is_active": true,
  "parent": null,
  "attributes": {
    "ANY_ADDITIONAL_PROPERTY": "anything"
  },
  "attributes_kwargs": {
    "ANY_ADDITIONAL_PROPERTY": "anything"
  },
  "extra_attributes": {
    "ANY_ADDITIONAL_PROPERTY": "anything"
  },
  "is_seller_product": true,
  "group_products": [
    1
  ],
  "productimage_set": [
    {
      "pk": 1,
      "status": "text",
      "image": "text",
      "order": 1,
      "created_date": "2026-01-01T00:00:00.000Z",
      "specialimage_set": [
        {}
      ]
    }
  ],
  "attribute_set": 1,
  "custom_attribute_set": null,
  "is_listable": true,
  "listing_code": null,
  "data_source": null,
  "absolute_url": null,
  "is_form_required": true
}

Last updated

Was this helpful?