Liebe Community,
erster Post - und dann gleich etwas sehr spezielles. Leider konnte mit der Support nicht helfen.
Steinigt mich, aber wir entwickeln Inhouse mittels AI (Lovable & Claude) ein Tool, das uns KPIs - auch außerhalb von JTL - in einem Dashboard liefern soll. Das läuft so weit auch gut, aber es fehlt noch ein Quäntchen zum vollen Erfolg.
Aufbau: --> Schnittstelle/abfragende Instanz = Dashbaord im Cloud-Hosting von Lovable. Anfragen über VPS-Bridge (wegen statischer IP für die Anfragen) an unseren WaWi-Server (eCom-Data). JTL-API läuft auf WaWi-Server, Verbindung von Cloud <-> WaWi-Server steht und funktioniert.
Problem: WaWi-Server gibt keine/ungenügende Daten zurück
Problem: JTL-Wawi App-API --> 401 trotz gültiger Registrierung & freigegebener Scopes
## Fragen :
1. Warum liefert `/v1/info` mit unserem Header-Set 200, aber `/v1/items`, `/v1/customers`, `/v1/salesOrders` dann 401 bei gültiger App-Registrierung, freigegebenen Scopes und Admin-User per `x-runas`?
2. Erwartet die App-API für datenführende Endpunkte einen anderen Header-Namen/Wert als `x-runas` (z. B. `X-runas`, oder Wawi-Username vs. interne User-ID)?
3. Müssen `items.read` / `customers.read` / `salesorders.read` zusätzlich serverseitig (User-Berechtigungen, Benutzergruppe) explizit aktiviert werden, oder reicht die Freigabe im App-Wizard?
4. Gibt es serverseitig ein Auth-Log, das den genauen Ablehnungsgrund nennt (Scope fehlt? runas unbekannt? Challenge ungültig?)?
## Was wir bereits ausgeschlossen haben
- Falscher ApiKey --> /v1/info` antwortet mit demselben Key sauber
- Fehlender `x-challengecode` --> wird mitgeschickt (derselbe Wert wie bei Registrierung)
- Falsche `api-version` : sowohl `1.0` als auch `2.0` getestet, beide 401
- IP-Mismatch & Registrierung und API-Calls kommen von derselben festen IP
- Scope `all.read` als Umbrella: wurde testweise entfernt und einzeln aufgeführt, gleiches Ergebnis
- `x-runas` fehlt -> wurde ergänzt (`api-dashboard`, Admin-Berechtigung), gleiches Ergebnis
gesetze Scopes:
cusomters.read
customers.read
items.read
offers.read
orders.read
returns.read
saleschannels.read
salesorders.read
deliveries.read
deliverynotes.read
inventories.read
picklists.read
warehouse.read
accountings.read
invoices.read
salesinvoicecorrections.read
taxes.read
suppliers.read
all.read
application.runas
system.config.read
system.read
system.worker.read
wawiapp.all
resources.read
**Wawi-Version:** 1.11.10 (Tenant `eazybusiness`)
**App:** `eigeneapp` Version `2.3.1`
**Wawi-User (runas):** `api-dashboard` (temporär Admin-Rechte in Testumgebung, alle App-Scopes im Wizard freigegeben)
---
## Symptom
- `GET /api/eazybusiness/v1/info` --> **200 OK**, liefert echtes JSON:
```json
{ "Version": "1.11.10", "Timestamp": "2026-06-03T17:16:22+02:00", "Tenant": "eazybusiness", "Type": "WAWI-Api" }
```
- `GET /api/eazybusiness/v1/items?pageSize=1` --> **401**
- `GET /api/eazybusiness/v1/customers?pageSize=1` --> **401**
- `GET /api/eazybusiness/v1/salesOrders?pageSize=1` --> **401**
Body bei allen 401:
```json
{ "Message": "Authorization has been denied for this request." }
```
Heißt: Authentifizierung greift grundsätzlich (`/v1/info` antwortet sauber mit App-Auth), aber jeder datenführende Endpoint wird abgelehnt.
---
## Request-Header (identisch für alle vier Calls)
```
Authorization: Wawi <ApiKey aus jtl_registration.api_key>
x-appid: eigeneapp/2.3.1
x-appversion: 2.3.1
api-version: 2.0
x-challengecode: 111111111 (derselbe Wert wie bei Registrierung)
x-runas: api-dashboard
```
Anfragen laufen über unseren Bridge-VPS mit fester IP `123.123.123.123` (derselben, mit der die Registrierung erfolgte --> kein IP-Mismatch).
---
## Registrierungs-Details
App-Registrierung war erfolgreich (`ApiKey` wurde geliefert, ohne `RegChallengeIpMismatch`).
Body der POST-Registrierung (PascalCase, `api-version: 2.0`):
```json
{
"AppId": "eigeneapp",
"Version": "2.3.1",
"DisplayName": "KPI Dashboard",
"Description": "KPI Dashboard für JTL-Wawi (via Bridge).",
"ProviderName": "TolleFirma",
"ProviderWebsite": "https://unseredomain.com",
"MandatoryApiScopes": [
"cusomters.read", "customers.read", "items.read", "offers.read",
"orders.read", "returns.read", "saleschannels.read", "salesorders.read",
"deliveries.read", "deliverynotes.read", "inventories.read",
"picklists.read", "warehouse.read", "accountings.read", "invoices.read",
"salesinvoicecorrections.read", "taxes.read", "suppliers.read",
"all.read", "application.runas", "system.config.read", "system.read",
"system.worker.read", "wawiapp.all"
],
"OptionalApiScopes": [],
"AppIcon": "<base64 PNG>"
}
Kann uns irgendwer helfen da herauszufinden, wo genau das Problem liegen könnte? Diese 401er loszuwerden wäre wirklich supertoll
Danke vorab und allen schon mal ein schönes Wochenende!
Martin
erster Post - und dann gleich etwas sehr spezielles. Leider konnte mit der Support nicht helfen.
Steinigt mich, aber wir entwickeln Inhouse mittels AI (Lovable & Claude) ein Tool, das uns KPIs - auch außerhalb von JTL - in einem Dashboard liefern soll. Das läuft so weit auch gut, aber es fehlt noch ein Quäntchen zum vollen Erfolg.
Aufbau: --> Schnittstelle/abfragende Instanz = Dashbaord im Cloud-Hosting von Lovable. Anfragen über VPS-Bridge (wegen statischer IP für die Anfragen) an unseren WaWi-Server (eCom-Data). JTL-API läuft auf WaWi-Server, Verbindung von Cloud <-> WaWi-Server steht und funktioniert.
Problem: WaWi-Server gibt keine/ungenügende Daten zurück
Problem: JTL-Wawi App-API --> 401 trotz gültiger Registrierung & freigegebener Scopes
## Fragen :
1. Warum liefert `/v1/info` mit unserem Header-Set 200, aber `/v1/items`, `/v1/customers`, `/v1/salesOrders` dann 401 bei gültiger App-Registrierung, freigegebenen Scopes und Admin-User per `x-runas`?
2. Erwartet die App-API für datenführende Endpunkte einen anderen Header-Namen/Wert als `x-runas` (z. B. `X-runas`, oder Wawi-Username vs. interne User-ID)?
3. Müssen `items.read` / `customers.read` / `salesorders.read` zusätzlich serverseitig (User-Berechtigungen, Benutzergruppe) explizit aktiviert werden, oder reicht die Freigabe im App-Wizard?
4. Gibt es serverseitig ein Auth-Log, das den genauen Ablehnungsgrund nennt (Scope fehlt? runas unbekannt? Challenge ungültig?)?
## Was wir bereits ausgeschlossen haben
- Falscher ApiKey --> /v1/info` antwortet mit demselben Key sauber
- Fehlender `x-challengecode` --> wird mitgeschickt (derselbe Wert wie bei Registrierung)
- Falsche `api-version` : sowohl `1.0` als auch `2.0` getestet, beide 401
- IP-Mismatch & Registrierung und API-Calls kommen von derselben festen IP
- Scope `all.read` als Umbrella: wurde testweise entfernt und einzeln aufgeführt, gleiches Ergebnis
- `x-runas` fehlt -> wurde ergänzt (`api-dashboard`, Admin-Berechtigung), gleiches Ergebnis
gesetze Scopes:
cusomters.read
customers.read
items.read
offers.read
orders.read
returns.read
saleschannels.read
salesorders.read
deliveries.read
deliverynotes.read
inventories.read
picklists.read
warehouse.read
accountings.read
invoices.read
salesinvoicecorrections.read
taxes.read
suppliers.read
all.read
application.runas
system.config.read
system.read
system.worker.read
wawiapp.all
resources.read
**Wawi-Version:** 1.11.10 (Tenant `eazybusiness`)
**App:** `eigeneapp` Version `2.3.1`
**Wawi-User (runas):** `api-dashboard` (temporär Admin-Rechte in Testumgebung, alle App-Scopes im Wizard freigegeben)
---
## Symptom
- `GET /api/eazybusiness/v1/info` --> **200 OK**, liefert echtes JSON:
```json
{ "Version": "1.11.10", "Timestamp": "2026-06-03T17:16:22+02:00", "Tenant": "eazybusiness", "Type": "WAWI-Api" }
```
- `GET /api/eazybusiness/v1/items?pageSize=1` --> **401**
- `GET /api/eazybusiness/v1/customers?pageSize=1` --> **401**
- `GET /api/eazybusiness/v1/salesOrders?pageSize=1` --> **401**
Body bei allen 401:
```json
{ "Message": "Authorization has been denied for this request." }
```
Heißt: Authentifizierung greift grundsätzlich (`/v1/info` antwortet sauber mit App-Auth), aber jeder datenführende Endpoint wird abgelehnt.
---
## Request-Header (identisch für alle vier Calls)
```
Authorization: Wawi <ApiKey aus jtl_registration.api_key>
x-appid: eigeneapp/2.3.1
x-appversion: 2.3.1
api-version: 2.0
x-challengecode: 111111111 (derselbe Wert wie bei Registrierung)
x-runas: api-dashboard
```
Anfragen laufen über unseren Bridge-VPS mit fester IP `123.123.123.123` (derselben, mit der die Registrierung erfolgte --> kein IP-Mismatch).
---
## Registrierungs-Details
App-Registrierung war erfolgreich (`ApiKey` wurde geliefert, ohne `RegChallengeIpMismatch`).
Body der POST-Registrierung (PascalCase, `api-version: 2.0`):
```json
{
"AppId": "eigeneapp",
"Version": "2.3.1",
"DisplayName": "KPI Dashboard",
"Description": "KPI Dashboard für JTL-Wawi (via Bridge).",
"ProviderName": "TolleFirma",
"ProviderWebsite": "https://unseredomain.com",
"MandatoryApiScopes": [
"cusomters.read", "customers.read", "items.read", "offers.read",
"orders.read", "returns.read", "saleschannels.read", "salesorders.read",
"deliveries.read", "deliverynotes.read", "inventories.read",
"picklists.read", "warehouse.read", "accountings.read", "invoices.read",
"salesinvoicecorrections.read", "taxes.read", "suppliers.read",
"all.read", "application.runas", "system.config.read", "system.read",
"system.worker.read", "wawiapp.all"
],
"OptionalApiScopes": [],
"AppIcon": "<base64 PNG>"
}
Kann uns irgendwer helfen da herauszufinden, wo genau das Problem liegen könnte? Diese 401er loszuwerden wäre wirklich supertoll
Danke vorab und allen schon mal ein schönes Wochenende!
Martin