GLPI 11 tiene dos API: la antigua, que el propio GLPI ahora llama "API heredada", y una nueva, con OAuth2, GraphQL y documentación interactiva. Probamos la nueva de principio a fin: desde el token hasta el ticket abierto, actualizado y con seguimiento. El primer tropiezo llegó antes de cualquier ticket: GLPI entregó el token con normalidad y después lo rechazó todo con "The High-Level API is disabled". Esta guía muestra el camino que funcionó, con la colección de Postman probada para descargar.
La API heredada sigue funcionando y es la que usamos en el servidor MCP que conecta Claude con GLPI. Para integraciones nuevas, el propio GLPI recomienda la nueva.
Las dos API de GLPI 11
| API heredada (v1) | API nueva (v2) | |
|---|---|---|
| Dirección | /apirest.php o /api.php/v1 |
/api.php/v2.3 (versión actual) |
| Autenticación | App-Token + token del usuario, luego Session-Token | OAuth2 (token Bearer) |
| Formato | Elementos de GLPI tal como están en la base de datos | Recursos organizados (/Assistance/Ticket, /Assistance/Ticket/{id}/Timeline) |
| Búsqueda | Criterios de búsqueda de GLPI | Filtro RSQL (name=like=*toner*) y paginación en la cabecera |
| Extras | — | GraphQL y documentación interactiva en /doc |
| Situación | GLPI avisa: "se recomienda usar solo la API nueva cuando sea posible" | Recomendada para todo lo nuevo |
Paso 1: activar la API nueva
En Configuración > General > API, active Habilitar API. Este interruptor es distinto del que activa la API heredada.
En nuestra prueba, con él desactivado, la solicitud del token funcionó: GLPI devolvió un token válido durante una hora. Solo en la primera llamada apareció el error "The High-Level API is disabled". Si el token se emite y todo da 403, empiece por aquí.
Paso 2: el usuario de servicio y el cliente OAuth
- Usuario de servicio: una cuenta exclusiva para la integración, con el perfil mínimo que necesita, en la entidad correcta. Nunca un administrador.
- Cliente OAuth (en Configuración > Clientes OAuth):
- Concesiones:
passwordpara sistema a sistema con el usuario de servicio;authorization_codecuando la aplicación actúa en nombre de cada persona que inicia sesión;client_credentialslo usan los agentes de inventario. - Ámbitos:
apipara la API,graphqlpara GraphQL,useryemailpara los datos del propio usuario,inventoryystatuspara fines específicos. Conceda solo lo que la integración usa. - IP permitidas: restrinja al servidor que va a llamar a la API.
GLPI genera el identificador y el secreto del cliente. Guarde ambos en un almacén de secretos, no en el código.
Paso 3: del token al ticket
Solicitar el token (válido durante 1 hora, con token de renovación):
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"
Abrir 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}'
El resto del camino que probamos:

| Acción | Llamada | Resultado en la prueba |
|---|---|---|
| Token | POST /api.php/token |
Bearer, 1 hora, con refresh, en 0,3 a 0,4 s |
| Abrir ticket | POST /v2.3/Assistance/Ticket |
200, devuelve el id |
| Leer | GET /v2.3/Assistance/Ticket/{id} |
El estado ya viene con nombre ("Novo") |
| Cambiar urgencia | PATCH /v2.3/Assistance/Ticket/{id} |
200, la prioridad se recalcula |
| Seguimiento | POST /v2.3/Assistance/Ticket/{id}/Timeline/Followup |
200 |
| Cronología | GET /v2.3/Assistance/Ticket/{id}/Timeline |
Lista con el seguimiento |
| Buscar | GET /v2.3/Assistance/Ticket?filter=name=like=*toner* |
Total en la cabecera Content-Range |
| GraphQL | POST /v2.3/GraphQL |
Solo los campos solicitados, con paginación |
| Renovar | POST /api.php/token con refresh_token |
Nuevo token sin volver a pedir la contraseña |
| Sin token | cualquier ruta | 401 |
Tres detalles que pillan desprevenido
- El interruptor "Habilitar API" es independiente de la API heredada, y el token se emite incluso con la API desactivada. El error solo aparece después.
- Un ámbito solicitado y no permitido no da error en el momento. Solicitamos el ámbito
useren un cliente que no lo tenía: el token llegó igualmente, sin ese ámbito, y la ruta del usuario respondió 403. Si una ruta da 403 con un token válido, revise los ámbitos del cliente. - El estado viene como objeto (
{"id": 1, "name": "Novo"}), no como número. Quien migre desde la API heredada debe ajustar el código que leía el estado.
Cuándo usar cada una
- Integración nueva: API nueva. OAuth es el estándar del mercado, los recursos son más claros y la documentación está en el propio GLPI.
- Integración que ya funciona en la heredada: no hay prisa, pero planifique la migración. GLPI ya muestra el aviso para usar la nueva.
- Aplicación que actúa en nombre de varias personas (un portal, una app):
authorization_code, para que cada persona autorice con su propio inicio de sesión. - Rutina de servidor (n8n, ERP, script):
passwordcon usuario de servicio e IP restringida.
Descargue la colección probada
La colección de Postman de la API de GLPI 11 incluye las nueve llamadas de la tabla, con el token y el id del ticket guardados automáticamente de una llamada a otra. Complete la dirección de su GLPI, el cliente OAuth y el usuario de servicio.
Prueba de NexTool el 4 de octubre de 2026, en un GLPI 11.0.7 de pruebas (API v2.3), con usuario de servicio y cliente OAuth creados para la prueba y eliminados al final. Las rutas y los ámbitos también se verificaron en el código fuente de GLPI 11.
Comentarios
Los comentarios de esta publicación vienen de GitHub (giscus). Al cargarlos, tu navegador se conecta a GitHub, que recibe tu dirección IP y puede guardar sus propias cookies.
Para cargarlos automáticamente, activa las cookies funcionales