Référence API SCIM
Référence API SCIM
Cette page documente les points de terminaison SCIM 2.0 qu'axe Account expose pour le provisioning des utilisateurs et des groupes. Dans la plupart des cas, le connecteur SCIM de votre fournisseur d'identité appelle ces points de terminaison pour vous ; cette référence est destinée aux équipes qui développent une intégration personnalisée ou qui valident le comportement directement.
axe implémente la norme SCIM 2.0 (RFC 7643 / RFC 7644). Cette page se concentre sur le comportement spécifique à axe. Pour le protocole générique, consultez les spécifications SCIM.
URL de base et authentification
Tous les points de terminaison sont servis sous /api/scim/v2 sur votre URL de base régionale ou privée :
https://axe.deque.com/api/scim/v2Authentifiez chaque requête avec votre clé API SCIM :
-H "X-API-Key: <API_KEY>"
# or
-H "Authorization: <API_KEY>"Voir Prérequis et configuration pour obtenir une clé et une URL de base.
Conventions
- Type de contenu :
application/json - Réponses d'erreur utilise le schéma d'erreur SCIM :
{ "schemas": ["urn:ietf:params:scim:api:messages:2.0:Error"], "detail": "<message>", "status": <code> } - Pagination (Utilisateurs) :
startIndex(à partir de 1) etcount(1–100). - Filtrage (Utilisateurs, Groupes) :
filteren utilisant l'opérateureq, par exempleuserName eq "user@example.com".
Utilisateurs
Lister les utilisateurs
GET /api/scim/v2/UsersRetourne les membres de votre entreprise. Prend en charge la pagination et le filtrage.
Lorsqu'un filter est fourni, la recherche n'est pas limitée à votre entreprise : un utilisateur correspondant qui n'est pas membre est renvoyé avec active: false. Vérifiez active plutôt que de considérer tout résultat comme membre. Les requêtes filtrées renvoient toujours au maximum une ressource et ignorent count et startIndex.
Paramètres de requête
| Paramètre | Type | Description |
|---|---|---|
filter |
chaîne | Optionnel. par exemple userName eq "user@example.com" ou externalId eq "<id>". |
startIndex |
entier | Optionnel. Index de départ basé sur 1. Valeur par défaut 1. |
count |
entier | Optionnel. Résultats par page, 1–100. |
Exemple
curl -H "X-API-Key: $KEY" \
"https://axe.deque.com/api/scim/v2/Users?count=10&startIndex=1"Réponse 200 OK
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
"totalResults": 42,
"itemsPerPage": 10,
"startIndex": 1,
"Resources": [
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
"id": "5f3e...c2",
"userName": "user@example.com",
"active": true,
"name": { "givenName": "Alex", "familyName": "Doe" },
"emails": [
{ "primary": true, "value": "user@example.com", "type": "work", "display": "user@example.com" }
],
"groups": [
{ "value": "grp-1", "display": "Axe Monitor", "$ref": "/Groups/grp-1" }
],
"meta": { "resourceType": "User", "location": "/Users/5f3e...c2" }
}
]
}Erreurs
| Statut | detail |
|---|---|
| 400 | Count must be between 1-100 |
Obtenir un utilisateur
GET /api/scim/v2/Users/{id}Retourne un utilisateur unique par son ID utilisateur axe. active reflète l'appartenance à l'entreprise.
Réponse 200 OK — une ressource Utilisateur (voir ci-dessus).
Erreurs
| Statut | detail |
|---|---|
| 404 | User not found |
Créer un utilisateur
POST /api/scim/v2/UsersProvisionne un utilisateur : crée le compte axe, l'ajoute à votre entreprise et envoie un email d'invitation. Une valeur groups dans le corps est ignorée — assignez l'accès aux produits séparément via PATCH /Groups.
Corps de la requête
| Champ | Requis | Description |
|---|---|---|
schemas |
✅ | Doit inclure urn:ietf:params:scim:schemas:core:2.0:User. |
userName |
✅ | L'adresse e-mail de l'utilisateur. |
name.givenName |
✅ | Prénom. |
name.familyName |
✅ | Nom de famille. |
emails |
✅ | Tableau avec exactement une entrée primary: true. |
active |
✅ | true ajoute l'utilisateur à l'entreprise. |
externalId |
— | L'identifiant unique de votre annuaire (recommandé). |
Exemple
curl -X POST -H "X-API-Key: $KEY" -H "Content-Type: application/json" \
-d '{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
"userName": "user@example.com",
"name": { "givenName": "Alex", "familyName": "Doe" },
"emails": [{ "type": "work", "value": "user@example.com", "primary": true }],
"active": true
}' \
"https://axe.deque.com/api/scim/v2/Users"Réponse 201 Created — la ressource Utilisateur créée.
Erreurs
| Statut | detail |
|---|---|
| 400 | Validation errors: Exactly one primary e-mail is required at 'emails'. (enveloppe d'erreur générique, pas le schéma d'erreur SCIM) |
| 400 | A primary email is required but was not found in the emails array |
| 400 | User email domain does not match enterprise root group |
| 400 | Enterprise does not have an identity provider configured |
| 409 | User is already a member of an enterprise |
Remplacer un utilisateur
PUT /api/scim/v2/Users/{id}Met à jour le nom et l'adresse e-mail d'un utilisateur.
Corps de la requête
| Champ | Requis | Description |
|---|---|---|
schemas |
✅ | Doit inclure urn:ietf:params:scim:schemas:core:2.0:User. |
id |
✅ | L'ID utilisateur axe de l'utilisateur (UUID). Doit correspondre à {id} dans le chemin. |
name.givenName |
✅ | Prénom. |
name.familyName |
✅ | Nom de famille. |
emails |
✅ | Tableau contenant les e-mails de l'utilisateur. Une seule entrée doit avoir primary: true. |
name.middleName |
— | Deuxième prénom. |
meta |
— | Accepté et ignoré ; le serveur assigne meta. |
Réponse 200 OK — la ressource Utilisateur mise à jour.
Erreurs
| Statut | detail |
|---|---|
| 404 | User not found |
| 403 | User is a member of multiple enterprises |
| 403 | User is not a member of this enterprise |
| 400 | No primary email found in the provided emails array |
| 409 | A user with this email already exists |
Activer ou désactiver un utilisateur
PATCH /api/scim/v2/Users/{id}Définit l'adhésion à l'entreprise. active: true ajoute l'utilisateur à l'entreprise ; active: false le déprovisionne (retire l'adhésion ; le compte est conservé).
Corps de la requête
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{ "op": "replace", "value": { "active": false } }
]
}Réponse 204 No Content
Erreurs
| Statut | detail |
|---|---|
| 404 | User not found |
| 400 | Cannot remove the last admin from the enterprise |
Déprovisionner un utilisateur
DELETE /api/scim/v2/Users/{id}Supprime l'utilisateur de votre entreprise (suppression douce — le compte est conservé).
Réponse 204 No Content
Erreurs
| Statut | detail |
|---|---|
| 404 | User not found |
| 400 | Cannot remove the last admin from the enterprise |
Groupes
Les groupes sont soit abonnements aux produits (octroi d'une licence de produit) soit équipes (organisation des utilisateurs). Voir Comment SCIM fonctionne avec axe Account.
Lister les groupes
GET /api/scim/v2/GroupsRenvoie tous les abonnements aux produits et équipes pour votre entreprise. Ce point de terminaison n'est pas paginé.
Paramètres de requête
| Paramètre | Type | Description |
|---|---|---|
filter |
chaîne | Optionnel. displayName eq "<name>". Correspond exactement et sensibilité à la casse contre les noms d'équipes et de produits — contrairement au filtre userName sur /Users, qui est insensible à la casse. |
Réponse 200 OK
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
"totalResults": 5,
"startIndex": 1,
"itemsPerPage": 5,
"Resources": [
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
"id": "grp-1",
"displayName": "Axe Monitor",
"members": [
{ "value": "5f3e...c2", "display": "user@example.com", "$ref": "/Users/5f3e...c2" }
]
}
]
}Obtenir un groupe
GET /api/scim/v2/Groups/{id}Réponse 200 OK — une ressource de groupe.
Erreurs
| Statut | detail |
|---|---|
| 404 | Group not found |
Créer un groupe
POST /api/scim/v2/GroupsCrée une équipe. Si displayName correspond exactement au nom d'un produit pour lequel votre entreprise détient un abonnement actif, aucune équipe n'est créée — le groupe d'abonnement au produit existant est retourné à la place (201, avec ses id et Location), et tout members dans le corps de la requête est ignoré. Gérez l'adhésion de ce groupe via PATCH /Groups/{id}.
La correspondance est sensible à la casse et exacte. Si le nom correspond à un produit dont l'abonnement est pas actif, une équipe régulière est créée avec ce nom à la place — elle n'octroiera pas de licences de produit.
Corps de la requête
| Champ | Requis | Description |
|---|---|---|
schemas |
✅ | Doit inclure urn:ietf:params:scim:schemas:core:2.0:Group. |
displayName |
✅ | Nom de l'équipe (non vide, ≤128 caractères). |
members |
— | Tableau facultatif (≤1000). |
Réponse 201 Created — la ressource de Groupe créée, avec un en-tête Location.
Erreurs
| Statut | detail |
|---|---|
| 400 | The group was not created because some users are not members of the enterprise. User IDs: ... |
| 409 | A group with this displayName already exists |
Mettre à jour l'appartenance à un groupe
PATCH /api/scim/v2/Groups/{id}Ajoute ou supprime des membres. Pour un groupe d'abonnement, cela accorde ou révoque un siège de produit. Pour un groupe d'équipe, cela modifie l'appartenance à l'équipe.
Corps de la requête
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{ "op": "add", "path": "members", "value": [ { "value": "5f3e...c2" } ] }
]
}Utilisez op: "remove" avec un path pour supprimer des membres. Un replace avec un tableau vide supprime tous les membres.
Réponse 204 No Content
Erreurs
| Statut | detail |
|---|---|
| 404 | Group not found |
| 404 | Product not found |
| 402 | Enterprise subscription out of seats |
| 400 | Some users were not added to the group because they are not members of the enterprise. User IDs: ... |
| 400 | Path is required for remove operations |
Supprimer un groupe
DELETE /api/scim/v2/Groups/{id}Supprime un équipe. Les requêtes de suppression concernant un groupe d'abonnement produit sont ignorées (retourne 204).
Réponse 204 No Content
Erreurs
| Statut | detail |
|---|---|
| 404 | Group not found |
Mettre à jour un groupe (non pris en charge)
PUT /api/scim/v2/Groups/{id}Non pris en charge. Retourne 405 Method not allowed. Utilisez PATCH pour modifier l'appartenance.
Points de terminaison de découverte
Ils prennent en charge la configuration automatique du connecteur. Tous retournent 200 OK.
| Point de terminaison | Retours |
|---|---|
GET /api/scim/v2/ServiceProviderConfig |
Capacités prises en charge (patch, filtrage avec un maximum de 100 résultats ; vrac et tri non pris en charge). |
GET /api/scim/v2/Schemas |
Définitions de schémas utilisateur et groupe. |
GET /api/scim/v2/Schemas/{id} |
Un seul schéma par URN. 404 "Schema not found" si inconnu. |
GET /api/scim/v2/ResourceTypes |
Types de ressources utilisateur et groupe. |
GET /api/scim/v2/ResourceTypes/{id} |
Un seul type de ressource. 404 "Resource type not found" si inconnu. |
