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

# Autenticação

> Como configurar e usar a autenticação Bearer Token na API Autorizou

A API Autorizou utiliza **Bearer Token** para autenticação. Todas as requisições devem incluir sua chave de API no cabeçalho `Authorization`.

## Tipos de Chave

<CardGroup cols={2}>
  <Card title="Chave de Teste" icon="flask">
    Use no ambiente Sandbox para desenvolvimento e testes
  </Card>

  <Card title="Chave de Produção" icon="shield-check">
    Use apenas em produção com pagamentos reais
  </Card>
</CardGroup>

## Como Obter suas Chaves

O acesso à Autorizou é feito por **onboarding assistido** — não há autocadastro. Após a aprovação, o **atendimento envia suas chaves de sandbox e de produção**.

<Card title="Solicitar acesso" icon="rocket" href="https://autorizou.com.br/cadastro" horizontal>
  Comece seu onboarding em autorizou.com.br
</Card>

Com acesso ao painel (**Integrações → Chaves de API**), você gerencia suas chaves — e pode criar chaves adicionais nomeadas quando precisar:

* **Múltiplas chaves nomeadas** — dê um nome a cada chave (ex.: "Integração ERP", "Produção") para identificar onde ela é usada.
* **Prefixo `aut_`** — toda chave começa com `aut_`, o que a torna reconhecível (inclusive por scanners de segredo, caso vaze em um repositório ou log).
* **Copie na hora** — a chave só é exibida **uma única vez**, no momento da criação. O painel guarda apenas o nome, a data de criação e o último uso — **nunca o valor**.
* **Revogação imediata** — revogar uma chave a invalida na hora; integrações que a usam param de funcionar.

<Warning>
  Como a chave só aparece uma vez, copie-a assim que gerar e guarde-a em local seguro. Se perder o
  valor, gere uma nova e revogue a antiga.
</Warning>

<Warning>
  **Mantenha suas chaves seguras!** Nunca exponha chaves de produção em código cliente ou repositórios públicos.
</Warning>

## Formato da Autenticação

Inclua o cabeçalho `Authorization` em todas as requisições:

```http theme={null}
Authorization: Bearer 4eC39HqLyjWDarjtT1zdp7dc
```

## Exemplos de Implementação

<CodeGroup>
  ```bash cURL theme={null}
  curl -X GET https://pay.autorizou.dev/api/v1/payments?per_page=1 \
    -H "Authorization: Bearer 4eC39HqLyjWDarjtT1zdp7dc" \
    -H "Content-Type: application/json"
  ```

  ```javascript JavaScript theme={null}
  const apiKey = '4eC39HqLyjWDarjtT1zdp7dc';

  const response = await fetch('https://pay.autorizou.dev/api/v1/payments?per_page=1', {
    method: 'GET',
    headers: {
      'Authorization': `Bearer ${apiKey}`,
      'Content-Type': 'application/json'
    }
  });

  const data = await response.json();
  ```

  ```php PHP theme={null}
  <?php

  $apiKey = '4eC39HqLyjWDarjtT1zdp7dc';

  $curl = curl_init();
  curl_setopt_array($curl, [
      CURLOPT_URL => 'https://pay.autorizou.dev/api/v1/payments?per_page=1',
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_HTTPHEADER => [
          'Authorization: Bearer ' . $apiKey,
          'Content-Type: application/json'
      ]
  ]);

  $response = curl_exec($curl);
  curl_close($curl);
  ?>
  ```
</CodeGroup>

## Gerenciamento Seguro de Chaves

### Variáveis de Ambiente

**Recomendado:** Armazene chaves em variáveis de ambiente

```bash theme={null}
# .env
AUTORIZOU_SECRET_KEY=4eC39HqLyjWDarjtT1zdp7dc
```

```javascript theme={null}
// JavaScript/Node.js
const apiKey = process.env.AUTORIZOU_SECRET_KEY;
```

```php theme={null}
// PHP
$apiKey = $_ENV['AUTORIZOU_SECRET_KEY'];
```

### Configuração por Ambiente

```javascript theme={null}
const config = {
  development: {
    apiKey: '4eC39HqLyjWDarjtT1zdp7dc',
    baseUrl: 'https://pay.autorizou.dev/api/v1'
  },
  production: {
    apiKey: '1234567890abcdef',
    baseUrl: 'https://pay.autorizou.cloud/api/v1'
  }
};

const env = process.env.NODE_ENV || 'development';
const autorizou = config[env];
```

## Códigos de Erro de Autenticação

<AccordionGroup>
  <Accordion title="401 - Unauthorized" icon="circle-xmark">
    Chave de API ausente ou inválida

    ```json theme={null}
    {
      "error": {
        "code": "unauthorized",
        "message": "Chave de API inválida ou ausente"
      }
    }
    ```

    **Soluções:**

    * Verifique se o cabeçalho `Authorization` está presente
    * Confirme se a chave está no formato correto
    * Verifique se não há espaços extras na chave
  </Accordion>

  <Accordion title="403 - Forbidden" icon="circle-xmark">
    Chave válida mas sem permissão para o recurso

    ```json theme={null}
    {
      "error": {
        "code": "forbidden",
        "message": "Acesso negado a este recurso"
      }
    }
    ```

    **Possíveis causas:**

    * Usando chave de teste em produção
    * Recurso não disponível para seu plano
    * Chave desabilitada ou suspensa
  </Accordion>
</AccordionGroup>

## Rotação de Chaves

Para manter a segurança, recomendamos rotacionar suas chaves periodicamente:

<Steps>
  <Step title="Gere Nova Chave">
    No Dashboard, gere uma nova chave de API
  </Step>

  <Step title="Atualize Aplicação">
    Atualize sua aplicação com a nova chave
  </Step>

  <Step title="Teste Funcionamento">
    Verifique se todas as funcionalidades estão operando
  </Step>

  <Step title="Revogue Chave Antiga">
    Desative a chave anterior no Dashboard
  </Step>
</Steps>

## Boas Práticas de Segurança

<AccordionGroup>
  <Accordion title="Proteção das Chaves" icon="lock">
    * **Nunca** comite chaves no controle de versão
    * **Use** variáveis de ambiente ou serviços de secrets
    * **Aplique** diferentes chaves por ambiente
    * **Monitore** uso das chaves via Dashboard
  </Accordion>

  <Accordion title="Segurança de Rede" icon="shield-halved">
    * **Sempre** use HTTPS em produção
    * **Implemente** rate limiting nas suas APIs
    * **Configure** CORS adequadamente
    * **Monitore** logs de acesso suspeitos
  </Accordion>

  <Accordion title="Aplicações Cliente" icon="mobile-screen">
    * **Nunca** use chaves secretas em apps mobile
    * **Implemente** proxy server para chamadas API
    * **Use** tokens temporários quando possível
    * **Valide** todas as entradas do usuário
  </Accordion>
</AccordionGroup>

## Testando a Autenticação

Use este simples teste para verificar se sua chave está funcionando:

<CodeGroup>
  ```bash cURL theme={null}
  # Teste simples - deve retornar 200 OK
  curl -X GET https://pay.autorizou.dev/api/v1/payments?per_page=1 \
    -H "Authorization: Bearer SUA_CHAVE_AQUI" \
    -H "Content-Type: application/json"
  ```

  ```javascript JavaScript theme={null}
  // Função para testar autenticação
  async function testAuth() {
    try {
      const response = await fetch('https://pay.autorizou.dev/api/v1/payments?per_page=1', {
        headers: {
          'Authorization': 'Bearer SUA_CHAVE_AQUI',
          'Content-Type': 'application/json'
        }
      });
      
      if (response.ok) {
        console.log('Autenticação funcionando!');
      } else {
        console.log('Erro de autenticação:', response.status);
      }
    } catch (error) {
      console.log('Erro de conexão:', error.message);
    }
  }

  testAuth();
  ```

  ```php PHP theme={null}
  <?php

  function testAuth($apiKey) {
      $curl = curl_init();
      curl_setopt_array($curl, [
          CURLOPT_URL => 'https://pay.autorizou.dev/api/v1/payments?per_page=1',
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_HTTPHEADER => [
              'Authorization: Bearer ' . $apiKey,
              'Content-Type: application/json'
          ]
      ]);
      
      $response = curl_exec($curl);
      $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
      curl_close($curl);
      
      if ($httpCode === 200) {
          echo "Autenticação funcionando!\n";
      } else {
          echo "Erro de autenticação: " . $httpCode . "\n";
      }
  }

  testAuth('SUA_CHAVE_AQUI');
  ?>
  ```
</CodeGroup>
