> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lovi.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Autenticação

> Documentação oficial para autenticação com nossa API

## Introdução

Esta seção fornece a documentação oficial para autenticação com nossa API via Postman. Inclui instruções detalhadas sobre o processo de autenticação, métodos suportados e boas práticas para garantir acesso seguro à API.

## 🔑 Autenticação

Para acessar qualquer endpoint da API da Lovi, você deve primeiro se autenticar e obter um token de acesso usando seu email e senha. Este token deve ser incluído no header `Authorization` de todas as requisições subsequentes.

**Rotação de Tokens**: Recomendamos rotacionar tokens periodicamente e armazená-los de forma segura.

> **Método**: POST  **Formato**: JSON

### Endpoint

```
POST https://cloud.lovi.ai/functions/v1/auth?grant_type=password
```

### Parâmetros de Query

| Parâmetro    | Obrigatório | Valor Fixo | Descrição                                                                                               |
| ------------ | ----------- | ---------- | ------------------------------------------------------------------------------------------------------- |
| `grant_type` | Sim         | `password` | Indica que você está usando autenticação via email e senha. Este é atualmente o único método suportado. |

### Headers da Requisição

Informe ao servidor o tipo de conteúdo que você está enviando:

| Chave          | Valor              | Descrição                                              |
| -------------- | ------------------ | ------------------------------------------------------ |
| `Content-Type` | `application/json` | Indica que o corpo da requisição está em formato JSON. |

### Corpo da Requisição

É aqui que você fornece suas credenciais pessoais (seu email e senha):

```json theme={null}
{
  "email": "seu-email@exemplo.com",
  "password": "sua-senha-segura"
}
```

Você deve substituir:

* "[seu-email@exemplo.com](mailto:seu-email@exemplo.com)" pelo seu endereço de email real.
* "sua-senha-segura" pela sua senha.

### Resposta

O servidor responderá com um token que você precisará para autenticação em futuras chamadas da API. A resposta será assim:

```json theme={null}
{
    "access_token": "your-access-token",
    "token_type": "bearer",
    "expires_in": 3600,
    "expires_at": 1744196340,
    "refresh_token": "bNYf6m7S7dFjfHCFTob2zg",
    "user": {
        "id": "3b601fa8-49fd-4a8c-af8c-b30601410975",
        "aud": "authenticated",
        "role": "authenticated",
        "email": "seu-email@exemplo.com",
        "email_confirmed_at": "2025-01-16T18:45:09.995114Z",
        "phone": "",
        "confirmed_at": "2025-01-16T18:45:09.995114Z",
        "last_sign_in_at": "2025-04-09T09:59:00.18987884Z",
        "app_metadata": {
            "provider": "email",
            "providers": [
                "email"
            ]
        },
        "user_metadata": {
            "email_verified": true,
            "name": "Sua-Empresa"
        },
        "identities": [
            {
                "identity_id": "23b66c68-ce37-4483-8470-67e08e21a61e",
                "id": "3b601fa8-49fd-4a8c-af8c-b30601410975",
                "user_id": "3b601fa8-49fd-4a8c-af8c-b30601410975",
                "identity_data": {
                    "email": "seu-email@exemplo.com",
                    "email_verified": false,
                    "phone_verified": false,
                    "sub": "3b601fa8-49fd-4a8c-af8c-b30601410975"
                },
                "provider": "email",
                "last_sign_in_at": "2025-01-16T18:45:09.985377Z",
                "created_at": "2025-01-16T18:45:09.985932Z",
                "updated_at": "2025-01-16T18:45:09.985932Z",
                "email": "seu-email@exemplo.com"
            }
        ],
        "created_at": "2025-01-16T18:45:09.956743Z",
        "updated_at": "2025-04-09T09:59:00.192243Z",
        "is_anonymous": false
    }
}
```

⚠️ Salve seu `access_token` — você vai usá-lo para interagir com o restante da API.

***

## 🧭 Recuperar Chaves de API da Empresa

> **Método**: POST **Formato**: JSON

### Endpoint

```
POST https://cloud.lovi.ai/functions/v1/api_keys
```

**Headers**

| **Parâmetro** | **Exemplo**              | **Obrigatório** | **Descrição**                                                                                   |
| ------------- | ------------------------ | --------------- | ----------------------------------------------------------------------------------------------- |
| Authorization | Bearer your-access-token | Sim             | Este header é usado para autenticar a requisição. Contém um token Bearer recebido após o login. |

### Resposta

Cada objeto dentro do array **`validApiKeys`** representa uma chave de API associada a uma empresa específica. Os campos incluídos são:

* **`company_id`**: Identificador único da empresa proprietária da chave de API.

* **`key`**: A chave de API em si, usada para autenticar requisições.

* **`is_active`**: Valor booleano indicando se a chave está atualmente ativa (*true*) ou inativa (*false*).

* **`last_used`**: Timestamp da última vez que a chave foi usada. Se a chave nunca foi usada, o valor será *null*.

* **`company_name`**: Nome da empresa associada à chave de API, útil para exibição em interfaces ou logs.

Aqui está um exemplo:

```json theme={null}
{
    "validApiKeys": [
        {
            "company_id": "your_company_id",
            "key": "your_key",
            "is_active": true,
            "last_used": null,
            "company_name": "your_company_name"
        }
    ]
}
```

***

### 🚫 Acesso à API Negado (403 Forbidden)

Se sua empresa desabilitou o acesso à API, o servidor retornará um status `403 Forbidden`. Isso ocorre quando `apiAccess` está configurado como `false` para uma ou mais empresas associadas à sua conta.

Exemplo:

```json theme={null}
{
    "success": false,
    "message": "API access denied for some companies",
    "deniedCompanies": [
        {
            "company_id": "your_company_id",
            "company_name": "your_company_name",
            "access": false
        }
    ]
}
```

Neste caso, você deve garantir que o acesso à API esteja habilitado para sua empresa na configuração antes de poder recuperar suas chaves.

***

### ⚠️ Nenhuma Chave de API Encontrada

Se a resposta retornar um array `validApiKeys` vazio, significa que nenhuma chave de API foi criada ainda para sua empresa.

Exemplo:

```json theme={null}
{
    "validApiKeys": []
}
```

Neste caso, você **deve ir ao Painel de Administração** e criar uma nova chave de API para sua empresa.

<Card title="Configurando chaves de API a partir do 'Painel de Administração'" icon="gear" href="/pt/user-guide/profile_pt">
  Nesta seção, você verá como configurar o perfil e também como configurar a chave de API a partir do painel.
</Card>

> 🧭 **Importante**: Sem uma chave de API válida e ativa, você não poderá se autenticar no nível da empresa ou realizar operações protegidas.

Uma vez que a chave de API é criada e ativa, ela aparecerá no array `validApiKeys` e pode ser usada para gerar um token no nível da empresa.

***

#### 🔁 Token por Empresa

Uma vez que você identifique com qual empresa deseja trabalhar, deve se autenticar novamente para gerar um token no nível da empresa. Isso geralmente é necessário para ações protegidas como envio de notificações ou upload de mídia.

Você usará a `key` recuperada anteriormente nos seus parâmetros de query ou headers, dependendo do endpoint.
