curl --request PUT \
--url https://api.jtl-cloud.com/erp/v2/sales-channels/{salesChannelId}/shop/transfer-parameters \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-tenant-id: <x-tenant-id>' \
--data '
{
"maxFilesPerArchive": 123,
"quickSyncArticleCount": 123,
"maxImagesPerArchive": 123,
"orderTransferCount": 123,
"maxArchiveSizeInKilobytes": 123,
"maxImageArchiveSizeInKilobytes": 123
}
'import requests
url = "https://api.jtl-cloud.com/erp/v2/sales-channels/{salesChannelId}/shop/transfer-parameters"
payload = {
"maxFilesPerArchive": 123,
"quickSyncArticleCount": 123,
"maxImagesPerArchive": 123,
"orderTransferCount": 123,
"maxArchiveSizeInKilobytes": 123,
"maxImageArchiveSizeInKilobytes": 123
}
headers = {
"x-tenant-id": "<x-tenant-id>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {
'x-tenant-id': '<x-tenant-id>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
maxFilesPerArchive: 123,
quickSyncArticleCount: 123,
maxImagesPerArchive: 123,
orderTransferCount: 123,
maxArchiveSizeInKilobytes: 123,
maxImageArchiveSizeInKilobytes: 123
})
};
fetch('https://api.jtl-cloud.com/erp/v2/sales-channels/{salesChannelId}/shop/transfer-parameters', 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.jtl-cloud.com/erp/v2/sales-channels/{salesChannelId}/shop/transfer-parameters",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'maxFilesPerArchive' => 123,
'quickSyncArticleCount' => 123,
'maxImagesPerArchive' => 123,
'orderTransferCount' => 123,
'maxArchiveSizeInKilobytes' => 123,
'maxImageArchiveSizeInKilobytes' => 123
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"x-tenant-id: <x-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.jtl-cloud.com/erp/v2/sales-channels/{salesChannelId}/shop/transfer-parameters"
payload := strings.NewReader("{\n \"maxFilesPerArchive\": 123,\n \"quickSyncArticleCount\": 123,\n \"maxImagesPerArchive\": 123,\n \"orderTransferCount\": 123,\n \"maxArchiveSizeInKilobytes\": 123,\n \"maxImageArchiveSizeInKilobytes\": 123\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("x-tenant-id", "<x-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.put("https://api.jtl-cloud.com/erp/v2/sales-channels/{salesChannelId}/shop/transfer-parameters")
.header("x-tenant-id", "<x-tenant-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"maxFilesPerArchive\": 123,\n \"quickSyncArticleCount\": 123,\n \"maxImagesPerArchive\": 123,\n \"orderTransferCount\": 123,\n \"maxArchiveSizeInKilobytes\": 123,\n \"maxImageArchiveSizeInKilobytes\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.jtl-cloud.com/erp/v2/sales-channels/{salesChannelId}/shop/transfer-parameters")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["x-tenant-id"] = '<x-tenant-id>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"maxFilesPerArchive\": 123,\n \"quickSyncArticleCount\": 123,\n \"maxImagesPerArchive\": 123,\n \"orderTransferCount\": 123,\n \"maxArchiveSizeInKilobytes\": 123,\n \"maxImageArchiveSizeInKilobytes\": 123\n}"
response = http.request(request)
puts response.read_body{
"type": "https://www.rfc-editor.org/rfc/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"instance": "/api/route",
"traceId": "0HMPNHL0JHL76:00000001",
"detail": "<string>",
"errors": [
{
"name": "Error or field name",
"reason": "Error reason",
"code": "<string>",
"severity": "<string>"
}
]
}{
"type": "https://www.rfc-editor.org/rfc/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"instance": "/api/route",
"traceId": "0HMPNHL0JHL76:00000001",
"detail": "<string>",
"errors": [
{
"name": "Error or field name",
"reason": "Error reason",
"code": "<string>",
"severity": "<string>"
}
]
}{
"type": "https://www.rfc-editor.org/rfc/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"instance": "/api/route",
"traceId": "0HMPNHL0JHL76:00000001",
"detail": "<string>",
"errors": [
{
"name": "Error or field name",
"reason": "Error reason",
"code": "<string>",
"severity": "<string>"
}
]
}{
"type": "https://www.rfc-editor.org/rfc/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"instance": "/api/route",
"traceId": "0HMPNHL0JHL76:00000001",
"detail": "<string>",
"errors": [
{
"name": "Error or field name",
"reason": "Error reason",
"code": "<string>",
"severity": "<string>"
}
]
}{
"type": "https://www.rfc-editor.org/rfc/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"instance": "/api/route",
"traceId": "0HMPNHL0JHL76:00000001",
"detail": "<string>",
"errors": [
{
"name": "Error or field name",
"reason": "Error reason",
"code": "<string>",
"severity": "<string>"
}
]
}Save Shop Transfer Parameters
Saves the six transfer parameters that control archive/quick-sync/order transfer thresholds toward the JTL-Shop (legacy ParameterValidationService/ParameterDefaults). Note on scope: although this route is addressed by a shop’s sales channel id, the six values below are NOT scoped to that shop. They are persisted globally in dbo.tOptions and apply to every JTL-Shop instance the tenant operates, because the legacy JTL-Shop connector itself only ever reads a single, global set of these settings. The salesChannelId in the route exists solely so the request can be rejected with 404 when it does not name an existing Wawi-managed webshop; once that check passes, the write always targets the same global rows regardless of which valid salesChannelId was used to reach this route. A caller that saves these parameters via shop A and then reads them back via shop B sees the exact same values - that is the intended legacy behavior, not a bug of this endpoint.
curl --request PUT \
--url https://api.jtl-cloud.com/erp/v2/sales-channels/{salesChannelId}/shop/transfer-parameters \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-tenant-id: <x-tenant-id>' \
--data '
{
"maxFilesPerArchive": 123,
"quickSyncArticleCount": 123,
"maxImagesPerArchive": 123,
"orderTransferCount": 123,
"maxArchiveSizeInKilobytes": 123,
"maxImageArchiveSizeInKilobytes": 123
}
'import requests
url = "https://api.jtl-cloud.com/erp/v2/sales-channels/{salesChannelId}/shop/transfer-parameters"
payload = {
"maxFilesPerArchive": 123,
"quickSyncArticleCount": 123,
"maxImagesPerArchive": 123,
"orderTransferCount": 123,
"maxArchiveSizeInKilobytes": 123,
"maxImageArchiveSizeInKilobytes": 123
}
headers = {
"x-tenant-id": "<x-tenant-id>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {
'x-tenant-id': '<x-tenant-id>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
maxFilesPerArchive: 123,
quickSyncArticleCount: 123,
maxImagesPerArchive: 123,
orderTransferCount: 123,
maxArchiveSizeInKilobytes: 123,
maxImageArchiveSizeInKilobytes: 123
})
};
fetch('https://api.jtl-cloud.com/erp/v2/sales-channels/{salesChannelId}/shop/transfer-parameters', 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.jtl-cloud.com/erp/v2/sales-channels/{salesChannelId}/shop/transfer-parameters",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'maxFilesPerArchive' => 123,
'quickSyncArticleCount' => 123,
'maxImagesPerArchive' => 123,
'orderTransferCount' => 123,
'maxArchiveSizeInKilobytes' => 123,
'maxImageArchiveSizeInKilobytes' => 123
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"x-tenant-id: <x-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.jtl-cloud.com/erp/v2/sales-channels/{salesChannelId}/shop/transfer-parameters"
payload := strings.NewReader("{\n \"maxFilesPerArchive\": 123,\n \"quickSyncArticleCount\": 123,\n \"maxImagesPerArchive\": 123,\n \"orderTransferCount\": 123,\n \"maxArchiveSizeInKilobytes\": 123,\n \"maxImageArchiveSizeInKilobytes\": 123\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("x-tenant-id", "<x-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.put("https://api.jtl-cloud.com/erp/v2/sales-channels/{salesChannelId}/shop/transfer-parameters")
.header("x-tenant-id", "<x-tenant-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"maxFilesPerArchive\": 123,\n \"quickSyncArticleCount\": 123,\n \"maxImagesPerArchive\": 123,\n \"orderTransferCount\": 123,\n \"maxArchiveSizeInKilobytes\": 123,\n \"maxImageArchiveSizeInKilobytes\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.jtl-cloud.com/erp/v2/sales-channels/{salesChannelId}/shop/transfer-parameters")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["x-tenant-id"] = '<x-tenant-id>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"maxFilesPerArchive\": 123,\n \"quickSyncArticleCount\": 123,\n \"maxImagesPerArchive\": 123,\n \"orderTransferCount\": 123,\n \"maxArchiveSizeInKilobytes\": 123,\n \"maxImageArchiveSizeInKilobytes\": 123\n}"
response = http.request(request)
puts response.read_body{
"type": "https://www.rfc-editor.org/rfc/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"instance": "/api/route",
"traceId": "0HMPNHL0JHL76:00000001",
"detail": "<string>",
"errors": [
{
"name": "Error or field name",
"reason": "Error reason",
"code": "<string>",
"severity": "<string>"
}
]
}{
"type": "https://www.rfc-editor.org/rfc/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"instance": "/api/route",
"traceId": "0HMPNHL0JHL76:00000001",
"detail": "<string>",
"errors": [
{
"name": "Error or field name",
"reason": "Error reason",
"code": "<string>",
"severity": "<string>"
}
]
}{
"type": "https://www.rfc-editor.org/rfc/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"instance": "/api/route",
"traceId": "0HMPNHL0JHL76:00000001",
"detail": "<string>",
"errors": [
{
"name": "Error or field name",
"reason": "Error reason",
"code": "<string>",
"severity": "<string>"
}
]
}{
"type": "https://www.rfc-editor.org/rfc/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"instance": "/api/route",
"traceId": "0HMPNHL0JHL76:00000001",
"detail": "<string>",
"errors": [
{
"name": "Error or field name",
"reason": "Error reason",
"code": "<string>",
"severity": "<string>"
}
]
}{
"type": "https://www.rfc-editor.org/rfc/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"instance": "/api/route",
"traceId": "0HMPNHL0JHL76:00000001",
"detail": "<string>",
"errors": [
{
"name": "Error or field name",
"reason": "Error reason",
"code": "<string>",
"severity": "<string>"
}
]
}Authorizations
The access token received from the authorization server in the OAuth 2.0 flow.
Headers
The tenant ID for the target ERP instance.
Path Parameters
Sales channel id of the shop, used only to validate that an existing Wawi-managed webshop is addressed. This is a tenant-local, composite identifier and not a UUID (ADR-69) - it is opaque to the caller and must be taken verbatim from a sales channel listing; the internal shop key (kShop) is never accepted here. Does not scope which shop's transfer parameters are written - see the command description.
Body
Request model for SaveShopTransferParameters command endpoint. Route parameters bind from the route, query parameters from the query string, everything else from the body.
Threshold for the number of files in an article export archive that triggers sending it to the JTL-Shop, before its target size (MaxArchiveSizeInKilobytes) is reached. Must be at least 1; the legacy ParameterDefaults defines no upper bound.
Number of articles transferred per quick-sync run. Must be at least 1; the legacy ParameterDefaults defines no upper bound.
Threshold for the number of images in an image export archive that triggers sending it to the JTL-Shop, before its target size (MaxImageArchiveSizeInKilobytes) is reached. Must be at least 1; the legacy ParameterDefaults defines no upper bound.
Number of orders transferred per order transfer run. Must be between 1 and 50 inclusive - the only one of the six parameters the legacy ParameterDefaults caps with an upper bound.
Target size, in kilobytes, of an article export archive that triggers sending it to the JTL-Shop, before its file-count threshold (MaxFilesPerArchive) is reached. Must be at least 1; the legacy ParameterDefaults defines no upper bound.
Target size, in kilobytes, of an image export archive that triggers sending it to the JTL-Shop, before its file-count threshold (MaxImagesPerArchive) is reached. Must be at least 1; the legacy ParameterDefaults defines no upper bound.
Response
The shop transfer parameters were saved.
Was this page helpful?