Create SKU.io Product From Store Product
POST/api/storefront/instances/:id/products/:id2/create-sku-product
Create ONE SKU.io catalog product from this store product and map the two together.
This endpoint currently requires session authentication; Personal Access Token scope support is in progress.
If a SKU.io product with the same SKU already exists, it is LINKED instead of duplicated. The response says which happened: linked_existing is true for a link, false for a fresh creation.
Body (all fields optional):
field_mappings— array of objects, each{storefront_field | listing_field, sku_field, parsers}.storefront_fieldandlisting_fieldare interchangeable names for the store-side source;sku_fieldis the SKU.io target;parsersis an array (send[]when you have none). Any row whose source or target is not one this connection advertises is DROPPED, so a crafted request can never write an arbitrary column into a product.- Valid store-side sources: the mirrored columns
sku,name,slug,price,compare_at_price,description_html,short_description_html,position,store_available— plus any attribute code this connection's imported products actually carry (seestore_attributeson the product detail response). - Valid SKU.io targets:
sku,item_name,price,weight,length,width,height, plusprice.{pricing tier name}.valuefor each product pricing tier andattributes.{attribute name}for each product attribute.
- Valid store-side sources: the mirrored columns
save_as_default— boolean.false/omitted: the mappings drive THIS creation only and are not stored.true: they also become the connection's stored default field mappings.
Send no field_mappings at all to use the connection's stored mappings, falling back to the defaults (store sku to SKU, store name to name, store price to price).
Returns 422 when the product is already mapped — unmap it first. Returns 404 when the product belongs to a different connection. On success the status is 201.
Permission: integrations.update.
Authentication: Bearer token (session or PAT).
Request
Responses
- 201
- 401
- 403
- 404
- 422
- 429
Created
Response Headers
Unauthenticated — the bearer token is missing, revoked, expired, or malformed. Never retry automatically; fix the credential. See the Errors guide.
Forbidden — the token lacks a required scope, the endpoint is not available to API tokens, or the user behind the token lacks the permission. A human must adjust the token scopes or user permissions; do not retry.
Not found — no record with the given identifier (or the route does not exist). Verify the ID before retrying.
Unprocessable Content
Response Headers
Rate limited — platform limit is 1,000 requests/min; individual tokens may carry lower limits. Honor the Retry-After header before retrying. See the Rate Limits guide.