Source: https://ailoot.ai/docs/es/cabinet/auth/
Canonical: https://ailoot.ai/docs/es/cabinet/auth/
Language: es

[API del panel de control](https://ailoot.ai/docs/es/) 

# Inicio de sesión y sesiones

[Markdown](https://ailoot.ai/docs/es/cabinet/auth/index.md)

Métodos, campos de las solicitudes y respuestas.

Esta sección contiene 14 métodos. Abre un método para consultar las condiciones de acceso, los campos de la solicitud y la respuesta.

| Método y ruta | Descripción | Acceso |
| --- | --- | --- |
| `POST /api/v1/auth/forgot-password` | Solicitar el restablecimiento de contraseña | Sin iniciar sesión; las condiciones adicionales se indican en el método |
| `POST /api/v1/auth/login` | Iniciar sesión con correo electrónico y contraseña | Sin iniciar sesión; las condiciones adicionales se indican en el método |
| `POST /api/v1/auth/login/2fa` | Completar el inicio de sesión con TOTP | Sin iniciar sesión; las condiciones adicionales se indican en el método |
| `POST /api/v1/auth/logout` | Cerrar sesión y revocar el token de actualización | Sin iniciar sesión; las condiciones adicionales se indican en el método |
| `GET /api/v1/auth/me` | Usuario actual, saldo y límites | Token del panel de control |
| `POST /api/v1/auth/passkey/login/begin` | Iniciar el acceso con una clave de acceso | Sin iniciar sesión; las condiciones adicionales se indican en el método |
| `POST /api/v1/auth/passkey/login/finish` | Completar el acceso con una clave de acceso | Sin iniciar sesión; las condiciones adicionales se indican en el método |
| `POST /api/v1/auth/refresh` | Actualizar tokens | Sin iniciar sesión; las condiciones adicionales se indican en el método |
| `POST /api/v1/auth/register` | Registrarse | Sin iniciar sesión; las condiciones adicionales se indican en el método |
| `POST /api/v1/auth/reset-password` | Restablecer la contraseña | Sin iniciar sesión; las condiciones adicionales se indican en el método |
| `POST /api/v1/auth/revoke-all-sessions` | Revocar todas las sesiones | Token del panel de control |
| `POST /api/v1/auth/send-verify-code` | Enviar un código de verificación | Sin iniciar sesión; las condiciones adicionales se indican en el método |
| `POST /api/v1/auth/validate-invitation-code` | Validar una invitación | Sin iniciar sesión; las condiciones adicionales se indican en el método |
| `POST /api/v1/auth/validate-promo-code` | Validar un código promocional | Sin iniciar sesión; las condiciones adicionales se indican en el método |

**POST /api/v1/auth/forgot-password** — Solicitar el restablecimiento de contraseña

Acceso: sin iniciar sesión; las condiciones adicionales se indican en el método

Límite de frecuencia: 5 solicitudes en 60 segundos desde una misma dirección.

POST`/api/v1/auth/forgot-password`

## Campos JSON / formulario

| El campo | Tipo | Obligatorio | Validación / descripción |
| --- | --- | --- | --- |
| `email` | `string` | sí | required,email |
| `turnstile_token` | `string` | no |  |

Plantilla del cuerpo de la solicitud

```json
{
  "email": "PLACEHOLDER_EMAIL (string)",
  "turnstile_token": "PLACEHOLDER_TURNSTILE_TOKEN (string)"
}
```

PLACEHOLDER representa tu entrada y su tipo. Sustituye los valores y conserva solo los campos opcionales que necesites; los marcadores de cadena no se envían en lugar de números, boolean, objetos o arrays.

Esquema de la solicitud: `ForgotPasswordRequest`

## Respuesta

La respuesta JSON contiene code, message y data. El contenido de data se describe en los esquemas siguientes.

Esquemas de datos de la respuesta: `ForgotPasswordResponse`. Los campos y los tipos se describen en las páginas «Esquemas de datos».

Esquema de respuesta con valores ilustrativos

```json
{
  "code": 0,
  "message": "success",
  "data": {
    "message": "PLACEHOLDER_MESSAGE (string)"
  }
}
```

Notas: la operación cambia el estado o continúa una autorización de un solo uso; el ejemplo describe el contrato y no se ejecuta.

El método modifica datos. Repetir la solicitud solo es seguro si el método indica Idempotency-Key. Si se pierde la respuesta, comprueba primero el resultado (por ejemplo, la lista de claves) y después decide si repetir la solicitud.

**POST /api/v1/auth/login** — Iniciar sesión con correo electrónico y contraseña

Acceso: sin iniciar sesión; las condiciones adicionales se indican en el método

La disponibilidad de la función y las condiciones adicionales de acceso se comprueban al ejecutar la solicitud.

Límite de frecuencia: 20 solicitudes en 60 segundos desde una misma dirección.

POST`/api/v1/auth/login`

## Campos JSON / formulario

| El campo | Tipo | Obligatorio | Validación / descripción |
| --- | --- | --- | --- |
| `email` | `string` | sí | required,email |
| `password` | `string` | sí | required |
| `turnstile_token` | `string` | no |  |

Plantilla del cuerpo de la solicitud

```json
{
  "email": "PLACEHOLDER_EMAIL (string)",
  "password": "PLACEHOLDER_PASSWORD (string)",
  "turnstile_token": "PLACEHOLDER_TURNSTILE_TOKEN (string)"
}
```

PLACEHOLDER representa tu entrada y su tipo. Sustituye los valores y conserva solo los campos opcionales que necesites; los marcadores de cadena no se envían en lugar de números, boolean, objetos o arrays.

Esquema de la solicitud: `LoginRequest`

## Respuesta

La respuesta JSON contiene code, message y data. El contenido de data se describe en los esquemas siguientes.

Esquemas de datos de la respuesta: `TotpLoginResponse`, `User`, `AuthResponse`. Los campos y los tipos se describen en las páginas «Esquemas de datos».

Si hay varias respuestas posibles, sus campos se enumeran en esquemas separados; no debes combinarlos en un único objeto.

Notas: la operación cambia el estado o continúa una autorización de un solo uso; el ejemplo describe el contrato y no se ejecuta.

El método modifica datos. Repetir la solicitud solo es seguro si el método indica Idempotency-Key. Si se pierde la respuesta, comprueba primero el resultado (por ejemplo, la lista de claves) y después decide si repetir la solicitud.

**POST /api/v1/auth/login/2fa** — Completar el inicio de sesión con TOTP

Acceso: sin iniciar sesión; las condiciones adicionales se indican en el método

La disponibilidad de la función y las condiciones adicionales de acceso se comprueban al ejecutar la solicitud.

Límite de frecuencia: 20 solicitudes en 60 segundos desde una misma dirección.

POST`/api/v1/auth/login/2fa`

## Campos JSON / formulario

| El campo | Tipo | Obligatorio | Validación / descripción |
| --- | --- | --- | --- |
| `temp_token` | `string` | sí | required |
| `totp_code` | `string` | sí | required,len=6 |

Plantilla del cuerpo de la solicitud

```json
{
  "temp_token": "PLACEHOLDER_TEMP_TOKEN (string)",
  "totp_code": "PLACEHOLDER_TOTP_CODE (string)"
}
```

PLACEHOLDER representa tu entrada y su tipo. Sustituye los valores y conserva solo los campos opcionales que necesites; los marcadores de cadena no se envían en lugar de números, boolean, objetos o arrays.

Esquema de la solicitud: `Login2FARequest`

## Respuesta

La respuesta JSON contiene code, message y data. El contenido de data se describe en los esquemas siguientes.

Esquemas de datos de la respuesta: `User`, `AuthResponse`. Los campos y los tipos se describen en las páginas «Esquemas de datos».

Si hay varias respuestas posibles, sus campos se enumeran en esquemas separados; no debes combinarlos en un único objeto.

Notas: la operación cambia el estado o continúa una autorización de un solo uso; el ejemplo describe el contrato y no se ejecuta.

El método modifica datos. Repetir la solicitud solo es seguro si el método indica Idempotency-Key. Si se pierde la respuesta, comprueba primero el resultado (por ejemplo, la lista de claves) y después decide si repetir la solicitud.

**POST /api/v1/auth/logout** — Cerrar sesión y revocar el token de actualización

Acceso: sin iniciar sesión; las condiciones adicionales se indican en el método

POST`/api/v1/auth/logout`

## Campos JSON / formulario

| El campo | Tipo | Obligatorio | Validación / descripción |
| --- | --- | --- | --- |
| `refresh_token` | `string` | no | ; Opcional: revocar el token de actualización indicado |

Plantilla del cuerpo de la solicitud

```json
{
  "refresh_token": "PLACEHOLDER_REFRESH_TOKEN (string)"
}
```

PLACEHOLDER representa tu entrada y su tipo. Sustituye los valores y conserva solo los campos opcionales que necesites; los marcadores de cadena no se envían en lugar de números, boolean, objetos o arrays.

Esquema de la solicitud: `LogoutRequest`

## Respuesta

La respuesta JSON contiene code, message y data. El contenido de data se describe en los esquemas siguientes.

Esquemas de datos de la respuesta: `LogoutResponse`. Los campos y los tipos se describen en las páginas «Esquemas de datos».

Esquema de respuesta con valores ilustrativos

```json
{
  "code": 0,
  "message": "success",
  "data": {
    "message": "PLACEHOLDER_MESSAGE (string)"
  }
}
```

Notas: la operación cambia el estado o continúa una autorización de un solo uso; el ejemplo describe el contrato y no se ejecuta.

El método modifica datos. Repetir la solicitud solo es seguro si el método indica Idempotency-Key. Si se pierde la respuesta, comprueba primero el resultado (por ejemplo, la lista de claves) y después decide si repetir la solicitud.

**GET /api/v1/auth/me** — Usuario actual, saldo y límites

Acceso: token del panel de control

GET`/api/v1/auth/me`

Lectura; el ID se obtiene de tu respuesta anterior

```bash
curl --fail-with-body "https://ailoot.ai/api/v1/auth/me" \
  -H "Authorization: Bearer $TOKEN"
```

No se necesita cuerpo de solicitud. Envía los parámetros anteriores en la URL.

## Respuesta

La respuesta JSON contiene code, message y data. El contenido de data se describe en los esquemas siguientes.

Esquemas de datos de la respuesta: `User`, `UserProfileResponse`. Los campos y los tipos se describen en las páginas «Esquemas de datos».

Esquema de respuesta con valores ilustrativos

```json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": "PLACEHOLDER_ID (integer)",
    "email": "PLACEHOLDER_EMAIL (string)",
    "username": "PLACEHOLDER_USERNAME (string)",
    "role": "PLACEHOLDER_ROLE (string)",
    "balance": "PLACEHOLDER_BALANCE (number)",
    "frozen_balance": "PLACEHOLDER_FROZEN_BALANCE (number)",
    "concurrency": "PLACEHOLDER_CONCURRENCY (integer)",
    "status": "PLACEHOLDER_STATUS (string)",
    "last_active_at": "PLACEHOLDER_LAST_ACTIVE_AT (string)",
    "created_at": "PLACEHOLDER_CREATED_AT (string)",
    "updated_at": "PLACEHOLDER_UPDATED_AT (string)",
    "deleted_at": "PLACEHOLDER_DELETED_AT (string)",
    "balance_notify_enabled": "PLACEHOLDER_BALANCE_NOTIFY_ENABLED (boolean)",
    "balance_notify_threshold_type": "PLACEHOLDER_BALANCE_NOTIFY_THRESHOLD_TYPE (string)",
    "balance_notify_threshold": "PLACEHOLDER_BALANCE_NOTIFY_THRESHOLD (number)",
    "balance_notify_extra_emails": "PLACEHOLDER_BALANCE_NOTIFY_EXTRA_EMAILS (array)",
    "total_recharged": "PLACEHOLDER_TOTAL_RECHARGED (number)",
    "rpm_limit": "PLACEHOLDER_RPM_LIMIT (integer)",
    "api_keys": "PLACEHOLDER_API_KEYS (array)",
    "avatar_url": "PLACEHOLDER_AVATAR_URL (string)",
    "email_bound": "PLACEHOLDER_EMAIL_BOUND (boolean)"
  }
}
```

Notas: todos los datos personales y los objetos quedan limitados al sujeto del JWT.

Notas: los límites de gasto de las claves (quota, quota\_used) se devuelven en la respuesta de las claves, no en el perfil. frozen\_balance es el importe reservado y no se puede considerar saldo disponible.

**POST /api/v1/auth/passkey/login/begin** — Iniciar el acceso con una clave de acceso

Acceso: sin iniciar sesión; las condiciones adicionales se indican en el método

La disponibilidad de la función y las condiciones adicionales de acceso se comprueban al ejecutar la solicitud.

Límite de frecuencia: 20 solicitudes en 60 segundos desde una misma dirección.

POST`/api/v1/auth/passkey/login/begin`

## Campos JSON / formulario

| El campo | Tipo | Obligatorio | Validación / descripción |
| --- | --- | --- | --- |
| `turnstile_token` | `string` | no |  |

Plantilla del cuerpo de la solicitud

```json
{
  "turnstile_token": "PLACEHOLDER_TURNSTILE_TOKEN (string)"
}
```

PLACEHOLDER representa tu entrada y su tipo. Sustituye los valores y conserva solo los campos opcionales que necesites; los marcadores de cadena no se envían en lugar de números, boolean, objetos o arrays.

Esquema de la solicitud: `PasskeyBeginLoginRequest`

## Respuesta

La respuesta JSON contiene code, message y data. El contenido de data se describe en los esquemas siguientes.

Esquemas de datos de la respuesta: `PasskeyOptionsResponse`. Los campos y los tipos se describen en las páginas «Esquemas de datos».

Esquema de respuesta con valores ilustrativos

```json
{
  "code": 0,
  "message": "success",
  "data": {
    "session_token": "PLACEHOLDER_SESSION_TOKEN (string)",
    "options": "PLACEHOLDER_OPTIONS (any)"
  }
}
```

Notas: la operación cambia el estado o continúa una autorización de un solo uso; el ejemplo describe el contrato y no se ejecuta.

Notas: credential se obtiene de navigator.credentials y session\_token de begin. El cuerpo de finish debe ser \<=65536 bytes; registrar y eliminar requieren contraseña.

El método modifica datos. Repetir la solicitud solo es seguro si el método indica Idempotency-Key. Si se pierde la respuesta, comprueba primero el resultado (por ejemplo, la lista de claves) y después decide si repetir la solicitud.

**POST /api/v1/auth/passkey/login/finish** — Completar el acceso con una clave de acceso

Acceso: sin iniciar sesión; las condiciones adicionales se indican en el método

La disponibilidad de la función y las condiciones adicionales de acceso se comprueban al ejecutar la solicitud.

Límite de frecuencia: 20 solicitudes en 60 segundos desde una misma dirección.

POST`/api/v1/auth/passkey/login/finish`

## Campos JSON / formulario

| El campo | Tipo | Obligatorio | Validación / descripción |
| --- | --- | --- | --- |
| `session_token` | `string` | sí | required |
| `name` | `string` | no |  |
| `credential` | `object` | sí | required |

Plantilla del cuerpo de la solicitud

```json
{
  "session_token": "PLACEHOLDER_SESSION_TOKEN (string)",
  "name": "PLACEHOLDER_NAME (string)",
  "credential": "PLACEHOLDER_CREDENTIAL (object)"
}
```

PLACEHOLDER representa tu entrada y su tipo. Sustituye los valores y conserva solo los campos opcionales que necesites; los marcadores de cadena no se envían en lugar de números, boolean, objetos o arrays.

Esquema de la solicitud: `PasskeyFinishRequest`

## Respuesta

La respuesta JSON contiene code, message y data. El contenido de data se describe en los esquemas siguientes.

Esquemas de datos de la respuesta: `User`, `AuthResponse`. Los campos y los tipos se describen en las páginas «Esquemas de datos».

Si hay varias respuestas posibles, sus campos se enumeran en esquemas separados; no debes combinarlos en un único objeto.

Notas: la operación cambia el estado o continúa una autorización de un solo uso; el ejemplo describe el contrato y no se ejecuta.

Notas: credential se obtiene de navigator.credentials y session\_token de begin. El cuerpo de finish debe ser \<=65536 bytes; registrar y eliminar requieren contraseña.

El método modifica datos. Repetir la solicitud solo es seguro si el método indica Idempotency-Key. Si se pierde la respuesta, comprueba primero el resultado (por ejemplo, la lista de claves) y después decide si repetir la solicitud.

**POST /api/v1/auth/refresh** — Actualizar tokens

Acceso: sin iniciar sesión; las condiciones adicionales se indican en el método

La disponibilidad de la función y las condiciones adicionales de acceso se comprueban al ejecutar la solicitud.

Límite de frecuencia: 30 solicitudes en 60 segundos desde una misma dirección.

POST`/api/v1/auth/refresh`

## Campos JSON / formulario

| El campo | Tipo | Obligatorio | Validación / descripción |
| --- | --- | --- | --- |
| `refresh_token` | `string` | sí | required |

Plantilla del cuerpo de la solicitud

```json
{
  "refresh_token": "PLACEHOLDER_REFRESH_TOKEN (string)"
}
```

PLACEHOLDER representa tu entrada y su tipo. Sustituye los valores y conserva solo los campos opcionales que necesites; los marcadores de cadena no se envían en lugar de números, boolean, objetos o arrays.

Esquema de la solicitud: `RefreshTokenRequest`

## Respuesta

La respuesta JSON contiene code, message y data. El contenido de data se describe en los esquemas siguientes.

Esquemas de datos de la respuesta: `RefreshTokenResponse`. Los campos y los tipos se describen en las páginas «Esquemas de datos».

Esquema de respuesta con valores ilustrativos

```json
{
  "code": 0,
  "message": "success",
  "data": {
    "access_token": "PLACEHOLDER_ACCESS_TOKEN (string)",
    "refresh_token": "PLACEHOLDER_REFRESH_TOKEN (string)",
    "expires_in": "PLACEHOLDER_EXPIRES_IN (integer)",
    "token_type": "PLACEHOLDER_TOKEN_TYPE (string)"
  }
}
```

Notas: la operación cambia el estado o continúa una autorización de un solo uso; el ejemplo describe el contrato y no se ejecuta.

El método modifica datos. Repetir la solicitud solo es seguro si el método indica Idempotency-Key. Si se pierde la respuesta, comprueba primero el resultado (por ejemplo, la lista de claves) y después decide si repetir la solicitud.

**POST /api/v1/auth/register** — Registro

Acceso: sin iniciar sesión; las condiciones adicionales se indican en el método

Límite de frecuencia: 5 solicitudes en 60 segundos desde una misma dirección.

POST`/api/v1/auth/register`

## Campos JSON / formulario

| El campo | Tipo | Obligatorio | Validación / descripción |
| --- | --- | --- | --- |
| `email` | `string` | sí | required,email |
| `password` | `string` | sí | required,min=6 |
| `verify_code` | `string` | no |  |
| `turnstile_token` | `string` | no |  |
| `promo_code` | `string` | no | ; Código promocional de registro |
| `invitation_code` | `string` | no | ; Código de invitación |

Plantilla del cuerpo de la solicitud

```json
{
  "email": "PLACEHOLDER_EMAIL (string)",
  "password": "PLACEHOLDER_PASSWORD (string)",
  "verify_code": "PLACEHOLDER_VERIFY_CODE (string)",
  "turnstile_token": "PLACEHOLDER_TURNSTILE_TOKEN (string)",
  "promo_code": "PLACEHOLDER_PROMO_CODE (string)",
  "invitation_code": "PLACEHOLDER_INVITATION_CODE (string)"
}
```

PLACEHOLDER representa tu entrada y su tipo. Sustituye los valores y conserva solo los campos opcionales que necesites; los marcadores de cadena no se envían en lugar de números, boolean, objetos o arrays.

Esquema de la solicitud: `RegisterRequest`

## Respuesta

La respuesta JSON contiene code, message y data. El contenido de data se describe en los esquemas siguientes.

Esquemas de datos de la respuesta: `User`, `AuthResponse`. Los campos y los tipos se describen en las páginas «Esquemas de datos».

Si hay varias respuestas posibles, sus campos se enumeran en esquemas separados; no debes combinarlos en un único objeto.

Notas: la operación cambia el estado o continúa una autorización de un solo uso; el ejemplo describe el contrato y no se ejecuta.

El método modifica datos. Repetir la solicitud solo es seguro si el método indica Idempotency-Key. Si se pierde la respuesta, comprueba primero el resultado (por ejemplo, la lista de claves) y después decide si repetir la solicitud.

**POST /api/v1/auth/reset-password** — Restablecer la contraseña

Acceso: sin iniciar sesión; las condiciones adicionales se indican en el método

Límite de frecuencia: 10 solicitudes en 60 segundos desde una misma dirección.

POST`/api/v1/auth/reset-password`

## Campos JSON / formulario

| El campo | Tipo | Obligatorio | Validación / descripción |
| --- | --- | --- | --- |
| `email` | `string` | sí | required,email |
| `token` | `string` | sí | required |
| `new_password` | `string` | sí | required,min=6 |

Plantilla del cuerpo de la solicitud

```json
{
  "email": "PLACEHOLDER_EMAIL (string)",
  "token": "PLACEHOLDER_TOKEN (string)",
  "new_password": "PLACEHOLDER_NEW_PASSWORD (string)"
}
```

PLACEHOLDER representa tu entrada y su tipo. Sustituye los valores y conserva solo los campos opcionales que necesites; los marcadores de cadena no se envían en lugar de números, boolean, objetos o arrays.

Esquema de la solicitud: `ResetPasswordRequest`

## Respuesta

La respuesta JSON contiene code, message y data. El contenido de data se describe en los esquemas siguientes.

Esquemas de datos de la respuesta: `ResetPasswordResponse`. Los campos y los tipos se describen en las páginas «Esquemas de datos».

Esquema de respuesta con valores ilustrativos

```json
{
  "code": 0,
  "message": "success",
  "data": {
    "message": "PLACEHOLDER_MESSAGE (string)"
  }
}
```

Notas: la operación cambia el estado o continúa una autorización de un solo uso; el ejemplo describe el contrato y no se ejecuta.

El método modifica datos. Repetir la solicitud solo es seguro si el método indica Idempotency-Key. Si se pierde la respuesta, comprueba primero el resultado (por ejemplo, la lista de claves) y después decide si repetir la solicitud.

**POST /api/v1/auth/revoke-all-sessions** — Revocar todas las sesiones

Acceso: token del panel de control

POST`/api/v1/auth/revoke-all-sessions`

No se necesita cuerpo de solicitud.

## Respuesta

La respuesta JSON contiene code, message y data. El contenido de data se describe en los esquemas siguientes.

Esquemas de datos de la respuesta: `RevokeAllSessionsResponse`. Los campos y los tipos se describen en las páginas «Esquemas de datos».

Esquema de respuesta con valores ilustrativos

```json
{
  "code": 0,
  "message": "success",
  "data": {
    "message": "PLACEHOLDER_MESSAGE (string)"
  }
}
```

Notas: todos los datos personales y los objetos quedan limitados al sujeto del JWT.

Notas: la operación cambia el estado o continúa una autorización de un solo uso; el ejemplo describe el contrato y no se ejecuta.

El método modifica datos. Repetir la solicitud solo es seguro si el método indica Idempotency-Key. Si se pierde la respuesta, comprueba primero el resultado (por ejemplo, la lista de claves) y después decide si repetir la solicitud.

**POST /api/v1/auth/send-verify-code** — Enviar un código de verificación

Acceso: sin iniciar sesión; las condiciones adicionales se indican en el método

Límite de frecuencia: 5 solicitudes en 60 segundos desde una misma dirección.

POST`/api/v1/auth/send-verify-code`

## Campos JSON / formulario

| El campo | Tipo | Obligatorio | Validación / descripción |
| --- | --- | --- | --- |
| `email` | `string` | sí | required,email |
| `turnstile_token` | `string` | no |  |

Plantilla del cuerpo de la solicitud

```json
{
  "email": "PLACEHOLDER_EMAIL (string)",
  "turnstile_token": "PLACEHOLDER_TURNSTILE_TOKEN (string)"
}
```

PLACEHOLDER representa tu entrada y su tipo. Sustituye los valores y conserva solo los campos opcionales que necesites; los marcadores de cadena no se envían en lugar de números, boolean, objetos o arrays.

Esquema de la solicitud: `SendVerifyCodeRequest`

## Respuesta

La respuesta JSON contiene code, message y data. El contenido de data se describe en los esquemas siguientes.

Esquemas de datos de la respuesta: `SendVerifyCodeResponse`. Los campos y los tipos se describen en las páginas «Esquemas de datos».

Esquema de respuesta con valores ilustrativos

```json
{
  "code": 0,
  "message": "success",
  "data": {
    "message": "PLACEHOLDER_MESSAGE (string)",
    "countdown": "PLACEHOLDER_COUNTDOWN (integer)"
  }
}
```

Notas: la operación cambia el estado o continúa una autorización de un solo uso; el ejemplo describe el contrato y no se ejecuta.

El método modifica datos. Repetir la solicitud solo es seguro si el método indica Idempotency-Key. Si se pierde la respuesta, comprueba primero el resultado (por ejemplo, la lista de claves) y después decide si repetir la solicitud.

**POST /api/v1/auth/validate-invitation-code** — Validar una invitación

Acceso: sin iniciar sesión; las condiciones adicionales se indican en el método

La disponibilidad de la función y las condiciones adicionales de acceso se comprueban al ejecutar la solicitud.

Límite de frecuencia: 10 solicitudes en 60 segundos desde una misma dirección.

POST`/api/v1/auth/validate-invitation-code`

## Campos JSON / formulario

| El campo | Tipo | Obligatorio | Validación / descripción |
| --- | --- | --- | --- |
| `code` | `string` | sí | required |

Plantilla del cuerpo de la solicitud

```json
{
  "code": "PLACEHOLDER_CODE (string)"
}
```

PLACEHOLDER representa tu entrada y su tipo. Sustituye los valores y conserva solo los campos opcionales que necesites; los marcadores de cadena no se envían en lugar de números, boolean, objetos o arrays.

Esquema de la solicitud: `ValidateInvitationCodeRequest`

## Respuesta

La respuesta JSON contiene code, message y data. El contenido de data se describe en los esquemas siguientes.

Esquemas de datos de la respuesta: `ValidateInvitationCodeResponse`. Los campos y los tipos se describen en las páginas «Esquemas de datos».

Esquema de respuesta con valores ilustrativos

```json
{
  "code": 0,
  "message": "success",
  "data": {
    "valid": "PLACEHOLDER_VALID (boolean)",
    "error_code": "PLACEHOLDER_ERROR_CODE (string)"
  }
}
```

Notas: el método comprueba la invitación y no canjea el código; el ejemplo describe el contrato y no se ejecuta.

El método solo comprueba el código de invitación y no lo consume. Puedes repetir la comprobación respetando el límite de frecuencia; el resultado refleja el estado del código en el momento de la solicitud.

**POST /api/v1/auth/validate-promo-code** — Validar un código promocional

Acceso: sin iniciar sesión; las condiciones adicionales se indican en el método

La disponibilidad de la función y las condiciones adicionales de acceso se comprueban al ejecutar la solicitud.

Límite de frecuencia: 10 solicitudes en 60 segundos desde una misma dirección.

POST`/api/v1/auth/validate-promo-code`

## Campos JSON / formulario

| El campo | Tipo | Obligatorio | Validación / descripción |
| --- | --- | --- | --- |
| `code` | `string` | sí | required |

Plantilla del cuerpo de la solicitud

```json
{
  "code": "PLACEHOLDER_CODE (string)"
}
```

PLACEHOLDER representa tu entrada y su tipo. Sustituye los valores y conserva solo los campos opcionales que necesites; los marcadores de cadena no se envían en lugar de números, boolean, objetos o arrays.

Esquema de la solicitud: `ValidatePromoCodeRequest`

## Respuesta

La respuesta JSON contiene code, message y data. El contenido de data se describe en los esquemas siguientes.

Esquemas de datos de la respuesta: `ValidatePromoCodeResponse`. Los campos y los tipos se describen en las páginas «Esquemas de datos».

Esquema de respuesta con valores ilustrativos

```json
{
  "code": 0,
  "message": "success",
  "data": {
    "valid": "PLACEHOLDER_VALID (boolean)",
    "bonus_amount": "PLACEHOLDER_BONUS_AMOUNT (number)",
    "error_code": "PLACEHOLDER_ERROR_CODE (string)",
    "message": "PLACEHOLDER_MESSAGE (string)"
  }
}
```

Notas: el método comprueba el código promocional y no abona ninguna bonificación; el ejemplo describe el contrato y no se ejecuta.

El método solo comprueba el código promocional y no lo aplica a la cuenta. Puedes repetir la comprobación respetando el límite de frecuencia; el resultado refleja el estado del código en el momento de la solicitud.

## Inicio de sesión y sesiones · 2FA

`POST /api/v1/auth/login` → `data`

- `data.requires_2fa === true` → [TotpLoginResponse](https://ailoot.ai/docs/es/cabinet/schemas-1/#totploginresponse) → `data.temp_token` → `POST /api/v1/auth/login/2fa` · `{"temp_token": "…", "totp_code": "…"}` → `data.access_token`
- `data.access_token` → [AuthResponse](https://ailoot.ai/docs/es/cabinet/schemas-1/#authresponse) → `Authorization: Bearer $TOKEN`

`totp_code`: `string`, `len = 6`. `temp_token ≠ access_token`. [User](https://ailoot.ai/docs/es/cabinet/schemas-1/#user)

¿Tienes alguna pregunta? Envíanos el Request ID y una descripción; te ayudaremos a resolverla.[Contactar con soporte](mailto:support@ailoot.ai)

## Ailoot · La empresa y su cartera de proyectos





Ailoot se apoya en la experiencia operativa acumulada, una amplia base de clientes, un servicio estable y el seguimiento continuo de KPI.





La empresa y su cartera de proyectos: millones de clientes; ventas por miles de millones al mes.





Ailoot aplica esa experiencia operativa al acceso por API a funciones de IA en productos de clientes, agentes, aplicaciones y automatizaciones.
