Autenticación

Login, refresh, sesión y multifactor. Punto de entrada del dashboard y de cualquier integración interactiva.

Base path: /auth·16 endpoints·Source: mosend-wb-backend/src/modules/auth/auth.controller.ts
GET/auth/captcha-status
público

Indica si el captcha está desactivado globalmente.

Respuestas

  • 200
curl -X GET 'https://api.mosend.dev/auth/captcha-status'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "createdAt": "2026-05-01T03:42:18.123Z"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
GET/auth/factor-status
bearer

Estado de factores fuertes del usuario (2FA/passkeys) + si la sesión ya cumple MFA.

Respuestas

  • 200
curl -X GET 'https://api.mosend.dev/auth/factor-status' \
  -H 'X-Api-Key: mk_live_<prefix>.<secret>'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "createdAt": "2026-05-01T03:42:18.123Z"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/auth/step-up/2fa
bearer

Eleva la sesión a MFA verificando un código 2FA (TOTP/recuperación).

Body (JSON)

  • codestringrequerido

Respuestas

  • 200
curl -X POST 'https://api.mosend.dev/auth/step-up/2fa' \
  -H 'X-Api-Key: mk_live_<prefix>.<secret>' \
  -H 'Content-Type: application/json' \
  -d '{"code": "<code>"}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/auth/signup
público

Crear cuenta de usuario

Body (JSON)

  • emailstring · emailrequerido
  • passwordstringrequerido
  • namestringrequerido
  • captchaTokenstring

Respuestas

  • 201
curl -X POST 'https://api.mosend.dev/auth/signup' \
  -H 'Content-Type: application/json' \
  -d '{"email": "persona@empresa.com","password": "<password>","name": "<name>","captchaToken": "<captchaToken>"}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
GET/auth/signup/config
público

Flags públicos del signup (verificación de teléfono / email).

Respuestas

  • 200
curl -X GET 'https://api.mosend.dev/auth/signup/config'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "createdAt": "2026-05-01T03:42:18.123Z"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/auth/signup/request-code
público

Solicita un código OTP para verificar el teléfono en el registro.

Body (JSON)

  • emailstring · emailrequerido
  • passwordstringrequerido
  • namestringrequerido
  • phonestringrequerido
  • captchaTokenstring

Respuestas

  • 200
curl -X POST 'https://api.mosend.dev/auth/signup/request-code' \
  -H 'Content-Type: application/json' \
  -d '{"email": "persona@empresa.com","password": "<password>","name": "<name>","phone": "<phone>","captchaToken": "<captchaToken>"}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/auth/signup/verify-code
público

Verifica el código OTP, crea la cuenta y emite tokens.

Body (JSON)

  • emailstring · emailrequerido
  • phonestringrequerido
  • codestringrequerido

Respuestas

  • 201
curl -X POST 'https://api.mosend.dev/auth/signup/verify-code' \
  -H 'Content-Type: application/json' \
  -d '{"email": "persona@empresa.com","phone": "<phone>","code": "<code>"}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/auth/signup/resend-code
público

Reenvía el código OTP del registro pendiente.

Body (JSON)

  • emailstring · emailrequerido
  • phonestringrequerido

Respuestas

  • 200
curl -X POST 'https://api.mosend.dev/auth/signup/resend-code' \
  -H 'Content-Type: application/json' \
  -d '{"email": "persona@empresa.com","phone": "<phone>"}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/auth/login
público

Iniciar sesión

Body (JSON)

  • emailstring · emailrequerido
  • passwordstringrequerido
  • twoFactorCodestring
  • captchaTokenstring

Respuestas

  • 200
curl -X POST 'https://api.mosend.dev/auth/login' \
  -H 'Content-Type: application/json' \
  -d '{"email": "persona@empresa.com","password": "<password>","twoFactorCode": "<twoFactorCode>","captchaToken": "<captchaToken>"}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "email": "info@empresa.com",
    "password": "••••••••"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/auth/refresh
público

Renovar tokens (rotación)

Body (JSON)

  • refreshTokenstring

    Refresh token. OPCIONAL tras M10: las sesiones migradas lo envían por la cookie HttpOnly `mosend_rt`, no en el body. Se conserva opcional para las sesiones legacy que aún lo tienen en localStorage (transición).

Respuestas

  • 200
curl -X POST 'https://api.mosend.dev/auth/refresh' \
  -H 'Content-Type: application/json' \
  -d '{"refreshToken": "<refreshToken>"}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/auth/logout
público

Cerrar sesión (revoca el refresh token)

Body (JSON)

  • refreshTokenstring

Respuestas

  • 204
curl -X POST 'https://api.mosend.dev/auth/logout' \
  -H 'Content-Type: application/json' \
  -d '{"refreshToken": "<refreshToken>"}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/auth/forgot-password
público

Solicita un email de recuperación de contraseña. Por seguridad SIEMPRE responde 200 — no revela si el email existe o no en el sistema.

Body (JSON)

  • emailstring · emailrequerido
  • captchaTokenstring

Respuestas

  • 200
curl -X POST 'https://api.mosend.dev/auth/forgot-password' \
  -H 'Content-Type: application/json' \
  -d '{"email": "persona@empresa.com","captchaToken": "<captchaToken>"}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/auth/verify-email
público

Canjea el token de verificación de email enviado tras signup. Marca al usuario como verificado y desbloquea acciones sensibles (envío de mensajes, conectar WhatsApp, billing).

Body (JSON)

  • tokenstringrequerido

Respuestas

  • 200
curl -X POST 'https://api.mosend.dev/auth/verify-email' \
  -H 'Content-Type: application/json' \
  -d '{"token": "<token>"}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/auth/resend-verification
bearer

Reenvía el email de verificación al usuario logueado. Si ya está verificado, responde 200 sin enviar (idempotente).

Respuestas

  • 200
curl -X POST 'https://api.mosend.dev/auth/resend-verification' \
  -H 'X-Api-Key: mk_live_<prefix>.<secret>'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "createdAt": "2026-05-01T03:42:18.123Z"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/auth/reset-password
público

Canjea el token recibido por email + nueva contraseña. Si el token es inválido/expirado lanza 401. Tras éxito se revocan todas las sesiones activas del usuario (logout en todos los dispositivos).

Body (JSON)

  • tokenstringrequerido
  • passwordstringrequerido

Respuestas

  • 200
curl -X POST 'https://api.mosend.dev/auth/reset-password' \
  -H 'Content-Type: application/json' \
  -d '{"token": "<token>","password": "<password>"}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/auth/impersonate-redeem
público

Canjea un ImpersonationToken (creado por staff via /admin/impersonate) por una sesión válida del target user. El JWT resultante lleva el flag `impersonatedBy` para que el frontend muestre banner persistente.

Body (JSON)

  • tokenstringrequerido

Respuestas

  • 200
curl -X POST 'https://api.mosend.dev/auth/impersonate-redeem' \
  -H 'Content-Type: application/json' \
  -d '{"token": "<token>"}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}