Login de conductor (app móvil)
const url = 'https://api.dev.lade.com.mx/drivers/login';const options = { method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{"username":"jperez123","password":"TempPass123!"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.dev.lade.com.mx/drivers/login \ --header 'Content-Type: application/json' \ --data '{ "username": "jperez123", "password": "TempPass123!" }'Autentica contra el pool de Cognito dedicado a conductores usando username (autogenerado por POST /teams/{teamId}/drivers/{driverId}/access), no correo. A diferencia de /login (web), los tokens se devuelven directo en el body — no hay cookies HttpOnly, la app Flutter los guarda en almacenamiento seguro del dispositivo. Si es el primer login (contraseña temporal), Cognito responde con challenge: NEW_PASSWORD_REQUIRED en vez de tokens; ese challenge se resuelve con POST /drivers/respond-new-password.
Request Bodyrequired
Sección titulada «Request Bodyrequired»object
Example
{ "username": "jperez123", "password": "TempPass123!"}Responses
Sección titulada «Responses»Login exitoso, o challenge NEW_PASSWORD_REQUIRED si es el primer login
object
object
object
Estado del conductor
object
Usuario autogenerado para login en la app de conductores (ver POST /teams/{teamId}/drivers/{driverId}/access)
Estado de la cuenta del conductor en el pool de Cognito de la app móvil
Examples
Login exitoso
{ "message": "Login exitoso", "tokens": { "idToken": "eyJraWQ...", "accessToken": "eyJraWQ...", "refreshToken": "eyJjdHk...", "expiresIn": 3600 }, "driver": { "id": "770e8400-e29b-41d4-a716-446655440002", "teamId": "550e8400-e29b-41d4-a716-446655440000", "name": "Juan Pérez", "username": "jperez123", "appAccessStatus": "ACTIVE" }}Contraseña temporal, requiere cambio
{ "challenge": "NEW_PASSWORD_REQUIRED", "session": "AYABeGx...", "username": "jperez123", "message": "Debes crear tu contraseña antes de continuar"}Solicitud inválida
object
Example
{ "error": "Validation failed", "field": "email", "message": "Invalid email format"}No autenticado
object
Example
{ "error": "Unauthorized", "message": "Invalid or expired token"}Sin permisos
object
Example
{ "error": "Forbidden", "message": "You don't have permission to access this resource"}