Skip to main content
POST
/
api-product
/
v1
/
product
/
bulk
/
insert
Create items and bundles
curl --request POST \
  --url https://live.copilot.fabric.inc/api-product/v1/product/bulk/insert \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --header 'x-site-context: <x-site-context>' \
  --data '
[
  {
    "sku": "sku_abc",
    "type": "ITEM",
    "nodeName": "PRIMARY->electronics",
    "parentSku": "sku123",
    "attributeValues": [
      {
        "name": "Mobile",
        "value": "AMD X570 mobo"
      }
    ],
    "inheritedAttributes": [
      {
        "name": "color",
        "action": "SET"
      }
    ],
    "bundleItems": [
      {
        "sku": "sku123",
        "quantity": 6
      }
    ]
  }
]
'
import requests

url = "https://live.copilot.fabric.inc/api-product/v1/product/bulk/insert"

payload = [
{
"sku": "sku_abc",
"type": "ITEM",
"nodeName": "PRIMARY->electronics",
"parentSku": "sku123",
"attributeValues": [
{
"name": "Mobile",
"value": "AMD X570 mobo"
}
],
"inheritedAttributes": [
{
"name": "color",
"action": "SET"
}
],
"bundleItems": [
{
"sku": "sku123",
"quantity": 6
}
]
}
]
headers = {
"x-site-context": "<x-site-context>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
method: 'POST',
headers: {
'x-site-context': '<x-site-context>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify([
{
sku: 'sku_abc',
type: 'ITEM',
nodeName: 'PRIMARY->electronics',
parentSku: 'sku123',
attributeValues: [{name: 'Mobile', value: 'AMD X570 mobo'}],
inheritedAttributes: [{name: 'color', action: 'SET'}],
bundleItems: [{sku: 'sku123', quantity: 6}]
}
])
};

fetch('https://live.copilot.fabric.inc/api-product/v1/product/bulk/insert', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://live.copilot.fabric.inc/api-product/v1/product/bulk/insert",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
[
'sku' => 'sku_abc',
'type' => 'ITEM',
'nodeName' => 'PRIMARY->electronics',
'parentSku' => 'sku123',
'attributeValues' => [
[
'name' => 'Mobile',
'value' => 'AMD X570 mobo'
]
],
'inheritedAttributes' => [
[
'name' => 'color',
'action' => 'SET'
]
],
'bundleItems' => [
[
'sku' => 'sku123',
'quantity' => 6
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"x-site-context: <x-site-context>"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

import (
"fmt"
"strings"
"net/http"
"io"
)

func main() {

url := "https://live.copilot.fabric.inc/api-product/v1/product/bulk/insert"

payload := strings.NewReader("[\n {\n \"sku\": \"sku_abc\",\n \"type\": \"ITEM\",\n \"nodeName\": \"PRIMARY->electronics\",\n \"parentSku\": \"sku123\",\n \"attributeValues\": [\n {\n \"name\": \"Mobile\",\n \"value\": \"AMD X570 mobo\"\n }\n ],\n \"inheritedAttributes\": [\n {\n \"name\": \"color\",\n \"action\": \"SET\"\n }\n ],\n \"bundleItems\": [\n {\n \"sku\": \"sku123\",\n \"quantity\": 6\n }\n ]\n }\n]")

req, _ := http.NewRequest("POST", url, payload)

req.Header.Add("x-site-context", "<x-site-context>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.post("https://live.copilot.fabric.inc/api-product/v1/product/bulk/insert")
.header("x-site-context", "<x-site-context>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("[\n {\n \"sku\": \"sku_abc\",\n \"type\": \"ITEM\",\n \"nodeName\": \"PRIMARY->electronics\",\n \"parentSku\": \"sku123\",\n \"attributeValues\": [\n {\n \"name\": \"Mobile\",\n \"value\": \"AMD X570 mobo\"\n }\n ],\n \"inheritedAttributes\": [\n {\n \"name\": \"color\",\n \"action\": \"SET\"\n }\n ],\n \"bundleItems\": [\n {\n \"sku\": \"sku123\",\n \"quantity\": 6\n }\n ]\n }\n]")
.asString();
require 'uri'
require 'net/http'

url = URI("https://live.copilot.fabric.inc/api-product/v1/product/bulk/insert")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["x-site-context"] = '<x-site-context>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "[\n {\n \"sku\": \"sku_abc\",\n \"type\": \"ITEM\",\n \"nodeName\": \"PRIMARY->electronics\",\n \"parentSku\": \"sku123\",\n \"attributeValues\": [\n {\n \"name\": \"Mobile\",\n \"value\": \"AMD X570 mobo\"\n }\n ],\n \"inheritedAttributes\": [\n {\n \"name\": \"color\",\n \"action\": \"SET\"\n }\n ],\n \"bundleItems\": [\n {\n \"sku\": \"sku123\",\n \"quantity\": 6\n }\n ]\n }\n]"

response = http.request(request)
puts response.read_body
{
  "success": [
    {
      "sku": "sku1",
      "itemId": "611686da50fb7e0c5df78c2e",
      "itemIdSeq": 12,
      "message": "SKU created successfully.",
      "errorAttributes": [
        {
          "name": "Inactive",
          "message": "Attribute value is invalid."
        }
      ],
      "errorBundles": [
        {
          "name": "<string>",
          "message": "<string>"
        }
      ]
    }
  ],
  "failed": [
    {
      "sku": "sku1",
      "message": "Failed because of validation"
    }
  ],
  "itemIds": [
    "611686da50fb7e0c5df78c2e",
    "711686da50fb7e0c5df78c22"
  ]
}
{
"code": 400,
"message": "Client error"
}
{
"code": "STATUS_ERROR",
"message": [
{
"index": 123,
"item": {
"success": [
{
"sku": "sku1",
"itemId": "611686da50fb7e0c5df78c2e",
"itemIdSeq": 12,
"message": "SKU created successfully.",
"errorAttributes": [
{
"name": "Inactive",
"message": "Attribute value is invalid."
}
],
"errorBundles": [
{
"name": "<string>",
"message": "<string>"
}
]
}
],
"failed": [
{
"sku": "sku1",
"message": "Failed because of validation"
}
],
"itemIds": [
"611686da50fb7e0c5df78c2e",
"711686da50fb7e0c5df78c22"
]
}
}
]
}
{
"code": 500,
"message": "An internal error occurred. If the issue persists please contact support@fabric.inc."
}

Authorizations

Authorization
string
header
required

S2S access token (JWT) from fabric Identity service (during Login)

Headers

x-site-context
string
required

The x-site-context header is a JSON object that contains information about the source you wish to pull from. The mandatory account is the 24 character identifier found in Copilot. The channel (Sales channel ID), stage (environment name), and date attributes can be used to further narrow the scope of your data source.

Example:

"{\"date\": \"2023-01-01T00:00:00.000Z\", \"channel\": 12, \"account\": \"1234abcd5678efgh9ijklmno\",\"stage\":\"production\"}"

Body

application/json
Maximum array length: 50
sku
string
required

Stock Keeping Unit (SKU) of item

Example:

"sku_abc"

type
enum<string>
required

Item type

Available options:
ITEM,
BUNDLE
Example:

"ITEM"

nodeName
string
required

Category name (along with parent category names) for which item is being created.

Example:

"PRIMARY->electronics"

parentSku
string | null

Stock Keeping Unit (SKU) of the parent item.
Set the value as detach or null to disassociate the item from parent item.

Example:

"sku123"

attributeValues
object[]

Attribute details

inheritedAttributes
object[]

Category item attributes to be inherited from parent item to children items

bundleItems
object[]

Items to be added to a bundle. Includes SKU and item quantity.

Response

OK

success
object[]
failed
object[]
itemIds
string[]

Item IDs

Example:
[
"611686da50fb7e0c5df78c2e",
"711686da50fb7e0c5df78c22"
]