curl --request POST \
--url https://api.fabric.inc/v3/offers-imports/actions/generate-upload-url \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-fabric-tenant-id: <x-fabric-tenant-id>' \
--data '
{
"fileName": "file1.csv",
"type": "PRICE",
"additionalAttributes": {
"key": "coupon_id",
"value": "1234"
}
}
'import requests
url = "https://api.fabric.inc/v3/offers-imports/actions/generate-upload-url"
payload = {
"fileName": "file1.csv",
"type": "PRICE",
"additionalAttributes": {
"key": "coupon_id",
"value": "1234"
}
}
headers = {
"x-fabric-tenant-id": "<x-fabric-tenant-id>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-fabric-tenant-id': '<x-fabric-tenant-id>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
fileName: 'file1.csv',
type: 'PRICE',
additionalAttributes: {key: 'coupon_id', value: '1234'}
})
};
fetch('https://api.fabric.inc/v3/offers-imports/actions/generate-upload-url', 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://api.fabric.inc/v3/offers-imports/actions/generate-upload-url",
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([
'fileName' => 'file1.csv',
'type' => 'PRICE',
'additionalAttributes' => [
'key' => 'coupon_id',
'value' => '1234'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"x-fabric-tenant-id: <x-fabric-tenant-id>"
],
]);
$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://api.fabric.inc/v3/offers-imports/actions/generate-upload-url"
payload := strings.NewReader("{\n \"fileName\": \"file1.csv\",\n \"type\": \"PRICE\",\n \"additionalAttributes\": {\n \"key\": \"coupon_id\",\n \"value\": \"1234\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-fabric-tenant-id", "<x-fabric-tenant-id>")
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://api.fabric.inc/v3/offers-imports/actions/generate-upload-url")
.header("x-fabric-tenant-id", "<x-fabric-tenant-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"fileName\": \"file1.csv\",\n \"type\": \"PRICE\",\n \"additionalAttributes\": {\n \"key\": \"coupon_id\",\n \"value\": \"1234\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fabric.inc/v3/offers-imports/actions/generate-upload-url")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-fabric-tenant-id"] = '<x-fabric-tenant-id>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"fileName\": \"file1.csv\",\n \"type\": \"PRICE\",\n \"additionalAttributes\": {\n \"key\": \"coupon_id\",\n \"value\": \"1234\"\n }\n}"
response = http.request(request)
puts response.read_body{
"url": "https://example.s3.amazonaws.com/pricelist/123/dev02/123-priceList1.csv?X-Amz-Algorithm...x-amz-meta-stage=dev02",
"fileName": "prices/1646680518524-file1.csv"
}{
"type": "TENANT_HEADER_REQUIRED",
"message": "x-fabric-tenant-id header is required"
}{
"type": "UNAUTHORIZED",
"message": "Invalid credentials"
}{
"type": "INTERNAL_SERVER_ERROR",
"message": "Internal server error"
}Generate URL to import a CSV file
Use this endpoint to create a secured S3 URL to import a CSV file, allowing for bulk data updates from the information within the file. For example, if the data in the file is price type, then only the price related data will be updated. Note that an error will be shown if the type of data included in the file doesn’t match with the data type mentioned in the request body. You must upload only one single file, specifically in the CSV format, to the generated URL.
curl --request POST \
--url https://api.fabric.inc/v3/offers-imports/actions/generate-upload-url \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-fabric-tenant-id: <x-fabric-tenant-id>' \
--data '
{
"fileName": "file1.csv",
"type": "PRICE",
"additionalAttributes": {
"key": "coupon_id",
"value": "1234"
}
}
'import requests
url = "https://api.fabric.inc/v3/offers-imports/actions/generate-upload-url"
payload = {
"fileName": "file1.csv",
"type": "PRICE",
"additionalAttributes": {
"key": "coupon_id",
"value": "1234"
}
}
headers = {
"x-fabric-tenant-id": "<x-fabric-tenant-id>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-fabric-tenant-id': '<x-fabric-tenant-id>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
fileName: 'file1.csv',
type: 'PRICE',
additionalAttributes: {key: 'coupon_id', value: '1234'}
})
};
fetch('https://api.fabric.inc/v3/offers-imports/actions/generate-upload-url', 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://api.fabric.inc/v3/offers-imports/actions/generate-upload-url",
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([
'fileName' => 'file1.csv',
'type' => 'PRICE',
'additionalAttributes' => [
'key' => 'coupon_id',
'value' => '1234'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"x-fabric-tenant-id: <x-fabric-tenant-id>"
],
]);
$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://api.fabric.inc/v3/offers-imports/actions/generate-upload-url"
payload := strings.NewReader("{\n \"fileName\": \"file1.csv\",\n \"type\": \"PRICE\",\n \"additionalAttributes\": {\n \"key\": \"coupon_id\",\n \"value\": \"1234\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-fabric-tenant-id", "<x-fabric-tenant-id>")
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://api.fabric.inc/v3/offers-imports/actions/generate-upload-url")
.header("x-fabric-tenant-id", "<x-fabric-tenant-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"fileName\": \"file1.csv\",\n \"type\": \"PRICE\",\n \"additionalAttributes\": {\n \"key\": \"coupon_id\",\n \"value\": \"1234\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fabric.inc/v3/offers-imports/actions/generate-upload-url")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-fabric-tenant-id"] = '<x-fabric-tenant-id>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"fileName\": \"file1.csv\",\n \"type\": \"PRICE\",\n \"additionalAttributes\": {\n \"key\": \"coupon_id\",\n \"value\": \"1234\"\n }\n}"
response = http.request(request)
puts response.read_body{
"url": "https://example.s3.amazonaws.com/pricelist/123/dev02/123-priceList1.csv?X-Amz-Algorithm...x-amz-meta-stage=dev02",
"fileName": "prices/1646680518524-file1.csv"
}{
"type": "TENANT_HEADER_REQUIRED",
"message": "x-fabric-tenant-id header is required"
}{
"type": "UNAUTHORIZED",
"message": "Invalid credentials"
}{
"type": "INTERNAL_SERVER_ERROR",
"message": "Internal server error"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
A header used by fabric to identify the tenant making the request. You must include tenant id in the authentication header for an API request to access any of fabric’s endpoints. You can retrieve the tenant id , which is also called account id, from Copilot. This header is required.
24The sales channel ID.
"12"
A unique request ID.
"263e731c-45c8-11ed-b878-0242ac120002"
Body
A sample request containing file details be uploaded to the generated URL.
The name of the file to be uploaded.
"file1.csv"
Type of data in the file. The data provided in the file must match with type for successful processing of the file.
PRICE, PROMOTION, COUPON, COUPON_CODE, REDEMPTION, PRICE_RANGE, PRICELIST "PRICE"
A placeholder for additional information.
Show child attributes
Show child attributes
Response
OK
A sample response containing a generated URL and the file name to be processed.
The AWS S3 URL used to download the data, in a CSV format, of a previous import. The URL is valid for five minutes.
"https://example.s3.amazonaws.com/pricelist/123/dev02/123-priceList1.csv?X-Amz-Algorithm...x-amz-meta-stage=dev02"
The name of the error file.
"prices/1646680518524-file1.csv"
Was this page helpful?
