Skip to main content

glpi-api

Interact with any GLPi REST API instance — authenticate, search items, manage tickets, users, assets, and any GLPI itemtype. Use this skill whenever the user mentions GLPi, ITSM tickets, GLPi API, wants to query a GLPi instance, search for tickets, computers, users, or any asset in GLPi, or references a GLPi URL (e.g. apirest.php). Also trigger when the user asks about helpdesk tickets, ITIL items, or wants to interact with a service desk that runs on GLPi.

Quellinformationen

Repository
AnasSahel/glpi-skills
Letzte Quellaktivität
12. März 2026 um 20:34
Erkannte Sprache von SKILL.md
Englisch
Sterne
1
Forks
0

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

Datei-Explorer
2 Dateien

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
name
glpi-api
description
Interact with any GLPi REST API instance — authenticate, search items, manage tickets, users, assets, and any GLPI itemtype. Use this skill whenever the user mentions GLPi, ITSM tickets, GLPi API, wants to query a GLPi instance, search for tickets, computers, users, or any asset in GLPi, or references a GLPi URL (e.g. apirest.php). Also trigger when the user asks about helpdesk tickets, ITIL items, or wants to interact with a service desk that runs on GLPi.
# GLPi REST API This skill enables you to interact with any GLPi instance through its REST API. GLPi is an open-source IT asset management and helpdesk system widely used in enterprise environments. ## Prerequisites Look for a `.env` file in the working directory (or ask the user) containing: ``` BASE_URL=https://your-glpi-instance/apirest.php APP_TOKEN=your_app_token USER_TOKEN=your_user_token ``` If the `.env` doesn't exist, ask the user for the base URL and credentials. **SSL certificates**: Many internal GLPi instances use self-signed certificates. Always use `curl -sk` (silent + insecure) when calling the API. This is expected for internal enterprise tools. ## Authentication Flow Every API session starts with `initSession` and should end with `killSession`. ```bash # Init session — returns a session_token SESSION=$(curl -sk -X GET \ -H 'Content-Type: application/json' \ -H "Authorization: user_token $USER_TOKEN" \ -H "App-Token: $APP_TOKEN" \ "$BASE_URL/initSession" | python3 -c "import json,sys; print(json.load(sys.stdin)['session_token'])") # All subsequent calls use Session-Token header curl -sk -X GET \ -H 'Content-Type: application/json' \ -H "Session-Token: $SESSION" \ -H "App-Token: $APP_TOKEN" \ "$BASE_URL/Ticket/?range=0-9" # Kill session when done curl -sk -X GET \ -H 'Content-Type: application/json' \ -H "Session-Token: $SESSION" \ -H "App-Token: $APP_TOKEN" \ "$BASE_URL/killSession" ``` Store the session token in a variable and reuse it across calls within the same conversation. No need to re-authenticate for every request. ## Core Endpoints ### Get items ``` GET /:itemtype/:id → single item GET /:itemtype/ → collection (paginated) GET /:itemtype/:id/:sub_itemtype → sub-items GET /getMultipleItems → mixed itemtypes in one call ``` Common itemtypes: `Ticket`, `Computer`, `User`, `Monitor`, `Software`, `Entity`, `Group`, `Profile`, `Document`, `Location`. **Useful query parameters:** - `expand_dropdowns=true` — show names instead of IDs (highly recommended) - `range=0-49` — pagination (default). Use `Content-Range` response header to know the total. - `order=DESC` / `sort=19` — sort by field (19 = date_mod for most types) - `with_documents`, `with_tickets`, `with_logs` — include related items ### Search items The search engine is the most powerful endpoint. It supports complex criteria with AND/OR/NOT logic, meta-criteria across itemtypes, and nested conditions. ``` GET /search/:itemtype/?criteria[0][field]=1&criteria[0][searchtype]=contains&criteria[0][value]=keyword ``` Before searching, discover available fields: ``` GET /listSearchOptions/:itemtype ``` This returns a map of field IDs to their meaning (e.g., `1` = name, `2` = id, `15` = date_creation). **Search criteria structure:** ```json { "field": 1, "searchtype": "contains", "value": "search term" } ``` Search types: `contains` (wildcard), `equals`, `notequals`, `lessthan`, `morethan`, `under`, `notunder`. Use `forcedisplay[0]=1&forcedisplay[1]=2` etc. to choose which columns appear in results. **Example — search tickets by name containing "arrivée":** ```bash curl -sk -g -X GET \ -H 'Content-Type: application/json' \ -H "Session-Token: $SESSION" \ -H "App-Token: $APP_TOKEN" \ "$BASE_URL/search/Ticket?criteria[0][field]=1&criteria[0][searchtype]=contains&criteria[0][value]=arriv&sort=15&order=DESC&range=0-9&forcedisplay[0]=1&forcedisplay[1]=2&forcedisplay[2]=12&forcedisplay[3]=15" ``` Always use `curl -g` (disable globbing) when passing bracket characters in URLs. ### Create / Update / Delete ``` POST /:itemtype/ → add (body: {"input": {...}}) PUT /:itemtype/:id → update (body: {"input": {...}}) DELETE /:itemtype/:id → delete (?force_purge=true to skip trash) ``` Bulk operations pass an array in `input`: ```json {"input": [{"name": "Item 1"}, {"name": "Item 2"}]} ``` ### Session & Profile Management ``` GET /getMyProfiles → list user profiles GET /getActiveProfile → current profile POST /changeActiveProfile → switch profile (body: {"profiles_id": N}) GET /getMyEntities → list accessible entities POST /changeActiveEntities → switch entity (body: {"entities_id": N, "is_recursive": true}) GET /getFullSession → full PHP session data GET /getGlpiConfig → GLPi configuration ``` ### Documents ```bash # Upload curl -sk -X POST \ -H 'Content-Type: multipart/form-data' \ -H "Session-Token: $SESSION" \ -H "App-Token: $APP_TOKEN" \ -F 'uploadManifest={"input": {"name": "Doc name", "_filename": ["file.pdf"]}};type=application/json' \ -F 'filename[0]=@file.pdf' \ "$BASE_URL/Document/" # Download curl -sk -X GET \ -H "Session-Token: $SESSION" \ -H "App-Token: $APP_TOKEN" \ -H "Accept: application/octet-stream" \ "$BASE_URL/Document/:id" ``` ### Massive Actions ``` GET /getMassiveActions/:itemtype/ → list available actions GET /getMassiveActionParameters/:itemtype/:action_key → action params POST /applyMassiveAction/:itemtype/:action_key → execute ``` ## Status Codes | Code | Meaning | |---|---| | 200 | OK | | 201 | Created (single add) | | 206 | Partial content (paginated) | | 207 | Multi-status (bulk with errors) | | 400 | Bad request / input error | | 401 | Unauthorized / invalid session | | 404 | Not found | ## Tips - **Pagination**: Default range is `0-49`. Always check the `Content-Range` header to know the total count. Max range varies per instance (often 1000). - **Sessions are read-only by default**. Pass `session_write=true` for write operations if you get permission errors. - **HTML content**: Responses are HTML-sanitized by default. Add `X-GLPI-Sanitized-Content: false` header to get raw content. - **Ticket status codes**: 1=Nouveau, 2=En cours (attribué), 3=En cours (planifié), 4=En attente, 5=Résolu, 6=Clos. - **Ticket types**: 1=Incident, 2=Demande. - **AllAssets**: Use `AllAssets` as itemtype in search to query across all asset types at once. ## Error Reference See `references/errors.md` for the full list of GLPi API error codes and their meaning.
Auf GitHub ansehen