curl --request POST \
--url https://api.jtl-cloud.com/erp/v2/warehouses/{warehouseId}/items/{itemId}/stock-postings/outbound \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-tenant-id: <x-tenant-id>' \
--data '
{
"quantity": 123,
"inventoryManagementInformation": {
"shelfLifeExpirationDate": "2023-11-07T05:31:56Z",
"batchNumber": "<string>",
"serialNumbers": [
"<string>"
]
}
}
'import requests
url = "https://api.jtl-cloud.com/erp/v2/warehouses/{warehouseId}/items/{itemId}/stock-postings/outbound"
payload = {
"quantity": 123,
"inventoryManagementInformation": {
"shelfLifeExpirationDate": "2023-11-07T05:31:56Z",
"batchNumber": "<string>",
"serialNumbers": ["<string>"]
}
}
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({
quantity: 123,
inventoryManagementInformation: {
shelfLifeExpirationDate: '2023-11-07T05:31:56Z',
batchNumber: '<string>',
serialNumbers: ['<string>']
}
})
};
fetch('https://api.jtl-cloud.com/erp/v2/warehouses/{warehouseId}/items/{itemId}/stock-postings/outbound', 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/warehouses/{warehouseId}/items/{itemId}/stock-postings/outbound",
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([
'quantity' => 123,
'inventoryManagementInformation' => [
'shelfLifeExpirationDate' => '2023-11-07T05:31:56Z',
'batchNumber' => '<string>',
'serialNumbers' => [
'<string>'
]
]
]),
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/warehouses/{warehouseId}/items/{itemId}/stock-postings/outbound"
payload := strings.NewReader("{\n \"quantity\": 123,\n \"inventoryManagementInformation\": {\n \"shelfLifeExpirationDate\": \"2023-11-07T05:31:56Z\",\n \"batchNumber\": \"<string>\",\n \"serialNumbers\": [\n \"<string>\"\n ]\n }\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/warehouses/{warehouseId}/items/{itemId}/stock-postings/outbound")
.header("x-tenant-id", "<x-tenant-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"quantity\": 123,\n \"inventoryManagementInformation\": {\n \"shelfLifeExpirationDate\": \"2023-11-07T05:31:56Z\",\n \"batchNumber\": \"<string>\",\n \"serialNumbers\": [\n \"<string>\"\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.jtl-cloud.com/erp/v2/warehouses/{warehouseId}/items/{itemId}/stock-postings/outbound")
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 \"quantity\": 123,\n \"inventoryManagementInformation\": {\n \"shelfLifeExpirationDate\": \"2023-11-07T05:31:56Z\",\n \"batchNumber\": \"<string>\",\n \"serialNumbers\": [\n \"<string>\"\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"totalQuantity": 123
}{
"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>"
}
]
}Executes an outbound stock posting (Warenausgang) for an item in a specific warehouse. This is a relative stock change, not a target value - the provided Quantity is removed from the item's current stock in the given warehouse. Quantity must be greater than 0 and must not exceed the available stock.
Executes an outbound stock posting (Warenausgang) for an item in a specific warehouse. This is a relative stock change, not a target value - the provided Quantity is removed from the item’s current stock in the given warehouse. Quantity must be greater than 0 and must not exceed the available stock.
curl --request POST \
--url https://api.jtl-cloud.com/erp/v2/warehouses/{warehouseId}/items/{itemId}/stock-postings/outbound \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-tenant-id: <x-tenant-id>' \
--data '
{
"quantity": 123,
"inventoryManagementInformation": {
"shelfLifeExpirationDate": "2023-11-07T05:31:56Z",
"batchNumber": "<string>",
"serialNumbers": [
"<string>"
]
}
}
'import requests
url = "https://api.jtl-cloud.com/erp/v2/warehouses/{warehouseId}/items/{itemId}/stock-postings/outbound"
payload = {
"quantity": 123,
"inventoryManagementInformation": {
"shelfLifeExpirationDate": "2023-11-07T05:31:56Z",
"batchNumber": "<string>",
"serialNumbers": ["<string>"]
}
}
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({
quantity: 123,
inventoryManagementInformation: {
shelfLifeExpirationDate: '2023-11-07T05:31:56Z',
batchNumber: '<string>',
serialNumbers: ['<string>']
}
})
};
fetch('https://api.jtl-cloud.com/erp/v2/warehouses/{warehouseId}/items/{itemId}/stock-postings/outbound', 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/warehouses/{warehouseId}/items/{itemId}/stock-postings/outbound",
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([
'quantity' => 123,
'inventoryManagementInformation' => [
'shelfLifeExpirationDate' => '2023-11-07T05:31:56Z',
'batchNumber' => '<string>',
'serialNumbers' => [
'<string>'
]
]
]),
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/warehouses/{warehouseId}/items/{itemId}/stock-postings/outbound"
payload := strings.NewReader("{\n \"quantity\": 123,\n \"inventoryManagementInformation\": {\n \"shelfLifeExpirationDate\": \"2023-11-07T05:31:56Z\",\n \"batchNumber\": \"<string>\",\n \"serialNumbers\": [\n \"<string>\"\n ]\n }\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/warehouses/{warehouseId}/items/{itemId}/stock-postings/outbound")
.header("x-tenant-id", "<x-tenant-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"quantity\": 123,\n \"inventoryManagementInformation\": {\n \"shelfLifeExpirationDate\": \"2023-11-07T05:31:56Z\",\n \"batchNumber\": \"<string>\",\n \"serialNumbers\": [\n \"<string>\"\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.jtl-cloud.com/erp/v2/warehouses/{warehouseId}/items/{itemId}/stock-postings/outbound")
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 \"quantity\": 123,\n \"inventoryManagementInformation\": {\n \"shelfLifeExpirationDate\": \"2023-11-07T05:31:56Z\",\n \"batchNumber\": \"<string>\",\n \"serialNumbers\": [\n \"<string>\"\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"totalQuantity": 123
}{
"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.
Path Parameters
Unique identifier of the warehouse the stock posting is executed in.
"b45f6432-2462-4c6f-b00f-1d9d01000000"
Unique identifier of the item the stock posting is executed for.
"b45f6432-2462-4c6f-b00f-1d9d01000000"
Body
Request model for ExecuteOutboundStockPosting command endpoint. Route parameters bind from the route, query parameters from the query string, everything else from the body.
The positive quantity to be removed from the item's current stock (relative delta, must be greater than 0).
Optional inventory management information (shelf life expiration date, batch number and/or serial numbers) to be taken into account. Applicable only for items configured with detailed inventory management.
Show child attributes
Show child attributes
Response
The outbound stock posting was executed successfully. Returns the item's resulting total stock in the warehouse.
The resulting stock for the item in the warehouse after a stock posting has been executed. Shared by the inbound and outbound stock posting endpoints.
The item's total physical stock (on-hand, including reserved) in the warehouse after the posting.
Was this page helpful?