Skip to content

Autenticación

La API Voki utiliza autenticación basada en JWT (JSON Web Tokens) con soporte para MFA (Multi-Factor Authentication) vía TOTP. Todos los endpoints autenticados requieren el header Authorization con el token y X-Tenant con el slug del tenant.

Headers Obligatorios

HeaderDescripciónEjemplo
AuthorizationToken JWT de accesoBearer eyJhbGci...
X-TenantSlug del tenantavanter
Content-TypeTipo del contenidoapplication/json

Endpoints

MétodoEndpointDescripción
POST/api/auth/loginLogin con email y contraseña
POST/api/auth/refreshRenovar token de acceso
POST/api/auth/mfa/verifyVerificar código MFA
POST/api/auth/logoutCerrar sesión

Login

Autentica a un usuario y devuelve tokens JWT.

POST /api/auth/login

Request Body

CampoTipoObligatorioDescripción
emailstringEmail del usuario
passwordstringContraseña del usuario
tenantstringSlug del tenant

Ejemplo de Request

bash
curl -X POST https://voki.avanter.com.br/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{
    "email": "admin@empresa.com",
    "password": "senhaSegura123",
    "tenant": "avanter"
  }'

Respuesta Exitosa (200)

json
{
  "data": {
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "user": {
      "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "name": "Admin",
      "email": "admin@empresa.com",
      "role": "manager",
      "avatar_url": null,
      "mfa_enabled": false
    }
  }
}

Respuesta con MFA Activado (200)

Cuando el usuario tiene MFA habilitado, el login devuelve un token parcial que requiere verificación MFA:

json
{
  "data": {
    "mfa_required": true,
    "mfa_token": "temp_token_for_mfa_verification..."
  }
}

Errores

CódigoDescripción
401Credenciales inválidas
422Campos obligatorios ausentes
429Rate limit excedido (máx. 5/min)
json
{
  "errors": {
    "detail": "Credenciais inválidas"
  }
}

Verificar MFA

Completa el flujo de autenticación cuando MFA está activado.

POST /api/auth/mfa/verify

Request Body

CampoTipoObligatorioDescripción
mfa_tokenstringToken temporal recibido en el login
codestringCódigo TOTP de 6 dígitos

Ejemplo de Request

bash
curl -X POST https://voki.avanter.com.br/api/auth/mfa/verify \
  -H "Content-Type: application/json" \
  -d '{
    "mfa_token": "temp_token_for_mfa_verification...",
    "code": "123456"
  }'

Respuesta Exitosa (200)

json
{
  "data": {
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "user": {
      "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "name": "Admin",
      "email": "admin@empresa.com",
      "role": "manager",
      "avatar_url": null,
      "mfa_enabled": true
    }
  }
}

Errores

CódigoDescripción
401Código MFA inválido o expirado
422Campos obligatorios ausentes

Refresh Token

Renueva el token de acceso usando el refresh token.

POST /api/auth/refresh

Request Body

CampoTipoObligatorioDescripción
refresh_tokenstringRefresh token recibido en el login

Ejemplo de Request

bash
curl -X POST https://voki.avanter.com.br/api/auth/refresh \
  -H "Content-Type: application/json" \
  -d '{
    "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
  }'

Respuesta Exitosa (200)

json
{
  "data": {
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
  }
}

Errores

CódigoDescripción
401Refresh token inválido o expirado

Logout

Invalida el token de acceso actual.

POST /api/auth/logout

Ejemplo de Request

bash
curl -X POST https://voki.avanter.com.br/api/auth/logout \
  -H "Authorization: Bearer eyJhbGci..." \
  -H "X-Tenant: avanter"

Respuesta Exitosa (200)

json
{
  "data": {
    "message": "Sessão encerrada com sucesso"
  }
}

Flujo de Autenticación

┌─────────────┐     POST /auth/login     ┌──────────────┐
│   Cliente    │ ──────────────────────── │   Servidor   │
│             │                          │              │
│             │ ◄── 200 + tokens ─────── │              │  (sin MFA)
│             │                          │              │
│             │ ◄── 200 + mfa_token ──── │              │  (con MFA)
│             │                          │              │
│             │  POST /auth/mfa/verify   │              │
│             │ ──────────────────────── │              │
│             │ ◄── 200 + tokens ─────── │              │
│             │                          │              │
│             │  GET /api/v1/users       │              │
│             │  + Authorization header  │              │
│             │  + X-Tenant header       │              │
│             │ ──────────────────────── │              │
│             │ ◄── 200 + data ──────── │              │
└─────────────┘                          └──────────────┘

Roles

RolNivelPermisos
attendant1Atender llamadas, gestionar clientes
supervisor2Todo de attendant + gestionar departamentos y sectores
manager3Todo de supervisor + gestionar usuarios, empresa, facturación y analytics

Documentação da API Voki v4.0