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

# configurações da API

> configurações e variáveis de ambiente para integração com nossa API

nossa API utiliza múltiplas configurações e variáveis de ambiente. entenda as principais configurações para integração abaixo.

## configurações principais

### URL base da API

<CodeGroup>
  ```bash Produção theme={null}
  https://backend.testeswaffle.org
  ```

  ```bash Desenvolvimento   theme={null}
  http://localhost:8787
  ```
</CodeGroup>

### autenticação

todos os endpoints autenticados requerem um header JWT:

```bash theme={null}
Authorization: Bearer SEU_JWT_TOKEN
```

## variáveis de ambiente

<ResponseField name="JWT_SECRET" type="string" required>
  Secret usado para assinar e verificar tokens JWT
</ResponseField>

<ResponseField name="BEEHIIV_API_KEY" type="string" required>
  API key para integração com Beehiiv (newsletters)
</ResponseField>

<ResponseField name="GEMINI_API_KEY" type="string" required>
  API key do Google Gemini para insights automáticos
</ResponseField>

<ResponseField name="RESEND_API_KEY" type="string" required>
  API key do Resend para envio de emails
</ResponseField>

<ResponseField name="FACEBOOK_ACCESS_TOKEN" type="string">
  Token de acesso para Facebook Ads API
</ResponseField>

<ResponseField name="TIKTOK_ACCESS_TOKEN" type="string">
  Token de acesso para TikTok Ads API
</ResponseField>

<ResponseField name="SENTRY_AUTH_TOKEN" type="string">
  Token para integração com Sentry (monitoramento de erros)
</ResponseField>

## configuração de bancos

nossa API utiliza múltiplos bancos D1 especializados:

<ResponseField name="DB" type="D1Database" required>
  Banco principal da aplicação

  * métricas de ads
  * dados de newsletters
  * configurações gerais
</ResponseField>

<ResponseField name="STREAKS" type="D1Database" required>
  Banco de gamificação

  * leituras dos usuários
  * cálculos de streak
  * missões e recompensas
</ResponseField>

<ResponseField name="CRM" type="D1Database">
  Gestão de relacionamento

  * segmentação de usuários
  * campanhas personalizadas
</ResponseField>

<ResponseField name="FORMS" type="D1Database">
  Formulários dinâmicos

  * submissions de forms
  * validações customizadas
</ResponseField>

<ResponseField name="TICKETS" type="D1Database">
  Sistema de suporte

  * tickets de usuários
  * histórico de atendimento
</ResponseField>

## headers padrão

### requisições autenticadas

```json theme={null}
{
  "Authorization": "Bearer YOUR_JWT_TOKEN",
  "Content-Type": "application/json"
}
```

### webhooks

```json theme={null}
{
  "Content-Type": "application/json",
  "X-Webhook-Token": "YOUR_WEBHOOK_TOKEN"
}
```

## rate limits

<Info>
  nossa API utiliza Cloudflare Workers que escala automaticamente sem limites de rate fixos.
</Info>

* **timeout por requisição**: 120 segundos
* **timeout para cache**: 50ms
* **scheduled tasks**: execução a cada 7 horas

## configuração de cache

nosso sistema de cache ultra-otimizado utiliza:

<ResponseField name="CACHE" type="KVNamespace" required>
  Cloudflare KV para cache distribuído

  * TTL automático
  * invalidação inteligente
  * métricas de performance
</ResponseField>

### estratégias de cache

```javascript theme={null}
// cache com TTL de 1 hora
await cache.put(key, data, { expirationTtl: 3600 });

// cache com invalidação baseada em tags
await cache.put(key, data, { 
  metadata: { tags: ['metrics', 'ads'] }
});
```

## monitoramento

### sentry integration

```javascript theme={null}
// configuração automática de error tracking
Sentry.withSentry({
  dsn: "YOUR_SENTRY_DSN",
  tracesSampleRate: 1.0,
})
```

### logs estruturados

todos os endpoints incluem logs estruturados:

```json theme={null}
{
  "timestamp": "2024-01-15T10:30:00Z",
  "level": "info",
  "endpoint": "/referrals",
  "user_id": "user_123",
  "performance": {
    "duration_ms": 45,
    "cache_hit": true
  }
}
```

## exemplo de configuração completa

<CodeGroup>
  ```toml wrangler.toml theme={null}
  name = "waffle-v2"
  account_id = "your_account_id"
  main = "src/index.ts"

  # variáveis públicas
  [vars]
  JWT_SECRET = "your_jwt_secret"
  BEEHIIV_API_KEY = "your_beehiiv_key"

  # bancos D1
  [[d1_databases]]
  binding = "DB"
  database_name = "waffle"
  database_id = "your_db_id"

  [[d1_databases]]
  binding = "STREAKS"
  database_name = "streaks"
  database_id = "your_streaks_id"

  # cache KV
  [[kv_namespaces]]
  binding = "CACHE"
  id = "your_kv_id"
  ```

  ```javascript integração theme={null}
  const api = {
    baseURL: 'https://backend.testeswaffle.org',
    headers: {
      'Authorization': `Bearer ${token}`,
      'Content-Type': 'application/json'
    },
    
    async request(endpoint, options = {}) {
      const response = await fetch(`${this.baseURL}${endpoint}`, {
        headers: this.headers,
        ...options
      });
      
      if (!response.ok) {
        throw new Error(`API Error: ${response.status}`);
      }
      
      return response.json();
    }
  };
  ```
</CodeGroup>

<Tip>
  **desenvolvimento local**: use `wrangler dev --remote` para conectar com bancos reais durante desenvolvimento.
</Tip>
