curl --request POST \
--url https://scx-sbx.api.jtl-software.com/v1/channel/report/{reportId}/data \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
[
{
"offerId": 5437233,
"channelOfferId": "XCD233554",
"sku": "BEER-001",
"ean": "4003227021106",
"quantity": "1.0",
"priceList": [
{
"id": "B2C",
"quantityPriceList": [
{
"amount": "14.65",
"currency": "EUR",
"quantity": "1.0"
}
]
}
],
"title": "One of the best Beer in the World.",
"channelCategoryId": "4355111",
"channelAttributeList": [
{
"attributeId": "1332",
"value": "MyBeerBrand",
"group": "1"
}
]
}
]
'import requests
url = "https://scx-sbx.api.jtl-software.com/v1/channel/report/{reportId}/data"
payload = [
{
"offerId": 5437233,
"channelOfferId": "XCD233554",
"sku": "BEER-001",
"ean": "4003227021106",
"quantity": "1.0",
"priceList": [
{
"id": "B2C",
"quantityPriceList": [
{
"amount": "14.65",
"currency": "EUR",
"quantity": "1.0"
}
]
}
],
"title": "One of the best Beer in the World.",
"channelCategoryId": "4355111",
"channelAttributeList": [
{
"attributeId": "1332",
"value": "MyBeerBrand",
"group": "1"
}
]
}
]
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify([
{
offerId: 5437233,
channelOfferId: 'XCD233554',
sku: 'BEER-001',
ean: '4003227021106',
quantity: '1.0',
priceList: [
{
id: 'B2C',
quantityPriceList: [{amount: '14.65', currency: 'EUR', quantity: '1.0'}]
}
],
title: 'One of the best Beer in the World.',
channelCategoryId: '4355111',
channelAttributeList: [{attributeId: '1332', value: 'MyBeerBrand', group: '1'}]
}
])
};
fetch('https://scx-sbx.api.jtl-software.com/v1/channel/report/{reportId}/data', 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://scx-sbx.api.jtl-software.com/v1/channel/report/{reportId}/data",
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([
[
'offerId' => 5437233,
'channelOfferId' => 'XCD233554',
'sku' => 'BEER-001',
'ean' => '4003227021106',
'quantity' => '1.0',
'priceList' => [
[
'id' => 'B2C',
'quantityPriceList' => [
[
'amount' => '14.65',
'currency' => 'EUR',
'quantity' => '1.0'
]
]
]
],
'title' => 'One of the best Beer in the World.',
'channelCategoryId' => '4355111',
'channelAttributeList' => [
[
'attributeId' => '1332',
'value' => 'MyBeerBrand',
'group' => '1'
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://scx-sbx.api.jtl-software.com/v1/channel/report/{reportId}/data"
payload := strings.NewReader("[\n {\n \"offerId\": 5437233,\n \"channelOfferId\": \"XCD233554\",\n \"sku\": \"BEER-001\",\n \"ean\": \"4003227021106\",\n \"quantity\": \"1.0\",\n \"priceList\": [\n {\n \"id\": \"B2C\",\n \"quantityPriceList\": [\n {\n \"amount\": \"14.65\",\n \"currency\": \"EUR\",\n \"quantity\": \"1.0\"\n }\n ]\n }\n ],\n \"title\": \"One of the best Beer in the World.\",\n \"channelCategoryId\": \"4355111\",\n \"channelAttributeList\": [\n {\n \"attributeId\": \"1332\",\n \"value\": \"MyBeerBrand\",\n \"group\": \"1\"\n }\n ]\n }\n]")
req, _ := http.NewRequest("POST", url, payload)
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://scx-sbx.api.jtl-software.com/v1/channel/report/{reportId}/data")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("[\n {\n \"offerId\": 5437233,\n \"channelOfferId\": \"XCD233554\",\n \"sku\": \"BEER-001\",\n \"ean\": \"4003227021106\",\n \"quantity\": \"1.0\",\n \"priceList\": [\n {\n \"id\": \"B2C\",\n \"quantityPriceList\": [\n {\n \"amount\": \"14.65\",\n \"currency\": \"EUR\",\n \"quantity\": \"1.0\"\n }\n ]\n }\n ],\n \"title\": \"One of the best Beer in the World.\",\n \"channelCategoryId\": \"4355111\",\n \"channelAttributeList\": [\n {\n \"attributeId\": \"1332\",\n \"value\": \"MyBeerBrand\",\n \"group\": \"1\"\n }\n ]\n }\n]")
.asString();require 'uri'
require 'net/http'
url = URI("https://scx-sbx.api.jtl-software.com/v1/channel/report/{reportId}/data")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "[\n {\n \"offerId\": 5437233,\n \"channelOfferId\": \"XCD233554\",\n \"sku\": \"BEER-001\",\n \"ean\": \"4003227021106\",\n \"quantity\": \"1.0\",\n \"priceList\": [\n {\n \"id\": \"B2C\",\n \"quantityPriceList\": [\n {\n \"amount\": \"14.65\",\n \"currency\": \"EUR\",\n \"quantity\": \"1.0\"\n }\n ]\n }\n ],\n \"title\": \"One of the best Beer in the World.\",\n \"channelCategoryId\": \"4355111\",\n \"channelAttributeList\": [\n {\n \"attributeId\": \"1332\",\n \"value\": \"MyBeerBrand\",\n \"group\": \"1\"\n }\n ]\n }\n]"
response = http.request(request)
puts response.read_body{
"errorList": [
{
"code": "VAL100",
"message": "Required field sellerId not found",
"severity": "error",
"hint": "Check the field `sellerId` — it must be a non-empty string."
}
]
}{
"errorList": [
{
"code": "VAL100",
"message": "Required field sellerId not found",
"severity": "error",
"hint": "Check the field `sellerId` — it must be a non-empty string."
}
]
}{
"errorList": [
{
"code": "GEN500",
"message": "Internal Server Error",
"severity": "error",
"hint": null
}
]
}Send Data
Send partial report data to the Channel API.
Once all data is sent, the reportId must be marked as completed by
calling POST /v1/channel/report/{reportId}/completed.
A report is only valid up to 48h after requesting it.
curl --request POST \
--url https://scx-sbx.api.jtl-software.com/v1/channel/report/{reportId}/data \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
[
{
"offerId": 5437233,
"channelOfferId": "XCD233554",
"sku": "BEER-001",
"ean": "4003227021106",
"quantity": "1.0",
"priceList": [
{
"id": "B2C",
"quantityPriceList": [
{
"amount": "14.65",
"currency": "EUR",
"quantity": "1.0"
}
]
}
],
"title": "One of the best Beer in the World.",
"channelCategoryId": "4355111",
"channelAttributeList": [
{
"attributeId": "1332",
"value": "MyBeerBrand",
"group": "1"
}
]
}
]
'import requests
url = "https://scx-sbx.api.jtl-software.com/v1/channel/report/{reportId}/data"
payload = [
{
"offerId": 5437233,
"channelOfferId": "XCD233554",
"sku": "BEER-001",
"ean": "4003227021106",
"quantity": "1.0",
"priceList": [
{
"id": "B2C",
"quantityPriceList": [
{
"amount": "14.65",
"currency": "EUR",
"quantity": "1.0"
}
]
}
],
"title": "One of the best Beer in the World.",
"channelCategoryId": "4355111",
"channelAttributeList": [
{
"attributeId": "1332",
"value": "MyBeerBrand",
"group": "1"
}
]
}
]
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify([
{
offerId: 5437233,
channelOfferId: 'XCD233554',
sku: 'BEER-001',
ean: '4003227021106',
quantity: '1.0',
priceList: [
{
id: 'B2C',
quantityPriceList: [{amount: '14.65', currency: 'EUR', quantity: '1.0'}]
}
],
title: 'One of the best Beer in the World.',
channelCategoryId: '4355111',
channelAttributeList: [{attributeId: '1332', value: 'MyBeerBrand', group: '1'}]
}
])
};
fetch('https://scx-sbx.api.jtl-software.com/v1/channel/report/{reportId}/data', 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://scx-sbx.api.jtl-software.com/v1/channel/report/{reportId}/data",
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([
[
'offerId' => 5437233,
'channelOfferId' => 'XCD233554',
'sku' => 'BEER-001',
'ean' => '4003227021106',
'quantity' => '1.0',
'priceList' => [
[
'id' => 'B2C',
'quantityPriceList' => [
[
'amount' => '14.65',
'currency' => 'EUR',
'quantity' => '1.0'
]
]
]
],
'title' => 'One of the best Beer in the World.',
'channelCategoryId' => '4355111',
'channelAttributeList' => [
[
'attributeId' => '1332',
'value' => 'MyBeerBrand',
'group' => '1'
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://scx-sbx.api.jtl-software.com/v1/channel/report/{reportId}/data"
payload := strings.NewReader("[\n {\n \"offerId\": 5437233,\n \"channelOfferId\": \"XCD233554\",\n \"sku\": \"BEER-001\",\n \"ean\": \"4003227021106\",\n \"quantity\": \"1.0\",\n \"priceList\": [\n {\n \"id\": \"B2C\",\n \"quantityPriceList\": [\n {\n \"amount\": \"14.65\",\n \"currency\": \"EUR\",\n \"quantity\": \"1.0\"\n }\n ]\n }\n ],\n \"title\": \"One of the best Beer in the World.\",\n \"channelCategoryId\": \"4355111\",\n \"channelAttributeList\": [\n {\n \"attributeId\": \"1332\",\n \"value\": \"MyBeerBrand\",\n \"group\": \"1\"\n }\n ]\n }\n]")
req, _ := http.NewRequest("POST", url, payload)
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://scx-sbx.api.jtl-software.com/v1/channel/report/{reportId}/data")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("[\n {\n \"offerId\": 5437233,\n \"channelOfferId\": \"XCD233554\",\n \"sku\": \"BEER-001\",\n \"ean\": \"4003227021106\",\n \"quantity\": \"1.0\",\n \"priceList\": [\n {\n \"id\": \"B2C\",\n \"quantityPriceList\": [\n {\n \"amount\": \"14.65\",\n \"currency\": \"EUR\",\n \"quantity\": \"1.0\"\n }\n ]\n }\n ],\n \"title\": \"One of the best Beer in the World.\",\n \"channelCategoryId\": \"4355111\",\n \"channelAttributeList\": [\n {\n \"attributeId\": \"1332\",\n \"value\": \"MyBeerBrand\",\n \"group\": \"1\"\n }\n ]\n }\n]")
.asString();require 'uri'
require 'net/http'
url = URI("https://scx-sbx.api.jtl-software.com/v1/channel/report/{reportId}/data")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "[\n {\n \"offerId\": 5437233,\n \"channelOfferId\": \"XCD233554\",\n \"sku\": \"BEER-001\",\n \"ean\": \"4003227021106\",\n \"quantity\": \"1.0\",\n \"priceList\": [\n {\n \"id\": \"B2C\",\n \"quantityPriceList\": [\n {\n \"amount\": \"14.65\",\n \"currency\": \"EUR\",\n \"quantity\": \"1.0\"\n }\n ]\n }\n ],\n \"title\": \"One of the best Beer in the World.\",\n \"channelCategoryId\": \"4355111\",\n \"channelAttributeList\": [\n {\n \"attributeId\": \"1332\",\n \"value\": \"MyBeerBrand\",\n \"group\": \"1\"\n }\n ]\n }\n]"
response = http.request(request)
puts response.read_body{
"errorList": [
{
"code": "VAL100",
"message": "Required field sellerId not found",
"severity": "error",
"hint": "Check the field `sellerId` — it must be a non-empty string."
}
]
}{
"errorList": [
{
"code": "VAL100",
"message": "Required field sellerId not found",
"severity": "error",
"hint": "Check the field `sellerId` — it must be a non-empty string."
}
]
}{
"errorList": [
{
"code": "GEN500",
"message": "Internal Server Error",
"severity": "error",
"hint": null
}
]
}Authorizations
As a Channel Integrator you will receive a API Refresh Token. With such a Refresh Token you need to request an Access Token with a limited Lifetime (see POST /v1/auth). This Access Token must be provided as a Bearer Token in the Authorization Header with every request.
Path Parameters
Identifier of the report to send data to
Body
Partial seller inventory report data chunk, either as JSON or gzipped binary upload.
1 - 100 elementsUnique Offer Id to identify an Offer on a Sales Channel.
x >= 15437233
Channel defined unique Offer Id to identify an Offer on a Sales Channel.
1 - 100"XCD233554"
Stock keeping unit is a unique Id used to identify one product.
1 - 150"BEER-001"
"4003227021106"
"1.0"
Show child attributes
Show child attributes
"One of the best Beer in the World."
"4355111"
1000Show child attributes
Show child attributes
Response
Report data accepted
Was this page helpful?