docs
API del panel de control

Inicio de sesión y sesiones

Markdown

Métodos, campos de las solicitudes y respuestas.

Guía completa

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 rutaDescripciónAcceso
POST /api/v1/auth/forgot-passwordSolicitar el restablecimiento de contraseñaSin iniciar sesión; las condiciones adicionales se indican en el método
POST /api/v1/auth/loginIniciar sesión con correo electrónico y contraseñaSin iniciar sesión; las condiciones adicionales se indican en el método
POST /api/v1/auth/login/2faCompletar el inicio de sesión con TOTPSin iniciar sesión; las condiciones adicionales se indican en el método
POST /api/v1/auth/logoutCerrar sesión y revocar el token de actualizaciónSin iniciar sesión; las condiciones adicionales se indican en el método
GET /api/v1/auth/meUsuario actual, saldo y límitesToken del panel de control
POST /api/v1/auth/passkey/login/beginIniciar el acceso con una clave de accesoSin iniciar sesión; las condiciones adicionales se indican en el método
POST /api/v1/auth/passkey/login/finishCompletar el acceso con una clave de accesoSin iniciar sesión; las condiciones adicionales se indican en el método
POST /api/v1/auth/refreshActualizar tokensSin iniciar sesión; las condiciones adicionales se indican en el método
POST /api/v1/auth/registerRegistrarseSin iniciar sesión; las condiciones adicionales se indican en el método
POST /api/v1/auth/reset-passwordRestablecer la contraseñaSin iniciar sesión; las condiciones adicionales se indican en el método
POST /api/v1/auth/revoke-all-sessionsRevocar todas las sesionesToken del panel de control
POST /api/v1/auth/send-verify-codeEnviar un código de verificaciónSin iniciar sesión; las condiciones adicionales se indican en el método
POST /api/v1/auth/validate-invitation-codeValidar una invitaciónSin iniciar sesión; las condiciones adicionales se indican en el método
POST /api/v1/auth/validate-promo-codeValidar un código promocionalSin 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 TipoObligatorioValidación / descripción
emailstringsírequired,email
turnstile_tokenstringno
Plantilla del cuerpo de la solicitud
{
  "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
{
  "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.

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 TipoObligatorioValidación / descripción
emailstringsírequired,email
passwordstringsírequired
turnstile_tokenstringno
Plantilla del cuerpo de la solicitud
{
  "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.

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 TipoObligatorioValidación / descripción
temp_tokenstringsírequired
totp_codestringsírequired,len=6
Plantilla del cuerpo de la solicitud
{
  "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.

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 TipoObligatorioValidación / descripción
refresh_tokenstringno; Opcional: revocar el token de actualización indicado
Plantilla del cuerpo de la solicitud
{
  "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
{
  "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.

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
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
{
  "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 TipoObligatorioValidación / descripción
turnstile_tokenstringno
Plantilla del cuerpo de la solicitud
{
  "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
{
  "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.

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 TipoObligatorioValidación / descripción
session_tokenstringsírequired
namestringno
credentialobjectsírequired
Plantilla del cuerpo de la solicitud
{
  "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.

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 TipoObligatorioValidación / descripción
refresh_tokenstringsírequired
Plantilla del cuerpo de la solicitud
{
  "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
{
  "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.

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 TipoObligatorioValidación / descripción
emailstringsírequired,email
passwordstringsírequired,min=6
verify_codestringno
turnstile_tokenstringno
promo_codestringno; Código promocional de registro
invitation_codestringno; Código de invitación
Plantilla del cuerpo de la solicitud
{
  "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.

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 TipoObligatorioValidación / descripción
emailstringsírequired,email
tokenstringsírequired
new_passwordstringsírequired,min=6
Plantilla del cuerpo de la solicitud
{
  "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
{
  "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.

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
{
  "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.

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 TipoObligatorioValidación / descripción
emailstringsírequired,email
turnstile_tokenstringno
Plantilla del cuerpo de la solicitud
{
  "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
{
  "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.

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 TipoObligatorioValidación / descripción
codestringsírequired
Plantilla del cuerpo de la solicitud
{
  "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
{
  "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.

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 TipoObligatorioValidación / descripción
codestringsírequired
Plantilla del cuerpo de la solicitud
{
  "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
{
  "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.

Inicio de sesión y sesiones · 2FA

POST /api/v1/auth/login → data

  • data.requires_2fa === true → TotpLoginResponse → data.temp_token → POST /api/v1/auth/login/2fa · {"temp_token": "…", "totp_code": "…"} → data.access_token
  • data.access_token → AuthResponse → Authorization: Bearer $TOKEN

totp_code: string, len = 6. temp_token ≠ access_token. User

¿Tienes alguna pregunta? Envíanos el Request ID y una descripción; te ayudaremos a resolverla.Contactar con soporte