API-sleutels
API-sleutels zijn de belangrijkste manier om je te authenticeren bij de Brevo API. Ze geven je een simpele en veilige manier om programmatisch toegang te krijgen tot je account.
Wat zijn API-sleutels?
API-sleutels zijn unieke identificatiecodes die je applicatie authenticeren bij verzoeken aan de Brevo API. Elke sleutel is een tekenreeks van 64 tekens die tegelijk als identificatie en als wachtwoord dient.
Example API key: xkeysib-a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456-Ab1Cd2Ef3Gh4API-sleutels aanmaken
Stap voor stap
- Log in bij Brevo: ga naar je Brevo-dashboard
- Ga naar de instellingen: klik op je profiel → Settings
- Open API Keys: kies “API Keys” in het linkermenu
- Maak een nieuwe sleutel: klik op “Generate a New API Key”
- Geef de sleutel een naam: kies een beschrijvende naam (bijvoorbeeld “Production App” of “Development Testing”)
- Stel de rechten in: kies het juiste toegangsniveau
- Genereer: klik op “Generate” en kopieer de sleutel meteen
Naamgeving van API-sleutels
Gebruik beschrijvende namen waaraan je het doel van de sleutel herkent:
production-web-appstaging-environmentmobile-app-ioswebhook-listenerdata-sync-service
Soorten API-sleutels en rechten
Sleutels met volledige toegang
Permissions: All API endpointsUse cases: Complete application integrationRisk level: High - protect carefullyAlleen-lezen sleutels
Permissions: GET requests onlyUse cases: Analytics, reporting, dashboardsRisk level: Low - limited accessSleutels alleen voor verzenden
Permissions: Transactional email sendingUse cases: Application notifications, receiptsRisk level: Medium - can send emailsSleutels voor contactbeheer
Permissions: Contact CRUD operationsUse cases: CRM integrations, form submissionsRisk level: Medium - data modificationAPI-sleutels gebruiken
Authenticatie via de header
Zet je API-sleutel in de header api-key:
GET /v3/account HTTP/1.1Host: api.brevo.comAccept: application/jsonContent-Type: application/jsonapi-key: YOUR_API_KEYCodevoorbeelden
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}"endBeveiliging van API-sleutels
Veilig opslaan
Omgevingsvariabelen (aanbevolen)
# .env fileBREVO_API_KEY=xkeysib-your-api-key-here
# Usage in codeconst apiKey = process.env.BREVO_API_KEY;Secret managers in de cloud
- AWS Secrets Manager
- Google Secret Manager
- Azure Key Vault
- HashiCorp Vault
Aanbevolen beveiligingspraktijken
-
Zet sleutels nooit hard in je code
// ❌ Bad - hardcodedconst apiKey = "xkeysib-a1b2c3d4...";// ✅ Good - environment variableconst apiKey = process.env.BREVO_API_KEY; -
Gebruik per omgeving een aparte sleutel
Production: BREVO_API_KEY_PRODStaging: BREVO_API_KEY_STAGINGDevelopment: BREVO_API_KEY_DEV -
Vervang sleutels regelmatig
- Zet een herinnering in je agenda voor een rotatie per kwartaal
- Gebruik automatiseringstools voor het roteren van sleutels
- Houd een terugvalplan klaar
-
Houd het sleutelgebruik in de gaten
- Stel meldingen in voor ongebruikelijke activiteit
- Bekijk de gebruikslogboeken maandelijks
- Volg vanuit welke landen de toegang komt
Sleutelbeheer
Actieve sleutels volgen
Volg je actieve sleutels in het dashboard:
Key Name: production-web-appCreated: 2024-01-15Last Used: 2024-01-20 14:30 UTCRequests Today: 1,247Status: ActiveZo roteer je een sleutel
- Maak een nieuwe sleutel: genereer een vervangende sleutel
- Werk de configuratie bij: rol de nieuwe sleutel uit
- Controleer: kijk of de nieuwe sleutel goed werkt
- Overgangsperiode: houd de oude sleutel 24 tot 48 uur actief
- Trek de oude sleutel in: verwijder de vorige sleutel
Sleutel intrekken bij een noodgeval
Is een sleutel gelekt:
- Trek hem meteen in: verwijder de sleutel in het dashboard
- Maak een vervanger: genereer direct een nieuwe sleutel
- Werk je applicaties bij: rol de nieuwe sleutel zo snel mogelijk uit
- Volg de activiteit: controleer op ongeoorloofd gebruik
- Leg het incident vast: documenteer het beveiligingsincident
Rate limits en API-sleutels
Elke API-sleutel heeft zijn eigen rate limits:
- Free-abonnement: 300 verzoeken per dag
- Starter-abonnement: 20.000 verzoeken per dag
- Business-abonnement: 50.000 verzoeken per dag
- Enterprise-abonnement: limieten op maat
Headers voor rate limits
HTTP/1.1 200 OKX-RateLimit-Limit: 1000X-RateLimit-Remaining: 999X-RateLimit-Reset: 1640995200Omgaan met 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; }}Problemen met API-sleutels oplossen
Veelvoorkomende foutmeldingen
Ongeldige API-sleutel (401)
{ "code": "unauthorized", "message": "Invalid API key provided"}Onvoldoende rechten (403)
{ "code": "permission_denied", "message": "API key does not have required permissions"}Limiet overschreden (429)
{ "code": "too_many_requests", "message": "Rate limit exceeded for API key"}Checklist voor foutopsporing
- De sleutel heeft de juiste opmaak (64 tekens)
- Geen extra spaties of verborgen tekens
- De sleutel heeft de vereiste rechten
- De sleutel is actief (niet ingetrokken)
- Je blijft binnen de rate limits
- Je gebruikt het juiste API-endpoint
- De headers zijn correct opgemaakt
Volgende stappen
- Lees meer over OAuth 2.0
- Meer inzicht in JWT-tokens
- Bekijk de rate limits
- Probeer de SDK’s