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

# Formato das Respostas

> Estrutura padrão das respostas da API

## Estrutura Padrão

Todas as respostas da API seguem uma estrutura consistente para facilitar o tratamento.

## Resposta de Sucesso

<CodeGroup>
  ```json Objeto Único theme={null}
  {
    "id": "uuid",
    "tenant_id": "uuid",
    "name": "João Silva",
    "email": "joao@exemplo.com",
    "created_at": "2024-01-01T00:00:00Z",
    "updated_at": "2024-01-01T00:00:00Z"
  }
  ```

  ```json Lista theme={null}
  [
    {
      "id": "uuid-1",
      "name": "João Silva"
    },
    {
      "id": "uuid-2",
      "name": "Maria Santos"
    }
  ]
  ```

  ```json Com Paginação theme={null}
  {
    "data": [...],
    "total": 100,
    "page": 0,
    "limit": 50
  }
  ```
</CodeGroup>

## Resposta de Erro

```json theme={null}
{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Invalid request data",
    "details": {
      "field": "email",
      "reason": "Invalid email format"
    }
  }
}
```

## Códigos de Status HTTP

<ResponseField name="200 OK">
  Requisição bem-sucedida. Retorna os dados solicitados.
</ResponseField>

<ResponseField name="201 Created">
  Recurso criado com sucesso. Retorna o objeto criado.
</ResponseField>

<ResponseField name="204 No Content">
  Operação bem-sucedida sem conteúdo de retorno (ex: DELETE).
</ResponseField>

<ResponseField name="400 Bad Request">
  Dados inválidos na requisição. Verifique os parâmetros.
</ResponseField>

<ResponseField name="401 Unauthorized">
  Chave de API inválida ou ausente.
</ResponseField>

<ResponseField name="403 Forbidden">
  Sem permissão para acessar este recurso.
</ResponseField>

<ResponseField name="404 Not Found">
  Recurso não encontrado.
</ResponseField>

<ResponseField name="429 Too Many Requests">
  Rate limit excedido. Aguarde antes de fazer novas requisições.
</ResponseField>

<ResponseField name="500 Internal Server Error">
  Erro interno do servidor. Tente novamente mais tarde.
</ResponseField>

## Tabela de Códigos

| Código | Status            | Descrição           |
| ------ | ----------------- | ------------------- |
| 200    | OK                | Sucesso             |
| 201    | Created           | Criado com sucesso  |
| 204    | No Content        | Sucesso sem retorno |
| 400    | Bad Request       | Dados inválidos     |
| 401    | Unauthorized      | Não autenticado     |
| 403    | Forbidden         | Sem permissão       |
| 404    | Not Found         | Não encontrado      |
| 429    | Too Many Requests | Rate limit          |
| 500    | Server Error      | Erro interno        |

## Tratamento em Código

<CodeGroup>
  ```javascript JavaScript theme={null}
  async function makeRequest(url, options) {
    const response = await fetch(url, options);

    if (!response.ok) {
      const error = await response.json();

      switch (response.status) {
        case 401:
          throw new Error('API key inválida');
        case 404:
          throw new Error('Recurso não encontrado');
        case 429:
          // Implementar retry com backoff
          await sleep(1000);
          return makeRequest(url, options);
        default:
          throw new Error(error.error?.message || 'Erro desconhecido');
      }
    }

    return response.json();
  }
  ```

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

  def make_request(url, headers, retries=3):
      for attempt in range(retries):
          response = requests.get(url, headers=headers)

          if response.status_code == 200:
              return response.json()
          elif response.status_code == 429:
              time.sleep(2 ** attempt)
              continue
          elif response.status_code == 401:
              raise Exception('API key inválida')
          elif response.status_code == 404:
              raise Exception('Recurso não encontrado')
          else:
              raise Exception(f'Erro: {response.status_code}')

      raise Exception('Max retries exceeded')
  ```
</CodeGroup>
