GLPI 11 hat zwei APIs: die alte, die GLPI selbst jetzt „Legacy-API“ nennt, und eine neue mit OAuth2, GraphQL und interaktiver Dokumentation. Wir haben die neue durchgängig getestet: vom Token bis zum erstellten, aktualisierten und mit einer Folgeaktion versehenen Ticket. Der erste Stolperstein kam noch vor dem ersten Ticket: GLPI lieferte den Token ganz normal aus und lehnte danach alles mit „The High-Level API is disabled“ ab. Dieser Leitfaden zeigt den Weg, der funktioniert hat, mit der getesteten Postman-Collection zum Herunterladen.
Die Legacy-API funktioniert weiterhin und ist diejenige, die wir im MCP-Server, der Claude mit GLPI verbindet, verwenden. Für neue Integrationen empfiehlt GLPI selbst die neue.
Die zwei APIs von GLPI 11
| Legacy-API (v1) | Neue API (v2) | |
|---|---|---|
| Adresse | /apirest.php oder /api.php/v1 |
/api.php/v2.3 (aktuelle Version) |
| Authentifizierung | App-Token + Benutzer-Token, danach Session-Token | OAuth2 (Bearer-Token) |
| Format | GLPI-Elemente so, wie sie in der Datenbank liegen | Strukturierte Ressourcen (/Assistance/Ticket, /Assistance/Ticket/{id}/Timeline) |
| Suche | Suchkriterien von GLPI | RSQL-Filter (name=like=*toner*) und Paginierung im Header |
| Extras | — | GraphQL und interaktive Dokumentation unter /doc |
| Status | GLPI weist darauf hin: „Es wird empfohlen, wenn möglich nur die neue API zu verwenden“ | Empfohlen für alles Neue |
Schritt 1: Die neue API einschalten
Aktivieren Sie unter Einstellungen > Allgemein > API die Option API aktivieren. Dieser Schalter ist ein anderer als der, mit dem die Legacy-API eingeschaltet wird.
In unserem Test funktionierte die Token-Anforderung auch bei ausgeschaltetem Schalter: GLPI lieferte einen Token mit einer Stunde Gültigkeit. Erst beim ersten Aufruf kam der Fehler „The High-Level API is disabled“. Wenn der Token ausgegeben wird und alles mit 403 antwortet, beginnen Sie hier.
Schritt 2: Der Dienstbenutzer und der OAuth-Client
- Dienstbenutzer: ein Konto nur für die Integration, mit dem minimalen Profil, welches sie benötigt, in der richtigen Einheit. Niemals ein Administrator.
- OAuth-Client (unter Einstellungen > OAuth-Clients):
- Grants:
passwordfür System-zu-System mit dem Dienstbenutzer;authorization_code, wenn die Anwendung im Namen jeder Person handelt, die sich anmeldet;client_credentialswird von den Inventar-Agenten verwendet. - Scopes:
apifür die API,graphqlfür GraphQL,userundemailfür die Daten des Benutzers selbst,inventoryundstatusfür spezielle Zwecke. Vergeben Sie nur, was die Integration nutzt. - Erlaubte IPs: Beschränken Sie den Zugriff auf den Server, der die API aufrufen wird.
GLPI erzeugt die Kennung und das Secret des Clients. Bewahren Sie beides in einem Tresor auf, nicht im Code.
Schritt 3: Vom Token zum Ticket
Token anfordern (1 Stunde gültig, mit Refresh-Token):
curl -X POST https://glpi.suaempresa.com.br/api.php/token \
-d grant_type=password -d client_id=$CLIENT_ID -d client_secret=$CLIENT_SECRET \
-d username=$USUARIO -d password=$SENHA -d scope="api graphql"
Ein Ticket erstellen:
curl -X POST https://glpi.suaempresa.com.br/api.php/v2.3/Assistance/Ticket \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"name": "Impressora do 2o andar sem toner", "content": "Aberto pela API v2.", "urgency": 3, "type": 1}'
Der Rest des Weges, den wir getestet haben:

| Aktion | Aufruf | Ergebnis im Test |
|---|---|---|
| Token | POST /api.php/token |
Bearer, 1 Stunde, mit Refresh, in 0,3 bis 0,4 s |
| Ticket erstellen | POST /v2.3/Assistance/Ticket |
200, liefert die ID zurück |
| Lesen | GET /v2.3/Assistance/Ticket/{id} |
Status kommt bereits mit Namen („Neu“) |
| Dringlichkeit ändern | PATCH /v2.3/Assistance/Ticket/{id} |
200, die Priorität wird neu berechnet |
| Folgeaktion | POST /v2.3/Assistance/Ticket/{id}/Timeline/Followup |
200 |
| Zeitleiste | GET /v2.3/Assistance/Ticket/{id}/Timeline |
Liste mit der Folgeaktion |
| Suchen | GET /v2.3/Assistance/Ticket?filter=name=like=*toner* |
Gesamtzahl im Header Content-Range |
| GraphQL | POST /v2.3/GraphQL |
Nur die angeforderten Felder, mit Paginierung |
| Erneuern | POST /api.php/token mit refresh_token |
Neuer Token, ohne erneut nach dem Passwort zu fragen |
| Ohne Token | beliebige Route | 401 |
Drei Details, die Sie stolpern lassen
- Der Schalter „API aktivieren“ ist von der Legacy-API getrennt, und der Token wird auch bei ausgeschalteter API ausgegeben. Der Fehler zeigt sich erst danach.
- Ein angeforderter, aber nicht erlaubter Scope führt nicht sofort zu einem Fehler. Wir haben den Scope
userbei einem Client angefordert, der ihn nicht hatte: Der Token kam trotzdem, ohne diesen Scope, und die Benutzer-Route antwortete mit 403. Wenn eine Route trotz gültigem Token 403 liefert, prüfen Sie die Scopes des Clients. - Der Status kommt als Objekt (
{"id": 1, "name": "Novo"}), nicht als Zahl. Wer von der Legacy-API migriert, muss den Code anpassen, der den Status ausgelesen hat.
Wann Sie welche verwenden
- Neue Integration: neue API. OAuth ist der Marktstandard, die Ressourcen sind klarer, und die Dokumentation steht direkt in GLPI zur Verfügung.
- Integration, die bereits mit der Legacy-API funktioniert: Es gibt keine Eile, aber planen Sie die Migration. GLPI zeigt bereits den Hinweis, die neue zu verwenden.
- Anwendung, die im Namen mehrerer Personen handelt (ein Portal, eine App):
authorization_code, damit jede Person mit ihrem eigenen Login autorisiert. - Serverroutine (n8n, ERP, Skript):
passwordmit Dienstbenutzer und eingeschränkter IP.
Laden Sie die getestete Collection herunter
Die Postman-Collection für die API von GLPI 11 enthält die neun Aufrufe aus der Tabelle, wobei Token und Ticket-ID automatisch von einem Aufruf zum nächsten gespeichert werden. Tragen Sie die Adresse Ihres GLPI, den OAuth-Client und den Dienstbenutzer ein.
Test von NexTool am 4. Oktober 2026 in einer GLPI-11.0.7-Testumgebung (API v2.3), mit einem Dienstbenutzer und einem OAuth-Client, die für den Test angelegt und anschließend gelöscht wurden. Die Routen und Scopes wurden zusätzlich im Quellcode von GLPI 11 überprüft.
Kommentare
Die Kommentare zu diesem Beitrag stammen von GitHub (giscus). Beim Laden verbindet sich Ihr Browser mit GitHub; GitHub erhält dabei Ihre IP-Adresse und kann eigene Cookies setzen.
Um sie automatisch zu laden, aktivieren Sie funktionale Cookies