Chaves API
As chaves API são o principal método de autenticação na API do Brevo. Oferecem uma forma simples e segura de aceder à tua conta de forma programática.
O que são chaves API?
As chaves API são identificadores únicos que autenticam a tua aplicação ao fazer pedidos à API do Brevo. Cada chave é uma string de 64 caracteres que serve simultaneamente como identificador e palavra-passe.
Example API key: xkeysib-a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456-Ab1Cd2Ef3Gh4Gerar chaves API
Guia passo a passo
- Entra no Brevo: acede à tua dashboard do Brevo
- Navega até Definições: clica no teu perfil → Definições
- Vai a Chaves API: seleciona “Chaves API” no menu à esquerda
- Cria uma nova chave: clica em “Gerar uma nova chave API”
- Nomeia a chave: dá-lhe um nome descritivo (ex.: “App de produção”, “Testes de desenvolvimento”)
- Define permissões: escolhe o nível de acesso adequado
- Gera: clica em “Gerar” e copia a chave imediatamente
Convenções de nomes para chaves API
Usa nomes descritivos que ajudem a identificar o propósito da chave:
production-web-appstaging-environmentmobile-app-ioswebhook-listenerdata-sync-service
Tipos e permissões de chaves API
Chaves com acesso total
Permissions: All API endpointsUse cases: Complete application integrationRisk level: High - protect carefullyChaves apenas de leitura
Permissions: GET requests onlyUse cases: Analytics, reporting, dashboardsRisk level: Low - limited accessChaves apenas de envio
Permissions: Transactional email sendingUse cases: Application notifications, receiptsRisk level: Medium - can send emailsChaves para gestão de contactos
Permissions: Contact CRUD operationsUse cases: CRM integrations, form submissionsRisk level: Medium - data modificationUsar chaves API
Autenticação por cabeçalho
Inclui a tua chave API no cabeçalho api-key:
GET /v3/account HTTP/1.1Host: api.brevo.comAccept: application/jsonContent-Type: application/jsonapi-key: YOUR_API_KEYExemplos de código
JavaScript/Node.js
const brevo = require('@getbrevo/brevo');
const apiInstance = new brevo.AccountApi();apiInstance.setApiKey(brevo.AccountApiApiKeys.apiKey, process.env.BREVO_API_KEY);
// Make authenticated requestapiInstance.getAccount() .then(data => console.log('Account info:', data)) .catch(error => console.error('Error:', error));Python
import sib_api_v3_sdkfrom sib_api_v3_sdk.rest import ApiException
# Configure API keyconfiguration = sib_api_v3_sdk.Configuration()configuration.api_key['api-key'] = 'YOUR_API_KEY'
# Create API instanceapi_instance = sib_api_v3_sdk.AccountApi(sib_api_v3_sdk.ApiClient(configuration))
try: # Get account info api_response = api_instance.get_account() print(api_response)except ApiException as e: print("Exception when calling AccountApi->get_account: %s\n" % e)PHP
<?phprequire_once(__DIR__ . '/vendor/autoload.php');
// Configure API key$config = SendinBlue\Client\Configuration::getDefaultConfiguration()->setApiKey('api-key', 'YOUR_API_KEY');
// Create API instance$apiInstance = new SendinBlue\Client\Api\AccountApi( new GuzzleHttp\Client(), $config);
try { $result = $apiInstance->getAccount(); print_r($result);} catch (Exception $e) { echo 'Exception when calling AccountApi->getAccount: ', $e->getMessage(), PHP_EOL;}?>Ruby
require 'sib-api-v3-sdk'
# Configure API keySibApiV3Sdk.configure do |config| config.api_key['api-key'] = 'YOUR_API_KEY'end
# Create API instanceapi_instance = SibApiV3Sdk::AccountApi.new
begin # Get account info result = api_instance.get_account puts resultrescue SibApiV3Sdk::ApiError => e puts "Exception when calling AccountApi->get_account: #{e}"endSegurança das chaves API
Armazenamento seguro
Variáveis de ambiente (recomendado)
# .env fileBREVO_API_KEY=xkeysib-your-api-key-here
# Usage in codeconst apiKey = process.env.BREVO_API_KEY;Gestores de segredos na cloud
- AWS Secrets Manager
- Google Secret Manager
- Azure Key Vault
- HashiCorp Vault
Boas práticas de segurança
-
Nunca escrevas chaves diretamente no código
// ❌ Bad - hardcodedconst apiKey = "xkeysib-a1b2c3d4...";// ✅ Good - environment variableconst apiKey = process.env.BREVO_API_KEY; -
Usa chaves diferentes por ambiente
Production: BREVO_API_KEY_PRODStaging: BREVO_API_KEY_STAGINGDevelopment: BREVO_API_KEY_DEV -
Roda as chaves regularmente
- Define lembretes para rotação trimestral
- Usa ferramentas de automação para a rotação
- Tem um plano de rollback pronto
-
Monitoriza o uso das chaves
- Configura alertas para atividade invulgar
- Analisa os registos de uso mensalmente
- Acompanha padrões de acesso geográfico
Gestão de chaves
Monitorização das chaves ativas
Acompanha as chaves ativas na dashboard:
Key Name: production-web-appCreated: 2024-01-15Last Used: 2024-01-20 14:30 UTCRequests Today: 1,247Status: ActiveProcesso de rotação de chaves
- Gerar nova chave: cria uma chave de substituição
- Atualizar a configuração: faz deploy com a nova chave
- Monitorizar: confirma que a nova chave funciona corretamente
- Período de tolerância: mantém a chave antiga ativa durante 24–48 horas
- Revogar a chave antiga: elimina a chave anterior
Revogação de emergência
Se uma chave for comprometida:
- Revogação imediata: elimina a chave na dashboard
- Gerar substituta: cria uma nova chave de imediato
- Atualizar aplicações: faz deploy com a nova chave o quanto antes
- Monitorizar atividade: verifica se houve uso não autorizado
- Relatório de incidente: documenta o incidente de segurança
Rate limiting e chaves API
Cada chave API tem limites de pedidos individuais:
- Plano Gratuito: 300 pedidos/dia
- Plano Starter: 20 000 pedidos/dia
- Plano Business: 50 000 pedidos/dia
- Plano Enterprise: limites personalizados
Cabeçalhos de rate limit
HTTP/1.1 200 OKX-RateLimit-Limit: 1000X-RateLimit-Remaining: 999X-RateLimit-Reset: 1640995200Lidar com rate limits
async function makeApiCall() { try { const response = await fetch(url, { headers });
if (response.status === 429) { const resetTime = response.headers.get('X-RateLimit-Reset'); const waitTime = resetTime - Math.floor(Date.now() / 1000);
console.log(`Rate limited. Waiting ${waitTime} seconds`); await new Promise(resolve => setTimeout(resolve, waitTime * 1000));
// Retry the request return makeApiCall(); }
return response.json(); } catch (error) { console.error('API call failed:', error); throw error; }}Resolução de problemas com chaves API
Mensagens de erro comuns
Chave API inválida (401)
{ "code": "unauthorized", "message": "Invalid API key provided"}Permissões insuficientes (403)
{ "code": "permission_denied", "message": "API key does not have required permissions"}Rate limit excedido (429)
{ "code": "too_many_requests", "message": "Rate limit exceeded for API key"}Checklist de depuração
- A chave está formatada corretamente (64 caracteres)
- Sem espaços extra nem caracteres invisíveis
- A chave tem as permissões necessárias
- A chave está ativa (não revogada)
- Dentro dos limites de pedidos
- A usar o endpoint correto
- Cabeçalhos formatados corretamente
Próximos passos
- Aprender sobre OAuth 2.0
- Perceber os tokens JWT
- Explorar os rate limits
- Experimentar os SDKs