Référence SCIM 2.0
Référence technique destinée aux équipes de gestion des identités qui connectent un IdP (Microsoft Entra ID, SailPoint IdentityIQ, …) à mTime : quels attributs et quelles opérations SCIM 2.0 mTime prend en charge, et ce que fait chacun d’eux.
Vue d’ensemble
| URL de base | https://<your mTime host>/api/scim/v2 |
| Normes | RFC 7643 (schéma), RFC 7644 (protocole) |
| Authentification | Jeton bearer : une clé API de l’utilisateur de service de provisionnement de l’espace de travail (voir Configurer SCIM avec Microsoft Entra ID) |
| Type de média | application/scim+json |
| Ressources | /Users, /Groups |
| Erreurs | Réponses d’erreur SCIM (RFC 7644 §3.12) |
Ce que SCIM gère, et ce qu’il ne gère pas
mTime sépare l’utilisateur (connexion, rôles, accès) de l’employé et de ses emplois :
Utilisateur → Employé → n emplois
SCIM gère l’utilisateur : qui peut se connecter, sous quel nom et avec quels rôles. Les employés et leurs emplois — unité organisationnelle, responsable, conditions d’emploi, norme de temps de travail, dates de début et de fin — sont des données datées sur lesquelles mTime fait ses calculs ; elles proviennent de votre intégration RH, pas de SCIM. Un utilisateur SCIM est relié à son employé par l’externalId (voir Comment les utilisateurs sont provisionnés).
C’est pourquoi mTime ne prend pas en charge l’Enterprise User Extension : department, manager et employeeNumber y sont des valeurs uniques sans date de validité, alors qu’un employé dans mTime peut avoir plusieurs emplois datés.
Utilisateurs
Attributs
Schéma urn:ietf:params:scim:schemas:core:2.0:User.
| Attribut | Lecture | Création | Mise à jour | Remarques |
|---|---|---|---|---|
id | ✅ | — | — | Attribué par mTime, non modifiable |
externalId | ✅ | ✅ | ✅ | Clé stable (par ex. le matricule), unique dans l’espace de travail ; un doublon renvoie 409 uniqueness. Peut être lié à un attribut d’employé pour la correspondance |
userName | ✅ | ✅ | ⚠️ | L’adresse e-mail de l’utilisateur. Modifiable uniquement tant que l’utilisateur n’a pas encore activé son invitation |
emails | ✅ | ✅ | ⚠️ | La valeur principale (ou la première) est utilisée ; même règle que pour userName. Renvoyé sous la forme d’une seule adresse principale |
name.givenName, name.familyName | ❌ | ✅ | ⚠️ | Combinés pour former le nom complet — uniquement s’ils sont envoyés ensemble (dans un même objet name, ou les deux chemins dans le même PATCH). mTime enregistre un seul nom complet et ne le découpe jamais : un PATCH qui n’en contient qu’un est ignoré. À la création et en PUT, un prénom ou un nom de famille seul n’est utilisé qu’en l’absence de name.formatted et de displayName. Non renvoyés en lecture : le nom est renvoyé dans name.formatted |
name.formatted | ✅ | ✅ | ⚠️ | Nom complet ; prime sur le prénom et le nom de famille. Une modification n’a aucun effet visible pour un utilisateur lié à un employé, sauf si l’IdP nomme les employés — voir Quel nom SCIM définit |
displayName | ✅ | ✅ | ⚠️ | Nom complet. Même règle de modification que name.formatted |
active | ✅ | — | ✅ | false suspend l’utilisateur ; true le réactive |
meta.resourceType, meta.location | ✅ | — | — |
Tous les autres attributs Core User (nickName, title, phoneNumbers, addresses, password, …) et l’Enterprise User Extension (urn:ietf:params:scim:schemas:extension:enterprise:2.0:User) ne sont pas pris en charge : ils sont ignorés à la création et à la mise à jour, et ne sont jamais renvoyés.
Quel nom SCIM définit
mTime affiche un seul nom pour une personne : celui de l’employé quand l’utilisateur est lié à un employé, sinon celui de l’utilisateur.
- Un utilisateur lié à un employé affiche le nom de l’employé, que votre intégration RH tient à jour. Par défaut, SCIM ne met pas à jour un employé existant : un nom envoyé par SCIM n’a donc aucun effet visible pour cet utilisateur. Si le paramètre Utiliser les noms du fournisseur d'identité comme noms d'employés
est activé, chaque création,
PUTouPATCHqui contient un nom l’écrit aussi sur l’employé lié — voir Utiliser le nom du fournisseur d’identité pour les employés. - Un utilisateur sans employé (par ex. un brouillon) affiche son propre nom. SCIM le définit à la création et peut le modifier tant que la personne n’a pas activé son invitation ; ensuite, il suit le nom de son compte mTime. Si un rôle crée plus tard son employé, celui-ci reprend ce nom au départ.
Pour renommer un employé, changez le nom dans votre système RH — ou dans votre IdP si ce paramètre est activé.
Opérations
| Opération | Prise en charge | Comportement |
|---|---|---|
POST /Users | ✅ | Crée l’utilisateur au statut invité et envoie l’e-mail d’invitation. Une adresse e-mail est obligatoire (emails, ou userName lorsqu’il s’agit d’une adresse). Relie l’utilisateur à un employé existant s’il y en a un qui correspond ; sinon, crée un brouillon sans rôle, sans employé et sans invitation. 409 si l’externalId ou l’employé est déjà pris |
GET /Users/{id} | ✅ | |
GET /Users?filter=… | ⚠️ | Uniquement attribute eq "value", sur userName ou externalId. Les autres attributs ou opérateurs renvoient 400. Se combine avec la pagination |
GET /Users (sans filtre) | ✅ | Tous les utilisateurs, page par page — voir Pagination |
PUT /Users/{id} | ✅ | Applique les attributs pris en charge ci-dessus |
PATCH /Users/{id} | ⚠️ | add et replace sur active, userName, emails, displayName, name (objet), name.givenName, name.familyName, name.formatted, externalId, ou sans chemin (ressource partielle). Un chemin peut porter le préfixe du schéma (urn:ietf:params:scim:schemas:core:2.0:User:name.givenName). remove et les autres chemins sont ignorés |
DELETE /Users/{id} | ✅ | Supprime le compte utilisateur (suppression douce) et met fin à toutes ses sessions. L’employé et son historique sont conservés. Renvoie 204 |
Les utilisateurs qui détiennent le rôle owner ne peuvent être ni modifiés ni supprimés via SCIM (403).
Désactiver ou supprimer ?
PATCH active=false | DELETE | |
|---|---|---|
| Peut se connecter | Non — les sessions prennent fin immédiatement | Non — les sessions prennent fin immédiatement |
| Compte utilisateur | Conservé, statut suspendu | Supprimé (suppression douce) |
| Employé, enregistrements du temps, approbations | Conservés | Conservés |
| Retour | PATCH active=true rétablit le même utilisateur | Un nouveau POST crée un nouvel utilisateur, relié au même employé |
Groupes
Les groupes correspondent aux rôles mTime : l’IdP décide de l’existence d’un groupe et de ses membres, les administrateurs mTime décident des permissions du rôle. Voir Comment les groupes deviennent des rôles.
Attributs
Schéma urn:ietf:params:scim:schemas:core:2.0:Group.
| Attribut | Lecture | Création | Mise à jour | Remarques |
|---|---|---|---|---|
id | ✅ | — | — | Attribué par mTime |
externalId | ✅ | ✅ | ✅ | |
displayName | ✅ | ✅ | ✅ | Lie le groupe au rôle portant le même nom, ou crée un rôle personnalisé vide. Renommer le groupe renomme le rôle |
members (value, display) | ✅ | ✅ | ✅ | value est l’id SCIM de l’utilisateur |
Opérations
| Opération | Prise en charge | Comportement |
|---|---|---|
POST /Groups | ✅ | Lie le groupe au rôle ou crée le rôle |
GET /Groups/{id} | ✅ | |
GET /Groups?filter=… | ⚠️ | Uniquement attribute eq "value", sur displayName ou externalId |
GET /Groups (sans filtre) | ✅ | Tous les rôles gérés par l’IdP, page par page — voir Pagination |
PUT /Groups/{id} | ✅ | Remplace le nom et les membres |
PATCH /Groups/{id} | ✅ | add, replace et remove sur members (y compris members[value eq "…"]) et displayName |
DELETE /Groups/{id} | ✅ | Retire le rôle à ses membres. Le rôle lui-même n’est supprimé que si aucun administrateur ne l’a jamais configuré |
Pagination
GET /Users et GET /Groups prennent en charge la pagination par index (RFC 7644 §3.4.2.4), avec ou sans filtre.
| Paramètre | Par défaut | Remarques |
|---|---|---|
startIndex | 1 | Position (à partir de 1) du premier résultat. Une valeur inférieure à 1 vaut 1 |
count | 200 | Résultats par page, 200 au maximum. count=0 ne renvoie que totalResults |
La réponse indique totalResults (toutes les correspondances), startIndex et itemsPerPage (les résultats de cette page). Demandez la page suivante avec startIndex + itemsPerPage jusqu’à obtenir totalResults résultats. L’ordre des résultats est fixe : les pages ne sautent ni ne répètent aucun résultat, sauf si des utilisateurs ou des groupes sont créés ou supprimés entre-temps.
Points de terminaison de découverte
Les trois exigent le même jeton bearer que les autres points de terminaison SCIM.
| Point de terminaison | Contenu |
|---|---|
GET /ServiceProviderConfig | Capacités, présentées ci-dessous |
GET /Schemas | Schémas Core User et Group, limités aux attributs ci-dessus |
GET /ResourceTypes | User (/Users) et Group (/Groups), sans extensions de schéma |
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:ServiceProviderConfig"],
"documentationUri": "https://help.mtime.app",
"patch": { "supported": true },
"bulk": { "supported": false, "maxOperations": 0, "maxPayloadSize": 0 },
"filter": { "supported": true, "maxResults": 200 },
"changePassword": { "supported": false },
"sort": { "supported": false },
"etag": { "supported": false },
"authenticationSchemes": [
{
"type": "oauthbearertoken",
"name": "OAuth Bearer Token",
"description": "Bearer token issued for the workspace's provisioning service user",
"primary": true
}
]
}Dépannage
| Problème | Solution |
|---|---|
400 Unsupported filter | Utilisez eq sur userName ou externalId (utilisateurs), ou sur displayName ou externalId (groupes) |
409 uniqueness à la création | Un autre utilisateur a déjà cet externalId, ou l’employé a déjà un utilisateur. Recherchez l’utilisateur avec filter=externalId eq "…" et mettez-le à jour plutôt que de le recréer |
| Un changement de prénom ou de nom de famille n’apparaît pas | mTime enregistre un seul nom complet et ne le découpe jamais : il ne peut pas en modifier une seule partie. Envoyez givenName et familyName ensemble dans le même PATCH, ou envoyez name.formatted ou displayName |
| Un changement de nom venant de l’IdP n’apparaît pas | C’est attendu pour un utilisateur lié à un employé tant que Utiliser les noms du fournisseur d'identité comme noms d'employés est désactivé : le nom affiché est celui de l’employé, qui provient de votre intégration RH. Activez ce paramètre si l’IdP doit définir les noms des employés — voir Quel nom SCIM définit |
| Un changement d’adresse e-mail n’apparaît pas | L’utilisateur a déjà activé son compte ; son adresse e-mail de connexion n’est plus gérée par le provisionnement |
403 sur un utilisateur | L’utilisateur est propriétaire de l’espace de travail, ce que SCIM ne peut pas gérer |