Skip to content

Autenticação

A API Voki utiliza autenticação baseada em JWT (JSON Web Tokens) com suporte a MFA (Multi-Factor Authentication) via TOTP. Todos os endpoints autenticados requerem o header Authorization com o token e X-Tenant com o slug do tenant.

Headers Obrigatórios

HeaderDescriçãoExemplo
AuthorizationToken JWT de acessoBearer eyJhbGci...
X-TenantSlug do tenantavanter
Content-TypeTipo do conteúdoapplication/json

Endpoints

MétodoEndpointDescrição
POST/api/auth/loginLogin com email e senha
POST/api/auth/refreshRenovar token de acesso
POST/api/auth/mfa/verifyVerificar código MFA
POST/api/auth/logoutEncerrar sessão

Login

Autentica um usuário e retorna tokens JWT.

POST /api/auth/login

Request Body

CampoTipoObrigatórioDescrição
emailstringSimEmail do usuário
passwordstringSimSenha do usuário
tenantstringSimSlug do tenant

Exemplo 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"
  }'

Resposta de Sucesso (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
    }
  }
}

Resposta com MFA Ativado (200)

Quando o usuário tem MFA habilitado, o login retorna um token parcial que requer verificação MFA:

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

Erros

CódigoDescrição
401Credenciais inválidas
422Campos obrigatórios ausentes
429Rate limit excedido (máx. 5/min)
json
{
  "errors": {
    "detail": "Credenciais inválidas"
  }
}

Verificar MFA

Completa o fluxo de autenticação quando MFA está ativado.

POST /api/auth/mfa/verify

Request Body

CampoTipoObrigatórioDescrição
mfa_tokenstringSimToken temporário recebido no login
codestringSimCódigo TOTP de 6 dígitos

Exemplo 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"
  }'

Resposta de Sucesso (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
    }
  }
}

Erros

CódigoDescrição
401Código MFA inválido ou expirado
422Campos obrigatórios ausentes

Refresh Token

Renova o token de acesso usando o refresh token.

POST /api/auth/refresh

Request Body

CampoTipoObrigatórioDescrição
refresh_tokenstringSimRefresh token recebido no login

Exemplo de Request

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

Resposta de Sucesso (200)

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

Erros

CódigoDescrição
401Refresh token inválido ou expirado

Logout

Invalida o token de acesso atual.

POST /api/auth/logout

Exemplo de Request

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

Resposta de Sucesso (200)

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

Fluxo de Autenticação

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

Roles (Papéis)

RoleNívelPermissões
attendant1Atender chamadas, gerenciar clientes
supervisor2Tudo de attendant + gerenciar departamentos e setores
manager3Tudo de supervisor + gerenciar usuários, empresa, billing e analytics

Documentação da API Voki v4.0