Saltar al contenido

Referencia de SCIM 2.0

Referencia técnica para los equipos de gestión de identidades que conectan un IdP (Microsoft Entra ID, SailPoint IdentityIQ, …) con mTime: qué atributos y operaciones de SCIM 2.0 admite mTime y qué hace cada uno.

Descripción general

URL basehttps://<tu host de mTime>/api/scim/v2
EstándaresRFC 7643 (esquema), RFC 7644 (protocolo)
AutenticaciónToken de portador (bearer): una clave de API del usuario de servicio de aprovisionamiento del espacio de trabajo (consulta Configurar SCIM con Microsoft Entra ID)
Tipo de contenidoapplication/scim+json
Recursos/Users, /Groups
ErroresRespuestas de error SCIM (RFC 7644 §3.12)

Qué gestiona SCIM y qué no

mTime separa el usuario (inicio de sesión, roles, acceso) del empleado y sus contratos:

Usuario → Empleado → n contratos

SCIM gestiona el usuario: quién puede iniciar sesión, con qué nombre y con qué roles. Los empleados y los contratos —unidad organizativa, responsable, condiciones laborales, jornada teórica, fechas de inicio y fin— son datos con fecha sobre los que calcula mTime, y proceden de tu integración de RR. HH., no de SCIM. Un usuario SCIM se vincula con su empleado mediante el externalId (consulta Cómo se aprovisionan los usuarios).

Por eso mTime no admite la Enterprise User Extension: department, manager y employeeNumber son valores únicos sin fecha de vigencia, mientras que un empleado en mTime puede tener varios contratos con fecha.

Usuarios

Atributos

Esquema urn:ietf:params:scim:schemas:core:2.0:User.

AtributoLecturaCreaciónActualizaciónNotas
id✅——Lo asigna mTime; inmutable
externalId✅✅✅Clave estable (p. ej., número de empleado), única por espacio de trabajo; un duplicado devuelve 409 uniqueness. Se puede vincular a un atributo de empleado para el emparejamiento
userName✅✅⚠️La dirección de correo del usuario. Solo se puede cambiar mientras el usuario no haya activado su invitación
emails✅✅⚠️Se usa el valor principal (o el primero); misma regla que userName. Se devuelve como un único correo principal
name.givenName, name.familyName❌✅⚠️Se combinan en el nombre completo, solo cuando se envían juntos (en un mismo objeto name, o ambas rutas en el mismo PATCH). mTime guarda un único nombre completo y nunca lo divide, así que un PATCH con solo uno de ellos se ignora. En la creación y en PUT, un nombre o apellido suelto solo se usa cuando no hay name.formatted ni displayName. No se devuelven en la lectura: el nombre se devuelve como name.formatted
name.formatted✅✅⚠️Nombre completo; tiene prioridad sobre nombre/apellido. Una actualización no tiene efecto visible en un usuario vinculado a un empleado salvo que el IdP fije los nombres de los empleados; consulta Qué nombre fija SCIM
displayName✅✅⚠️Nombre completo. Misma regla de actualización que name.formatted
active✅—✅false suspende al usuario; true lo reactiva
meta.resourceType, meta.location✅——

Todos los demás atributos de Core User (nickName, title, phoneNumbers, addresses, password, …) y la Enterprise User Extension (urn:ietf:params:scim:schemas:extension:enterprise:2.0:User) no se admiten: se ignoran en la creación y la actualización y nunca se devuelven.

Qué nombre fija SCIM

mTime muestra un solo nombre por persona: el nombre del empleado cuando el usuario está vinculado a un empleado y, si no, el nombre del usuario.

  • Un usuario vinculado a un empleado muestra el nombre del empleado, que mantiene tu integración de RR. HH. De forma predeterminada, SCIM no actualiza un empleado existente, así que un nombre enviado por SCIM no tiene efecto visible para este usuario. Con Usar los nombres del proveedor de identidad para los empleados activado, cada creación, PUT o PATCH que lleve un nombre lo escribe también en el empleado vinculado; consulta Usar el nombre del proveedor de identidad para los empleados.
  • Un usuario sin empleado (como un borrador) muestra su propio nombre de usuario. SCIM lo fija al crearlo y puede cambiarlo hasta que la persona active su invitación; después sigue el nombre de su propia cuenta de mTime. Cuando más tarde un rol crea su empleado, este empieza con ese nombre.

Para cambiar el nombre de alguien que es empleado, cámbialo en tu sistema de RR. HH. o, con ese ajuste activado, en tu IdP.

Operaciones

OperaciónCompatibleComportamiento
POST /Users✅Crea el usuario como invitado y envía el correo de invitación. Es obligatorio un correo (emails, o userName cuando es una dirección). Lo vincula a un empleado existente si alguno coincide; si no, crea un borrador sin rol, sin empleado y sin invitación. 409 si el externalId o el empleado ya están ocupados
GET /Users/{id}✅
GET /Users?filter=…⚠️Solo attribute eq "value", sobre userName o externalId. Otros atributos u operadores devuelven 400. Se combina con la paginación
GET /Users (sin filtro)✅Todos los usuarios, página a página; consulta Paginación
PUT /Users/{id}✅Aplica los atributos admitidos indicados arriba
PATCH /Users/{id}⚠️add y replace sobre active, userName, emails, displayName, name (objeto), name.givenName, name.familyName, name.formatted, externalId, o sin ruta (recurso parcial). Una ruta puede llevar el prefijo del esquema (urn:ietf:params:scim:schemas:core:2.0:User:name.givenName). remove y las demás rutas se ignoran
DELETE /Users/{id}✅Elimina la cuenta de usuario (eliminación lógica) y cierra todas las sesiones. Se conservan el empleado y su historial. Devuelve 204

Los usuarios con el rol de propietario no se pueden cambiar ni eliminar mediante SCIM (403).

¿Desactivar o eliminar?

PATCH active=falseDELETE
Puede iniciar sesiónNo: las sesiones se cierran de inmediatoNo: las sesiones se cierran de inmediato
Cuenta de usuarioSe conserva, con el estado suspendidoSe elimina (eliminación lógica)
Empleado, registros de tiempo, aprobacionesSe conservanSe conservan
VueltaPATCH active=true restaura el mismo usuarioUn nuevo POST crea un usuario nuevo, vinculado al mismo empleado

Grupos

Los grupos se corresponden con roles de mTime: el IdP gestiona la existencia y la pertenencia de un grupo, y los administradores de mTime gestionan los permisos del rol. Consulta Cómo los grupos se convierten en roles.

Atributos

Esquema urn:ietf:params:scim:schemas:core:2.0:Group.

AtributoLecturaCreaciónActualizaciónNotas
id✅——Lo asigna mTime
externalId✅✅✅
displayName✅✅✅Se vincula al rol con el mismo nombre o crea un rol personalizado vacío. Cambiarlo cambia el nombre del rol
members (value, display)✅✅✅value es el id del usuario SCIM

Operaciones

OperaciónCompatibleComportamiento
POST /Groups✅Se vincula al rol o lo crea
GET /Groups/{id}✅
GET /Groups?filter=…⚠️Solo attribute eq "value", sobre displayName o externalId
GET /Groups (sin filtro)✅Todos los roles gestionados por el IdP, página a página; consulta Paginación
PUT /Groups/{id}✅Sustituye el nombre y los miembros
PATCH /Groups/{id}✅add, replace y remove sobre members (incluido members[value eq "…"]) y displayName
DELETE /Groups/{id}✅Quita el rol a sus miembros. El rol en sí solo se elimina si ningún administrador llegó a configurarlo

Paginación

GET /Users y GET /Groups admiten paginación por índice (RFC 7644 §3.4.2.4), con o sin filtro.

ParámetroPredeterminadoNotas
startIndex1Posición del primer resultado, empezando en 1. Los valores menores que 1 cuentan como 1
count200Resultados por página, como máximo 200. count=0 solo devuelve totalResults

La respuesta indica totalResults (todas las coincidencias), startIndex e itemsPerPage (los resultados de esta página). Pide la página siguiente con startIndex + itemsPerPage hasta tener totalResults resultados. Los resultados llegan en un orden fijo, así que las páginas no se saltan ni repiten resultados, salvo que se añadan o eliminen usuarios o grupos entretanto.

Endpoints de descubrimiento

Los tres requieren el mismo token de portador que los demás endpoints SCIM.

EndpointContenido
GET /ServiceProviderConfigCapacidades, que se muestran a continuación
GET /SchemasEsquemas Core User y Group, limitados a los atributos indicados arriba
GET /ResourceTypesUser (/Users) y Group (/Groups), sin extensiones de esquema
{
  "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
    }
  ]
}

Solución de problemas

ProblemaSolución
400 Unsupported filterUsa eq sobre userName o externalId (usuarios) o sobre displayName o externalId (grupos)
409 uniqueness al crearOtro usuario ya tiene este externalId, o el empleado ya tiene un usuario. Busca el usuario con filter=externalId eq "…" y actualízalo en su lugar
No se ve un cambio de nombre o de apellidomTime guarda un solo nombre completo y nunca lo divide, así que no puede cambiar solo una mitad. Envía givenName y familyName juntos en el mismo PATCH, o envía name.formatted o displayName
No se ve un cambio de nombre hecho en el IdPEs lo esperado para un usuario vinculado a un empleado mientras Usar los nombres del proveedor de identidad para los empleados está desactivado: el nombre que se muestra es el del empleado, que procede de tu integración de RR. HH. Activa el ajuste si el IdP debe fijar los nombres de los empleados; consulta Qué nombre fija SCIM
No se ve un cambio de correoEl usuario ya ha activado su cuenta; su correo de inicio de sesión ya no lo gestiona el aprovisionamiento
403 en un usuarioEl usuario es propietario del espacio de trabajo, y SCIM no puede gestionarlo