JTL-WAWI API (Cloud) (1.0)

Introduction

Welcome to the JTL-WAWI technical API documentation. This guide is here to help developers understand how our REST API works and how it can be integrated into your existing systems. We'll delve into the details of authentication and data manipulation processes, providing clear examples along the way. Whether you're a developer or an IT professional, this documentation aims to give you a practical understanding, laying the groundwork for effectively using the JTL-WAWI API to enhance your processes.

Authentication

You register your application with the API by sending a POST request with the required information and corresponding keys. You can find the exact request details at https://developer.jtl-software.com/products/erp/swagger/appregistration. This information has to include the following:

  • AppId
  • DisplayName
  • Description
  • Version
  • ProviderName
  • ProviderWebsite
  • MandatoryApiScopes

This data is crucial for identifying and registering your application with the API. The API uses it to generate a temporary authentication ID that allows your application to access the necessary resources. After successful validation of this information, you will receive the API key required for future authentication and API requests.

Before you can begin the registration process, you must open JTL-Wawi (new interface) and start the registration process under 'Admin->App registration'. Only at this point are you authorised to send the first API call. This step in JTL-Wawi ensures that your application is properly registered and has permission to use the API.

The API will send you an authentication ID in the form of a token. Once you have received this token and successfully completed the registration in JTL-Wawi, you will send another request to the API by including this authentication ID in the URL path.

After successful validation of this second request by the API and confirmation of the correct information, you will be provided with the actual API key. It is important to note that this API key will not be displayed again!

This API key will be used in the future to authenticate requests to the API. It is of utmost importance that you securely store the API key upon receipt, as it cannot be retrieved from any other location in the system.

Download OpenAPI description
Languages
Servers
Mock server
https://developer.jtl-software.com/_mock/products/erpapi/1.0-cloud/openapi/
https://api.jtl-cloud.com/erp/

info

Operations

features

Operations

printer

Operations

company

Operations

supplier

Operations

colorcodes

Operations

item

Operations

property

Operations

returnstate

Planned

Operations

onholdreason

Operations

returnreason

Planned

Operations

saleschannel

Operations

customerGroup

Operations

paymentmethod

Operations

odata

Operations

shippingmethod

Operations

warehouse

Operations

customerCategory

Operations

return

Operations

cancellationreason

Operations

transactionStatus

Operations

invoice

Planned

Operations

customer

Operations

category

Operations

salesorder

Operations

deliverynote

Planned

Operations

appRegistration

Operations

Register App

Request

Send a registration request for an (external) application

Headers
api-versionstring

The requested API version

x-challengecodestringrequired

You can enter any custom value here. The X-ChallengeCode is used during app registration and must be the same for all registration requests. The maximum length is 30 characters.

tenant-idstring(uuid)required

Specify the TenantId in GUID Format

Bodyapplication/jsonrequired

Contains the registration request's data

AppIdstringrequired

Unique identifier of the application

Example: "myApp/v1"
DisplayNamestringrequired

Default display name of the application

Example: "My App"
Descriptionstringrequired

Default description of the application

Example: "Demo app for testing purposes"
LocalizedDisplayNamesArray of objects(CreateTranslation)

Localized display names of the application

Example: ""
LocalizedDescriptionsArray of objects(CreateTranslation)

Localized descriptions of the application

Example: ""
Versionstringrequired

Version of the application to be registered

Example: "1.0.0"
ProviderNamestringrequired

Name of the application's provider

Example: "JTL-Software-GmbH"
ProviderWebsitestringrequired

Website of the application's provider

Example: "https://www.jtl-software.de"
MandatoryApiScopesArray of stringsrequired

Mandatory required API scopes for the application to work

Example: ""
OptionalApiScopesArray of strings

Optional (recommended) API scopes for the application

Example: ""
AppIconstring(byte)required

Base64 encoded data of an image.

RegistrationTypeinteger(int32)

multiple instances of the application possible0=OneInstance | 1=MultiInstance | 2=PerUserInstance | 3=PerUserLoginInstance

Enum0123
Example: 0
Signaturestring(byte)

The Signature of the App, it combines AppId.SignatureData like myApp/v1.2025-08-03T25:48:00 in UTC Time

SignatureDatastring(date-time)

The Data as DateTimeOffset must be in a range from 10 Minutes equals, and is base for the Signature and must be in UTC Time

Example: "2025-03-20T08:57:00.0000000+01:00"
curl -i -X POST \
  https://developer.jtl-software.com/_mock/products/erpapi/1.0-cloud/openapi/authentication \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -H 'api-version: string' \
  -H 'tenant-id: 497f6eca-6276-4993-bfeb-53cbbbba6f08' \
  -H 'x-api-key: YOUR_API_KEY_HERE' \
  -H 'x-challengecode: string' \
  -d '{
    "AppId": "myApp/v1",
    "DisplayName": "My App",
    "Description": "Demo app for testing purposes",
    "LocalizedDisplayNames": "",
    "LocalizedDescriptions": "",
    "Version": "1.0.0",
    "ProviderName": "JTL-Software-GmbH",
    "ProviderWebsite": "https://www.jtl-software.de",
    "MandatoryApiScopes": "",
    "OptionalApiScopes": "",
    "AppIcon": "string",
    "RegistrationType": 0,
    "Signature": "string",
    "SignatureData": "2025-03-20T08:57:00.0000000+01:00"
  }'

Responses

Status of the registration process (including the unique identifiers for application and registration request)

Bodyapplication/json
AppIdstringrequired

Unique identifier of the application

Example: "myApp/V3"
RegistrationRequestIdstringrequired

Unique identifier of the registration request

Example: "295C196B-CBB0-4E76-9050-ECEC3356DDA6"
Statusinteger(int32)required

Status of the registration process0=Pending | 1=Rejected | 2=Accepted

Enum012
Example: "Pending"
Response
application/json
{ "AppId": "myApp/V3", "RegistrationRequestId": "295C196B-CBB0-4E76-9050-ECEC3356DDA6", "Status": "Pending" }

Fetch Registration Status

Request

Obtain information about a registration request

Path
registrationIdstringrequired

Unique identifier of the registration request

Headers
api-versionstring

The requested API version

x-challengecodestringrequired

You can enter any custom value here. The X-ChallengeCode is used during app registration and must be the same for all registration requests. The maximum length is 30 characters.

tenant-idstring(uuid)required

Specify the TenantId in GUID Format

curl -i -X GET \
  'https://developer.jtl-software.com/_mock/products/erpapi/1.0-cloud/openapi/authentication/{registrationId}' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'api-version: string' \
  -H 'tenant-id: 497f6eca-6276-4993-bfeb-53cbbbba6f08' \
  -H 'x-api-key: YOUR_API_KEY_HERE' \
  -H 'x-challengecode: string'

Responses

Registration information (containing the current status of the registration process)

Bodyapplication/json
RequestStatusInfoobject(RegistrationRequestStatusInfo)required
RequestStatusInfo.​AppIdstringrequired

Unique identifier of the application

Example: "myApp/V3"
RequestStatusInfo.​RegistrationRequestIdstringrequired

Unique identifier of the registration request

Example: "295C196B-CBB0-4E76-9050-ECEC3356DDA6"
RequestStatusInfo.​Statusinteger(int32)required

Status of the registration process0=Pending | 1=Rejected | 2=Accepted

Enum012
Example: "Pending"
Tokenobject(AppToken)
GrantedScopesArray of strings

API scopes (both mandatory and optional) granted to the application

Example: ""
Response
application/json
{ "RequestStatusInfo": { "AppId": "myApp/V3", "RegistrationRequestId": "295C196B-CBB0-4E76-9050-ECEC3356DDA6", "Status": "Pending" }, "Token": { "ApiKey": "FB622234-98A7-46FA-A01B-06C9D0971AAF" }, "GrantedScopes": "" }

Register Multi Instance App

Request

Sends a registration request for another instance of the same application

Path
registrationIdstringrequired

Unique identifier of the registration request

Headers
api-versionstring

The requested API version

x-challengecodestringrequired

You can enter any custom value here. The X-ChallengeCode is used during app registration and must be the same for all registration requests. The maximum length is 30 characters.

tenant-idstring(uuid)required

Specify the TenantId in GUID Format

curl -i -X POST \
  'https://developer.jtl-software.com/_mock/products/erpapi/1.0-cloud/openapi/authentication/{registrationId}' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'api-version: string' \
  -H 'tenant-id: 497f6eca-6276-4993-bfeb-53cbbbba6f08' \
  -H 'x-api-key: YOUR_API_KEY_HERE' \
  -H 'x-challengecode: string'

Responses

Status of the registration process (including the unique identifiers of the application and registration request)

Bodyapplication/json
AppIdstringrequired

Unique identifier of the application

Example: "myApp/V3"
RegistrationRequestIdstringrequired

Unique identifier of the registration request

Example: "295C196B-CBB0-4E76-9050-ECEC3356DDA6"
Statusinteger(int32)required

Status of the registration process0=Pending | 1=Rejected | 2=Accepted

Enum012
Example: "Pending"
Response
application/json
{ "AppId": "myApp/V3", "RegistrationRequestId": "295C196B-CBB0-4E76-9050-ECEC3356DDA6", "Status": "Pending" }

wms

Operations

stock

Operations

accountingData

Planned

Operations

tax

Operations

offer

Operations

creditnote

Operations