# Zapini API — Autenticação

**Versão:** 1.2.0
**Base URL:** `https://zapini.app/api/v1`

---

## Autenticação

A API suporta dois métodos de autenticação:

### 1. Tokens de Usuário (Sanctum)
Após fazer login via `/auth/login`, você recebe um token de usuário para acesso completo à plataforma.

### 2. Tokens de API da Instância (Recomendado para Integrações)
Gere tokens de API (prefixo `sk_`) para instâncias específicas do WhatsApp. Esses tokens:
- Não exigem login de usuário
- São limitados a uma única instância
- Podem ser revogados independentemente
- Funcionam com todos os endpoints da API

### Headers Obrigatórios

```
Authorization: Bearer {your_token}
Accept: application/json
Content-Type: application/json
```

---

## POST /auth/login

Autenticar e receber token de acesso.

**Parâmetros:**

| Campo | Tipo | Obrigatório | Descrição |
|-------|------|-------------|-----------|
| email | string | Sim | E-mail do usuário |
| password | string | Sim | Senha do usuário |
| device_name | string | Não | Nome do dispositivo |

**Exemplo de Requisição:**

```bash
curl -X POST https://zapini.app/api/v1/auth/login \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "email": "user@example.com",
    "password": "your_password",
    "device_name": "My App"
  }'
```

**Resposta de Sucesso:**

```json
{
  "success": true,
  "message": "Login successful",
  "data": {
    "user": {
      "id": 1,
      "name": "User",
      "email": "user@example.com",
      "role": "admin",
      "locale": "en",
      "tenant": {
        "id": 1,
        "name": "My Company",
        "status": "active"
      }
    },
    "token": "1|abc123xyz...",
    "token_type": "Bearer",
    "expires_at": null
  }
}
```

**Resposta quando 2FA é Necessário:**

```json
{
  "success": true,
  "two_factor_required": true,
  "message": "Two-factor verification required"
}
```

---

## POST /auth/two-factor

Concluir login com código 2FA.

**Parâmetros:**

| Campo | Tipo | Obrigatório | Descrição |
|-------|------|-------------|-----------|
| email | string | Sim | E-mail do usuário |
| password | string | Sim | Senha do usuário |
| code | string | Sim | Código 2FA (6 dígitos) |
| device_name | string | Não | Nome do dispositivo |

---

## POST /auth/register

Registrar novo usuário.

**Parâmetros:**

| Campo | Tipo | Obrigatório | Descrição |
|-------|------|-------------|-----------|
| name | string | Sim | Nome completo |
| email | string | Sim | E-mail (único) |
| password | string | Sim | Senha (mín. 8 caracteres) |
| password_confirmation | string | Sim | Confirmação de senha |
| device_name | string | Não | Nome do dispositivo |
| terms_accepted | boolean | Sim | Aceite dos termos |

---

## GET /auth/me

Retorna dados do usuário autenticado.

**Headers:** Requer autenticação

**Resposta:**

```json
{
  "success": true,
  "data": {
    "user": {
      "id": 1,
      "name": "User",
      "email": "user@example.com",
      "role": "admin",
      "locale": "en",
      "timezone": "America/New_York",
      "email_verified": true,
      "two_factor_enabled": false,
      "tenant": {
        "id": 1,
        "name": "My Company",
        "status": "active"
      }
    }
  }
}
```

---

## PATCH /auth/me

Atualizar perfil do usuário.

**Parâmetros:**

| Campo | Tipo | Obrigatório | Descrição |
|-------|------|-------------|-----------|
| name | string | Não | Novo nome |
| locale | string | Não | Idioma (en, pt-BR, es) |
| timezone | string | Não | Fuso horário |

---

## POST /auth/logout

Encerrar sessão atual (revogar token).

---

## POST /auth/logout-all

Encerrar todas as sessões (revogar todos os tokens).

---

## POST /auth/refresh

Renovar token de acesso.

**Resposta:**

```json
{
  "success": true,
  "message": "Token refreshed",
  "data": {
    "token": "2|new_token...",
    "token_type": "Bearer",
    "expires_at": null
  }
}
```

---

## POST /auth/password/forgot

Enviar e-mail de recuperação de senha.

**Parâmetros:**

| Campo | Tipo | Obrigatório | Descrição |
|-------|------|-------------|-----------|
| email | string | Sim | E-mail do usuário |

---

## POST /auth/password/reset

Redefinir senha com token de recuperação.

**Parâmetros:**

| Campo | Tipo | Obrigatório | Descrição |
|-------|------|-------------|-----------|
| token | string | Sim | Token de recuperação |
| email | string | Sim | E-mail do usuário |
| password | string | Sim | Nova senha |
| password_confirmation | string | Sim | Confirmação |

---

## POST /auth/password/change

Alterar senha (usuário autenticado).

**Parâmetros:**

| Campo | Tipo | Obrigatório | Descrição |
|-------|------|-------------|-----------|
| current_password | string | Sim | Senha atual |
| password | string | Sim | Nova senha |
| password_confirmation | string | Sim | Confirmação |

---

## GET /auth/sessions

Listar todas as sessões ativas do usuário.

**Resposta:**

```json
{
  "success": true,
  "data": {
    "sessions": [
      {
        "id": 1,
        "name": "Chrome - Windows",
        "last_used_at": "2025-01-15T10:30:00Z",
        "created_at": "2025-01-10T08:00:00Z",
        "is_current": true
      }
    ]
  }
}
```

---

## DELETE /auth/sessions/{id}

Revogar uma sessão específica.

---

*Gerado por Zapini — https://zapini.app*
