curl --request POST \
--url https://api.jtl-cloud.com/erp/v2/sales-channels/shop/accounts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-tenant-id: <x-tenant-id>' \
--data '
{
"name": "<string>",
"url": "<string>",
"username": "<string>",
"password": "<string>",
"apiKey": "<string>",
"companyId": "b45f6432-2462-4c6f-b00f-1d9d01000000",
"rootCategoryId": "b45f6432-2462-4c6f-b00f-1d9d01000000",
"isActive": true,
"orderAsOffer": true,
"useShopOrderNumber": true
}
'import requests
url = "https://api.jtl-cloud.com/erp/v2/sales-channels/shop/accounts"
payload = {
"name": "<string>",
"url": "<string>",
"username": "<string>",
"password": "<string>",
"apiKey": "<string>",
"companyId": "b45f6432-2462-4c6f-b00f-1d9d01000000",
"rootCategoryId": "b45f6432-2462-4c6f-b00f-1d9d01000000",
"isActive": True,
"orderAsOffer": True,
"useShopOrderNumber": True
}
headers = {
"x-tenant-id": "<x-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-tenant-id': '<x-tenant-id>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: '<string>',
url: '<string>',
username: '<string>',
password: '<string>',
apiKey: '<string>',
companyId: 'b45f6432-2462-4c6f-b00f-1d9d01000000',
rootCategoryId: 'b45f6432-2462-4c6f-b00f-1d9d01000000',
isActive: true,
orderAsOffer: true,
useShopOrderNumber: true
})
};
fetch('https://api.jtl-cloud.com/erp/v2/sales-channels/shop/accounts', 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/shop/accounts",
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([
'name' => '<string>',
'url' => '<string>',
'username' => '<string>',
'password' => '<string>',
'apiKey' => '<string>',
'companyId' => 'b45f6432-2462-4c6f-b00f-1d9d01000000',
'rootCategoryId' => 'b45f6432-2462-4c6f-b00f-1d9d01000000',
'isActive' => true,
'orderAsOffer' => true,
'useShopOrderNumber' => true
]),
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/shop/accounts"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"url\": \"<string>\",\n \"username\": \"<string>\",\n \"password\": \"<string>\",\n \"apiKey\": \"<string>\",\n \"companyId\": \"b45f6432-2462-4c6f-b00f-1d9d01000000\",\n \"rootCategoryId\": \"b45f6432-2462-4c6f-b00f-1d9d01000000\",\n \"isActive\": true,\n \"orderAsOffer\": true,\n \"useShopOrderNumber\": true\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.jtl-cloud.com/erp/v2/sales-channels/shop/accounts")
.header("x-tenant-id", "<x-tenant-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"url\": \"<string>\",\n \"username\": \"<string>\",\n \"password\": \"<string>\",\n \"apiKey\": \"<string>\",\n \"companyId\": \"b45f6432-2462-4c6f-b00f-1d9d01000000\",\n \"rootCategoryId\": \"b45f6432-2462-4c6f-b00f-1d9d01000000\",\n \"isActive\": true,\n \"orderAsOffer\": true,\n \"useShopOrderNumber\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.jtl-cloud.com/erp/v2/sales-channels/shop/accounts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-tenant-id"] = '<x-tenant-id>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"url\": \"<string>\",\n \"username\": \"<string>\",\n \"password\": \"<string>\",\n \"apiKey\": \"<string>\",\n \"companyId\": \"b45f6432-2462-4c6f-b00f-1d9d01000000\",\n \"rootCategoryId\": \"b45f6432-2462-4c6f-b00f-1d9d01000000\",\n \"isActive\": true,\n \"orderAsOffer\": true,\n \"useShopOrderNumber\": true\n}"
response = http.request(request)
puts response.read_body{
"salesChannelId": "<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>"
}
]
}Create Shop
Creates a new JTL-Wawi-managed online shop account. The request is validated first; then a live connection and credentials test is run against the shop. If either fails, no shop is created. The customer group, currency and language with the lowest ID are assigned as defaults; they can be changed afterwards via “PUT /v2/sales-channels//shop/customer-groups” or “SaveShopCustomerGroups”, “PUT /v2/sales-channels//shop/currencies” or “SaveShopCurrencies”, and the corresponding language endpoint. Running the connection test updates the stored connection state, also when simulating. When “simulate” is true, only validation and the connection test run; no shop is created and no sales channel id is returned (“salesChannelId” is omitted in the REST response and null in GraphQL). The sales channel id is assigned by the server and cannot be supplied.
curl --request POST \
--url https://api.jtl-cloud.com/erp/v2/sales-channels/shop/accounts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-tenant-id: <x-tenant-id>' \
--data '
{
"name": "<string>",
"url": "<string>",
"username": "<string>",
"password": "<string>",
"apiKey": "<string>",
"companyId": "b45f6432-2462-4c6f-b00f-1d9d01000000",
"rootCategoryId": "b45f6432-2462-4c6f-b00f-1d9d01000000",
"isActive": true,
"orderAsOffer": true,
"useShopOrderNumber": true
}
'import requests
url = "https://api.jtl-cloud.com/erp/v2/sales-channels/shop/accounts"
payload = {
"name": "<string>",
"url": "<string>",
"username": "<string>",
"password": "<string>",
"apiKey": "<string>",
"companyId": "b45f6432-2462-4c6f-b00f-1d9d01000000",
"rootCategoryId": "b45f6432-2462-4c6f-b00f-1d9d01000000",
"isActive": True,
"orderAsOffer": True,
"useShopOrderNumber": True
}
headers = {
"x-tenant-id": "<x-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-tenant-id': '<x-tenant-id>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: '<string>',
url: '<string>',
username: '<string>',
password: '<string>',
apiKey: '<string>',
companyId: 'b45f6432-2462-4c6f-b00f-1d9d01000000',
rootCategoryId: 'b45f6432-2462-4c6f-b00f-1d9d01000000',
isActive: true,
orderAsOffer: true,
useShopOrderNumber: true
})
};
fetch('https://api.jtl-cloud.com/erp/v2/sales-channels/shop/accounts', 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/shop/accounts",
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([
'name' => '<string>',
'url' => '<string>',
'username' => '<string>',
'password' => '<string>',
'apiKey' => '<string>',
'companyId' => 'b45f6432-2462-4c6f-b00f-1d9d01000000',
'rootCategoryId' => 'b45f6432-2462-4c6f-b00f-1d9d01000000',
'isActive' => true,
'orderAsOffer' => true,
'useShopOrderNumber' => true
]),
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/shop/accounts"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"url\": \"<string>\",\n \"username\": \"<string>\",\n \"password\": \"<string>\",\n \"apiKey\": \"<string>\",\n \"companyId\": \"b45f6432-2462-4c6f-b00f-1d9d01000000\",\n \"rootCategoryId\": \"b45f6432-2462-4c6f-b00f-1d9d01000000\",\n \"isActive\": true,\n \"orderAsOffer\": true,\n \"useShopOrderNumber\": true\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.jtl-cloud.com/erp/v2/sales-channels/shop/accounts")
.header("x-tenant-id", "<x-tenant-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"url\": \"<string>\",\n \"username\": \"<string>\",\n \"password\": \"<string>\",\n \"apiKey\": \"<string>\",\n \"companyId\": \"b45f6432-2462-4c6f-b00f-1d9d01000000\",\n \"rootCategoryId\": \"b45f6432-2462-4c6f-b00f-1d9d01000000\",\n \"isActive\": true,\n \"orderAsOffer\": true,\n \"useShopOrderNumber\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.jtl-cloud.com/erp/v2/sales-channels/shop/accounts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-tenant-id"] = '<x-tenant-id>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"url\": \"<string>\",\n \"username\": \"<string>\",\n \"password\": \"<string>\",\n \"apiKey\": \"<string>\",\n \"companyId\": \"b45f6432-2462-4c6f-b00f-1d9d01000000\",\n \"rootCategoryId\": \"b45f6432-2462-4c6f-b00f-1d9d01000000\",\n \"isActive\": true,\n \"orderAsOffer\": true,\n \"useShopOrderNumber\": true\n}"
response = http.request(request)
puts response.read_body{
"salesChannelId": "<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
Optional, client-generated key for deduplicating repeated write requests. A repeated request with the same key returns the originally recorded result instead of executing the effect again.
1 - 255The tenant ID for the target ERP instance.
Query Parameters
When true, only validation and the connection test run and no shop is created. Optional; defaults to false.
Body
Request model for CreateShop command endpoint. Route parameters bind from the route, query parameters from the query string, everything else from the body.
Name of the shop. Mandatory, at most 255 characters.
Absolute http:// or https:// URL of the shop. Mandatory, at most 255 characters. Must not point to the same host and path as another JTL-Wawi-managed online shop, whether active or not.
Login name of the sync user for this shop. Mandatory, at most 32 characters.
Password of the sync user for this shop. Mandatory. Maximum 111 bytes in UTF-8; multi-byte characters count as several bytes. Write-only; never returned by any endpoint.
API key of this shop. Mandatory, at most 64 characters. Write-only; never returned by any endpoint.
ID of the company the shop belongs to. Mandatory; must reference an active company.
"b45f6432-2462-4c6f-b00f-1d9d01000000"
ID of the shop's root category. Optional; when omitted, no root category is set. When given, it must reference an existing category.
"b45f6432-2462-4c6f-b00f-1d9d01000000"
Shop is active. Optional; defaults to true.
Orders imported from this shop are created as offers rather than as sales orders. Optional; defaults to false.
The shop's own order number is used instead of a JTL-Wawi-generated one. Optional; defaults to false.
Response
The shop account was created; "salesChannelId" identifies it and can be used with "GET /v2/sales-channels/{salesChannelId}/shop/accounts" or "GetShopAccountById". When "simulate" is true, validation and the connection test succeeded and no shop was created; "salesChannelId" is omitted in the REST response and null in GraphQL. The status is 201 in both cases.
Result of creating a JTL-Wawi-managed online shop account.
Sales channel id of the created shop. Opaque, tenant-local composite identifier (not a UUID); use this value to address the shop in follow-up calls. Omitted in the REST response (null in GraphQL) when "simulate" is true, because no shop was created.
Was this page helpful?