GLPI 11 dispose de deux API : l'ancienne, que GLPI lui-même appelle désormais "API historique", et une nouvelle, avec OAuth2, GraphQL et une documentation interactive. Nous avons testé la nouvelle de bout en bout : du jeton au ticket ouvert, mis à jour et doté d'un suivi. Le premier accroc est arrivé avant même le moindre ticket : GLPI a délivré le jeton normalement, puis a tout refusé avec "The High-Level API is disabled". Ce guide présente le chemin qui a fonctionné, avec la collection Postman testée à télécharger.
L'API historique fonctionne toujours et c'est celle que nous utilisons dans le serveur MCP qui relie Claude à GLPI. Pour les nouvelles intégrations, GLPI lui-même recommande la nouvelle.
Les deux API de GLPI 11
| API historique (v1) | Nouvelle API (v2) | |
|---|---|---|
| Adresse | /apirest.php ou /api.php/v1 |
/api.php/v2.3 (version actuelle) |
| Authentification | App-Token + jeton de l'utilisateur, puis Session-Token | OAuth2 (jeton Bearer) |
| Format | Éléments GLPI tels qu'ils sont en base de données | Ressources organisées (/Assistance/Ticket, /Assistance/Ticket/{id}/Timeline) |
| Recherche | Critères de la recherche GLPI | Filtre RSQL (name=like=*toner*) et pagination dans l'en-tête |
| Extras | — | GraphQL et documentation interactive sur /doc |
| Statut | GLPI prévient : "il est recommandé de n'utiliser que la nouvelle API lorsque c'est possible" | Recommandée pour tout nouveau projet |
Étape 1 : activer la nouvelle API
Dans Configuration > Générale > API, activez Activer l'API. Cette option est distincte de celle qui active l'API historique.
Lors de notre test, avec cette option désactivée, la demande de jeton a fonctionné : GLPI a renvoyé un jeton valable une heure. Ce n'est qu'au premier appel qu'est apparue l'erreur "The High-Level API is disabled". Si le jeton est délivré et que tout renvoie 403, commencez par là.
Étape 2 : l'utilisateur de service et le client OAuth
- Utilisateur de service : un compte dédié à l'intégration, avec le profil minimal dont elle a besoin, dans la bonne entité. Jamais un administrateur.
- Client OAuth (dans Configuration > Clients OAuth) :
- Autorisations :
passwordpour le système à système avec l'utilisateur de service ;authorization_codelorsque l'application agit au nom de chaque personne qui se connecte ;client_credentialsest utilisé par les agents d'inventaire. - Portées :
apipour l'API,graphqlpour GraphQL,useretemailpour les données de l'utilisateur lui-même,inventoryetstatuspour des usages spécifiques. N'accordez que ce que l'intégration utilise. - IP autorisées : limitez-les au serveur qui appellera l'API.
GLPI génère l'identifiant et le secret du client. Conservez-les tous les deux dans un coffre-fort, pas dans le code.
Étape 3 : du jeton au ticket
Demander le jeton (valable 1 heure, avec jeton de rafraîchissement) :
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"
Ouvrir un ticket :
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}'
Le reste du parcours que nous avons testé :

| Action | Appel | Résultat du test |
|---|---|---|
| Jeton | POST /api.php/token |
Bearer, 1 heure, avec refresh, en 0,3 à 0,4 s |
| Ouvrir un ticket | POST /v2.3/Assistance/Ticket |
200, renvoie l'id |
| Lire | GET /v2.3/Assistance/Ticket/{id} |
Le statut arrive déjà avec son nom ("Novo") |
| Modifier l'urgence | PATCH /v2.3/Assistance/Ticket/{id} |
200, la priorité est recalculée |
| Suivi | POST /v2.3/Assistance/Ticket/{id}/Timeline/Followup |
200 |
| Chronologie | GET /v2.3/Assistance/Ticket/{id}/Timeline |
Liste avec le suivi |
| Rechercher | GET /v2.3/Assistance/Ticket?filter=name=like=*toner* |
Total dans l'en-tête Content-Range |
| GraphQL | POST /v2.3/GraphQL |
Uniquement les champs demandés, avec pagination |
| Renouveler | POST /api.php/token avec refresh_token |
Nouveau jeton sans redemander le mot de passe |
| Sans jeton | n'importe quelle route | 401 |
Trois détails qui piègent
- L'option "Activer l'API" est distincte de l'API historique, et le jeton est délivré même lorsque l'API est désactivée. L'erreur n'apparaît qu'ensuite.
- Une portée demandée mais non autorisée ne provoque pas d'erreur sur le moment. Nous avons demandé la portée
usersur un client qui ne l'avait pas : le jeton est arrivé quand même, sans cette portée, et la route de l'utilisateur a répondu 403. Si une route renvoie 403 avec un jeton valide, vérifiez les portées du client. - Le statut arrive sous forme d'objet (
{"id": 1, "name": "Novo"}), et non de nombre. Ceux qui migrent depuis l'API historique doivent adapter le code qui lisait le statut.
Quand utiliser l'une ou l'autre
- Nouvelle intégration : la nouvelle API. OAuth est le standard du marché, les ressources sont plus claires et la documentation se trouve dans GLPI lui-même.
- Intégration qui fonctionne déjà avec l'API historique : rien ne presse, mais planifiez la migration. GLPI affiche déjà l'avertissement invitant à utiliser la nouvelle.
- Application qui agit au nom de plusieurs personnes (un portail, une app) :
authorization_code, pour que chaque personne donne son autorisation avec ses propres identifiants. - Tâche serveur (n8n, ERP, script) :
passwordavec un utilisateur de service et une IP restreinte.
Téléchargez la collection testée
La collection Postman de l'API de GLPI 11 contient les neuf appels du tableau, avec le jeton et l'id du ticket enregistrés automatiquement d'un appel à l'autre. Renseignez l'adresse de votre GLPI, le client OAuth et l'utilisateur de service.
Test réalisé par NexTool le 4 octobre 2026, sur un GLPI 11.0.7 de test (API v2.3), avec un utilisateur de service et un client OAuth créés pour le test et supprimés à la fin. Les routes et les portées ont également été vérifiées dans le code source de GLPI 11.
Commentaires
Les commentaires de cet article proviennent de GitHub (giscus). En les chargeant, votre navigateur se connecte à GitHub, qui reçoit votre adresse IP et peut enregistrer ses propres cookies.
Pour les charger automatiquement, activez les cookies fonctionnels