curl --request PUT \
--url https://api.jtl-cloud.com/erp/v2/sales-channels/{salesChannelId}/connector/customer-groups \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-tenant-id: <x-tenant-id>' \
--data '
{
"customerGroups": [
{
"endpointId": "<string>",
"customerGroupId": "b45f6432-2462-4c6f-b00f-1d9d01000000"
}
]
}
'import requests
url = "https://api.jtl-cloud.com/erp/v2/sales-channels/{salesChannelId}/connector/customer-groups"
payload = { "customerGroups": [
{
"endpointId": "<string>",
"customerGroupId": "b45f6432-2462-4c6f-b00f-1d9d01000000"
}
] }
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({
customerGroups: [
{
endpointId: '<string>',
customerGroupId: 'b45f6432-2462-4c6f-b00f-1d9d01000000'
}
]
})
};
fetch('https://api.jtl-cloud.com/erp/v2/sales-channels/{salesChannelId}/connector/customer-groups', 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}/connector/customer-groups",
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([
'customerGroups' => [
[
'endpointId' => '<string>',
'customerGroupId' => 'b45f6432-2462-4c6f-b00f-1d9d01000000'
]
]
]),
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}/connector/customer-groups"
payload := strings.NewReader("{\n \"customerGroups\": [\n {\n \"endpointId\": \"<string>\",\n \"customerGroupId\": \"b45f6432-2462-4c6f-b00f-1d9d01000000\"\n }\n ]\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}/connector/customer-groups")
.header("x-tenant-id", "<x-tenant-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"customerGroups\": [\n {\n \"endpointId\": \"<string>\",\n \"customerGroupId\": \"b45f6432-2462-4c6f-b00f-1d9d01000000\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.jtl-cloud.com/erp/v2/sales-channels/{salesChannelId}/connector/customer-groups")
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 \"customerGroups\": [\n {\n \"endpointId\": \"<string>\",\n \"customerGroupId\": \"b45f6432-2462-4c6f-b00f-1d9d01000000\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"customerGroups": [
{
"endpointId": "<string>",
"isDefault": true,
"endpointName": "<string>",
"customerGroupId": "b45f6432-2462-4c6f-b00f-1d9d01000000"
}
],
"liveSyncStatus": 0,
"liveSyncError": {
"code": "<string>",
"message": "<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>"
}
]
}{
"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 Connector Customer Groups
Replaces all customer-group mappings of a connector account and pushes the result to the connector endpoint. The request describes the complete desired state: listed mappings are created or updated, all other mappings are removed. EndpointIds that are neither mapped nor reported by the endpoint are ignored. The name and default flag of an endpoint customer group come from the endpoint and cannot be set here; for EndpointIds that are not mapped yet, JTL-Wawi reads them live from the endpoint before saving; if this read fails, the request fails with 502/504 and nothing is saved. The mappings are saved even if the subsequent push to the endpoint fails; the push result is returned in “LiveSyncStatus” and “LiveSyncError”.
curl --request PUT \
--url https://api.jtl-cloud.com/erp/v2/sales-channels/{salesChannelId}/connector/customer-groups \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-tenant-id: <x-tenant-id>' \
--data '
{
"customerGroups": [
{
"endpointId": "<string>",
"customerGroupId": "b45f6432-2462-4c6f-b00f-1d9d01000000"
}
]
}
'import requests
url = "https://api.jtl-cloud.com/erp/v2/sales-channels/{salesChannelId}/connector/customer-groups"
payload = { "customerGroups": [
{
"endpointId": "<string>",
"customerGroupId": "b45f6432-2462-4c6f-b00f-1d9d01000000"
}
] }
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({
customerGroups: [
{
endpointId: '<string>',
customerGroupId: 'b45f6432-2462-4c6f-b00f-1d9d01000000'
}
]
})
};
fetch('https://api.jtl-cloud.com/erp/v2/sales-channels/{salesChannelId}/connector/customer-groups', 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}/connector/customer-groups",
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([
'customerGroups' => [
[
'endpointId' => '<string>',
'customerGroupId' => 'b45f6432-2462-4c6f-b00f-1d9d01000000'
]
]
]),
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}/connector/customer-groups"
payload := strings.NewReader("{\n \"customerGroups\": [\n {\n \"endpointId\": \"<string>\",\n \"customerGroupId\": \"b45f6432-2462-4c6f-b00f-1d9d01000000\"\n }\n ]\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}/connector/customer-groups")
.header("x-tenant-id", "<x-tenant-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"customerGroups\": [\n {\n \"endpointId\": \"<string>\",\n \"customerGroupId\": \"b45f6432-2462-4c6f-b00f-1d9d01000000\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.jtl-cloud.com/erp/v2/sales-channels/{salesChannelId}/connector/customer-groups")
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 \"customerGroups\": [\n {\n \"endpointId\": \"<string>\",\n \"customerGroupId\": \"b45f6432-2462-4c6f-b00f-1d9d01000000\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"customerGroups": [
{
"endpointId": "<string>",
"isDefault": true,
"endpointName": "<string>",
"customerGroupId": "b45f6432-2462-4c6f-b00f-1d9d01000000"
}
],
"liveSyncStatus": 0,
"liveSyncError": {
"code": "<string>",
"message": "<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>"
}
]
}{
"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 connector account whose customer groups are replaced. Opaque, tenant-local composite identifier (not a UUID); use the value returned by a sales channel listing.
Body
Request model for SaveConnectorCustomerGroups command endpoint. Route parameters bind from the route, query parameters from the query string, everything else from the body.
The complete desired set of customer-group mappings for the connector account. Any existing mapping not contained in this list is removed.
Show child attributes
Show child attributes
Response
Successfully replaced the customer-group mappings. Returns the persisted mappings together with the outcome of the live push to the connector endpoint.
Replaces all customer-group mappings of a connector account and pushes the result to the connector endpoint. The request describes the complete desired state: listed mappings are created or updated, all other mappings are removed. EndpointIds that are neither mapped nor reported by the endpoint are ignored. The name and default flag of an endpoint customer group come from the endpoint and cannot be set here; for EndpointIds that are not mapped yet, JTL-Wawi reads them live from the endpoint before saving; if this read fails, the request fails with 502/504 and nothing is saved. The mappings are saved even if the subsequent push to the endpoint fails; the push result is returned in "LiveSyncStatus" and "LiveSyncError". - Response
The saved customer-group mappings, excluding ignored EndpointIds. "EndpointName" is null if the endpoint reports no name for a group. Reflects the saved state, independent of the push result in "LiveSyncStatus".
Show child attributes
Show child attributes
Outcome of the live push to the connector endpoint.
0, 1, 2, 3 Details of a failed push. Always present; "Code" and "Message" are set only if "LiveSyncStatus" is SyncFailed or SyncTimedOut (omitted in REST, null in GraphQL).
Show child attributes
Show child attributes
Was this page helpful?