curl --request POST \
--url https://live.copilot.fabric.inc/api-product/v1/product/attribute/mapping \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-site-context: <x-site-context>' \
--data '
{
"mappings": [
{
"attributeId": "ATTR1234",
"mapping": "SKU",
"name": "<string>",
"description": "Item SKU",
"validation": {
"required": true,
"inheritable": true,
"inverse": false,
"unique": true,
"exact": "<string>",
"attributeTypes": [],
"contains": "<string>",
"range": {
"min": "<string>",
"max": "<string>"
},
"formula": "value < 10 || value > 20",
"oneOf": [
"<string>"
]
},
"required": true
}
]
}
'import requests
url = "https://live.copilot.fabric.inc/api-product/v1/product/attribute/mapping"
payload = { "mappings": [
{
"attributeId": "ATTR1234",
"mapping": "SKU",
"name": "<string>",
"description": "Item SKU",
"validation": {
"required": True,
"inheritable": True,
"inverse": False,
"unique": True,
"exact": "<string>",
"attributeTypes": [],
"contains": "<string>",
"range": {
"min": "<string>",
"max": "<string>"
},
"formula": "value < 10 || value > 20",
"oneOf": ["<string>"]
},
"required": True
}
] }
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({
mappings: [
{
attributeId: 'ATTR1234',
mapping: 'SKU',
name: '<string>',
description: 'Item SKU',
validation: {
required: true,
inheritable: true,
inverse: false,
unique: true,
exact: '<string>',
attributeTypes: [],
contains: '<string>',
range: {min: '<string>', max: '<string>'},
formula: 'value < 10 || value > 20',
oneOf: ['<string>']
},
required: true
}
]
})
};
fetch('https://live.copilot.fabric.inc/api-product/v1/product/attribute/mapping', 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/attribute/mapping",
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([
'mappings' => [
[
'attributeId' => 'ATTR1234',
'mapping' => 'SKU',
'name' => '<string>',
'description' => 'Item SKU',
'validation' => [
'required' => true,
'inheritable' => true,
'inverse' => false,
'unique' => true,
'exact' => '<string>',
'attributeTypes' => [
],
'contains' => '<string>',
'range' => [
'min' => '<string>',
'max' => '<string>'
],
'formula' => 'value < 10 || value > 20',
'oneOf' => [
'<string>'
]
],
'required' => true
]
]
]),
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/attribute/mapping"
payload := strings.NewReader("{\n \"mappings\": [\n {\n \"attributeId\": \"ATTR1234\",\n \"mapping\": \"SKU\",\n \"name\": \"<string>\",\n \"description\": \"Item SKU\",\n \"validation\": {\n \"required\": true,\n \"inheritable\": true,\n \"inverse\": false,\n \"unique\": true,\n \"exact\": \"<string>\",\n \"attributeTypes\": [],\n \"contains\": \"<string>\",\n \"range\": {\n \"min\": \"<string>\",\n \"max\": \"<string>\"\n },\n \"formula\": \"value < 10 || value > 20\",\n \"oneOf\": [\n \"<string>\"\n ]\n },\n \"required\": true\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/attribute/mapping")
.header("x-site-context", "<x-site-context>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"mappings\": [\n {\n \"attributeId\": \"ATTR1234\",\n \"mapping\": \"SKU\",\n \"name\": \"<string>\",\n \"description\": \"Item SKU\",\n \"validation\": {\n \"required\": true,\n \"inheritable\": true,\n \"inverse\": false,\n \"unique\": true,\n \"exact\": \"<string>\",\n \"attributeTypes\": [],\n \"contains\": \"<string>\",\n \"range\": {\n \"min\": \"<string>\",\n \"max\": \"<string>\"\n },\n \"formula\": \"value < 10 || value > 20\",\n \"oneOf\": [\n \"<string>\"\n ]\n },\n \"required\": true\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://live.copilot.fabric.inc/api-product/v1/product/attribute/mapping")
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 \"mappings\": [\n {\n \"attributeId\": \"ATTR1234\",\n \"mapping\": \"SKU\",\n \"name\": \"<string>\",\n \"description\": \"Item SKU\",\n \"validation\": {\n \"required\": true,\n \"inheritable\": true,\n \"inverse\": false,\n \"unique\": true,\n \"exact\": \"<string>\",\n \"attributeTypes\": [],\n \"contains\": \"<string>\",\n \"range\": {\n \"min\": \"<string>\",\n \"max\": \"<string>\"\n },\n \"formula\": \"value < 10 || value > 20\",\n \"oneOf\": [\n \"<string>\"\n ]\n },\n \"required\": true\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"attributeId": "62e2ae29c3004a000950ad5f",
"attribute": {
"id": "<string>",
"statuses": [
{
"code": "<string>",
"name": "<string>",
"description": "<string>",
"createdOn": "2023-11-07T05:31:56Z",
"createdBy": "broma0",
"modifiedOn": "2023-11-07T05:31:56Z",
"modifiedBy": "broma0"
}
],
"files": [
{
"name": "<string>",
"statuses": [
{
"code": "<string>",
"name": "<string>",
"description": "<string>",
"createdOn": "2023-11-07T05:31:56Z",
"createdBy": "broma0",
"modifiedOn": "2023-11-07T05:31:56Z",
"modifiedBy": "broma0"
}
],
"progress": 100,
"createdOn": "2023-11-07T05:31:56Z",
"createdBy": "broma0",
"modifiedOn": "2023-11-07T05:31:56Z",
"modifiedBy": "broma0",
"secondsTakenToImport": 123,
"secondsTakenToProcess": 123
}
],
"name": "<string>",
"description": "<string>",
"locales": [
{
"locale": "fr-ca",
"name": "Un Nom Français"
}
],
"localizable": true,
"mapping": "<string>",
"serialStart": 123,
"format": "YYYY-MM-DD",
"formula": "value < 10 || value > 20",
"validation": {
"required": true,
"inheritable": true,
"inverse": false,
"unique": true,
"exact": "<string>",
"attributeTypes": [],
"contains": "<string>",
"range": {
"min": "<string>",
"max": "<string>"
},
"formula": "value < 10 || value > 20",
"oneOf": [
"<string>"
]
},
"createdOn": "2023-11-07T05:31:56Z",
"createdBy": "broma0",
"modifiedOn": "2023-11-07T05:31:56Z",
"modifiedBy": "broma0"
},
"mapping": "SKU",
"target": "ITEM",
"name": "Item SKU",
"description": "Item SKU",
"required": true,
"validation": {
"required": true,
"inheritable": true,
"inverse": false,
"unique": true,
"exact": "<string>",
"attributeTypes": [],
"contains": "<string>",
"range": {
"min": "<string>",
"max": "<string>"
},
"formula": "value < 10 || value > 20",
"oneOf": [
"<string>"
]
},
"createdOn": "2021-09-23T17:47:04.231Z",
"createdBy": "broma0",
"modifiedOn": "2023-11-07T05:31:56Z",
"modifiedBy": "broma0"
}{
"code": 400,
"message": "Client error"
}{
"code": 500,
"message": "An internal error occurred. If the issue persists please contact support@fabric.inc."
}Create and Update attribute mappings
Set your attribute mapping to begin configuring your catalog. You can update the mappings only if there are no SKUs present in the catalog.
curl --request POST \
--url https://live.copilot.fabric.inc/api-product/v1/product/attribute/mapping \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-site-context: <x-site-context>' \
--data '
{
"mappings": [
{
"attributeId": "ATTR1234",
"mapping": "SKU",
"name": "<string>",
"description": "Item SKU",
"validation": {
"required": true,
"inheritable": true,
"inverse": false,
"unique": true,
"exact": "<string>",
"attributeTypes": [],
"contains": "<string>",
"range": {
"min": "<string>",
"max": "<string>"
},
"formula": "value < 10 || value > 20",
"oneOf": [
"<string>"
]
},
"required": true
}
]
}
'import requests
url = "https://live.copilot.fabric.inc/api-product/v1/product/attribute/mapping"
payload = { "mappings": [
{
"attributeId": "ATTR1234",
"mapping": "SKU",
"name": "<string>",
"description": "Item SKU",
"validation": {
"required": True,
"inheritable": True,
"inverse": False,
"unique": True,
"exact": "<string>",
"attributeTypes": [],
"contains": "<string>",
"range": {
"min": "<string>",
"max": "<string>"
},
"formula": "value < 10 || value > 20",
"oneOf": ["<string>"]
},
"required": True
}
] }
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({
mappings: [
{
attributeId: 'ATTR1234',
mapping: 'SKU',
name: '<string>',
description: 'Item SKU',
validation: {
required: true,
inheritable: true,
inverse: false,
unique: true,
exact: '<string>',
attributeTypes: [],
contains: '<string>',
range: {min: '<string>', max: '<string>'},
formula: 'value < 10 || value > 20',
oneOf: ['<string>']
},
required: true
}
]
})
};
fetch('https://live.copilot.fabric.inc/api-product/v1/product/attribute/mapping', 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/attribute/mapping",
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([
'mappings' => [
[
'attributeId' => 'ATTR1234',
'mapping' => 'SKU',
'name' => '<string>',
'description' => 'Item SKU',
'validation' => [
'required' => true,
'inheritable' => true,
'inverse' => false,
'unique' => true,
'exact' => '<string>',
'attributeTypes' => [
],
'contains' => '<string>',
'range' => [
'min' => '<string>',
'max' => '<string>'
],
'formula' => 'value < 10 || value > 20',
'oneOf' => [
'<string>'
]
],
'required' => true
]
]
]),
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/attribute/mapping"
payload := strings.NewReader("{\n \"mappings\": [\n {\n \"attributeId\": \"ATTR1234\",\n \"mapping\": \"SKU\",\n \"name\": \"<string>\",\n \"description\": \"Item SKU\",\n \"validation\": {\n \"required\": true,\n \"inheritable\": true,\n \"inverse\": false,\n \"unique\": true,\n \"exact\": \"<string>\",\n \"attributeTypes\": [],\n \"contains\": \"<string>\",\n \"range\": {\n \"min\": \"<string>\",\n \"max\": \"<string>\"\n },\n \"formula\": \"value < 10 || value > 20\",\n \"oneOf\": [\n \"<string>\"\n ]\n },\n \"required\": true\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/attribute/mapping")
.header("x-site-context", "<x-site-context>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"mappings\": [\n {\n \"attributeId\": \"ATTR1234\",\n \"mapping\": \"SKU\",\n \"name\": \"<string>\",\n \"description\": \"Item SKU\",\n \"validation\": {\n \"required\": true,\n \"inheritable\": true,\n \"inverse\": false,\n \"unique\": true,\n \"exact\": \"<string>\",\n \"attributeTypes\": [],\n \"contains\": \"<string>\",\n \"range\": {\n \"min\": \"<string>\",\n \"max\": \"<string>\"\n },\n \"formula\": \"value < 10 || value > 20\",\n \"oneOf\": [\n \"<string>\"\n ]\n },\n \"required\": true\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://live.copilot.fabric.inc/api-product/v1/product/attribute/mapping")
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 \"mappings\": [\n {\n \"attributeId\": \"ATTR1234\",\n \"mapping\": \"SKU\",\n \"name\": \"<string>\",\n \"description\": \"Item SKU\",\n \"validation\": {\n \"required\": true,\n \"inheritable\": true,\n \"inverse\": false,\n \"unique\": true,\n \"exact\": \"<string>\",\n \"attributeTypes\": [],\n \"contains\": \"<string>\",\n \"range\": {\n \"min\": \"<string>\",\n \"max\": \"<string>\"\n },\n \"formula\": \"value < 10 || value > 20\",\n \"oneOf\": [\n \"<string>\"\n ]\n },\n \"required\": true\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"attributeId": "62e2ae29c3004a000950ad5f",
"attribute": {
"id": "<string>",
"statuses": [
{
"code": "<string>",
"name": "<string>",
"description": "<string>",
"createdOn": "2023-11-07T05:31:56Z",
"createdBy": "broma0",
"modifiedOn": "2023-11-07T05:31:56Z",
"modifiedBy": "broma0"
}
],
"files": [
{
"name": "<string>",
"statuses": [
{
"code": "<string>",
"name": "<string>",
"description": "<string>",
"createdOn": "2023-11-07T05:31:56Z",
"createdBy": "broma0",
"modifiedOn": "2023-11-07T05:31:56Z",
"modifiedBy": "broma0"
}
],
"progress": 100,
"createdOn": "2023-11-07T05:31:56Z",
"createdBy": "broma0",
"modifiedOn": "2023-11-07T05:31:56Z",
"modifiedBy": "broma0",
"secondsTakenToImport": 123,
"secondsTakenToProcess": 123
}
],
"name": "<string>",
"description": "<string>",
"locales": [
{
"locale": "fr-ca",
"name": "Un Nom Français"
}
],
"localizable": true,
"mapping": "<string>",
"serialStart": 123,
"format": "YYYY-MM-DD",
"formula": "value < 10 || value > 20",
"validation": {
"required": true,
"inheritable": true,
"inverse": false,
"unique": true,
"exact": "<string>",
"attributeTypes": [],
"contains": "<string>",
"range": {
"min": "<string>",
"max": "<string>"
},
"formula": "value < 10 || value > 20",
"oneOf": [
"<string>"
]
},
"createdOn": "2023-11-07T05:31:56Z",
"createdBy": "broma0",
"modifiedOn": "2023-11-07T05:31:56Z",
"modifiedBy": "broma0"
},
"mapping": "SKU",
"target": "ITEM",
"name": "Item SKU",
"description": "Item SKU",
"required": true,
"validation": {
"required": true,
"inheritable": true,
"inverse": false,
"unique": true,
"exact": "<string>",
"attributeTypes": [],
"contains": "<string>",
"range": {
"min": "<string>",
"max": "<string>"
},
"formula": "value < 10 || value > 20",
"oneOf": [
"<string>"
]
},
"createdOn": "2021-09-23T17:47:04.231Z",
"createdBy": "broma0",
"modifiedOn": "2023-11-07T05:31:56Z",
"modifiedBy": "broma0"
}{
"code": 400,
"message": "Client error"
}{
"code": 500,
"message": "An internal error occurred. If the issue persists please contact support@fabric.inc."
}Authorizations
S2S access token (JWT) from fabric Identity service (during Login)
Headers
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.
"{\"date\": \"2023-01-01T00:00:00.000Z\", \"channel\": 12, \"account\": \"1234abcd5678efgh9ijklmno\",\"stage\":\"production\"}"
Body
Show child attributes
Show child attributes
Response
OK
A 24-character system-generated attribute ID
"62e2ae29c3004a000950ad5f"
Represents the mapped attributes. Only populated when include.attribute is true.
Note: Not applicable for an attribute mapping modify request
Show child attributes
Show child attributes
Attribute mapping
"SKU"
Returns attribute mapping for the specified target
"ITEM"
Name of attribute mapping
"Item SKU"
Description for attribute mapping
"Item SKU"
true: Mapping is mandatory;
false: mapping is optional
Show child attributes
Show child attributes
Time of attribute creation (UTC format)
"2021-09-23T17:47:04.231Z"
User ID that created item attribute
"broma0"
Time of when the attribute was last modified
User ID that last modified item attribute
"broma0"
Was this page helpful?
