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

# Autenticação

> Como obter e usar seu token de acesso

As rotas da API usam autenticação **Bearer**. Você envia o token no cabeçalho `Authorization` de cada requisição:

```bash theme={null}
curl https://api.hustapp.com/connection \
  -H "Authorization: Bearer SEU_TOKEN"
```

Existem dois tipos de token. Ambos funcionam da mesma forma nas requisições; o que muda é como você obtém e por quanto tempo valem.

## Token fixo

**Recomendado para integrações.** Solicite ao suporte do Hust em [contato@hustapp.com](mailto:contato@hustapp.com). O token é emitido com validade longa, na ordem de um ano, e você o guarda como variável de ambiente da sua aplicação.

Use este tipo sempre que a integração for um serviço rodando de forma contínua. Você evita gerenciar renovação de sessão e não precisa armazenar as credenciais de um usuário.

<Warning>
  Todos os tokens do Hust têm escopo total. Um token dá acesso a todas as conexões, contatos, departamentos e mensagens da empresa. Trate-o como uma senha: variável de ambiente ou cofre de segredos, nunca em repositório, log ou código de front-end.
</Warning>

## Token de sessão

Gerado a partir do e-mail e da senha de um usuário, com validade de **15 dias**. É o token usado pelas interfaces do Hust.

Use este tipo apenas quando a integração age em nome de um usuário que faz login, e sua aplicação sabe tratar a expiração.

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST https://api.hustapp.com/auth \
    -H "Content-Type: application/json" \
    -d '{
      "email": "voce@empresa.com.br",
      "password": "sua-senha"
    }'
  ```

  ```javascript Node.js theme={null}
  const res = await fetch("https://api.hustapp.com/auth", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      email: "voce@empresa.com.br",
      password: "sua-senha",
    }),
  });

  const { token } = await res.json();
  ```

  ```python Python theme={null}
  import requests

  res = requests.post(
      "https://api.hustapp.com/auth",
      json={"email": "voce@empresa.com.br", "password": "sua-senha"},
  )

  token = res.json()["token"]
  ```

  ```php PHP theme={null}
  <?php
  $ch = curl_init('https://api.hustapp.com/auth');
  curl_setopt_array($ch, [
      CURLOPT_POST => true,
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
      CURLOPT_POSTFIELDS => json_encode([
          'email' => 'voce@empresa.com.br',
          'password' => 'sua-senha',
      ]),
  ]);

  $response = curl_exec($ch);
  curl_close($ch);

  $data = json_decode($response, true);
  $token = $data['token'];
  ```

  ```pascal Delphi theme={null}
  uses
    System.Net.HttpClient, System.JSON;

  var
    HttpClient: THTTPClient;
    Response: IHTTPResponse;
    RequestBody, ResponseJson: TJSONObject;
    Token: string;
  begin
    HttpClient := THTTPClient.Create;
    try
      RequestBody := TJSONObject.Create;
      try
        RequestBody.AddPair('email', 'voce@empresa.com.br');
        RequestBody.AddPair('password', 'sua-senha');

        HttpClient.ContentType := 'application/json';
        Response := HttpClient.Post('https://api.hustapp.com/auth',
          TStringStream.Create(RequestBody.ToJSON, TEncoding.UTF8));

        ResponseJson := TJSONObject.ParseJSONValue(Response.ContentAsString) as TJSONObject;
        try
          Token := ResponseJson.GetValue<string>('token');
        finally
          ResponseJson.Free;
        end;
      finally
        RequestBody.Free;
      end;
    finally
      HttpClient.Free;
    end;
  end;
  ```
</CodeGroup>

A resposta traz o token e os dados do usuário autenticado:

```json theme={null}
{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "user": {
    "id": 42,
    "name": "Maria Silva",
    "email": "voce@empresa.com.br",
    "active": true,
    "admin": false,
    "departments": ["Vendas", "Suporte"]
  }
}
```

## O usuário por trás do token

Todo token está vinculado a um usuário, e esse vínculo tem efeito prático no envio de mensagens: o usuário do token vira o atendente do chamado, e o departamento informado precisa ser um departamento ao qual ele pertence.
