Buscar en la documentación

Sesión y acceso

Ingreso, verificación en dos pasos, recuperación y cambio de contraseña.

12 endpointsPOST · 9GET · 1DELETE · 1PUT · 1
POST/auth/loginToken, vencimiento y usuario
Sesión
No
Límite
5 por minuto (correo + IP)

Cabeceras de la petición

CabeceraValorPara qué
AuthorizationBearer trazo_…Token de sesión que entrega el ingreso
Acceptapplication/jsonLa API siempre responde JSON (o un archivo, en la exportación)
Content-Typeapplication/jsonCuerpo en JSON
X-Socket-IDopcionalPara no recibir en tiempo real el aviso de tu propio cambio

Cuerpo

CampoTipoObligatorio
emailtexto · email · máx. 191Sí
passwordtexto · máx. 255Sí
{
  "email": "agente1@trazo.test",
  "password": "••••••••••••"
}

Respuesta 200

CampoTipo
dataobjeto
data.statustexto
data.tokentexto
data.token_typetexto
data.expires_attexto
data.userobjeto | null
data.user.idtexto
data.user.nametexto
data.user.emailtexto
data.user.roleslista de objeto
data.user.permissionslista de texto
data.user.mfaobjeto
{
  "data": {
    "status": "in_progress",
    "token": "trazo_…",
    "token_type": "trazo_…",
    "expires_at": "2026-11-01T14:30:00Z",
    "user": {
      "id": "01jbzk8m3q9w2e5r7t1y4u6i0p",
      "name": "Andrés Castro",
      "email": "agente1@trazo.test",
      "roles": [
        {
          "code": "in_progress",
          "name": "Andrés Castro"
        }
      ],
      "permissions": [
        "texto"
      ],
      "mfa": {
        "enabled": true,
        "required": true,
        "recovery_codes_left": 1
      }
    }
  }
}
Cabecera de la respuestaPara qué
X-Request-IdIdentificador de la petición; es el trace_id de los errores
Retry-AfterEn un 429: segundos para volver a intentar

Errores posibles

  • 401Sin sesión o la sesión expiró (UNAUTHENTICATED)
  • 422Algún dato no es válido (VALIDATION_FAILED, con el detalle por campo)
  • 429Demasiadas peticiones (TOO_MANY_REQUESTS, con Retry-After)

Todos llegan en formato RFC 9457 con su code y trace_id: ver Errores de la API.

Ver el módulo en la biblioteca
POST/auth/logout204 y el token queda revocado
Sesión
Sí
Límite
General

Cabeceras de la petición

CabeceraValorPara qué
AuthorizationBearer trazo_…Token de sesión que entrega el ingreso
Acceptapplication/jsonLa API siempre responde JSON (o un archivo, en la exportación)
X-Socket-IDopcionalPara no recibir en tiempo real el aviso de tu propio cambio

Respuesta 204

Sin cuerpo: la operación salió bien.

Cabecera de la respuestaPara qué
X-Request-IdIdentificador de la petición; es el trace_id de los errores

Errores posibles

  • 401Sin sesión o la sesión expiró (UNAUTHENTICATED)

Todos llegan en formato RFC 9457 con su code y trace_id: ver Errores de la API.

Ver el módulo en la biblioteca
GET/auth/meUsuario con roles, permisos y estado del MFA
Sesión
Sí
Límite
General

Cabeceras de la petición

CabeceraValorPara qué
AuthorizationBearer trazo_…Token de sesión que entrega el ingreso
Acceptapplication/jsonLa API siempre responde JSON (o un archivo, en la exportación)

Respuesta 200

CampoTipo
dataobjeto
data.idtexto
data.nametexto
data.emailtexto
data.roleslista de objeto
data.roles[].codetexto
data.roles[].nametexto
data.permissionslista de texto
data.mfaobjeto
data.mfa.enabledsí/no
data.mfa.requiredsí/no
data.mfa.recovery_codes_leftentero
{
  "data": {
    "id": "01jbzk8m3q9w2e5r7t1y4u6i0p",
    "name": "Andrés Castro",
    "email": "agente1@trazo.test",
    "roles": [
      {
        "code": "in_progress",
        "name": "Andrés Castro"
      }
    ],
    "permissions": [
      "texto"
    ],
    "mfa": {
      "enabled": true,
      "required": true,
      "recovery_codes_left": 1
    }
  }
}
Cabecera de la respuestaPara qué
X-Request-IdIdentificador de la petición; es el trace_id de los errores

Errores posibles

  • 401Sin sesión o la sesión expiró (UNAUTHENTICATED)

Todos llegan en formato RFC 9457 con su code y trace_id: ver Errores de la API.

Ver el módulo en la biblioteca
POST/auth/mfa/verifySegundo paso: code o recovery_code; devuelve la sesión completa
Sesión
Ingreso a medias
Límite
5 por minuto

Cabeceras de la petición

CabeceraValorPara qué
AuthorizationBearer trazo_…Token de sesión que entrega el ingreso
Acceptapplication/jsonLa API siempre responde JSON (o un archivo, en la exportación)
Content-Typeapplication/jsonCuerpo en JSON
X-Socket-IDopcionalPara no recibir en tiempo real el aviso de tu propio cambio

Cuerpo

CampoTipoObligatorio
codetextoNo
recovery_codetexto · máx. 20No
{
  "code": "in_progress",
  "recovery_code": "texto"
}

Respuesta 200

CampoTipo
dataobjeto
data.statustexto
data.tokentexto
data.token_typetexto
data.expires_attexto
data.userobjeto | null
data.user.idtexto
data.user.nametexto
data.user.emailtexto
data.user.roleslista de objeto
data.user.permissionslista de texto
data.user.mfaobjeto
{
  "data": {
    "status": "in_progress",
    "token": "trazo_…",
    "token_type": "trazo_…",
    "expires_at": "2026-11-01T14:30:00Z",
    "user": {
      "id": "01jbzk8m3q9w2e5r7t1y4u6i0p",
      "name": "Andrés Castro",
      "email": "agente1@trazo.test",
      "roles": [
        {
          "code": "in_progress",
          "name": "Andrés Castro"
        }
      ],
      "permissions": [
        "texto"
      ],
      "mfa": {
        "enabled": true,
        "required": true,
        "recovery_codes_left": 1
      }
    }
  }
}
Cabecera de la respuestaPara qué
X-Request-IdIdentificador de la petición; es el trace_id de los errores
Retry-AfterEn un 429: segundos para volver a intentar

Errores posibles

  • 401Sin sesión o la sesión expiró (UNAUTHENTICATED)
  • 422Algún dato no es válido (VALIDATION_FAILED, con el detalle por campo)
  • 429Demasiadas peticiones (TOO_MANY_REQUESTS, con Retry-After)

Todos llegan en formato RFC 9457 con su code y trace_id: ver Errores de la API.

Ver el módulo en la biblioteca
POST/auth/mfa/setupClave nueva sin confirmar y su dirección otpauth:// para el QR
Sesión
Ingreso a medias o sesión
Límite
General

Cabeceras de la petición

CabeceraValorPara qué
AuthorizationBearer trazo_…Token de sesión que entrega el ingreso
Acceptapplication/jsonLa API siempre responde JSON (o un archivo, en la exportación)
X-Socket-IDopcionalPara no recibir en tiempo real el aviso de tu propio cambio

Respuesta 200

CampoTipo
dataobjeto
data.secrettexto
data.uritexto
{
  "data": {
    "secret": "texto",
    "uri": "texto"
  }
}
Cabecera de la respuestaPara qué
X-Request-IdIdentificador de la petición; es el trace_id de los errores

Errores posibles

  • 401Sin sesión o la sesión expiró (UNAUTHENTICATED)

Todos llegan en formato RFC 9457 con su code y trace_id: ver Errores de la API.

Ver el módulo en la biblioteca
POST/auth/mfa/setup/confirmActiva el MFA con el primer code; devuelve los 8 códigos de recuperación y, si venía de un ingreso a medias, la sesión completa
Sesión
Ingreso a medias o sesión
Límite
5 por minuto

Cabeceras de la petición

CabeceraValorPara qué
AuthorizationBearer trazo_…Token de sesión que entrega el ingreso
Acceptapplication/jsonLa API siempre responde JSON (o un archivo, en la exportación)
Content-Typeapplication/jsonCuerpo en JSON
X-Socket-IDopcionalPara no recibir en tiempo real el aviso de tu propio cambio

Cuerpo

CampoTipoObligatorio
codetextoSí
{
  "code": "in_progress"
}

Respuesta 200

CampoTipo
dataobjeto
data.recovery_codeslista de objeto
data.sessionobjeto | null
data.session.statustexto
data.session.tokentexto
data.session.token_typetexto
data.session.expires_attexto
data.session.userobjeto | null
{
  "data": {
    "recovery_codes": [
      "texto"
    ],
    "session": {
      "status": "in_progress",
      "token": "trazo_…",
      "token_type": "trazo_…",
      "expires_at": "2026-11-01T14:30:00Z",
      "user": {
        "id": "01jbzk8m3q9w2e5r7t1y4u6i0p",
        "name": "Andrés Castro",
        "email": "agente1@trazo.test",
        "roles": [
          {
            "code": null,
            "name": null
          }
        ],
        "permissions": [
          "texto"
        ],
        "mfa": {
          "enabled": true,
          "required": true,
          "recovery_codes_left": 1
        }
      }
    }
  }
}
Cabecera de la respuestaPara qué
X-Request-IdIdentificador de la petición; es el trace_id de los errores
Retry-AfterEn un 429: segundos para volver a intentar

Errores posibles

  • 401Sin sesión o la sesión expiró (UNAUTHENTICATED)
  • 422Algún dato no es válido (VALIDATION_FAILED, con el detalle por campo)
  • 429Demasiadas peticiones (TOO_MANY_REQUESTS, con Retry-After)

Todos llegan en formato RFC 9457 con su code y trace_id: ver Errores de la API.

Ver el módulo en la biblioteca
POST/auth/mfa/recovery-codesCon un code actual, 8 códigos nuevos; los anteriores dejan de servir
Sesión
Sí
Límite
5 por minuto

Cabeceras de la petición

CabeceraValorPara qué
AuthorizationBearer trazo_…Token de sesión que entrega el ingreso
Acceptapplication/jsonLa API siempre responde JSON (o un archivo, en la exportación)
Content-Typeapplication/jsonCuerpo en JSON
X-Socket-IDopcionalPara no recibir en tiempo real el aviso de tu propio cambio

Cuerpo

CampoTipoObligatorio
codetextoSí
{
  "code": "in_progress"
}

Respuesta 200

CampoTipo
dataobjeto
data.recovery_codeslista de objeto
{
  "data": {
    "recovery_codes": [
      "texto"
    ]
  }
}
Cabecera de la respuestaPara qué
X-Request-IdIdentificador de la petición; es el trace_id de los errores
Retry-AfterEn un 429: segundos para volver a intentar

Errores posibles

  • 401Sin sesión o la sesión expiró (UNAUTHENTICATED)
  • 422Algún dato no es válido (VALIDATION_FAILED, con el detalle por campo)
  • 429Demasiadas peticiones (TOO_MANY_REQUESTS, con Retry-After)

Todos llegan en formato RFC 9457 con su code y trace_id: ver Errores de la API.

Ver el módulo en la biblioteca
DELETE/auth/mfaCon un code actual, desactiva el MFA si la política del rol no lo exige
Sesión
Sí
Límite
5 por minuto

Cabeceras de la petición

CabeceraValorPara qué
AuthorizationBearer trazo_…Token de sesión que entrega el ingreso
Acceptapplication/jsonLa API siempre responde JSON (o un archivo, en la exportación)
X-Socket-IDopcionalPara no recibir en tiempo real el aviso de tu propio cambio

Parámetros

NombreDóndeTipoObligatorio
codeConsultatextoSí

Respuesta 204

Sin cuerpo: la operación salió bien.

Cabecera de la respuestaPara qué
X-Request-IdIdentificador de la petición; es el trace_id de los errores
Retry-AfterEn un 429: segundos para volver a intentar

Errores posibles

  • 401Sin sesión o la sesión expiró (UNAUTHENTICATED)
  • 422Algún dato no es válido (VALIDATION_FAILED, con el detalle por campo)
  • 429Demasiadas peticiones (TOO_MANY_REQUESTS, con Retry-After)

Todos llegan en formato RFC 9457 con su code y trace_id: ver Errores de la API.

Ver el módulo en la biblioteca
POST/auth/password/forgot202 siempre: si el correo es de una cuenta activa, le llega un código
Sesión
No
Límite
3 cada 15 minutos (correo + IP)

Cabeceras de la petición

CabeceraValorPara qué
AuthorizationBearer trazo_…Token de sesión que entrega el ingreso
Acceptapplication/jsonLa API siempre responde JSON (o un archivo, en la exportación)
Content-Typeapplication/jsonCuerpo en JSON
X-Socket-IDopcionalPara no recibir en tiempo real el aviso de tu propio cambio

Cuerpo

CampoTipoObligatorio
emailtexto · email · máx. 191Sí
{
  "email": "agente1@trazo.test"
}

Respuesta 202

Cabecera de la respuestaPara qué
X-Request-IdIdentificador de la petición; es el trace_id de los errores
Retry-AfterEn un 429: segundos para volver a intentar

Errores posibles

  • 401Sin sesión o la sesión expiró (UNAUTHENTICATED)
  • 422Algún dato no es válido (VALIDATION_FAILED, con el detalle por campo)
  • 429Demasiadas peticiones (TOO_MANY_REQUESTS, con Retry-After)

Todos llegan en formato RFC 9457 con su code y trace_id: ver Errores de la API.

Ver el módulo en la biblioteca
POST/auth/password/verify-codeCon email y code, un pase de un solo uso (ticket) y si la cuenta pide segundo factor (mfa_required)
Sesión
No
Límite
5 por minuto (correo + IP)

Cabeceras de la petición

CabeceraValorPara qué
AuthorizationBearer trazo_…Token de sesión que entrega el ingreso
Acceptapplication/jsonLa API siempre responde JSON (o un archivo, en la exportación)
Content-Typeapplication/jsonCuerpo en JSON
X-Socket-IDopcionalPara no recibir en tiempo real el aviso de tu propio cambio

Cuerpo

CampoTipoObligatorio
emailtexto · email · máx. 191Sí
codetextoSí
{
  "email": "agente1@trazo.test",
  "code": "in_progress"
}

Respuesta 200

CampoTipo
dataobjeto
data.tickettexto
data.mfa_requiredsí/no
{
  "data": {
    "ticket": "texto",
    "mfa_required": true
  }
}
Cabecera de la respuestaPara qué
X-Request-IdIdentificador de la petición; es el trace_id de los errores
Retry-AfterEn un 429: segundos para volver a intentar

Errores posibles

  • 401Sin sesión o la sesión expiró (UNAUTHENTICATED)
  • 422Algún dato no es válido (VALIDATION_FAILED, con el detalle por campo)
  • 429Demasiadas peticiones (TOO_MANY_REQUESTS, con Retry-After)

Todos llegan en formato RFC 9457 con su code y trace_id: ver Errores de la API.

Ver el módulo en la biblioteca
POST/auth/password/resetCon email, ticket, password, su confirmación y, si hace falta, mfa_code o recovery_code; 204
Sesión
No
Límite
5 por minuto (correo + IP)

Cabeceras de la petición

CabeceraValorPara qué
AuthorizationBearer trazo_…Token de sesión que entrega el ingreso
Acceptapplication/jsonLa API siempre responde JSON (o un archivo, en la exportación)
Content-Typeapplication/jsonCuerpo en JSON
X-Socket-IDopcionalPara no recibir en tiempo real el aviso de tu propio cambio

Cuerpo

CampoTipoObligatorio
emailtexto · email · máx. 191Sí
tickettexto · mín. 64 · máx. 64Sí
passwordSolo el correo que ya trae la petición: buscar el nombre antes de validar el pase revelaría datos de la cuentatexto · mín. 12 · máx. 128Sí
mfa_codetexto | nullNo
recovery_codetexto | null · máx. 20No
password_confirmationtexto · mín. 12 · máx. 128Sí
{
  "email": "agente1@trazo.test",
  "ticket": "texto",
  "password": "••••••••••••",
  "mfa_code": "482913",
  "recovery_code": "texto",
  "password_confirmation": "••••••••••••"
}

Respuesta 204

Sin cuerpo: la operación salió bien.

Cabecera de la respuestaPara qué
X-Request-IdIdentificador de la petición; es el trace_id de los errores
Retry-AfterEn un 429: segundos para volver a intentar

Errores posibles

  • 401Sin sesión o la sesión expiró (UNAUTHENTICATED)
  • 422Algún dato no es válido (VALIDATION_FAILED, con el detalle por campo)
  • 429Demasiadas peticiones (TOO_MANY_REQUESTS, con Retry-After)

Todos llegan en formato RFC 9457 con su code y trace_id: ver Errores de la API.

Ver el módulo en la biblioteca
PUT/auth/passwordCon current_password, password y su confirmación; 204
Sesión
Sí
Límite
5 por minuto por persona

Cabeceras de la petición

CabeceraValorPara qué
AuthorizationBearer trazo_…Token de sesión que entrega el ingreso
Acceptapplication/jsonLa API siempre responde JSON (o un archivo, en la exportación)
Content-Typeapplication/jsonCuerpo en JSON
X-Socket-IDopcionalPara no recibir en tiempo real el aviso de tu propio cambio

Cuerpo

CampoTipoObligatorio
current_passwordtexto · máx. 255Sí
passwordtexto · mín. 12 · máx. 128Sí
password_confirmationtexto · mín. 12 · máx. 128Sí
{
  "current_password": "••••••••••••",
  "password": "••••••••••••",
  "password_confirmation": "••••••••••••"
}

Respuesta 204

Sin cuerpo: la operación salió bien.

Cabecera de la respuestaPara qué
X-Request-IdIdentificador de la petición; es el trace_id de los errores
Retry-AfterEn un 429: segundos para volver a intentar

Errores posibles

  • 401Sin sesión o la sesión expiró (UNAUTHENTICATED)
  • 422Algún dato no es válido (VALIDATION_FAILED, con el detalle por campo)
  • 429Demasiadas peticiones (TOO_MANY_REQUESTS, con Retry-After)

Todos llegan en formato RFC 9457 con su code y trace_id: ver Errores de la API.

Ver el módulo en la biblioteca