Autenticación
Login, registro, verificación de email y recuperación de contraseña. Todos los endpoints que no son de solo lectura requieren el Bearer Token obtenido aquí.
Iniciar sesión
Valida email y contraseña y emite un token Bearer (token de acceso personal) con la vigencia configurada en el servidor (90 días por defecto). El token emitido aparece también en `GET /tokens` con el email del usuario como nombre. Condiciones para emitirlo: usuario activo, email verificado y empresa asociada activa. Registra el acceso (usuario + IP).
Cerrar sesión
Revoca el token Bearer con el que se hizo la petición (si es un Personal Access Token, queda revocado igual) y marca como inactivo un registro de acceso activo del usuario para la IP de origen (no necesariamente el más reciente). Los demás tokens del usuario siguen vigentes.
Obtener el usuario del token actual
Retorna el usuario dueño del token Bearer. Útil para validar que un token sigue vigente. Un 200 solo indica que el token autentica: no se comprueba si el usuario o su empresa están activos (un usuario desactivado conserva sus tokens y recibe 200 con `active` = 0, aunque `POST /auth/login` lo rechazaría). Para saber si la cuenta puede operar, revise `active`. Respuesta idéntica a `GET /profile`. `dataRecords.data` es un arreglo con un único elemento.
Reenviar correo de verificación de email
Público (sin autenticación). Busca el usuario por `email` y le reenvía el correo con el enlace firmado de verificación (válido 60 minutos, ver `GET /verify-email/{id}/{hash}`). El campo no se valida con reglas: si falta o no corresponde a ningún usuario se responde 404. Si el email ya estaba verificado se responde 400 y no se envía nada. La respuesta 200 no incluye `success`.
Restablecer contraseña
Público (sin autenticación). Restablece la contraseña usando el token recibido por correo tras `POST /forgot-password`. El token es de un solo uso y expira a los 60 minutos. Al restablecer se regenera el `remember_token` del usuario; los tokens Bearer ya emitidos no se revocan. Tras el restablecimiento se envía al usuario un correo de aviso de cambio de contraseña.
Solicitar restablecimiento de contraseña
Público (sin autenticación). Encola el envío al email indicado de un correo con un enlace a la aplicación web de MATICERTS (`/#/auth/password-reset/{token}?email=...`); el segmento `{token}` de ese enlace es el que se envía a `POST /reset-password` (válido 60 minutos). Cada solicitud aceptada invalida el token anterior, por lo que los enlaces de correos previos dejan de funcionar. Solo se permite una solicitud por usuario cada 60 segundos; antes de ese plazo se responde 422 con `errors.email`.
Registrar nueva empresa y usuario
Público (sin autenticación). Crea en una sola transacción el usuario (activo), la empresa (el DV se calcula a partir de `dni` y el email de la empresa es el del usuario) y el vínculo entre ambos. Verificación del email según `type_id`: 2 y 3 quedan verificados automáticamente y pueden iniciar sesión de inmediato; 4 (Partner) recibe un correo de verificación y no puede iniciar sesión hasta verificarlo. No retorna token: después se debe llamar a `POST /auth/login`.
Verificar dirección de correo electrónico
Público (sin autenticación). Destino del enlace firmado que llega por correo; lo abre el navegador del usuario, no se invoca manualmente. La URL completa (incluidos `expires` y `signature`) la genera el backend y no debe modificarse. El enlace solo vale para el correo al que se envió: `hash` debe ser el SHA-1 del correo **actual** del usuario; si el usuario cambió su correo después de recibirlo (p. ej. con PUT /profile/{id}), el enlace anterior ya no verifica nada y redirige a `{FRONTEND_URL}/#/auth/email-resend` (un enlace con firma inválida o expirada no redirige: responde 403). Si la firma y `hash` son válidos marca el email como verificado y redirige al login del frontend; si ya estaba verificado solo redirige. Verificar el correo **no cambia `active`**: el registro y la sincronización crean las cuentas activas, así que un usuario inactivo es uno que desactivó un administrador y sigue inactivo (el login lo rechaza) hasta que un administrador lo reactive. Límite: 6 peticiones por minuto por IP.