Saltar al contenido principal
Migo Docs

Usuarios CMS

API RESTRINGIDA

Requiere autorización de partner / operador. Consulta CMS → Inicio.

Los Usuarios CMS son operadores — empleados de Migo o del partner que usan el backoffice para gestionar tarjetahabientes, tarjetas y configuraciones de partners.

Token de aplicación (prerrequisito)

El inicio de sesión del usuario CMS requiere primero un token de acceso de aplicación. Obtenlo primero mediante el endpoint de login de aplicación y luego envíalo como Authorization: Bearer <app-access-token> en la llamada de login del usuario CMS.

# Emitir un token de aplicación
curl -X POST https://api.ali.app/cms/rest/app/auth/login \
-H "Content-Type: application/json" \
-d '{ "merchant": "merchant-abc123" }'

# Renovar el token de aplicación
curl -X POST https://api.ali.app/cms/rest/app/auth/refresh \
-H "Content-Type: application/json" \
-d '{ "refreshToken": "<app-refresh-token>" }'

Consulta Autenticación → CMS para más detalles.

Inicio de sesión

curl -X POST https://api.ali.app/cms/rest/app/users/login \
-H "Authorization: Bearer <app-access-token>" \
-H "Content-Type: application/json" \
-d '{
"email": "operator@partner.com",
"password": "*****"
}'

Respuesta:

{
"success": true,
"data": {
"id": 1,
"accessToken": "eyJhbGci...",
"refreshToken": "eyJhbGci...",
"email": "operator@partner.com",
"name": "Operator Name"
}
}

En las llamadas CMS posteriores, envía el accessToken devuelto como el header x-user-token en formato Bearer <accessToken> (el gateway lo valida contra el servicio de usuarios CMS). No existe un valor xUserToken separado.

Renovar el token

curl -X POST https://api.ali.app/cms/rest/app/users/refresh \
-H "Content-Type: application/json" \
-d '{ "refreshToken": "<refresh-token>" }'

Flujo de OTP

Algunas operaciones (otorgar permiso, solicitudes de proceso de saldo, operaciones masivas) requieren elevación por OTP. Solicita el OTP con POST, verifícalo con PUT:

# 1. Solicitar OTP
curl -X POST https://api.ali.app/cms/rest/app/users/auth/otp \
-H "Content-Type: application/json" \
-d '{ "email": "operator@partner.com", "purpose": "login" }'

# 2. Verificar OTP
curl -X PUT https://api.ali.app/cms/rest/app/users/auth/otp \
-H "Content-Type: application/json" \
-d '{ "email": "operator@partner.com", "otp": "654321", "purpose": "login" }'

No hay un campo channel ni code; los campos son email, otp (6 dígitos) y purpose.

Restablecimiento de contraseña

Ambos endpoints de contraseña usan PUT.

# Actualizar la contraseña del usuario (autoservicio, con token de restablecimiento)
curl -X PUT https://api.ali.app/cms/rest/app/users/auth/passwords \
-H "Content-Type: application/json" \
-d '{
"email": "operator@partner.com",
"token": "<reset-token>",
"newPassword": "NewSecureP@ss1",
"confirmPassword": "NewSecureP@ss1"
}'

# Generar una contraseña temporal para un usuario (acción de operador, sin cuerpo)
curl -X PUT https://api.ali.app/cms/rest/app/users/{cmsUserId}/auth/passwords \
-H "Authorization: Bearer <token>" \
-H "x-user-token: Bearer <cms-user-token>"

token es opcional. El segundo endpoint genera y envía por correo una contraseña temporal para el usuario destino y no recibe cuerpo de solicitud.

Requisitos de contraseña: mínimo 12 caracteres, al menos 1 mayúscula, 1 minúscula, 1 dígito, 1 símbolo. Migo rechaza las 50 contraseñas más comunes.

Ver los partners y permisos del usuario

# Partners a los que está asignado este usuario
curl https://api.ali.app/cms/rest/app/users/{cmsUserId}/partners \
-H "Authorization: Bearer <token>" \
-H "x-user-token: Bearer <cms-user-token>"

# Permisos en un partner específico
curl https://api.ali.app/cms/rest/app/users/{cmsUserId}/partners/{partnerId}/permissions \
-H "Authorization: Bearer <token>" \
-H "x-user-token: Bearer <cms-user-token>"

Otorgar / revocar permisos

Tanto otorgar como revocar usan PATCH. Los permisos se referencian por un permissionId numérico, y cada entrada requiere un partnerId.

# Otorgar
curl -X PATCH https://api.ali.app/cms/rest/app/users/{cmsUserId}/permissions/grant \
-H "Authorization: Bearer <token>" \
-H "x-user-token: Bearer <cms-user-token>" \
-H "Content-Type: application/json" \
-d '{ "permissions": [{ "permissionId": 1, "partnerId": "partner-123" }] }'

# Revocar
curl -X PATCH https://api.ali.app/cms/rest/app/users/{cmsUserId}/permissions/revoke \
-H "Authorization: Bearer <token>" \
-H "x-user-token: Bearer <cms-user-token>" \
-H "Content-Type: application/json" \
-d '{ "permissions": [{ "permissionId": 1, "partnerId": "partner-123" }] }'

Reemplazar el conjunto completo de permisos de un usuario

Para reemplazar el conjunto completo de permisos en una sola llamada (en lugar de otorgar/revocar de forma incremental), usa PUT:

curl -X PUT https://api.ali.app/cms/rest/app/users/{cmsUserId}/permissions \
-H "Authorization: Bearer <token>" \
-H "x-user-token: Bearer <cms-user-token>" \
-H "Content-Type: application/json" \
-d '{ "permissions": [{ "permissionId": 1, "partnerId": "partner-123" }, { "permissionId": 2, "partnerId": "partner-123" }] }'

Crear un usuario CMS

curl -X POST https://api.ali.app/cms/rest/app/partners/users \
-H "Authorization: Bearer <token>" \
-H "x-user-token: Bearer <cms-user-token>" \
-H "Content-Type: application/json" \
-d '{
"email": "new-op@partner.com",
"name": "Juan Pérez",
"partners": ["partner-123"],
"permissions": [1, 2, 3]
}'

name es un único campo de nombre completo, partners es un arreglo de IDs de partner y permissions es un arreglo de IDs numéricos de permiso. El nuevo usuario recibe un correo con una contraseña temporal y se le solicita establecer la suya en el primer inicio de sesión.

Actualizar un usuario CMS

curl -X PATCH https://api.ali.app/cms/rest/app/partners/users/{cmsUserId} \
-H "Authorization: Bearer <token>" \
-H "x-user-token: Bearer <cms-user-token>" \
-H "Content-Type: application/json" \
-d '{
"name": "Juan A. Pérez",
"status": "active",
"addPartners": ["partner-456"],
"removePartners": ["partner-123"],
"addPermissions": [4],
"removePermissions": [2]
}'

Todos los campos son opcionales. La asignación de partners se cambia con addPartners / removePartners, y los permisos con addPermissions / removePermissions.

Auditoría

La emisión de auditoría no está implementada en el gateway/servicios del CMS. El catálogo documentado lista audit.cms_user.login, audit.permission.granted y audit.permission.revoked.