---
title: "Référence de l'API SCIM"
description: "Contrat d’endpoint SCIM 2.0 pour provisionner utilisateurs et groupes dans XID.utilisateurs et les groupes dans XID."
locale: "fr"
---

> Documentation Index
> Fetch the locale documentation index at: https://xid.dev/fr/llms.txt
> Use this file to discover all available pages before exploring further.

# Référence de l'API SCIM

## URL de base

XID expose des API SCIM 2.0 limitées à l'organisation sous `/scim/v2/organizations/{organization_id}`. Les ressources utilisateur et groupe sont adressées avec l'ID d'organisation dans le chemin.

Configurez votre fournisseur d'identité avec l'URL de base `https://xid.dev/scim/v2/organizations/{organization_id}` et le jeton d'annuaire affiché une seule fois lorsque vous créez ou faites tourner l'annuaire.

```shell
curl https://xid.dev/scim/v2/organizations/{organization_id}/Users \
  -H 'Authorization: Bearer scim_xxx' \
  -H 'Content-Type: application/scim+json'
```

## Authentification

Les appels SCIM utilisent un jeton bearer d'annuaire créé depuis l'API de gestion. XID stocke uniquement un hachage du jeton et renvoie le jeton en clair une seule fois lorsqu'il est créé ou renouvelé.

| En-tête | Valeur | Remarques |
| --- | --- | --- |
| `Authorization` | `Bearer scim_xxx` | Requis pour les points de terminaison utilisateurs et groupes limités à l'organisation. |
| `Content-Type` | `application/scim+json` | Requis pour les requêtes POST, PUT et PATCH. |
| `Accept` | `application/scim+json` | Recommandé pour tous les clients SCIM. |

## Points de terminaison

| Point de terminaison | Méthodes | Usage |
| --- | --- | --- |
| `/scim/v2/ServiceProviderConfig` | `GET` | Réponse ServiceProviderConfig pour la découverte des clients SCIM. |
| `/scim/v2/Schemas` | `GET` | Métadonnées du schéma utilisateur et groupe. |
| `/scim/v2/ResourceTypes` | `GET` | Types de ressources SCIM pris en charge. |
| `/scim/v2/organizations/{organization_id}/Users` | `GET, POST` | Créer et lister les utilisateurs d'annuaire. |
| `/scim/v2/organizations/{organization_id}/Users/{id}` | `GET, PUT, PATCH, DELETE` | Lire, remplacer, modifier partiellement ou désapprovisionner un utilisateur d'annuaire. |
| `/scim/v2/organizations/{organization_id}/Groups` | `GET, POST` | Créer et lister les groupes d'annuaire. |
| `/scim/v2/organizations/{organization_id}/Groups/{id}` | `GET, PUT, PATCH, DELETE` | Lire, remplacer, modifier partiellement ou supprimer un groupe d'annuaire. |

## Ressource utilisateur

Les ressources utilisateur utilisent `userName` comme identifiant externe. Les valeurs e-mail, les champs de nom du profil, l'état actif et les champs d'extension entreprise sont conservés dans le profil brut SCIM.

| Champ SCIM | Comportement de XID |
| --- | --- |
| `id` | ID utilisateur d'annuaire XID stable. |
| `userName` | Requis. Doit être unique dans l'annuaire. |
| `active` | `false` désapprovisionne l'utilisateur et révoque les sessions actives. |
| `emails` | L'e-mail principal est utilisé pour la correspondance et la liaison de compte. |
| `urn:ietf:params:scim:schemas:extension:enterprise:2.0:User` | Stocké et renvoyé pour les attributs d'entreprise comme le département. |

```json
{
  "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
  "userName": "alice@example.com",
  "active": true,
  "name": { "givenName": "Alice", "familyName": "Lee" },
  "emails": [{ "value": "alice@example.com", "primary": true }]
}
```

## Ressource groupe

Les ressources groupe utilisent `displayName` comme nom de groupe d'annuaire unique. Les membres référencent des ID utilisateur SCIM et sont synchronisés de façon idempotente.

```json
{
  "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
  "displayName": "Engineering",
  "members": [
{ "value": "dir_user_123", "display": "alice@example.com" }
  ]
}
```

## Filtrage, tri et pagination

XID prend en charge la grammaire de filtre SCIM avec `and`, `or`, `not` et les opérateurs de comparaison (`eq`, `ne`, `co`, `sw`, `ew`, `gt`, `ge`, `lt`, `le`, `pr`). Les expressions non prises en charge renvoient `invalidFilter`. Les listes utilisent la pagination SCIM base 1 avec `startIndex`, `count`, `totalResults`, plus `sortBy` et `sortOrder` optionnels.

| Requête | Assistance |
| --- | --- |
| `filter=userName eq "alice@example.com"` | Trouver un utilisateur par userName. |
| `filter=displayName eq "Engineering"` | Trouver un groupe par displayName. |
| `filter=userName sw "alice" and active eq true` | Combiner les opérateurs logiques et de comparaison. |
| `sortBy=userName&sortOrder=ascending` | Trier les résultats des listes Utilisateurs ou Groupes. |
| `startIndex=1&count=100` | Renvoyer jusqu'à 100 ressources à partir du premier résultat. |
| `attributes=userName,emails.value` | Renvoyer uniquement schemas, id et les attributs SCIM demandés. |
| `excludedAttributes=emails,meta` | Renvoyer la ressource par défaut sans les attributs SCIM exclus. |

## Opérations en masse

`POST /scim/v2/organizations/{organization_id}/Bulk` accepte une `BulkRequest` jusqu’à 100 opérations et 1 Mio de charge utile. Les réponses renvoient le statut HTTP par opération dans une `BulkResponse` même en cas d’échecs partiels.

```json
{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:BulkRequest"],
  "Operations": [
{
  "method": "POST",
  "path": "/Users",
  "bulkId": "user1",
  "data": { "userName": "alice@example.com", "active": true }
}
  ]
}
```

## ETag and If-Match

Les réponses GET de ressource incluent `ETag: W/"<meta.version>"` depuis `meta.version`. `PUT` et `PATCH` exigent un en-tête `If-Match` correspondant à la version actuelle ; absence → `428`, non-correspondance → `412`.

## Opérations PATCH

Les requêtes PATCH utilisent `urn:ietf:params:scim:api:messages:2.0:PatchOp`. XID prend en charge `add`, `replace` et `remove` pour les champs de profil modifiables et les appartenances aux groupes.

```json
{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
  "Operations": [
{ "op": "replace", "path": "active", "value": false }
  ]
}
```

## Réponses d'erreur

Les erreurs SCIM renvoient `application/scim+json` avec le schéma SCIM Error, le statut HTTP, le détail et le champ facultatif `scimType`.

```json
{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:Error"],
  "status": "409",
  "scimType": "uniqueness",
  "detail": "userName already exists"
}
```

## Capacités ServiceProviderConfig

- `ServiceProviderConfig` annonce `sort.supported=true`, `bulk.supported=true` et `etag.supported=true`.
- XID expose des endpoints entrants de fournisseur de services SCIM pour les IdP externes. Les clients de push SCIM vers les SaaS en aval disposent de preuves locales avec un SaaS factice, mais la prise en charge en production requiert toujours un L4 réel d'administration SaaS.

## Comportement de désapprovisionnement

- La rotation du jeton d'annuaire garde l'ancien jeton valide pendant une courte période de grâce.
- `active=false` et `DELETE /Users/{id}` désapprovisionner l'utilisateur et révoquer les sessions actives.
- Les mises à jour d'appartenance aux groupes sont idempotentes. Les membres inconnus peuvent être résolus après l'arrivée de l'utilisateur depuis le fournisseur d'identité.

Source: https://xid.dev/fr/scim/index.mdx
