Documentación API

Autenticación Interna

Endpoints de autenticación para la aplicación de Docmind. Usan JWT tokens enviados como cookie HTTP-only o en el header Authorization.


POST /api/auth/login

Autentica un usuario con email y password. Devuelve un JWT token para acceso a la API interna.

POST /api/auth/login

Headers

Content-Type: application/json

Body (JSON)

{
  "email": "usuario@ejemplo.com",
  "password": "tu_password"
}
  • email: (obligatorio) Email del usuario.
  • password: (obligatorio) Contraseña del usuario.

Ejemplos

curl -X POST https://api-docmind.devol.es/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email": "usuario@ejemplo.com", "password": "tu_password"}'

Respuesta exitosa

{
  "access_token": "eyJhbGciOiJIUzI1NiIs...",
  "is_admin": false,
  "user": {
    "id": "user-uuid-123",
    "nombre": "Juan Pérez",
    "email": "usuario@ejemplo.com",
    "role_name": "admin"
  }
}

El token JWT se envía también como cookie HTTP-only para uso desde el navegador.

Respuestas de error

400 Bad Request

Faltan campos obligatorios.

{"msg": "Se requiere email y contraseña"}
401 Unauthorized

Credenciales incorrectas.

{"msg": "Credenciales incorrectas"}
415 Unsupported Media Type

Content-Type no es JSON.

{"msg": "La solicitud debe tener formato JSON"}
500 Internal Server Error

Error interno.

{"msg": "Error interno del servidor"}

POST /api/auth/impersonar

Permite a un administrador global cambiar de cliente activo. Genera un nuevo token con el contexto del cliente seleccionado.

POST /api/auth/impersonar

Headers

Content-Type: application/json
Authorization: Bearer JWT_TOKEN

Body (JSON)

{
  "cliente_id": "62242e32-ba8f-4b59-9c4b-7867fc51a5f6"
}
  • cliente_id: (obligatorio) ID del cliente al que se quiere cambiar.

Ejemplos

curl -X POST https://api-docmind.devol.es/api/auth/impersonar \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer JWT_TOKEN" \
  -d '{"cliente_id": "62242e32-ba8f-4b59-9c4b-7867fc51a5f6"}'

Respuesta exitosa

{
  "access_token": "eyJhbGciOiJIUzI1NiIs...(nuevo)",
  "is_admin": true,
  "cliente_nombre": "Empresa Demo"
}

Devuelve un nuevo JWT con el contexto del cliente seleccionado. Solo disponible para global_admin.

Respuestas de error

400 Bad Request

Falta cliente_id.

{"msg": "Se requiere cliente_id"}
403 Forbidden

No es administrador global.

{"msg": "Acceso denegado: se requiere rol de administrador global"}
404 Not Found

Cliente no encontrado.

{"msg": "Cliente no encontrado"}

POST /api/auth/logout

Cierra la sesión del usuario. Invalida la cookie JWT.

POST /api/auth/logout

Headers

Authorization: Bearer JWT_TOKEN

Ejemplos

curl -X POST https://api-docmind.devol.es/api/auth/logout \
  -H "Authorization: Bearer JWT_TOKEN"

Respuesta exitosa

{"msg": "Logout exitoso"}

La cookie de sesión se elimina.

Respuestas de error

401 Unauthorized

Token inválido o ya expirado.

{"msg": "Token inválido"}

GET /api/auth/user-info

Obtiene la información del usuario autenticado, incluyendo su rol y cliente activo.

GET /api/auth/user-info

Headers

Authorization: Bearer JWT_TOKEN

Ejemplos

curl -X GET https://api-docmind.devol.es/api/auth/user-info \
  -H "Authorization: Bearer JWT_TOKEN"

Respuesta exitosa

{
  "id": "user-uuid-123",
  "nombre": "Juan Pérez",
  "email": "usuario@ejemplo.com",
  "role_name": "admin",
  "is_global_admin": false,
  "cliente_id": "62242e32-ba8f-4b59-9c4b-7867fc51a5f6",
  "cliente_nombre": "Empresa Demo"
}

Información completa del usuario autenticado.

Respuestas de error

401 Unauthorized

Token inválido o expirado.

{"msg": "Token inválido"}
404 Not Found

Usuario no encontrado.

{"msg": "Usuario no encontrado"}

© 2025 Devol. Todos los derechos reservados.