API-ключи
API-ключи: основной способ аутентификации в API Brevo. Они дают простой и безопасный доступ к Вашему аккаунту программным путём.
Что такое API-ключи?
API-ключи: уникальные идентификаторы, которые аутентифицируют Ваше приложение при обращении к API Brevo. Каждый ключ представляет собой строку из 64 символов и служит одновременно идентификатором и паролем.
Example API key: xkeysib-a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456-Ab1Cd2Ef3Gh4Создание API-ключей
Пошаговое руководство
- Войдите в Brevo: откройте панель управления Brevo
- Перейдите в настройки: нажмите на свой профиль → Settings
- Откройте раздел API Keys: выберите «API Keys» в левом меню
- Создайте новый ключ: нажмите «Generate a New API Key»
- Назовите ключ: дайте ему понятное название (например, «Production App», «Development Testing»)
- Задайте права: выберите подходящий уровень доступа
- Сгенерируйте: нажмите «Generate» и сразу скопируйте ключ
Соглашения об именовании API-ключей
Используйте описательные имена, по которым понятно назначение ключа:
production-web-appstaging-environmentmobile-app-ioswebhook-listenerdata-sync-service
Типы API-ключей и права доступа
Ключи с полным доступом
Permissions: All API endpointsUse cases: Complete application integrationRisk level: High - protect carefullyКлючи только для чтения
Permissions: GET requests onlyUse cases: Analytics, reporting, dashboardsRisk level: Low - limited accessКлючи только для отправки
Permissions: Transactional email sendingUse cases: Application notifications, receiptsRisk level: Medium - can send emailsКлючи для управления контактами
Permissions: Contact CRUD operationsUse cases: CRM integrations, form submissionsRisk level: Medium - data modificationИспользование API-ключей
Аутентификация через заголовок
Передавайте API-ключ в заголовке api-key:
GET /v3/account HTTP/1.1Host: api.brevo.comAccept: application/jsonContent-Type: application/jsonapi-key: YOUR_API_KEYПримеры кода
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}"endБезопасность API-ключей
Безопасное хранение
Переменные окружения (рекомендуется)
# .env fileBREVO_API_KEY=xkeysib-your-api-key-here
# Usage in codeconst apiKey = process.env.BREVO_API_KEY;Облачные менеджеры секретов
- AWS Secrets Manager
- Google Secret Manager
- Azure Key Vault
- HashiCorp Vault
Лучшие практики безопасности
-
Никогда не зашивайте ключи в код
// ❌ Bad - hardcodedconst apiKey = "xkeysib-a1b2c3d4...";// ✅ Good - environment variableconst apiKey = process.env.BREVO_API_KEY; -
Используйте отдельные ключи для каждой среды
Production: BREVO_API_KEY_PRODStaging: BREVO_API_KEY_STAGINGDevelopment: BREVO_API_KEY_DEV -
Регулярно меняйте ключи
- Поставьте напоминания в календаре о ежеквартальной ротации
- Используйте инструменты автоматизации для ротации ключей
- Держите наготове план отката
-
Отслеживайте использование ключей
- Настройте оповещения о необычной активности
- Ежемесячно просматривайте журналы использования ключей
- Отслеживайте географию обращений
Управление ключами
Мониторинг активных ключей
Отслеживайте активные ключи в панели управления:
Key Name: production-web-appCreated: 2024-01-15Last Used: 2024-01-20 14:30 UTCRequests Today: 1,247Status: ActiveПроцесс ротации ключей
- Создайте новый ключ: подготовьте ключ на замену
- Обновите конфигурацию: разверните приложение с новым ключом
- Проверьте: убедитесь, что новый ключ работает корректно
- Переходный период: оставьте старый ключ активным на 24-48 часов
- Отзовите старый ключ: удалите предыдущий ключ
Экстренный отзыв ключа
Если ключ скомпрометирован:
- Немедленный отзыв: удалите ключ в панели управления
- Замена: сразу создайте новый ключ
- Обновление приложений: как можно быстрее разверните их с новым ключом
- Мониторинг активности: проверьте, не было ли несанкционированного использования
- Отчёт об инциденте: задокументируйте инцидент безопасности
Ограничения частоты запросов и API-ключи
У каждого API-ключа собственные лимиты запросов:
- Free Plan: 300 запросов в день
- Starter Plan: 20 000 запросов в день
- Business Plan: 50 000 запросов в день
- Enterprise Plan: индивидуальные лимиты
Заголовки лимитов
HTTP/1.1 200 OKX-RateLimit-Limit: 1000X-RateLimit-Remaining: 999X-RateLimit-Reset: 1640995200Обработка лимитов
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; }}Диагностика проблем с API-ключами
Частые сообщения об ошибках
Недействительный API-ключ (401)
{ "code": "unauthorized", "message": "Invalid API key provided"}Недостаточно прав (403)
{ "code": "permission_denied", "message": "API key does not have required permissions"}Превышен лимит запросов (429)
{ "code": "too_many_requests", "message": "Rate limit exceeded for API key"}Чек-лист для отладки
- Ключ имеет правильный формат (64 символа)
- Нет лишних пробелов и скрытых символов
- У ключа есть нужные права
- Ключ активен (не отозван)
- Лимиты запросов не превышены
- Используется правильный эндпоинт API
- Заголовки сформированы корректно
Дальнейшие шаги
- Узнайте об OAuth 2.0
- Разберитесь с токенами JWT
- Изучите лимиты запросов
- Попробуйте SDK