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.
Exemplo de chave API: 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
Permissões: todos os endpoints da APICasos de uso: integração aplicacional completaNível de risco: elevado, protege com cuidadoChaves apenas de leitura
Permissões: apenas pedidos GETCasos de uso: analytics, relatórios, dashboardsNível de risco: baixo, acesso limitadoChaves apenas de envio
Permissões: envio de e-mails transacionaisCasos de uso: notificações de aplicação, recibosNível de risco: médio, pode enviar e-mailsChaves para gestão de contactos
Permissões: operações CRUD em contactosCasos de uso: integrações de CRM, envio de formuláriosNível de risco: médio, modificação de dadosUsar 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('@brevo/api');
const apiInstance = new brevo.AccountApi();apiInstance.setApiKey(brevo.AccountApiApiKeys.apiKey, process.env.BREVO_API_KEY);
// Fazer pedido autenticadoapiInstance.getAccount() .then(data => console.log('Informação da conta:', data)) .catch(error => console.error('Erro:', error));Python
import sib_api_v3_sdkfrom sib_api_v3_sdk.rest import ApiException
# Configurar a chave APIconfiguration = sib_api_v3_sdk.Configuration()configuration.api_key['api-key'] = 'YOUR_API_KEY'
# Criar instância da APIapi_instance = sib_api_v3_sdk.AccountApi(sib_api_v3_sdk.ApiClient(configuration))
try: # Obter informação da conta api_response = api_instance.get_account() print(api_response)except ApiException as e: print("Exceção ao chamar AccountApi->get_account: %s\n" % e)PHP
<?phprequire_once(__DIR__ . '/vendor/autoload.php');
// Configurar a chave API$config = SendinBlue\Client\Configuration::getDefaultConfiguration()->setApiKey('api-key', 'YOUR_API_KEY');
// Criar instância da API$apiInstance = new SendinBlue\Client\Api\AccountApi( new GuzzleHttp\Client(), $config);
try { $result = $apiInstance->getAccount(); print_r($result);} catch (Exception $e) { echo 'Exceção ao chamar AccountApi->getAccount: ', $e->getMessage(), PHP_EOL;}?>Ruby
require 'sib-api-v3-sdk'
# Configurar a chave APISibApiV3Sdk.configure do |config| config.api_key['api-key'] = 'YOUR_API_KEY'end
# Criar instância da APIapi_instance = SibApiV3Sdk::AccountApi.new
begin # Obter informação da conta result = api_instance.get_account puts resultrescue SibApiV3Sdk::ApiError => e puts "Exceção ao chamar AccountApi->get_account: #{e}"endSegurança das chaves API
Armazenamento seguro
Variáveis de ambiente (recomendado)
# Ficheiro .envBREVO_API_KEY=xkeysib-your-api-key-here
# Utilização no códigoconst 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
// ❌ Mau, chave fixa no códigoconst apiKey = "xkeysib-a1b2c3d4...";// ✅ Bom, variável de ambienteconst apiKey = process.env.BREVO_API_KEY; -
Usa chaves diferentes por ambiente
Produção: BREVO_API_KEY_PRODStaging: BREVO_API_KEY_STAGINGDesenvolvimento: 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:
Nome da chave: production-web-appCriada: 2024-01-15Último uso: 2024-01-20 14:30 UTCPedidos hoje: 1 247Estado: AtivaProcesso 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 limit atingido. A aguardar ${waitTime} segundos`); await new Promise(resolve => setTimeout(resolve, waitTime * 1000));
// Voltar a tentar return makeApiCall(); }
return response.json(); } catch (error) { console.error('Chamada à API falhou:', 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