curl --request POST \
--url https://api.jtl-cloud.com/erp/v2/items/{itemId}/kit-items/components \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-tenant-id: <x-tenant-id>' \
--data '
{
"componentItemId": "b45f6432-2462-4c6f-b00f-1d9d01000000",
"quantity": 123,
"comment": "<string>",
"position": 123
}
'import requests
url = "https://api.jtl-cloud.com/erp/v2/items/{itemId}/kit-items/components"
payload = {
"componentItemId": "b45f6432-2462-4c6f-b00f-1d9d01000000",
"quantity": 123,
"comment": "<string>",
"position": 123
}
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({
componentItemId: 'b45f6432-2462-4c6f-b00f-1d9d01000000',
quantity: 123,
comment: '<string>',
position: 123
})
};
fetch('https://api.jtl-cloud.com/erp/v2/items/{itemId}/kit-items/components', 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/items/{itemId}/kit-items/components",
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([
'componentItemId' => 'b45f6432-2462-4c6f-b00f-1d9d01000000',
'quantity' => 123,
'comment' => '<string>',
'position' => 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/items/{itemId}/kit-items/components"
payload := strings.NewReader("{\n \"componentItemId\": \"b45f6432-2462-4c6f-b00f-1d9d01000000\",\n \"quantity\": 123,\n \"comment\": \"<string>\",\n \"position\": 123\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/items/{itemId}/kit-items/components")
.header("x-tenant-id", "<x-tenant-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"componentItemId\": \"b45f6432-2462-4c6f-b00f-1d9d01000000\",\n \"quantity\": 123,\n \"comment\": \"<string>\",\n \"position\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.jtl-cloud.com/erp/v2/items/{itemId}/kit-items/components")
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 \"componentItemId\": \"b45f6432-2462-4c6f-b00f-1d9d01000000\",\n \"quantity\": 123,\n \"comment\": \"<string>\",\n \"position\": 123\n}"
response = http.request(request)
puts response.read_body{
"componentItemId": "b45f6432-2462-4c6f-b00f-1d9d01000000",
"quantity": 123,
"comment": "<string>",
"position": 123
}{
"errorCode": "<string>",
"validationErrors": {},
"errors": {},
"errorMessage": "<string>",
"stacktrace": "<string>"
}{
"errorCode": "<string>",
"validationErrors": {},
"errors": {},
"errorMessage": "<string>",
"stacktrace": "<string>"
}{
"errorCode": "<string>",
"validationErrors": {},
"errors": {},
"errorMessage": "<string>",
"stacktrace": "<string>"
}Add Kit Item Component
Adds a single component to an item’s kit. Fine-grained alternative to replacing the whole component list, for targeted single-component changes without resending the list. The item has to be a kit already; converting a standard item into a kit is a separate endpoint still to be added (WAWI-91105).
curl --request POST \
--url https://api.jtl-cloud.com/erp/v2/items/{itemId}/kit-items/components \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-tenant-id: <x-tenant-id>' \
--data '
{
"componentItemId": "b45f6432-2462-4c6f-b00f-1d9d01000000",
"quantity": 123,
"comment": "<string>",
"position": 123
}
'import requests
url = "https://api.jtl-cloud.com/erp/v2/items/{itemId}/kit-items/components"
payload = {
"componentItemId": "b45f6432-2462-4c6f-b00f-1d9d01000000",
"quantity": 123,
"comment": "<string>",
"position": 123
}
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({
componentItemId: 'b45f6432-2462-4c6f-b00f-1d9d01000000',
quantity: 123,
comment: '<string>',
position: 123
})
};
fetch('https://api.jtl-cloud.com/erp/v2/items/{itemId}/kit-items/components', 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/items/{itemId}/kit-items/components",
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([
'componentItemId' => 'b45f6432-2462-4c6f-b00f-1d9d01000000',
'quantity' => 123,
'comment' => '<string>',
'position' => 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/items/{itemId}/kit-items/components"
payload := strings.NewReader("{\n \"componentItemId\": \"b45f6432-2462-4c6f-b00f-1d9d01000000\",\n \"quantity\": 123,\n \"comment\": \"<string>\",\n \"position\": 123\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/items/{itemId}/kit-items/components")
.header("x-tenant-id", "<x-tenant-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"componentItemId\": \"b45f6432-2462-4c6f-b00f-1d9d01000000\",\n \"quantity\": 123,\n \"comment\": \"<string>\",\n \"position\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.jtl-cloud.com/erp/v2/items/{itemId}/kit-items/components")
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 \"componentItemId\": \"b45f6432-2462-4c6f-b00f-1d9d01000000\",\n \"quantity\": 123,\n \"comment\": \"<string>\",\n \"position\": 123\n}"
response = http.request(request)
puts response.read_body{
"componentItemId": "b45f6432-2462-4c6f-b00f-1d9d01000000",
"quantity": 123,
"comment": "<string>",
"position": 123
}{
"errorCode": "<string>",
"validationErrors": {},
"errors": {},
"errorMessage": "<string>",
"stacktrace": "<string>"
}{
"errorCode": "<string>",
"validationErrors": {},
"errors": {},
"errorMessage": "<string>",
"stacktrace": "<string>"
}{
"errorCode": "<string>",
"validationErrors": {},
"errors": {},
"errorMessage": "<string>",
"stacktrace": "<string>"
}Authorizations
The access token received from the authorization server in the OAuth 2.0 flow.
- Authorization URL
- https://id.jtl-cloud.com/oauth/v2/authorize
- Token URL
- https://id.jtl-cloud.com/oauth/v2/token
Headers
The Company-Id (int or uuid) of the company on whose behalf the request is executed.
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.
Path Parameters
"b45f6432-2462-4c6f-b00f-1d9d01000000"
Body
Request parameters
Adds a single component to an item's kit. Fine-grained alternative to replacing the whole component list, for targeted single-component changes without resending the list. The item has to be a kit already; converting a standard item into a kit is a separate endpoint still to be added (WAWI-91105). - Request
Unique ID of the item to add as a component. The item must be eligible to become a kit component - an inactive item, an item that is itself a kit, a configuration item, a variation-combination parent and a partial-quantity item are all rejected - and it must not be the kit item itself.
"b45f6432-2462-4c6f-b00f-1d9d01000000"
How many units of the component item one unit of the kit consumes. Must be greater than zero. A component item that is not divisible additionally rejects a fractional quantity.
Free-text comment on the component. At most 255 characters. Omitting the field and sending an explicit null are equivalent - both store and return an empty string, never null.
Zero-based position of the component within the kit's component list. Applied after the component has been added; defaults to the end of the list. A value outside the list bounds is clamped to the nearest end rather than rejected - this is intentional and mirrors the domain, where the desktop client moves a component with the same clamping logic. Read the Position of the response to learn where it ended up.
Response
Component was created in the item's kit. No Location header is returned: this API emits none on any operation, and the component is addressable without one via its ComponentItemId. The body is still worth reading for Position, which is the effective index after clamping.
Adds a single component to an item's kit. Fine-grained alternative to replacing the whole component list, for targeted single-component changes without resending the list. The item has to be a kit already; converting a standard item into a kit is a separate endpoint still to be added (WAWI-91105). - Response
ID of the item that was added as a component. A kit component has no own single-value identifier - its identity is the pair of kit and component item - so this doubles as the component's identifier.
"b45f6432-2462-4c6f-b00f-1d9d01000000"
How many units of the component item one unit of the kit consumes.
The comment stored on the component. Always a string, never null - an omitted or explicitly null comment in the request is stored and returned as an empty string.
The effective zero-based position of the component. This is the index the component actually ended up at, which differs from the requested one when the request was out of bounds and got clamped.
Was this page helpful?