# REST API (V1)

Lien vers la documentation&#x20;

<a href="https://github.com/glpi-project/glpi/blob/main/apirest.md" class="button secondary">Documentation API Rest</a>

***

### Glossaire

**Endpoint** : \
Ressource disponible via l'API. L'endpoint est l'URL où votre API peut être accédée par une application cliente.

**Method** : \
Verbes HTTP pour indiquer l'action souhaitée à effectuer sur la ressource identifiée. Voir : <https://en.wikipedia.org/wiki/Hypertext\\_Transfer\\_Protocol#Request\\_methods>

**itemtype** : \
Un type GLPI, peut être un actif, un objet ITIL ou de configuration, etc. Ce type doit être une classe qui hérite de la classe CommonDTBM GLPI.

**searchOption** : \
Un identifiant de colonne (entier) d'un itemtype (ex : 1 -> id, 2 -> name, ...). Voir l'endpoint List searchOptions.

**JSON Payload** : \
Contenu de la requête HTTP au format JSON (corps HTTP).

**Query string** : \
Paramètres d'URL.

**User token** : \
Utilisé dans le processus de connexion à la place du couple login/mot de passe. Il représente l'utilisateur avec une chaîne de caractères. Vous pouvez trouver le token utilisateur dans les onglets de configuration des utilisateurs.

**Session token** : \
Une chaîne de caractères décrivant une session valide dans GLPI. À l'exception de l'endpoint initSession qui fournit ce token, tous les autres nécessitent cette chaîne pour être utilisés.

**App(lication) token** : \
Une manière optionnelle de filtrer l'accès à l'API. Lors d'un appel API, il essaiera de trouver un client API correspondant à votre IP et au token d'application (si fourni). Vous pouvez définir un client API avec un token d'application dans la configuration générale pour chacune de vos applications externes afin de les identifier (chaque client API a son propre historique).

### Important

* Vous devez toujours fournir un en-tête Content-Type dans vos appels HTTP. Actuellement, l'API supporte :
  * application/json
  * multipart/form-data (pour le téléversement de fichiers, voir l'endpoint Add item(s).
* Les requêtes GET doivent avoir un corps vide. Vous devez passer tous les paramètres dans l'URL. Ne pas le faire déclenchera une réponse HTTP 400.
* Par défaut, les sessions utilisées dans cette API sont en lecture seule. Seules certaines méthodes ont un accès en écriture à la session :

  * [initSession](#init-session)
  * [killSession](#kill-session)
  * [changeActiveEntities](#changer-les-entites-actives)
  * [changeActiveProfile](#changer-le-profil-actif)

  Vous pouvez passer un paramètre supplémentaire "session\_write=true" pour contourner cette valeur par défaut. Ce mode lecture seule permet d'utiliser cette API avec des appels parallèles. En mode écriture, les sessions sont verrouillées et votre client doit attendre la fin d'un appel avant que le suivant ne puisse s'exécuter.
* Vous pouvez filtrer l'accès API en activant les paramètres suivants dans la Configuration Générale de GLPI (onglet API) :
  * Plage IPv4
  * Adresse IPv6
  * Paramètre *App-Token* : s'il n'est pas vide, vous devez passer ce paramètre dans tous vos appels API.
* Les tokens de session et d'application peuvent être fournis dans la chaîne de requête au lieu des paramètres d'en-tête.

***

### Init session

* **URL** : apirest.php/initSession/
* **Description** : Demande un token de session pour utiliser d'autres endpoints API.
* **Méthode** : GET
* **Paramètres** : (En-têtes)
  * *App-Token* : chaîne d'autorisation fournie par la configuration de l'API GLPI. Optionnel.
  * un couple *login* & *password* : 2 paramètres pour se connecter avec authentification utilisateur. Vous devez passer ces 2 paramètres dans l'authentification [http basic](https://en.wikipedia.org/wiki/Basic_access_authentication). Elle consiste en une chaîne Base64 avec le login et le mot de passe séparés par ":" Un en-tête Authorization valide est : \* "Authorization: Basic base64({login}:{password})"

    > **OU**
  * un *user\_token* défini dans les Préférences utilisateur (Voir 'Clé d'accès distant') Vous devez passer ce paramètre dans l'en-tête HTTP 'Authorization'. Un en-tête Authorization valide est : \* "Authorization: user\_token q56hqkniwot8wntb3z1qarka5atf365taaa2uyjrn"
* **Paramètres** : (chaîne de requête)
  * *get\_full\_session* (défaut : false) : Obtient la session complète, utile si vous souhaitez vous connecter et accéder aux données de session en une seule requête.
* **Retours** :
  * 200 (OK) avec la chaîne *session\_token*.
  * 400 (Bad Request) avec un message indiquant une erreur dans le paramètre d'entrée.
  * 401 (UNAUTHORIZED)

Exemples d'utilisation (CURL) :

```bash
$ curl -X GET \
-H 'Content-Type: application/json' \
-H "Authorization: Basic Z2xwaTpnbHBp" \
-H "App-Token: f7g3csp8mgatg5ebc5elnazakw20i9fyev1qopya7" \
'http://path/to/glpi/apirest.php/initSession'

< 200 OK
< {
   "session_token": "83af7e620c83a50a18d3eac2f6ed05a3ca0bea62"
}

$ curl -X GET \
-H 'Content-Type: application/json' \
-H "Authorization: user_token q56hqkniwot8wntb3z1qarka5atf365taaa2uyjrn" \
-H "App-Token: f7g3csp8mgatg5ebc5elnazakw20i9fyev1qopya7" \
'http://path/to/glpi/apirest.php/initSession?get_full_session=true'

< 200 OK
< {
   "session_token": "83af7e620c83a50a18d3eac2f6ed05a3ca0bea62",
   "session": {
      'glpi_plugins': ...,
      'glpicookietest': ...,
      'glpicsrftokens': ...,
      ...
   }
}
```

***

### Kill session

* **URL** : apirest.php/killSession/
* **Description** : Détruit une session identifiée par un token de session.
* **Méthode** : GET
* **Paramètres** : (En-têtes)
  * *Session-Token* : variable de session fournie par l'endpoint [initSession](#init-session). Obligatoire.
  * *App-Token* : chaîne d'autorisation fournie par la configuration de l'API GLPI. Optionnel.
* **Retours** :
  * 200 (OK).
  * 400 (Bad Request) avec un message indiquant une erreur dans le paramètre d'entrée.

Exemple d'utilisation (CURL) :

```bash
$ curl -X GET \
-H 'Content-Type: application/json' \
-H "Session-Token: 83af7e620c83a50a18d3eac2f6ed05a3ca0bea62" \
-H "App-Token: f7g3csp8mgatg5ebc5elnazakw20i9fyev1qopya7" \
'http://path/to/glpi/apirest.php/killSession'

< 200 OK
```

***

### Lost password

Cet endpoint permet de demander la récupération de mot de passe et la réinitialisation de mot de passe. Cet endpoint fonctionne sous les conditions suivantes :

* GLPI a les notifications activées
* l'adresse e-mail de l'utilisateur appartient à un compte utilisateur.

Demande de réinitialisation de mot de passe :

* **URL** : apirest.php/lostPassword/
* **Description** : Envoie une notification à l'utilisateur pour réinitialiser son mot de passe.
* **Méthode** : PUT ou PATCH
* **Paramètres** : (JSON Payload)
  * *email* : adresse e-mail de l'utilisateur à récupérer. Obligatoire.
* **Retours** :
  * 200 (OK).
  * 400 (Bad Request) avec un message indiquant une erreur dans le paramètre d'entrée.

```bash
$ curl -X PUT \
-H 'Content-Type: application/json' \
-d '{"email": "user@domain.com"}' \
'http://path/to/glpi/apirest.php/lostPassword'

< 200 OK
```

Réinitialisation de mot de passe :

* **URL** : apirest.php/lostPassword/
* **Description** : Envoie une notification à l'utilisateur pour réinitialiser son mot de passe.
* **Méthode** : PUT ou PATCH
* **Paramètres** : (JSON Payload)
  * *email* : adresse e-mail de l'utilisateur à récupérer. Obligatoire.
  * *password\_forget\_token* : token de réinitialisation.
  * *password* : le nouveau mot de passe pour l'utilisateur.
* **Retours** :
  * 200 (OK).
  * 400 (Bad Request) avec un message indiquant une erreur dans le paramètre d'entrée.

```bash
$ curl -X PUT \
-H 'Content-Type: application/json' \
-d '{"email": "user@domain.com", \
     "password_forget_token": "b0a4cfe81448299ebed57442f4f21929c80ebee5" \
     "password": "NewPassword" \
    }' \
'http://path/to/glpi/apirest.php/lostPassword'

< 200 OK
```

***

### Get my profiles

* **URL** : apirest.php/getMyProfiles/
* **Description** : Retourne tous les profils associés à l'utilisateur connecté.
* **Méthode** : GET
* **Paramètres** : (En-têtes)
  * *Session-Token* : variable de session fournie par l'endpoint [initSession](#init-session). Obligatoire.
  * *App-Token* : chaîne d'autorisation fournie par la configuration de l'API GLPI. Optionnel.
* **Retours** :
  * 200 (OK) avec un tableau de tous les profils.
  * 400 (Bad Request) avec un message indiquant une erreur dans le paramètre d'entrée.

Exemple d'utilisation (CURL) :

```bash
$ curl -X GET \
-H 'Content-Type: application/json' \
-H "Session-Token: 83af7e620c83a50a18d3eac2f6ed05a3ca0bea62" \
-H "App-Token: f7g3csp8mgatg5ebc5elnazakw20i9fyev1qopya7" \
'http://path/to/glpi/apirest.php/getMyProfiles'

< 200 OK
< {
   'myprofiles': [
      {
         'id': 1
         'name': "Super-admin",
         'entities': [
            ...
         ],
         ...
      },
      ....
   ]
```

***

### Get active profile

* **URL** : apirest.php/getActiveProfile/
* **Description** : Retourne le profil actif actuel.
* **Méthode** : GET
* **Paramètres**: (En-têtes)
  * *Session-Token*: variable de session fournie par le point de terminaison [initSession](#init-session). Obligatoire.
  * *App-Token*: chaîne d'autorisation fournie par la configuration de l'API GLPI. Facultatif.
* **Retours**:
  * 200 (OK) avec un tableau représentant le profil actuel.
  * 400 (Bad Request) avec un message indiquant une erreur dans le paramètre d'entrée.

Exemple d'utilisation (CURL) :

```bash
$ curl -X GET \
-H 'Content-Type: application/json' \
-H "Session-Token: 83af7e620c83a50a18d3eac2f6ed05a3ca0bea62" \
-H "App-Token: f7g3csp8mgatg5ebc5elnazakw20i9fyev1qopya7" \
'http://path/to/glpi/apirest.php/getActiveProfile'

< 200 OK
< {
      'name': "Super-admin",
      'entities': [
         ...
      ]
   }
```

***

### Changer le profil actif

* **URL**: apirest.php/changeActiveProfile/
* **Description**: Change le profil actif pour celui spécifié par profiles\_id. Voir le point de terminaison [getMyProfiles](#get-my-profiles) pour les profils possibles.
* **Méthode**: POST
* **Paramètres**: (En-têtes)
  * *Session-Token*: variable de session fournie par le point de terminaison [initSession](#init-session). Obligatoire.
  * *App-Token*: chaîne d'autorisation fournie par la configuration de l'API GLPI. Facultatif.
* **Paramètres**: (Charge utile JSON)
  * *profiles\_id*: (par défaut 'all') ID du nouveau profil actif. Obligatoire.
* **Retours**:
  * 200 (OK).
  * 400 (Bad Request) avec un message indiquant une erreur dans le paramètre d'entrée.
  * 404 (Not found) avec un message indiquant une erreur si le profil n'existe pas ou n'est pas utilisable.

Exemple d'utilisation (CURL) :

```bash
$ curl -X POST \
-H 'Content-Type: application/json' \
-H "Session-Token: 83af7e620c83a50a18d3eac2f6ed05a3ca0bea62" \
-H "App-Token: f7g3csp8mgatg5ebc5elnazakw20i9fyev1qopya7" \
-d '{"profiles_id": 4}' \
'http://path/to/glpi/apirest.php/changeActiveProfile'

< 200 OK
```

***

### Obtenir mes entités

* **URL**: apirest.php/getMyEntities/
* **Description**: Retourne toutes les entités possibles de l'utilisateur actuellement connecté (et pour le profil actif actuel).
* **Méthode**: GET
* **Paramètres**: (En-têtes)
  * *Session-Token*: variable de session fournie par le point de terminaison [initSession](#init-session). Obligatoire.
  * *App-Token*: chaîne d'autorisation fournie par la configuration de l'API GLPI. Facultatif.
* **Paramètres**: (chaîne de requête)
  * *is\_recursive* (par défaut : false) : affiche également les sous-entités de l'entité active. Facultatif.
* **Retours**:
  * 200 (OK) avec un tableau de toutes les entités (avec id et nom).
  * 400 (Bad Request) avec un message indiquant une erreur dans le paramètre d'entrée.

Exemple d'utilisation (CURL) :

```bash
$ curl -X GET \
-H 'Content-Type: application/json' \
-H "Session-Token: 83af7e620c83a50a18d3eac2f6ed05a3ca0bea62" \
-H "App-Token: f7g3csp8mgatg5ebc5elnazakw20i9fyev1qopya7" \
'http://path/to/glpi/apirest.php/getMyEntities'

< 200 OK
< {
   'myentities': [
     {
       'id':   71
       'name': "my_entity"
     },
   ....
   ]
  }
```

***

### Obtenir les entités actives

* **URL**: apirest.php/getActiveEntities/
* **Description**: Retourne les entités actives de l'utilisateur actuellement connecté.
* **Méthode**: GET
* **Paramètres**: (En-têtes)
  * *Session-Token*: variable de session fournie par le point de terminaison initSession. Obligatoire.
  * *App-Token*: chaîne d'autorisation fournie par la configuration de l'API GLPI. Facultatif.
* **Retours**:
  * 200 (OK) avec un tableau contenant 3 clés :
    * *active\_entity*: entité définie actuellement.
    * *active\_entity\_recursive*: booléen, si nous voyons les fils de cette entité.
    * *active\_entities*: tableau de toutes les entités actives (entité active et ses fils).
  * 400 (Bad Request) avec un message indiquant une erreur dans le paramètre d'entrée.

Exemple d'utilisation (CURL) :

```bash
$ curl -X GET \
-H 'Content-Type: application/json' \
-H "Session-Token: 83af7e620c83a50a18d3eac2f6ed05a3ca0bea62" \
-H "App-Token: f7g3csp8mgatg5ebc5elnazakw20i9fyev1qopya7" \
'http://path/to/glpi/apirest.php/getActiveEntities'

< 200 OK
< {
   'active_entity': {
      'id': 1,
      'active_entity_recursive': true,
      'active_entities': [
        {"id":1},
        {"id":71},...
      ]
   }
}
```

***

### Changer les entités actives

* **URL**: apirest.php/changeActiveEntities/
* **Description**: Change l'entité active pour celle spécifiée par entities\_id. Voir le point de terminaison getMyEntities pour les entités possibles.
* **Méthode**: POST
* **Paramètres**: (En-têtes)
  * *Session-Token*: variable de session fournie par le point de terminaison [initSession](#init-session). Obligatoire.
  * *App-Token*: chaîne d'autorisation fournie par la configuration de l'API GLPI. Facultatif.
* **Paramètres**: (Charge utile JSON)
  * *entities\_id*: (par défaut 'all') ID de la nouvelle entité active ("all" => charger toutes les entités possibles). Facultatif.
  * *is\_recursive*: (par défaut false) affiche également les sous-entités de l'entité active. Facultatif.
* **Retours**:
  * 200 (OK).
  * 400 (Bad Request) avec un message indiquant une erreur dans le paramètre d'entrée.

Exemple d'utilisation (CURL) :

```bash
$ curl -X POST \
-H 'Content-Type: application/json' \
-H "Session-Token: 83af7e620c83a50a18d3eac2f6ed05a3ca0bea62" \
-H "App-Token: f7g3csp8mgatg5ebc5elnazakw20i9fyev1qopya7" \
-d '{"entities_id": 1, "is_recursive": true}' \
'http://path/to/glpi/apirest.php/changeActiveEntities'

< 200 OK
```

***

### Obtenir la session complète

* **URL**: apirest.php/getFullSession/
* **Description**: Retourne la $\_SESSION PHP actuelle.
* **Méthode**: GET
* **Paramètres**: (En-têtes)
  * *Session-Token*: variable de session fournie par le point de terminaison [initSession](#init-session). Obligatoire.
  * *App-Token*: chaîne d'autorisation fournie par la configuration de l'API GLPI. Facultatif.
* **Retours**:
  * 200 (OK) avec un tableau représentant la session PHP.
  * 400 (Bad Request) avec un message indiquant une erreur dans le paramètre d'entrée.

Exemple d'utilisation (CURL) :

```bash
$ curl -X GET \
-H 'Content-Type: application/json' \
-H "Session-Token: 83af7e620c83a50a18d3eac2f6ed05a3ca0bea62" \
-H "App-Token: f7g3csp8mgatg5ebc5elnazakw20i9fyev1qopya7" \
'http://path/to/glpi/apirest.php/getFullSession'

< 200 OK
< {
      'session': {
         'glpi_plugins': ...,
         'glpicookietest': ...,
         'glpicsrftokens': ...,
         ...
      }
   }
```

***

### Obtenir la configuration GLPI

* **URL**: apirest.php/getGlpiConfig/
* **Description**: Retourne la variable globale $CFG\_GLPI actuelle.
* **Méthode**: GET
* **Paramètres**: (En-têtes)
  * *Session-Token*: variable de session fournie par le point de terminaison initSession. Obligatoire.
  * *App-Token*: chaîne d'autorisation fournie par la configuration de l'API GLPI. Facultatif.
* **Retours**:
  * 200 (OK) avec un tableau représentant la variable globale PHP $CFG\_GLPI.
  * 400 (Bad Request) avec un message indiquant une erreur dans le paramètre d'entrée.

Exemple d'utilisation (CURL) :

```bash
$ curl -X GET \
-H 'Content-Type: application/json' \
-H "Session-Token: 83af7e620c83a50a18d3eac2f6ed05a3ca0bea62" \
-H "App-Token: f7g3csp8mgatg5ebc5elnazakw20i9fyev1qopya7" \
'http://path/to/glpi/apirest.php/getGlpiConfig'

< 200 OK
< {
      'cfg_glpi': {
         'languages': ...,
         'glpitables': ...,
         'unicity_types':...,
         ...
      }
   }
```

***

### Obtenir un élément

* **URL**: apirest.php/:itemtype/:id
* **Description**: Retourne les champs d'instance de l'itemtype identifié par id.
* **Méthode**: GET
* **Paramètres**: (En-têtes)
  * *Session-Token*: variable de session fournie par le point de terminaison initSession. Obligatoire.
  * *App-Token*: chaîne d'autorisation fournie par la configuration de l'API GLPI. Facultatif.
* **Paramètres**: (chaîne de requête)
  * *id*: identifiant unique de l'itemtype. Obligatoire.
  * *expand\_dropdowns* (par défaut : false) : affiche le nom de la liste déroulante au lieu de l'id. Facultatif.
  * *get\_hateoas* (par défaut : true) : affiche les relations de l'élément dans un attribut links. Facultatif.
  * *get\_sha1* (par défaut : false) : obtient une signature sha1 au lieu de la réponse complète. Facultatif.
  * *with\_devices*: Uniquement pour \[Computer, NetworkEquipment, Peripheral, Phone, Printer], récupère les composants associés. Facultatif.
* *with\_disks*: Uniquement pour Ordinateur, récupérer les systèmes de fichiers associés. Optionnel.
  * *with\_softwares*: Uniquement pour Ordinateur, récupérer les installations logicielles associées. Optionnel.
  * *with\_connections*: Uniquement pour Ordinateur, récupérer les connexions directes associées (comme les périphériques et imprimantes). Optionnel.
  * *with\_networkports*: Récupérer toutes les connexions réseau et informations avancées. Optionnel.
  * *with\_infocoms*: Récupérer les informations financières et administratives. Optionnel.
  * *with\_contracts*: Récupérer les contrats associés. Optionnel.
  * *with\_documents*: Récupérer les documents externes associés. Optionnel.
  * *with\_tickets*: Récupérer les tickets ITIL associés. Optionnel.
  * *with\_problems*: Récupérer les problèmes ITIL associés. Optionnel.
  * *with\_changes*: Récupérer les changements ITIL associés. Optionnel.
  * *with\_notes*: Récupérer les Notes. Optionnel.
  * *with\_logs*: Récupérer l'historique. Optionnel.
  * *add\_keys\_names*: Récupérer les noms conviviaux. Tableau contenant des fkey(s) et/ou "id". Optionnel.
* **Retourne**:
  * 200 (OK) avec les données de l'élément (l'en-tête Last-Modified doit contenir la date de dernière modification de l'élément).
  * 401 (NON AUTORISÉ).
  * 404 (NON TROUVÉ).

Exemple d'utilisation (CURL) :

```bash
$ curl -X GET \
-H 'Content-Type: application/json' \
-H "Session-Token: 83af7e620c83a50a18d3eac2f6ed05a3ca0bea62" \
-H "App-Token: f7g3csp8mgatg5ebc5elnazakw20i9fyev1qopya7" \
'http://path/to/glpi/apirest.php/Computer/71?expand_dropdowns=true'

< 200 OK
< {
    "id": 71,
    "entities_id": "Root Entity",
    "name": "adelaunay-ThinkPad-Edge-E320",
    "serial": "12345",
    "otherserial": "test2",
    "contact": "adelaunay",
    "contact_num": null,
    "users_id_tech": " ",
    "groups_id_tech": " ",
    "comment": "test222222qsdqsd",
    "date_mod": "2015-09-25 09:33:41",
    "autoupdatesystems_id": " ",
    "locations_id": "00:0e:08:3b:7d:04",
    "networks_id": " ",
    "computermodels_id": "1298A8G",
    "computertypes_id": "Notebook",
    "is_template": 0,
    "template_name": null,
    "manufacturers_id": "LENOVO",
    "is_deleted": 0,
    "is_dynamic": 1,
    "users_id": "adelaunay",
    "groups_id": " ",
    "states_id": "Production",
    "ticket_tco": "0.0000",
    "uuid": "",
    "date_creation": null,
    "links": [{
       "rel": "Entity",
       "href": "http://path/to/glpi/api/Entity/0"
    }, {
       "rel": "Location",
       "href": "http://path/to/glpi/api/Location/3"
    }, {
       "rel": "Domain",
       "href": "http://path/to/glpi/api/Domain/18"
    }, {
       "rel": "ComputerModel",
       "href": "http://path/to/glpi/api/ComputerModel/11"
    }, {
       "rel": "ComputerType",
       "href": "http://path/to/glpi/api/ComputerType/3"
    }, {
       "rel": "Manufacturer",
       "href": "http://path/to/glpi/api/Manufacturer/260"
    }, {
       "rel": "User",
       "href": "http://path/to/glpi/api/User/27"
    }, {
       "rel": "State",
       "href": "http://path/to/glpi/api/State/1"
    }]
}
```

Note : Pour télécharger un document, voir Télécharger un fichier document.

***

### Obtenir tous les éléments

* **URL**: apirest.php/:itemtype/
* **Description**: Retourne une collection de lignes de l'itemtype.
* **Méthode**: GET
* **Paramètres**: (En-têtes)
  * *Session-Token*: variable de session fournie par le point d'accès initSession. Obligatoire.
  * *App-Token*: chaîne d'autorisation fournie par la configuration de l'API GLPI. Optionnel.
* **Paramètres**: (chaîne de requête)
  * *expand\_dropdowns* (par défaut : false) : affiche le nom du menu déroulant au lieu de l'id. Optionnel.
  * *get\_hateoas* (par défaut : true) : affiche la relation de l'élément dans un attribut links. Optionnel.
  * *only\_id* (par défaut : false) : ne conserve que les clés d'id dans les données retournées. Optionnel.
  * *range* (par défaut : 0-49) : une chaîne avec une paire de nombres pour le début et la fin de la pagination séparés par un '-'. Ex : 150-199. Optionnel.
  * *sort* (par défaut 1) : nom du champ sur lequel trier. Optionnel.
  * *order* (par défaut ASC) : ASC - Tri ascendant / DESC Tri descendant. Optionnel.
  * *searchText* (par défaut NULL) : tableau de filtres à passer sur la requête (avec la clé = champ et la valeur le texte à rechercher)
  * *is\_deleted* (par défaut : false) : retourne les éléments supprimés. Optionnel.
  * *add\_keys\_names*: Récupérer les noms conviviaux. Tableau contenant des fkey(s) et/ou "id". Optionnel.
  * *with\_networkports*: Récupérer toutes les connexions réseau et informations avancées. Optionnel.
* **Retourne**:

  * 200 (OK) avec les données des éléments.
  * 206 (CONTENU PARTIEL) avec les données des éléments définies par la plage.
  * 401 (NON AUTORISÉ).

  et les en-têtes suivants : \* *Content-Range* offset – limit / count \* *Accept-Range* itemtype max

Exemple d'utilisation (CURL) :

```bash
$ curl -X GET \
-H 'Content-Type: application/json' \
-H "Session-Token: 83af7e620c83a50a18d3eac2f6ed05a3ca0bea62" \
-H "App-Token: f7g3csp8mgatg5ebc5elnazakw20i9fyev1qopya7" \
'http://path/to/glpi/apirest.php/Computer/?expand_dropdowns=true'

< 206 OK
< Content-Range: 0-49/200
< Accept-Range: 990
< [
   {
      "id": 34,
      "entities_id": "Root Entity",
      "name": "glpi",
      "serial": "VMware-42 01 f4 65 27 59 a9 fb-11 bc cd b8 64 68 1f 4b",
      "otherserial": null,
      "contact": "teclib",
      "contact_num": null,
      "users_id_tech": "&nbsp;",
      "groups_id_tech": "&nbsp;",
      "comment": "x86_64/00-09-15 08:03:28",
      "date_mod": "2011-12-16 17:52:55",
      "autoupdatesystems_id": "FusionInventory",
      "locations_id": "&nbsp;",
      "networks_id": "&nbsp;",
      "computermodels_id": "VMware Virtual Platform",
      "computertypes_id": "Other",
      "is_template": 0,
      "template_name": null,
      "manufacturers_id": "VMware, Inc.",
      "is_deleted": 0,
      "is_dynamic": 1,
      "users_id": "&nbsp;",
      "groups_id": "&nbsp;",
      "states_id": "Production",
      "ticket_tco": "0.0000",
      "uuid": "4201F465-2759-A9FB-11BC-CDB864681F4B",
      "links": [{
         "rel": "Entity",
         "href": "http://path/to/glpi/api/Entity/0"
      }, {
         "rel": "AutoUpdateSystem",
         "href": "http://path/to/glpi/api/AutoUpdateSystem/1"
      }, {
         "rel": "Domain",
         "href": "http://path/to/glpi/api/Domain/12"
      }, {
         "rel": "ComputerModel",
         "href": "http://path/to/glpi/api/ComputerModel/1"
      }, {
         "rel": "ComputerType",
         "href": "http://path/to/glpi/api/ComputerType/2"
      }, {
         "rel": "Manufacturer",
         "href": "http://path/to/glpi/api/Manufacturer/1"
      }, {
         "rel": "State",
         "href": "http://path/to/glpi/api/State/1"
      }]
   },
   {
      "id": 35,
      "entities_id": "Root Entity",
      "name": "mavm1",
      "serial": "VMware-42 20 d3 04 ac 49 ed c8-ea 15 50 49 e1 40 0f 6c",
      "otherserial": null,
      "contact": "teclib",
      "contact_num": null,
      "users_id_tech": "&nbsp;",
      "groups_id_tech": "&nbsp;",
      "comment": "x86_64/01-01-04 19:50:40",
      "date_mod": "2012-05-24 06:43:35",
      ...
   }
]
```

***

### Obtenir des sous-éléments

* **URL**: apirest.php/:itemtype/:id/:sub\_itemtype
* **Description**: Retourne une collection de lignes du sous-itemtype pour l'élément identifié.
* **Méthode**: GET
* **Paramètres**: (En-têtes)
  * *Session-Token*: variable de session fournie par le point d'accès initSession. Obligatoire.
  * *App-Token*: chaîne d'autorisation fournie par la configuration de l'API GLPI. Optionnel.
* **Paramètres**: (chaîne de requête)
  * id: identifiant unique de l'itemtype parent. Obligatoire.
  * *expand\_dropdowns* (par défaut : false) : affiche le nom du menu déroulant au lieu de l'id. Optionnel.
  * *get\_hateoas* (par défaut : true) : affiche les relations de l'élément dans un attribut links. Optionnel.
  * *only\_id* (par défaut : false) : ne conserve que les clés d'id dans les données retournées. Optionnel.
  * *range* (par défaut : 0-49) : une chaîne avec une paire de nombres pour le début et la fin de la pagination séparés par un '-' caractère. Ex : 150-199. Optionnel.
  * *sort* (par défaut 1) : id de la "searchoption" sur laquelle trier. Optionnel.
* *order* (défaut ASC) : ASC - Tri ascendant / DESC Tri descendant. Optionnel.
  * *add\_keys\_names* : Récupérer les noms conviviaux. Tableau contenant des fkey et/ou "id". Optionnel.
* **Retourne** :

  * 200 (OK) avec les données des éléments.
  * 401 (NON AUTORISÉ).

  et ces en-têtes : \* *Content-Range* offset – limit / count \* *Accept-Range* itemtype max

Exemple d'utilisation (CURL) :

```bash
$ curl -X GET \
-H 'Content-Type: application/json' \
-H "Session-Token: 83af7e620c83a50a18d3eac2f6ed05a3ca0bea62" \
-H "App-Token: f7g3csp8mgatg5ebc5elnazakw20i9fyev1qopya7" \
'http://path/to/glpi/apirest.php/User/2/Log'

< 200 OK
< Content-Range: 0-49/200
< Accept-Range: 990
< [
   {
      "id": 22117,
      "itemtype": "User",
      "items_id": 2,
      "itemtype_link": "Profile",
      "linked_action": 17,
      "user_name": "glpi (27)",
      "date_mod": "2015-10-13 10:00:59",
      "id_search_option": 0,
      "old_value": "",
      "new_value": "super-admin (4)"
   }, {
      "id": 22118,
      "itemtype": "User",
      "items_id": 2,
      "itemtype_link": "",
      "linked_action": 0,
      "user_name": "glpi (2)",
      "date_mod": "2015-10-13 10:01:22",
      "id_search_option": 80,
      "old_value": "Root entity (0)",
      "new_value": "Root entity > my entity (1)"
   }, {
      ...
   }
]
```

***

### Obtenir plusieurs éléments

* **URL** : apirest.php/getMultipleItems
* **Description** : Appelle virtuellement Obtenir un élément pour chaque ligne en entrée. Ainsi, vous pouvez avoir un ticket, un utilisateur dans la même requête.
* **Méthode** : GET
* **Paramètres** : (En-têtes)
  * *Session-Token* : variable de session fournie par le point d'accès initSession. Obligatoire.
  * *App-Token* : chaîne d'autorisation fournie par la configuration de l'API GLPI. Optionnel.
* **Paramètres** : (chaîne de requête)
  * *items* : éléments à récupérer. Obligatoire. Chaque ligne de ce tableau doit contenir deux clés : \* itemtype \* items\_id
  * *expand\_dropdowns* (défaut : false) : afficher le nom du menu déroulant au lieu de l'id. Optionnel.
  * *get\_hateoas* (défaut : true) : afficher les relations de l'élément dans un attribut links. Optionnel.
  * *get\_sha1* (défaut : false) : obtenir une signature sha1 au lieu de la réponse complète. Optionnel.
  * *with\_devices* : Uniquement pour \[Computer, NetworkEquipment, Peripheral, Phone, Printer], récupérer les composants associés. Optionnel.
  * *with\_disks* : Uniquement pour Computer, récupérer les systèmes de fichiers associés. Optionnel.
  * *with\_softwares* : Uniquement pour Computer, récupérer les installations logicielles associées. Optionnel.
  * *with\_connections* : Uniquement pour Computer, récupérer les connexions directes associées (comme les périphériques et les imprimantes). Optionnel.
  * *with\_networkports* : Récupérer toutes les connexions réseau et informations avancées. Optionnel.
  * *with\_infocoms* : Récupérer les informations financières et administratives. Optionnel.
  * *with\_contracts* : Récupérer les contrats associés. Optionnel.
  * *with\_documents* : Récupérer les documents externes associés. Optionnel.
  * *with\_tickets* : Récupérer les tickets ITIL associés. Optionnel.
  * *with\_problems* : Récupérer les problèmes ITIL associés. Optionnel.
  * *with\_changes* : Récupérer les changements ITIL associés. Optionnel.
  * *with\_notes* : Récupérer les notes. Optionnel.
  * *with\_logs* : Récupérer l'historique. Optionnel.
  * *add\_keys\_names* : Récupérer les noms conviviaux. Tableau contenant des fkey et/ou "id". Optionnel.
* **Retourne** :
  * 200 (OK) avec les données de l'élément (l'en-tête Last-Modified doit contenir la date de dernière modification de l'élément).
  * 401 (NON AUTORISÉ).
  * 404 (NON TROUVÉ).

Exemple d'utilisation (CURL) :

```bash
$ curl -X GET \
-H 'Content-Type: application/json' \
-H "Session-Token: 83af7e620c83a50a18d3eac2f6ed05a3ca0bea62" \
-H "App-Token: f7g3csp8mgatg5ebc5elnazakw20i9fyev1qopya7" \
-d '{"items": [{"itemtype": "User", "items_id": 2}, {"itemtype": "Entity", "items_id": 0}]}' \
'http://path/to/glpi/apirest.php/getMultipleItems?items\[0\]\[itemtype\]\=User&items\[0\]\[items_id\]\=2&items\[1\]\[itemtype\]\=Entity&items\[1\]\[items_id\]\=0'

< 200 OK
< Content-Range: 0-49/200
< Accept-Range: 990
< [{
   "id": 2,
   "name": "glpi",
   ...
}, {
   "id": 0,
   "name": "Root Entity",
   ...
}]
```

***

### Lister les options de recherche

* **URL** : apirest.php/listSearchOptions/:itemtype
* **Description** : Lister les options de recherche de l'itemtype fourni. À utiliser avec Rechercher des éléments.
* **Méthode** : GET
* **Paramètres** : (En-têtes)
  * *Session-Token* : variable de session fournie par le point d'accès initSession. Obligatoire.
  * *App-Token* : chaîne d'autorisation fournie par la configuration de l'API GLPI. Optionnel.
* **Paramètres** : (chaîne de requête)
  * *raw* : retourner l'option de recherche non nettoyée (telle que fournie par le cœur).
* **Retourne** :
  * 200 (OK) avec toutes les options de recherche de l'itemtype spécifié (format : searchoption\_id: {option\_content}).
  * 401 (NON AUTORISÉ).

Exemple d'utilisation (CURL) :

```bash
$ curl -X GET \
-H 'Content-Type: application/json' \
-H "Session-Token: 83af7e620c83a50a18d3eac2f6ed05a3ca0bea62" \
-H "App-Token: f7g3csp8mgatg5ebc5elnazakw20i9fyev1qopya7" \
'http://path/to/glpi/apirest.php/listSearchOptions/Computer'
< 200 OK
< {
    "common": "Caractéristiques",

    1: {
      'name': 'Nom'
      'table': 'glpi_computers'
      'field': 'name'
      'linkfield': 'name'
      'datatype': 'itemlink'
      'uid': 'Computer.name'
   },
   2: {
      'name': 'ID'
      'table': 'glpi_computers'
      'field': 'id'
      'linkfield': 'id'
      'datatype': 'number'
      'uid': 'Computer.id'
   },
   3: {
      'name': 'Emplacement'
      'table': 'glpi_locations'
      'field': 'completename'
      'linkfield': 'locations_id'
      'datatype': 'dropdown'
      'uid': 'Computer.Location.completename'
   },
   ...
}
```

***

### Rechercher des éléments

* **URL** : apirest.php/search/:itemtype/
* **Description** : Expose le moteur de recherche GLPI et combine les critères pour récupérer une liste d'éléments de l'itemtype spécifié.

  > Note : vous pouvez utiliser l'itemtype 'AllAssets' pour récupérer une combinaison de tous les types d'actifs.
* **Méthode** : GET
* **Paramètres** : (En-têtes)
  * *Session-Token* : variable de session fournie par le point d'accès initSession. Obligatoire.
  * *App-Token* : chaîne d'autorisation fournie par la configuration de l'API GLPI. Optionnel.
* **Paramètres** : (chaîne de requête)
  * *criteria* : tableau d'objets de critère pour filtrer la recherche. Optionnel. Vous pouvez éventuellement préciser `meta=true` pour passer une option de recherche d'un autre itemtype (méta-critère). Chaque objet de critère doit fournir au minimum :

    * *link* : (optionnel pour le 1er élément) opérateur logique dans \[AND, OR, AND NOT, OR NOT].

    Et vous pouvez passer une utilisation directe d'option de recherche :

    * *field* : id de l'option de recherche.
    * *meta* : booléen, ce critère est-il un méta-critère ?
    * *itemtype* : pour un critère meta=true, préciser l'itemtype à utiliser.
    * *searchtype* : type de recherche dans \[contains¹, equals², notequals², lessthan, morethan, under, notunder].
    * *value* : la valeur à rechercher.

    Ou une liste de sous-nœuds avec la clé :

    * *criteria* : critères imbriqués dans ce critère.

    Ex :

    ```json
    ...
    "criteria":
       [
          {
             "field":      1,
             "searchtype": 'contains',
             "value":      ''
          }, {
             "link":       'AND',
             "field":      31,
             "searchtype": 'equals',
             "value":      1
          }, {
             "link":       'AND',
             "meta":       true,
             "itemtype":   'User',
             "field":      1,
             "searchtype": 'equals',
             "value":      1
          }, {
             "link":       'AND',
             "criteria" : [
                {
                   "field":      34,
                   "searchtype": 'equals',
                   "value":      1
                }, {
                   "link":       'OR',
                   "field":      35,
                   "searchtype": 'equals',
    ```

````

"valeur":      1
                  }
               ]
            }
         ]
      ...
      ```

  * *metacriteria* (optionnel) : tableau d'objets meta-critères pour filtrer la recherche. Optionnel.
                                 Une méta-recherche est un lien avec un autre itemtype (ex: Ordinateur avec logiciel).
      **Déprécié : Les critères supportent maintenant le flag meta, vous devriez l'utiliser à la place de l'option metacriteria directe.**

      Chaque objet meta-critère doit fournir :
        * *link* : opérateur logique dans [AND, OR, AND NOT, OR NOT]. Obligatoire.
        * *itemtype* : second itemtype à lier.
        * *field* : id de l'option de recherche.
        * *searchtype* : type de recherche dans [contains¹, equals², notequals², lessthan, morethan, under, notunder].
        * *value* : la valeur à rechercher.

      Ex:

      ```json
      ...
      "metacriteria":
         [
            {
               "link":       'AND',
               "itemtype":   'Monitor',
               "field":      2,
               "searchtype": 'contains',
               "value":      ''
            }, {
               "link":       'AND',
               "itemtype":   'Monitor',
               "field":      3,
               "searchtype": 'contains',
               "value":      ''
             }
         ]
      ...
      ```

  * *sort* (défaut 1) : id de l'option de recherche pour trier. Optionnel.
  * *order* (défaut ASC) : ASC - Tri ascendant / DESC Tri descendant. Optionnel.
  * *range* (défaut 0-49) : une chaîne avec une paire de nombres pour le début et la fin de la pagination séparés par un '-'. Ex: 150-199.
                             Optionnel.
  * *forcedisplay* : tableau de colonnes à afficher (défaut vide = utilise les préférences d'affichage et les critères recherchés).
                     Certaines colonnes seront toujours présentes (1: id, 2: name, 80: Entity).
                     Optionnel.
  * *rawdata* (défaut false) : un booléen pour afficher les données brutes du moteur de recherche de GLPI (comme la requête SQL, les options de recherche complètes, etc.)
  * *withindexes* (défaut false) : un booléen pour récupérer les lignes indexées par id d'item.
   Par défaut, cette option est définie sur false, car l'ordre des objets JSON (qui sont identifiés par index) ne peut pas être garanti (d'après <http://json.org/> : Un objet est un ensemble non ordonné de paires nom/valeur).
   Nous fournissons donc des tableaux pour garantir des lignes triées.
  * *uid_cols* (défaut false) : un booléen pour identifier les colonnes par l' 'uniqid' des options de recherche au lieu d'une valeur numérique (voir [Liste des searchOptions](#list-searchoptions) et le champ 'uid')
  * *giveItems* (défaut false) : un booléen pour récupérer les données avec le HTML parsé du cœur, de nouvelles données sont fournies dans la clé data_html.

  * ¹ - *contains* utilisera une recherche avec caractères génériques par défaut. Vous pouvez restreindre au début en utilisant le caractère *^*, et/ou à la fin en utilisant le caractère *$*.
  * ² - *equals* et *notequals* sont conçus pour être utilisés avec des listes déroulantes. Ne vous attendez pas à ce que ces opérateurs recherchent une valeur strictement égale (voir ¹ ci-dessus).

* **Retourne**:
  * 200 (OK) avec toutes les données de lignes dans ce format :

     ```json
        {
            "totalcount": ":nombrederesultats_sans_pagination",
            "range": ":debut-:fin",
            "data": [
                {
                    ":id_des_searchoptions": "valeur",
                    ...
                },
                {
                 ...
                }
            ],
            "rawdata": {
              ...
            }
        }
     ```

  * 206 (PARTIAL CONTENT) avec les données de lignes (la pagination ne permet pas d'afficher toutes les lignes).
  * 401 (UNAUTHORIZED).

      et ces en-têtes :
      * *Content-Range* offset – limit / count
      * *Accept-Range* itemtype max

Exemple d'utilisation (CURL) :

```bash
curl -g -X GET \
-H 'Content-Type: application/json' \
-H "Session-Token: 83af7e620c83a50a18d3eac2f6ed05a3ca0bea62" \
-H "App-Token: f7g3csp8mgatg5ebc5elnazakw20i9fyev1qopya7" \
'http://path/to/glpi/apirest.php/search/Monitor?\
criteria\[0\]\[link\]\=AND\
\&criteria\[0\]\[itemtype\]\=Monitor\
\&criteria\[0\]\[field\]\=23\
\&criteria\[0\]\[searchtype\]\=contains\
\&criteria\[0\]\[value\]\=GSM\
\&criteria\[1\]\[link\]\=AND\
\&criteria\[1\]\[itemtype\]\=Monitor\
\&criteria\[1\]\[field\]\=1\
\&criteria\[1\]\[searchtype\]\=contains\
\&criteria\[1\]\[value\]\=W2\
\&range\=0-2\&&forcedisplay\[0\]\=1'

< 200 OK
< Content-Range: 0-2/2
< Accept-Range: 990
< {"totalcount":2,"count":2,"data":{"11":{"1":"W2242","80":"Root Entity","23":"GSM"},"7":{"1":"W2252","80":"Root Entity","23":"GSM"}}}%
````

***

### Ajouter un ou plusieurs éléments

* **URL**: apirest.php/:itemtype/
* **Description**: Ajoute un objet (ou plusieurs objets) dans GLPI.
* **Méthode**: POST
* **Paramètres**: (En-têtes)
  * *Session-Token*: variable de session fournie par le point d'accès initSession. Obligatoire.
  * *App-Token*: chaîne d'autorisation fournie par la configuration de l'API GLPI. Optionnel.
* **Paramètres**: (Corps JSON)

  * *input*: un objet avec les champs de l'itemtype à insérer. Vous pouvez ajouter plusieurs éléments en une seule action en passant un tableau d'objets. Obligatoire.

  **Important:** En cas de type de contenu 'multipart/data' (téléchargement de fichier), vous devez insérer vos paramètres dans un paramètre 'uploadManifest'. Ces données sérialisées doivent être une chaîne JSON.
* **Retourne**:
  * 201 (OK) avec l'id des éléments ajoutés.
  * 207 (Multi-Status) avec l'id des éléments ajoutés et les erreurs.
  * 400 (Bad Request) avec un message indiquant une erreur dans le paramètre d'entrée.
  * 401 (UNAUTHORIZED).
  * Et un en-tête supplémentaire peut être fourni en cas de succès de création :
    * Location lors de l'ajout d'un seul élément.
    * Link lors de l'ajout en masse.

Exemples d'utilisation (CURL) :

```bash
$ curl -X POST \
-H 'Content-Type: application/json' \
-H "Session-Token: 83af7e620c83a50a18d3eac2f6ed05a3ca0bea62" \
-H "App-Token: f7g3csp8mgatg5ebc5elnazakw20i9fyev1qopya7" \
-d '{"input": {"name": "Mon ordinateur unique", "serial": "12345"}}' \
'http://path/to/glpi/apirest.php/Computer/'

< 201 OK
< Location: http://path/to/glpi/api/Computer/15
< {"id": 15}


$ curl -X POST \
-H 'Content-Type: application/json' \
-H "Session-Token: 83af7e620c83a50a18d3eac2f6ed05a3ca0bea62" \
-H "App-Token: f7g3csp8mgatg5ebc5elnazakw20i9fyev1qopya7" \
-d '{"input": [{"name": "Mon premier ordinateur", "serial": "12345"}, {"name": "Mon 2ème ordinateur", "serial": "67890"}, {"name": "Mon 3ème ordinateur", "serial": "qsd12sd"}]}' \
'http://path/to/glpi/apirest.php/Computer/'

< 207 OK
< Link: http://path/to/glpi/api/Computer/8,http://path/to/glpi/api/Computer/9
< [ {"id":8, "message": ""}, {"id":false, "message": "Vous n'avez pas la permission d'effectuer cette action."}, {"id":9, "message": ""} ]

```

Note : Pour télécharger un document, voir Télécharger un fichier document.

***

### Mettre à jour un ou plusieurs éléments

* **URL**: apirest.php/:itemtype/:id
* **Description**: Met à jour un objet (ou plusieurs objets) existant dans GLPI.
* **Méthode**: PUT ou PATCH
* **Paramètres**: (En-têtes)
  * *Session-Token*: variable de session fournie par le point d'accès initSession. Obligatoire.
  * *App-Token*: chaîne d'autorisation fournie par la configuration de l'API GLPI. Optionnel.
* **Paramètres**: (Corps JSON)
  * *id*: l'identifiant unique de l'itemtype passé dans l'URL. Vous **pouvez omettre** ce paramètre en le passant dans la charge utile d'entrée.
  * *input*: Tableau d'objets avec les champs de l'itemtype à mettre à jour. Obligatoire. Vous **pouvez fournir** dans chaque objet une clé nommée 'id' pour identifier l'élément (ou les éléments) à mettre à jour.
* **Retourne**:
  * 200 (OK) avec le statut de mise à jour pour chaque élément.
  * 207 (Multi-Status) avec l'id des éléments ajoutés et les erreurs.
  * 400 (Bad Request) avec un message indiquant une erreur dans le paramètre d'entrée.
  * 401 (UNAUTHORIZED).

Exemple d'utilisation (CURL) :

```bash
$ curl -X PUT \
-H 'Content-Type: application/json' \
-H "Session-Token: 83af7e620c83a50a18d3eac2f6ed05a3ca0bea62" \
-H "App-Token: f7g3csp8mgatg5ebc5elnazakw20i9fyev1qopya7" \
-d '{"input": {"otherserial": "xcvbn"}}' \
'http://path/to/glpi/apirest.php/Computer/10'

< 200 OK
[{"10":true, "message": ""}]

$ curl -X PUT
-H 'Content-Type: application/json'
-H "Session-Token: 83af7e620c83a50a18d3eac2f6ed05a3ca0bea62"
-H "App-Token: f7g3csp8mgatg5ebc5elnazakw20i9fyev1qopya7"
-d '{"input": {"id": 11, "otherserial": "abcde"}}'
'http://path/to/glpi/apirest.php/Computer/'

< 200 OK 
[{"11":true, "message": ""}]

$ curl -X PUT
-H 'Content-Type: application/json'
-H "Session-Token: 83af7e620c83a50a18d3eac2f6ed05a3ca0bea62"
-H "App-Token: f7g3csp8mgatg5ebc5elnazakw20i9fyev1qopya7"
-d '{"input": [{"id": 16, "otherserial": "abcde"}, {"id": 17, "otherserial": "fghij"}]}'
'http://path/to/glpi/apirest.php/Computer/'

< 207 OK 
[{"8":true, "message": ""},{"2":false, "message": "Item not found"}]
```

***

### Supprimer un ou plusieurs éléments

* **URL**: apirest.php/:itemtype/:id
* **Description**: Supprime un objet existant dans GLPI.
* **Méthode**: DELETE
* **Paramètres**: (En-têtes)
  * *Session-Token*: variable de session fournie par le point d'accès initSession. Obligatoire.
  * *App-Token*: chaîne d'autorisation fournie par la configuration de l'API GLPI. Facultatif.
* **Paramètres**: (chaîne de requête)

  * *id*: identifiant unique de l'itemtype passé dans l'URL. Vous **pouvez ignorer** ce paramètre en le passant dans la charge utile d'entrée. OU
  * *input* Tableau d'identifiants à supprimer. Ce paramètre est passé par la charge utile.

  Le paramètre id a la priorité sur la charge utile d'entrée.

  * *force\_purge* (par défaut false): booléen, si l'itemtype a une corbeille, vous pouvez forcer la purge (suppression définitive). Facultatif.
  * *history* (par défaut true): booléen, mis à false pour désactiver l'enregistrement de la suppression dans l'historique global. Facultatif.
* **Retours**:
  * 200 (OK) *en cas de suppression multiple*.
  * 204 (No Content) *en cas de suppression unique*.
  * 207 (Multi-Status) avec l'identifiant des éléments supprimés et les erreurs.
  * 400 (Bad Request) avec un message indiquant une erreur dans le paramètre d'entrée.
  * 401 (UNAUTHORIZED).

Exemple d'utilisation (CURL) :

```bash
$ curl -X DELETE \
-H 'Content-Type: application/json' \
-H "Session-Token: 83af7e620c83a50a18d3eac2f6ed05a3ca0bea62" \
-H "App-Token: f7g3csp8mgatg5ebc5elnazakw20i9fyev1qopya7" \
'http://path/to/glpi/apirest.php/Computer/16?force_purge=true'

< 200 OK
[{"16":true, "message": ""}]

$ curl -X DELETE \
-H 'Content-Type: application/json' \
-H "Session-Token: 83af7e620c83a50a18d3eac2f6ed05a3ca0bea62" \
-H "App-Token: f7g3csp8mgatg5ebc5elnazakw20i9fyev1qopya7" \
-d '{"input": {"id": 11}, "force_purge": true}' \
'http://path/to/glpi/apirest.php/Computer/'

< 200 OK
[{"11":true, "message": ""}]


$ curl -X DELETE \
-H 'Content-Type: application/json' \
-H "Session-Token: 83af7e620c83a50a18d3eac2f6ed05a3ca0bea62" \
-H "App-Token: f7g3csp8mgatg5ebc5elnazakw20i9fyev1qopya7" \
-d '{"input": [{"id": 16}, {"id": 17}]}' \
'http://path/to/glpi/apirest.php/Computer/'

< 207 OK
[{"16":true, "message": ""},{"17":false, "message": "Item not found"}]
```

### Obtenir les actions massives disponibles pour un itemtype

* **URL**: apirest.php/getMassiveActions/:itemtype/
* **Description**: Affiche les actions massives disponibles pour un itemtype donné.
* **Méthode**: GET
* **Paramètres**: (En-têtes)
  * *Session-Token*: variable de session fournie par le point d'accès initSession. Obligatoire.
  * *App-Token*: chaîne d'autorisation fournie par la configuration de l'API GLPI. Facultatif.
* **Paramètres**: (chaîne de requête)
  * *is\_deleted* (par défaut false): Affiche les actions spécifiques pour les éléments dans la corbeille.
* **Retours**:
  * 200 (OK).
  * 400 (Bad Request) avec un message indiquant une erreur dans le paramètre d'entrée.
  * 401 (UNAUTHORIZED).

Exemple d'utilisation (CURL) :

```bash
$ curl -X GET \
-H 'Content-Type: application/json' \
-H "Session-Token: 83af7e620c83a50a18d3eac2f6ed05a3ca0bea62" \
-H "App-Token: f7g3csp8mgatg5ebc5elnazakw20i9fyev1qopya7" \
'http://path/to/glpi/apirest.php/getMassiveActions/Computer'

< 200 OK
[
  {
    "key": "MassiveAction:update",
    "label": "Update"
  },
  {
    "key": "MassiveAction:clone",
    "label": "Clone"
  },
  {
    "key": "Infocom:activate",
    "label": "Enable the financial and administrative information"
  },
  {
    "key": "MassiveAction:delete",
    "label": "Put in trashbin"
  },
  {
    "key": "Appliance:add_item",
    "label": "Associate to an appliance"
  },
  {
    "key": "Item_OperatingSystem:update",
    "label": "Operating systems"
  },
  {
    "key": "Glpi\\Asset\\Asset_PeripheralAsset:add",
    "label": "Connect"
  },
  {
    "key": "Item_SoftwareVersion:add",
    "label": "Install"
  },
  {
    "key": "KnowbaseItem_Item:add",
    "label": "Link knowledgebase article"
  },
  {
    "key": "Document_Item:add",
    "label": "Add a document"
  },
  {
    "key": "Document_Item:remove",
    "label": "Remove a document"
  },
  {
    "key": "Contract_Item:add",
    "label": "Add a contract"
  },
  {
    "key": "Contract_Item:remove",
    "label": "Remove a contract"
  },
  {
    "key": "MassiveAction:amend_comment",
    "label": "Amend comment"
  },
  {
    "key": "MassiveAction:add_note",
    "label": "Add note"
  },
  {
    "key": "Lock:unlock",
    "label": "Unlock components"
  }
]

$ curl -X GET \
-H 'Content-Type: application/json' \
-H "Session-Token: 83af7e620c83a50a18d3eac2f6ed05a3ca0bea62" \
-H "App-Token: f7g3csp8mgatg5ebc5elnazakw20i9fyev1qopya7" \
'http://path/to/glpi/apirest.php/getMassiveActions/Computer?is_deleted=1'

< 200 OK
[
  {
    "key": "MassiveAction:purge_item_but_devices",
    "label": "Delete permanently but keep devices"
  },
  {
    "key": "MassiveAction:purge",
    "label": "Delete permanently and remove devices"
  },
  {
    "key": "MassiveAction:restore",
    "label": "Restore"
  },
  {
    "key": "Lock:unlock",
    "label": "Unlock components"
  }
]
```

***

### Obtenir les actions massives disponibles pour un élément

* **URL**: apirest.php/getMassiveActions/:itemtype/:id
* **Description**: Affiche les actions massives disponibles pour un élément donné.
* **Méthode**: GET
* **Paramètres**: (En-têtes)
  * *Session-Token*: variable de session fournie par le point d'accès initSession. Obligatoire.
  * *App-Token*: chaîne d'autorisation fournie par la configuration de l'API GLPI. Facultatif.
* **Paramètres**: (chaîne de requête)
* **Retours**:
  * 200 (OK).
  * 400 (Bad Request) avec un message indiquant une erreur dans le paramètre d'entrée.
  * 401 (UNAUTHORIZED).

Exemple d'utilisation (CURL) :

```bash
$ curl -X GET \
-H 'Content-Type: application/json' \
-H "Session-Token: 83af7e620c83a50a18d3eac2f6ed05a3ca0bea62" \
-H "App-Token: f7g3csp8mgatg5ebc5elnazakw20i9fyev1qopya7" \
'http://path/to/glpi/apirest.php/getMassiveActions/Computer/3'

< 200 OK
[
  {
    "key": "MassiveAction:update",
    "label": "Update"
  },
  {
    "key": "MassiveAction:clone",
    "label": "Clone"
  },
  {
    "key": "Infocom:activate",
    "label": "Enable the financial and administrative information"
  },
  {
    "key": "MassiveAction:delete",
    "label": "Put in trashbin"
  },
  {
    "key": "Appliance:add_item",
    "label": "Associate to an appliance"
  },
  {
    "key": "Item_OperatingSystem:update",
    "label": "Operating systems"
  },
  {
    "key": "Glpi\\Asset\\Asset_PeripheralAsset:add",
    "label": "Connect"
  },
  {
    "key": "Item_SoftwareVersion:add",
    "label": "Install"
  },
  {
    "key": "KnowbaseItem_Item:add",
    "label": "Link knowledgebase article"
  },
  {
    "key": "Document_Item:add",
    "label": "Add a document"
  },
  {
    "key": "Document_Item:remove",
    "label": "Remove a document"
  },
  {
    "key": "Contract_Item:add",
    "label": "Add a contract"
  },
  {
    "key": "Contract_Item:remove",
    "label": "Remove a contract"
  },
  {
    "key": "MassiveAction:amend_comment",
    "label": "Amend comment"
  },
  {
    "key": "MassiveAction:add_note",
    "label": "Add note"
  },
  {
    "key": "Lock:unlock",
    "label": "Unlock components"
  }
]


$ curl -X GET \
-H 'Content-Type: application/json' \
-H "Session-Token: 83af7e620c83a50a18d3eac2f6ed05a3ca0bea62" \
-H "App-Token: f7g3csp8mgatg5ebc5elnazakw20i9fyev1qopya7" \
'http://path/to/glpi/apirest.php/getMassiveActions/Computer/4'
< 200 OK 
[ 
  { 
     "key": "MassiveAction:purge_item_but_devices", 
     "label": "Supprimer définitivement mais conserver les appareils" 
  }, 
  {  "key": "MassiveAction:purge", 
     "label": "Supprimer définitivement et supprimer les appareils" 
  }, 
  { 
     "key": "MassiveAction:restore",
     "label": "Restaurer" 
  }, 
  { 
     "key": "Lock:unlock",
     "label": "Déverrouiller les composants" 
  } 
  ]
```

***

### Obtenir les paramètres d'une action massive

* **URL**: apirest.php/getMassiveActionParameters/:itemtype/
* **Description**: Afficher les paramètres disponibles pour une action massive donnée.
  * Attention : endpoint expérimental, certains paramètres requis peuvent être manquants dans le contenu retourné.
* **Méthode**: GET
* **Paramètres**: (En-têtes)
  * *Session-Token*: variable de session fournie par l'endpoint initSession. Obligatoire.
  * *App-Token*: chaîne d'autorisation fournie par la configuration de l'API GLPI. Optionnel.
* **Paramètres**: (chaîne de requête)
* **Retourne**:
  * 200 (OK).
  * 400 (Bad Request) avec un message indiquant une erreur dans le paramètre d'entrée.
  * 401 (UNAUTHORIZED).

Exemple d'utilisation (CURL) :

```bash
$ curl -X GET \
-H 'Content-Type: application/json' \
-H "Session-Token: 83af7e620c83a50a18d3eac2f6ed05a3ca0bea62" \
-H "App-Token: f7g3csp8mgatg5ebc5elnazakw20i9fyev1qopya7" \
'http://path/to/glpi/apirest.php/getMassiveActionParameters/Computer/MassiveAction:add_note'

< 200 OK
[
  {
    "name": "add_note",
    "type": "text"
  }
]

$ curl -X GET \
-H 'Content-Type: application/json' \
-H "Session-Token: 83af7e620c83a50a18d3eac2f6ed05a3ca0bea62" \
-H "App-Token: f7g3csp8mgatg5ebc5elnazakw20i9fyev1qopya7" \
'http://path/to/glpi/apirest.php/getMassiveActionParameters/Computer/Contract_Item:add'

< 200 OK
[
  {
    "name": "peer_contracts_id",
    "type": "dropdown"
  }
]
```

***

### Appliquer une action massive

* **URL**: apirest.php/applyMassiveAction/:itemtype/
* **Description**: Exécuter l'action massive donnée
* **Méthode**: POST
* **Paramètres**: (En-têtes)
  * *Session-Token*: variable de session fournie par l'endpoint initSession. Obligatoire.
  * *App-Token*: chaîne d'autorisation fournie par la configuration de l'API GLPI. Optionnel.
* **Paramètres**: (charge utile JSON)
  * *ids* éléments sur lesquels exécuter l'action. Obligatoire.
  * *paramètres d'action spécifiques* certaines actions nécessitent des paramètres spécifiques pour s'exécuter. Vous pouvez les vérifier via l'endpoint 'getMassiveActionParameters'.
* **Retourne**:
  * 200 (OK) Tous les éléments ont été traités.
  * 207 (Multi-Status) Tous les éléments n'ont pas été traités avec succès.
  * 400 (Bad Request) avec un message indiquant une erreur dans le paramètre d'entrée.
  * 401 (UNAUTHORIZED).
  * 422 (Unprocessable Entity) Tous les éléments n'ont pas pu être traités.

Exemple d'utilisation (CURL) :

```bash
$ curl -X POST \
-H 'Content-Type: application/json' \
-H "Session-Token: 83af7e620c83a50a18d3eac2f6ed05a3ca0bea62" \
-H "App-Token: f7g3csp8mgatg5ebc5elnazakw20i9fyev1qopya7" \
-d '{"ids": [2, 3],	"input": {"amendment": "newtext"}}'
'http://path/to/glpi/apirest.php/applyMassiveAction/Computer/MassiveAction:amend_comment'

< 200 OK
{
  "ok": 2,
  "ko": 0,
  "noright": 0,
  "messages": []
}
```

***

### Cas spéciaux

#### Télécharger un fichier document

Voir Ajouter un ou plusieurs éléments et appliquer les instructions spécifiques ci-dessous.

Le téléchargement d'un fichier nécessite l'utilisation du type de contenu 'multipart/data'. Les données d'entrée doivent être envoyées dans un paramètre 'uploadManifest' et utiliser le format JSON.

Exemples d'utilisation (CURL) :

```bash
$ curl -X POST \
-H 'Content-Type: multipart/form-data' \
-H "Session-Token: 83af7e620c83a50a18d3eac2f6ed05a3ca0bea62" \
-H "App-Token: f7g3csp8mgatg5ebc5elnazakw20i9fyev1qopya7" \
-F 'uploadManifest={"input": {"name": "Document téléchargé", "_filename" : ["file.txt"]}};type=application/json' \
-F 'filename[0]=@file.txt' \
'http://path/to/glpi/apirest.php/Document/'

< 201 OK
< Location: http://path/to/glpi/api/Document/1
< {"id": 1, "message": "Document move succeeded.", "upload_result": {...}}

```

#### Télécharger un fichier document

* **URL**: apirest.php/Document/:id
* **Description**: Télécharger un document.
* **Méthode**: GET
* **Paramètres**: (En-têtes)
  * *Session-Token*: variable de session fournie par l'endpoint initSession. Obligatoire.
  * *App-Token*: chaîne d'autorisation fournie par la configuration de l'API GLPI. Optionnel.
  * *Accept*: doit être **application/octet-stream**. Cet en-tête OU le paramètre *alt* est obligatoire
* **Paramètres**: (chaîne de requête)

  * *id*: identifiant unique de l'itemtype passé dans l'URL. Vous **pouvez ignorer** ce paramètre en le passant dans la charge utile d'entrée.
  * *alt*: doit être 'media'. Ce paramètre ou l'en-tête **Accept** est obligatoire.

  Le paramètre id a la priorité sur la charge utile d'entrée.
* **Retourne**:
  * 200 (OK) *en cas de suppression multiple*.
  * 400 (Bad Request) avec un message indiquant une erreur dans le paramètre d'entrée.
  * 401 (UNAUTHORIZED).

Exemple d'utilisation (CURL) :

```bash
$ curl -X GET \
-H 'Content-Type: application/json' \
-H "Session-Token: 83af7e620c83a50a18d3eac2f6ed05a3ca0bea62" \
-H "App-Token: f7g3csp8mgatg5ebc5elnazakw20i9fyev1qopya7" \
-H "Accept: application/octet-stream" \
-d '{"input": {"id": 11}}' \
'http://path/to/glpi/apirest.php/Document/'

< 200 OK
```

Le corps de la réponse contient le fichier brut joint au document.

```bash
$ curl -X GET \
-H 'Content-Type: application/json' \
-H "Session-Token: 83af7e620c83a50a18d3eac2f6ed05a3ca0bea62" \
-H "App-Token: f7g3csp8mgatg5ebc5elnazakw20i9fyev1qopya7" \
-d '{"input": {"id": 11}}' \
'http://path/to/glpi/apirest.php/Document/&alt=media'

< 200 OK
```

Le corps de la réponse contient le fichier brut joint au document.

#### Obtenir la photo de profil d'un utilisateur

* **URL**: apirest.php/User/:id/Picture
* **Description**: Obtenir la photo de profil d'un utilisateur.
* **Méthode**: GET
* **Paramètres**: (En-têtes)
  * *Session-Token*: variable de session fournie par l'endpoint initSession. Obligatoire.
  * *App-Token*: chaîne d'autorisation fournie par la configuration de l'API GLPI. Optionnel.
* **Retourne**:
  * 200 (OK) avec l'image brute dans le corps de la requête.
  * 204 (No content) si la requête est correcte mais que l'utilisateur spécifié n'a pas de photo de profil.
  * 400 (Bad Request) avec un message indiquant une erreur dans le paramètre d'entrée.

Exemple d'utilisation (CURL) :

```bash
$ curl -X GET \
-H 'Content-Type: application/json' \
-H "Session-Token: 83af7e620c83a50a18d3eac2f6ed05a3ca0bea62" \
-H "App-Token: f7g3csp8mgatg5ebc5elnazakw20i9fyev1qopya7" \
'http://path/to/glpi/apirest.php/User/2/Picture/'

< 200 OK
```

Le corps de la réponse contient l'image brute.

***

### Erreurs

#### ERROR\_ITEM\_NOT\_FOUND

La ressource souhaitée (itemtype-id) n'a pas été trouvée dans la base de données GLPI.

#### ERROR\_BAD\_ARRAY

Le corps HTTP doit être un tableau d'objets.

#### ERROR\_METHOD\_NOT\_ALLOWED

Vous avez spécifié une ressource inexistante ou non autorisée.

#### ERROR\_RIGHT\_MISSING

L'utilisateur actuellement connecté manque de droits dans son profil pour effectuer l'action fournie. Modifiez ce profil ou choisissez-en un nouveau pour l'utilisateur dans l'interface principale de GLPI.

#### ERROR\_SESSION\_TOKEN\_INVALID

Le Session-Token fourni dans l'en-tête est invalide. Vous devriez refaire une requête Init session.

#### ERROR\_SESSION\_TOKEN\_MISSING

Vous avez oublié de fournir le Session-Token dans l'en-tête de votre requête HTTP.

#### ERROR\_APP\_TOKEN\_PARAMETERS\_MISSING

L'API actuelle nécessite un en-tête App-Token pour utiliser ses méthodes.

#### ERROR\_WRONG\_APP\_TOKEN\_PARAMETER

Il semble que le jeton d'application fourni n'existe pas dans la configuration de l'API GLPI.

#### ERROR\_NOT\_DELETED

Vous devez marquer l'élément pour suppression avant de le supprimer réellement.

#### ERROR\_NOT\_ALLOWED\_IP

Nous ne trouvons aucun client actif défini dans la configuration pour votre IP. Allez dans le menu Configuration GLPI > Configuration et l'onglet API pour vérifier l'accès IP.

#### ERROR\_LOGIN\_PARAMETERS\_MISSING

Un des paramètres suivants est manquant :

* login et mot de passe
* ou user\_token

#### ERROR\_LOGIN\_WITH\_CREDENTIALS\_DISABLED

La configuration GLPI interdit la connexion avec des identifiants, vous devez vous connecter avec votre user\_token à la place.

Consultez votre page de préférences personnelles ou configurez l'accès API dans l'interface principale de GLPI.

#### ERROR\_GLPI\_LOGIN\_USER\_TOKEN

Le `user_token` fourni semble invalide. Vérifiez votre page de préférences personnelles dans l'interface principale de GLPI.

#### ERROR\_GLPI\_LOGIN

Nous ne pouvons pas vous connecter à GLPI. Cette erreur n'est pas relative à l'API mais au cœur de GLPI. Vérifiez l'administration des utilisateurs et les fichiers journaux de GLPI (dans le répertoire `files/_logs`).

#### ERROR\_ITEMTYPE\_NOT\_FOUND\_NOR\_COMMONDBTM

Vous avez demandé une ressource (endpoint) inexistante. Il ne s'agit ni d'une ressource prédéfinie (`initSession`, `getFullSession`, etc.) ni d'une ressource `GLPI CommonDBTM`.

#### ERROR\_SQL

Nous suspectons une erreur SQL. Cette erreur n'est pas relative à l'API mais au cœur de GLPI. Vérifiez les fichiers journaux de GLPI (dans le répertoire `files/_logs`).

#### ERROR\_RANGE\_EXCEED\_TOTAL

Le paramètre `range` que vous avez fourni est supérieur au nombre total de données disponibles.

#### ERROR\_GLPI\_ADD

Nous ne pouvons pas ajouter l'objet à GLPI. Cette erreur n'est pas relative à l'API mais au cœur de GLPI. Vérifiez les fichiers journaux de GLPI (dans le répertoire `files/_logs`).

#### ERROR\_GLPI\_PARTIAL\_ADD

Certains des objets que vous souhaitiez ajouter déclenchent une erreur. Peut-être un champ manquant ou des droits insuffisants. Vous trouverez avec cette erreur une collection de résultats.

#### ERROR\_GLPI\_UPDATE

Nous ne pouvons pas mettre à jour l'objet dans GLPI. Cette erreur n'est pas relative à l'API mais au cœur de GLPI. Vérifiez les fichiers journaux de GLPI (dans le répertoire `files/_logs`).

#### ERROR\_GLPI\_PARTIAL\_UPDATE

Certains des objets que vous souhaitiez mettre à jour déclenchent une erreur. Peut-être un champ manquant ou des droits insuffisants. Vous trouverez avec cette erreur une collection de résultats.

#### ERROR\_GLPI\_DELETE

Nous ne pouvons pas supprimer l'objet de GLPI. Cette erreur n'est pas relative à l'API mais au cœur de GLPI. Vérifiez les fichiers journaux de GLPI (dans le répertoire `files/_logs`).

#### ERROR\_GLPI\_PARTIAL\_DELETE

Certains des objets que vous souhaitez supprimer déclenchent une erreur, peut-être un champ manquant ou des droits insuffisants. Vous trouverez avec cette erreur une collection de résultats.

#### ERROR\_MASSIVEACTION\_KEY

Clé d'action massive manquante ou invalide. Exécutez l'endpoint `getMassiveActions` pour voir les clés disponibles.

#### ERROR\_MASSIVEACTION\_NO\_IDS

Aucun ID fourni lors de la tentative d'exécution d'une action massive.

#### ERROR\_FIELD\_NOT\_FOUND

Le champ spécifié comme clé pour le paramètre `searchText` n'existe pas. Ce champ doit faire référence à une colonne de la table correspondant à l'élément de la requête.

#### ERROR\_UNKNOWN

Une erreur inconnue s'est produite. Cela peut être dû à une condition inattendue rencontrée par le serveur ou à un problème qui ne rentre dans aucune des catégories d'erreurs prédéfinies. Vérifiez les journaux du serveur pour plus de détails ou contactez l'équipe de support.

***

### Configuration des serveurs

Par défaut, vous pouvez utiliser `<http://chemin/vers/glpi/apirest.php>` sans configuration supplémentaire.

Vous trouverez ci-dessous quelques exemples pour configurer votre serveur web afin de rediriger votre URL `<http://.../glpi/api/>` vers le fichier `apirest.php`.

#### Apache Httpd

Nous fournissons dans le `.htaccess` racine de GLPI un exemple pour activer la réécriture d'URL de l'API.

Vous devez décommenter (en supprimant le `#`) les lignes suivantes :

```apacheconf
#<IfModule mod_rewrite.c>
#   RewriteEngine On
#   RewriteCond %{REQUEST_FILENAME} !-f
#   RewriteCond %{REQUEST_FILENAME} !-d
#   RewriteRule api/(.*)$ apirest.php/$1
#</IfModule>
```

En activant la réécriture d'URL, vous pourrez utiliser l'API avec cette URL : `<http://chemin/vers/glpi/api/>`. Vous devez également activer le module de réécriture dans Apache httpd et autoriser le `.htaccess` de GLPI à outrepasser la configuration du serveur (voir la directive `AllowOverride`).

**Note pour les utilisateurs apache+fpm :**

Vous pourriez rencontrer des difficultés pour passer l'en-tête `Authorization` dans cette configuration. Vous avez deux options :

* passer le `user_token` ou les identifiants (login/mot de passe) dans la requête http (en tant que paramètres GET).
* ajouter une variable d'environnement à votre virtualhost : `SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1`.

#### Nginx

Cet exemple de configuration a été réalisé sur Ubuntu avec php7 fpm.

```nginx
server {
   listen 80 default_server;
   listen [::]:80 default_server;

   # change here to match your GLPI directory
   root /var/www/html/glpi/;

   index index.html index.htm index.nginx-debian.html index.php;

   server_name localhost;

   location / {
      try_files $uri $uri/ =404;
      autoindex on;
   }

   location /api {
      rewrite ^/api/(.*)$ /apirest.php/$1 last;
   }

   location ~ [^/]\.php(/|$) {
      fastcgi_pass unix:/run/php/php7.0-fpm.sock;

      # regex to split $uri to $fastcgi_script_name and $fastcgi_path
      fastcgi_split_path_info ^(.+\.php)(/.+)$;

      # Check that the PHP script exists before passing it
      try_files $fastcgi_script_name =404;

      # Bypass the fact that try_files resets $fastcgi_path_info
      # # see: http://trac.nginx.org/nginx/ticket/321
      set $path_info $fastcgi_path_info;
      fastcgi_param  PATH_INFO $path_info;

      fastcgi_param  PATH_TRANSLATED    $document_root$fastcgi_script_name;
      fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

      include fastcgi_params;

      # allow directory index
      fastcgi_index index.php;
   }
}

```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://help.glpi-project.org/documentation/fr/modules/configuration/general/api/rest-api-v1.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
