Endpoints para iniciar y cerrar sesión, refrescar el token de acceso y autenticarse contra el
canal de sockets. Todos operan sobre el modelo Account:
una cuenta identifica a un usuario y tiene un único perfil según su type
(Client, Provider
o Admin).
La respuesta de un inicio de sesión correcto es el perfil que inició sesión
(Client, Provider o
Admin), con su account embebido y un access_token:
{
"…": "campos del perfil (Client / Provider / Admin)",
"account": {
"id": "int",
"email": "string",
"type": "int",
"status": "int",
"type_name": "client | provider | admin"
},
"access_token": {
"token_type": "bearer",
"access_token": "string (JWT)",
"created_at": "datetime",
"expires_at": "datetime",
"expires_in": "int (segundos)"
},
"registered": "bool — true si la cuenta se creó en esta misma petición"
}
El access_token.access_token se envía en las siguientes peticiones como cabecera
Authorization: Bearer <token> (ver Autenticación).
Tipo de cuenta (account.type) — valor de bits crecientes según el rol:
type |
Rol | Descripción |
|---|---|---|
0 (0x00) |
client |
Compra productos y servicios. |
15 (0x0f) |
provider |
Realiza entregas o presta servicios. |
48 (0x30) |
seller_admin |
Vendedor con app propia; puede crear órdenes para sus clientes, acceso limitado. |
112 (0x70) |
low_admin |
Atiende al público (órdenes, pagos); no cambia la configuración. |
119 (0x77) |
high_admin |
Gestiona configuración, productos, categorías y privilegios. |
127 (0x7f) |
owner_admin |
Propietario de la compañía; todos los privilegios sobre ella. |
255 (0xff) |
super_admin |
Acceso a todas las compañías (staff de DonDemand). |
account.type_name (client / provider / admin) resume el grupo.
Estado de la cuenta (account.status) — bitmask; se detalla en
Account. Resumen:
| Bit | Significado |
|---|---|
is_status_disabled |
Deshabilitada por un administrador: no puede iniciar sesión. |
is_status_blocked |
Bloqueada: puede iniciar sesión y consultar, pero no operar. |
is_phone_verified (invertido) |
El bit puesto significa teléfono sin verificar. |
is_email_verified (invertido) |
El bit puesto significa correo sin confirmar. |
is_identity_verified |
Identidad (documento) verificada. |
{info} Todos los endpoints de inicio de sesión están limitados a 5 intentos por
teléfono+ IP; superado el límite responden423contoo_many_attempts {seconds}.
Dado un correo de administrador, devuelve las compañías en las que ese correo tiene una cuenta de
tipo admin, para que el cliente muestre un selector antes de pedir la contraseña.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/login-lookup |
N/A |
{
"email": "required|email"
}
[
{
"id": "int (companyId)",
"name": "string",
"logo": "string|null",
"country_iso": "string",
"url": "string — URL del panel de esa compañía"
}
]
Si el correo no corresponde a ningún administrador, la lista viene vacía.
Verifica correo y contraseña y genera un token de acceso.
Opcionalmente actualiza la ubicación del usuario (latitude_e6 / longitude_e6) y el
push_token para notificaciones push. Al iniciar sesión, un provider o un admin pasan a
estado en línea.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/login-native |
N/A |
{
"type": "required|string|in:admin,provider,client",
"email": "required|email",
"password": "required|string|min:5|max:1024",
"latitude_e6": "integer",
"longitude_e6": "integer",
"push_token": "nullable|string|max:255"
}
{info} Para
providerla cuenta se busca en la compañía y en sus compañías vinculadas, priorizando las cuentas sin restricciones de estado.
Código 200 — el perfil que inició sesión (Admin,
Provider o Client)
con account, access_token y registered (ver Modelo).
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EB100 |
401 | El correo no existe o la contraseña no coincide. |
Inicia sesión (o registra un cliente) con un proveedor social (google, apple, facebook,
...). Para facebook y apple se envía el token del proveedor en code; para el resto, el
código de autorización OAuth.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/login-social |
N/A |
{
"method": "required|string|in:<drivers configurados>",
"code": "required|string",
"push_token": "string|max:255"
}
Código 200 si la cuenta ya existía, 201 si se creó en esta petición. Cuerpo igual que el
inicio de sesión nativo (ver Modelo).
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EB102 |
401 | El token/código del proveedor social no es válido o fue rechazado. |
Variante específica de Facebook que valida el user_token contra la app de Facebook configurada
en la compañía. Sólo crea/usa cuentas de tipo client.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/login-facebook |
N/A |
{
"user_token": "required|string",
"push_token": "string|max:255"
}
{warning} Requiere que la compañía tenga configurados
facebook_app_idyfacebook_secret_token; si no, el endpoint responde que la función no está disponible. Responde400 token_invalidsi el token no pertenece a esa app de Facebook.
Envía un código de 4 dígitos al phone (por SMS) o al email (por correo) del cliente, que
luego se usa como contraseña temporal en login-phone. Se debe enviar phone o
email, uno de los dos.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/send-login-code |
N/A |
{
"phone": "required_without:email|string",
"email": "required_without:phone|email"
}
{info} El inicio de sesión por teléfono debe estar habilitado en la configuración de la compañía. Si aún hay un código vigente, se reutiliza y se renueva su tiempo de vida.
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EB119 |
400 | No hay ninguna cuenta con ese correo. |
EB110 |
400 | Hay que esperar unos segundos antes de volver a pedir un código. |
ER011 |
403 | La cuenta del cliente está bloqueada (eliminada). |
Valida el código de 4 dígitos enviado con send-login-code e inicia sesión.
Si el código era de teléfono marca el teléfono como verificado; si era de correo, marca el correo
como confirmado.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/login-phone |
N/A |
{
"phone": "required_without:email|string",
"email": "required_without:phone|email",
"code": "required|string"
}
Código 200 — el Client con account, access_token y
registered (ver Modelo).
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EB107 |
403 | El código ha caducado. |
EB108 |
403 | El código no coincide. |
EB119 |
400 | No hay ninguna cuenta con ese correo. |
ER011 |
403 | La cuenta del cliente está bloqueada (eliminada). |
Invalida el token de acceso usado en la petición y borra el token de push de la cuenta.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /logout |
Authorization |
Respuesta 204 sin cuerpo.
Guarda el push_token (Firebase) de la cuenta autenticada para el envío de notificaciones push.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /token |
Authorization |
{
"push_token": "required|string|max:255"
}
Respuesta 204 sin cuerpo.
Devuelve un nuevo access_token para la cuenta autenticada, extendiendo la sesión sin volver a
pedir credenciales.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /token-refresh |
Authorization |
{
"token_type": "bearer",
"access_token": "string (JWT)",
"created_at": "datetime",
"expires_at": "datetime",
"expires_in": "int (segundos)"
}
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EB105 |
404 | El token no corresponde a ninguna cuenta. |
Devuelve la información de autenticación de la cuenta contra el canal de sockets en tiempo real
de la compañía. GET reutiliza el token vigente; POST fuerza generar uno nuevo.
| Método | URI | Cabeceras |
|---|---|---|
| GET | /companies/{companyId}/socket-auth |
Authorization |
| POST | /companies/{companyId}/socket-auth |
Authorization |
La respuesta se serializa con el recurso socketAuth de la cuenta.