## Create and Update attribute mappings

### cURL

```
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 '\n{\n  "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\
    }\
  ]\
} '\n```

### Example Code Snippets

#### Python

```
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)
```

#### JavaScript (Fetch API)

```
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;\
}
```

#### Go

```
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  ]}\")

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))
}
```

### Responses

#### Successful Response
```
{
  "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"
}
```

#### Client Error
```
{
  "code": 400,
  "message": "Client error"
}
```

#### Server Error
```
{
  "code": 500,
  "message": "An internal error occurred. If the issue persists please contact support@fabric.inc."
}
```

### Authorizations

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

### Headers

**x-site-context**: Required. A JSON object containing source information (account, channel, stage, date) for data scope.

### Body

**mappings**: Array of mapping objects.
