API-Schluessel
API-Schluessel sind die primaere Methode zur Authentifizierung bei der Brevo API. Sie bieten eine einfache und sichere Moeglichkeit, programmgesteuert auf Ihr Konto zuzugreifen.
Was sind API-Schluessel?
API-Schluessel sind eindeutige Kennungen, die Ihre Anwendung authentifizieren, wenn sie Anfragen an die Brevo API stellt. Jeder Schluessel ist eine 64 Zeichen lange Zeichenkette, die sowohl als Identifikator als auch als Passwort dient.
Example API key: xkeysib-a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456-Ab1Cd2Ef3Gh4API-Schluessel generieren
Schritt-fuer-Schritt-Anleitung
- Bei Brevo anmelden: Greifen Sie auf Ihr Brevo Dashboard zu
- Zu Einstellungen navigieren: Klicken Sie auf Ihr Profil -> Einstellungen
- API-Schluessel oeffnen: Waehlen Sie “API-Schluessel” aus dem linken Menue
- Neuen Schluessel erstellen: Klicken Sie auf “Neuen API-Schluessel generieren”
- Schluessel benennen: Geben Sie ihm einen aussagekraeftigen Namen (z.B. “Produktions-App”, “Entwicklungstest”)
- Berechtigungen festlegen: Waehlen Sie die passende Zugriffsebene
- Generieren: Klicken Sie auf “Generieren” und kopieren Sie den Schluessel sofort
Namenskonventionen fuer API-Schluessel
Verwenden Sie aussagekraeftige Namen, die den Zweck des Schluessels erkennen lassen:
production-web-appstaging-environmentmobile-app-ioswebhook-listenerdata-sync-service
API-Schluessel-Typen und Berechtigungen
Vollzugriffs-Schluessel
Permissions: All API endpointsUse cases: Complete application integrationRisk level: High - protect carefullyNur-Lese-Schluessel
Permissions: GET requests onlyUse cases: Analytics, reporting, dashboardsRisk level: Low - limited accessNur-Sende-Schluessel
Permissions: Transactional email sendingUse cases: Application notifications, receiptsRisk level: Medium - can send emailsKontaktverwaltungs-Schluessel
Permissions: Contact CRUD operationsUse cases: CRM integrations, form submissionsRisk level: Medium - data modificationAPI-Schluessel verwenden
Header-Authentifizierung
Fuegen Sie Ihren API-Schluessel im api-key-Header ein:
GET /v3/account HTTP/1.1Host: api.brevo.comAccept: application/jsonContent-Type: application/jsonapi-key: YOUR_API_KEYCode-Beispiele
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}"endAPI-Schluessel-Sicherheit
Sichere Speicherung
Umgebungsvariablen (Empfohlen)
# .env fileBREVO_API_KEY=xkeysib-your-api-key-here
# Usage in codeconst apiKey = process.env.BREVO_API_KEY;Cloud Secret Manager
- AWS Secrets Manager
- Google Secret Manager
- Azure Key Vault
- HashiCorp Vault
Sicherheits-Best-Practices
-
Schluessel niemals hartcodieren
// ❌ Bad - hardcodedconst apiKey = "xkeysib-a1b2c3d4...";// ✅ Good - environment variableconst apiKey = process.env.BREVO_API_KEY; -
Unterschiedliche Schluessel pro Umgebung verwenden
Production: BREVO_API_KEY_PRODStaging: BREVO_API_KEY_STAGINGDevelopment: BREVO_API_KEY_DEV -
Schluessel regelmaessig rotieren
- Kalendererinnerungen fuer vierteljaehrliche Rotation setzen
- Automatisierungstools fuer die Schluesselrotation verwenden
- Einen Rollback-Plan bereithalten
-
Schluesselnutzung ueberwachen
- Warnungen fuer ungewoehnliche Aktivitaeten einrichten
- Schluesselnutzungsprotokolle monatlich ueberpruefen
- Geografische Zugriffsmuster verfolgen
Schluesselverwaltung
Ueberwachung aktiver Schluessel
Ueberwachen Sie Ihre aktiven Schluessel im Dashboard:
Key Name: production-web-appCreated: 2024-01-15Last Used: 2024-01-20 14:30 UTCRequests Today: 1,247Status: ActiveSchluesselrotationsprozess
- Neuen Schluessel generieren: Ersatzschluessel erstellen
- Konfiguration aktualisieren: Mit neuem Schluessel bereitstellen
- Ueberwachen: Sicherstellen, dass der neue Schluessel korrekt funktioniert
- Uebergangszeit: Alten Schluessel 24-48 Stunden aktiv lassen
- Alten Schluessel widerrufen: Den vorherigen Schluessel loeschen
Notfall-Schluesselwiderruf
Wenn ein Schluessel kompromittiert wurde:
- Sofortiger Widerruf: Schluessel aus dem Dashboard loeschen
- Ersatz generieren: Sofort neuen Schluessel erstellen
- Anwendungen aktualisieren: Schnellstmoeglich mit neuem Schluessel bereitstellen
- Aktivitaet ueberwachen: Auf unbefugte Nutzung pruefen
- Vorfallbericht: Den Sicherheitsvorfall dokumentieren
Ratenbegrenzungen und API-Schluessel
Jeder API-Schluessel hat individuelle Ratenbegrenzungen:
- Free Plan: 300 Anfragen/Tag
- Starter Plan: 20.000 Anfragen/Tag
- Business Plan: 50.000 Anfragen/Tag
- Enterprise Plan: Individuelle Limits
Rate-Limit-Header
HTTP/1.1 200 OKX-RateLimit-Limit: 1000X-RateLimit-Remaining: 999X-RateLimit-Reset: 1640995200Ratenbegrenzungen behandeln
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; }}Fehlerbehebung bei API-Schluesseln
Haeufige Fehlermeldungen
Ungueltiger API-Schluessel (401)
{ "code": "unauthorized", "message": "Invalid API key provided"}Unzureichende Berechtigungen (403)
{ "code": "permission_denied", "message": "API key does not have required permissions"}Ratenlimit ueberschritten (429)
{ "code": "too_many_requests", "message": "Rate limit exceeded for API key"}Checkliste zur Fehlersuche
- Schluessel ist korrekt formatiert (64 Zeichen)
- Keine zusaetzlichen Leerzeichen oder versteckten Zeichen
- Schluessel hat erforderliche Berechtigungen
- Schluessel ist aktiv (nicht widerrufen)
- Innerhalb der Ratenlimits
- Korrekter API-Endpunkt verwendet
- Header korrekt formatiert
Naechste Schritte
- Mehr ueber OAuth 2.0 erfahren
- JWT Tokens verstehen
- Ratenbegrenzungen erkunden
- SDKs ausprobieren