Kunci API
Kunci API adalah metode utama untuk melakukan autentikasi dengan API Brevo. Kunci API memberikan cara yang sederhana dan aman untuk mengakses akun Anda secara terprogram.
Apa itu kunci API?
Kunci API adalah pengenal unik yang mengautentikasi aplikasi Anda saat mengirim permintaan ke API Brevo. Setiap kunci berupa string 64 karakter yang berfungsi sekaligus sebagai pengenal dan kata sandi.
Example API key: xkeysib-a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456-Ab1Cd2Ef3Gh4Membuat kunci API
Panduan langkah demi langkah
- Masuk ke Brevo: Buka dasbor Brevo Anda
- Buka Settings: Klik profil Anda → Settings
- Masuk ke API Keys: Pilih “API Keys” dari menu sebelah kiri
- Buat kunci baru: Klik “Generate a New API Key”
- Beri nama kunci Anda: Berikan nama yang deskriptif (misalnya “Production App”, “Development Testing”)
- Atur izin: Pilih tingkat akses yang sesuai
- Buat: Klik “Generate” lalu segera salin kuncinya
Konvensi penamaan kunci API
Gunakan nama deskriptif yang membantu Anda mengenali tujuan kunci tersebut:
production-web-appstaging-environmentmobile-app-ioswebhook-listenerdata-sync-service
Jenis kunci API dan izinnya
Kunci akses penuh
Permissions: All API endpointsUse cases: Complete application integrationRisk level: High - protect carefullyKunci hanya baca
Permissions: GET requests onlyUse cases: Analytics, reporting, dashboardsRisk level: Low - limited accessKunci hanya kirim
Permissions: Transactional email sendingUse cases: Application notifications, receiptsRisk level: Medium - can send emailsKunci pengelolaan kontak
Permissions: Contact CRUD operationsUse cases: CRM integrations, form submissionsRisk level: Medium - data modificationMenggunakan kunci API
Autentikasi melalui header
Sertakan kunci API Anda pada header api-key:
GET /v3/account HTTP/1.1Host: api.brevo.comAccept: application/jsonContent-Type: application/jsonapi-key: YOUR_API_KEYContoh kode
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}"endKeamanan kunci API
Penyimpanan yang aman
Variabel lingkungan (Direkomendasikan)
# .env fileBREVO_API_KEY=xkeysib-your-api-key-here
# Usage in codeconst apiKey = process.env.BREVO_API_KEY;Pengelola rahasia berbasis cloud
- AWS Secrets Manager
- Google Secret Manager
- Azure Key Vault
- HashiCorp Vault
Praktik terbaik keamanan
-
Jangan pernah menuliskan kunci secara hardcode
// ❌ Bad - hardcodedconst apiKey = "xkeysib-a1b2c3d4...";// ✅ Good - environment variableconst apiKey = process.env.BREVO_API_KEY; -
Gunakan kunci berbeda untuk setiap lingkungan
Production: BREVO_API_KEY_PRODStaging: BREVO_API_KEY_STAGINGDevelopment: BREVO_API_KEY_DEV -
Rotasi kunci secara berkala
- Pasang pengingat kalender untuk rotasi setiap kuartal
- Gunakan alat otomatisasi untuk rotasi kunci
- Siapkan rencana rollback
-
Pantau penggunaan kunci
- Siapkan peringatan untuk aktivitas yang tidak wajar
- Tinjau log penggunaan kunci setiap bulan
- Lacak pola akses berdasarkan geografi
Pengelolaan kunci
Pemantauan kunci aktif
Pantau kunci aktif Anda di dasbor:
Key Name: production-web-appCreated: 2024-01-15Last Used: 2024-01-20 14:30 UTCRequests Today: 1,247Status: ActiveProses rotasi kunci
- Buat kunci baru: Buat kunci pengganti
- Perbarui konfigurasi: Terapkan dengan kunci baru
- Pantau: Pastikan kunci baru bekerja dengan benar
- Masa tenggang: Biarkan kunci lama tetap aktif selama 24 sampai 48 jam
- Cabut kunci lama: Hapus kunci sebelumnya
Pencabutan kunci darurat
Jika sebuah kunci disusupi:
- Pencabutan segera: Hapus kunci dari dasbor
- Buat pengganti: Segera buat kunci baru
- Perbarui aplikasi: Terapkan dengan kunci baru secepat mungkin
- Pantau aktivitas: Periksa adanya penggunaan tanpa izin
- Laporan insiden: Dokumentasikan insiden keamanan tersebut
Pembatasan laju dan kunci API
Setiap kunci API memiliki batas laju tersendiri:
- Paket Free: 300 permintaan/hari
- Paket Starter: 20.000 permintaan/hari
- Paket Business: 50.000 permintaan/hari
- Paket Enterprise: Batas khusus
Header pembatasan laju
HTTP/1.1 200 OKX-RateLimit-Limit: 1000X-RateLimit-Remaining: 999X-RateLimit-Reset: 1640995200Menangani pembatasan laju
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; }}Pemecahan masalah kunci API
Pesan error yang umum
Kunci API tidak valid (401)
{ "code": "unauthorized", "message": "Invalid API key provided"}Izin tidak mencukupi (403)
{ "code": "permission_denied", "message": "API key does not have required permissions"}Batas laju terlampaui (429)
{ "code": "too_many_requests", "message": "Rate limit exceeded for API key"}Daftar periksa debugging
- Format kunci sudah benar (64 karakter)
- Tidak ada spasi tambahan atau karakter tersembunyi
- Kunci memiliki izin yang diperlukan
- Kunci masih aktif (belum dicabut)
- Masih dalam batas laju
- Menggunakan endpoint API yang benar
- Header diformat dengan benar
Langkah berikutnya
- Pelajari OAuth 2.0
- Pahami token JWT
- Jelajahi batas laju
- Coba SDK