---
title: "Kunci API | Tajo"
description: "Panduan lengkap autentikasi kunci API dengan Brevo"
url: https://tajo.io/in/docs/authentication/api-keys/
markdown: https://tajo.io/in/docs/authentication/api-keys.md
lang: id-ID
author: "Set Noa"
author_url: https://tajo.io/in/set-noa/
robots: noindex
---

Ajukan akses awal

Masukkan nama depan dan alamat email kerja Anda. Kami akan mengirim tautan untuk mengonfirmasi permintaan akses Tajo.

# Kunci API

[Set Noa](https://tajo.io/in/set-noa/)

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-Ab1Cd2Ef3Gh4
```

## Membuat kunci API

### Panduan langkah demi langkah

1. **Masuk ke Brevo**: Buka [dasbor Brevo](https://app.brevo.com/) Anda
2. **Buka Settings**: Klik profil Anda → Settings
3. **Masuk ke API Keys**: Pilih “API Keys” dari menu sebelah kiri
4. **Buat kunci baru**: Klik “Generate a New API Key”
5. **Beri nama kunci Anda**: Berikan nama yang deskriptif (misalnya “Production App”, “Development Testing”)
6. **Atur izin**: Pilih tingkat akses yang sesuai
7. **Buat**: Klik “Generate” lalu segera salin kuncinya

### Konvensi penamaan kunci API

Gunakan nama deskriptif yang membantu Anda mengenali tujuan kunci tersebut:

- `production-web-app`
- `staging-environment`
- `mobile-app-ios`
- `webhook-listener`
- `data-sync-service`

## Jenis kunci API dan izinnya

### Kunci akses penuh

```
Permissions: All API endpoints
Use cases: Complete application integration
Risk level: High - protect carefully
```

### Kunci hanya baca

```
Permissions: GET requests only
Use cases: Analytics, reporting, dashboards
Risk level: Low - limited access
```

### Kunci hanya kirim

```
Permissions: Transactional email sending
Use cases: Application notifications, receipts
Risk level: Medium - can send emails
```

### Kunci pengelolaan kontak

```
Permissions: Contact CRUD operations
Use cases: CRM integrations, form submissions
Risk level: Medium - data modification
```

## Menggunakan kunci API

### Autentikasi melalui header

Sertakan kunci API Anda pada header `api-key`:

```http
GET /v3/account HTTP/1.1
Host: api.brevo.com
Accept: application/json
Content-Type: application/json
api-key: YOUR_API_KEY
```

### Contoh kode

#### JavaScript/Node.js

```javascript
const brevo = require('@getbrevo/brevo');

const apiInstance = new brevo.AccountApi();
apiInstance.setApiKey(brevo.AccountApiApiKeys.apiKey, process.env.BREVO_API_KEY);

// Make authenticated request
apiInstance.getAccount()
  .then(data => console.log('Account info:', data))
  .catch(error => console.error('Error:', error));
```

#### Python

```python
import sib_api_v3_sdk
from sib_api_v3_sdk.rest import ApiException

# Configure API key
configuration = sib_api_v3_sdk.Configuration()
configuration.api_key['api-key'] = 'YOUR_API_KEY'

# Create API instance
api_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

```php
<?php
require_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

```ruby
require 'sib-api-v3-sdk'

# Configure API key
SibApiV3Sdk.configure do |config|
  config.api_key['api-key'] = 'YOUR_API_KEY'
end

# Create API instance
api_instance = SibApiV3Sdk::AccountApi.new

begin
  # Get account info
  result = api_instance.get_account
  puts result
rescue SibApiV3Sdk::ApiError => e
  puts "Exception when calling AccountApi->get_account: #{e}"
end
```

## Keamanan kunci API

### Penyimpanan yang aman

**Variabel lingkungan** (Direkomendasikan)

```bash
# .env file
BREVO_API_KEY=xkeysib-your-api-key-here

# Usage in code
const apiKey = process.env.BREVO_API_KEY;
```

**Pengelola rahasia berbasis cloud**

- AWS Secrets Manager
- Google Secret Manager
- Azure Key Vault
- HashiCorp Vault

### Praktik terbaik keamanan

1. **Jangan pernah menuliskan kunci secara hardcode**

   ```javascript
   // ❌ Bad - hardcoded
   const apiKey = "xkeysib-a1b2c3d4...";

   // ✅ Good - environment variable
   const apiKey = process.env.BREVO_API_KEY;
   ```

2. **Gunakan kunci berbeda untuk setiap lingkungan**

   ```
   Production:  BREVO_API_KEY_PROD
   Staging:     BREVO_API_KEY_STAGING
   Development: BREVO_API_KEY_DEV
   ```

3. **Rotasi kunci secara berkala**

   - Pasang pengingat kalender untuk rotasi setiap kuartal
   - Gunakan alat otomatisasi untuk rotasi kunci
   - Siapkan rencana rollback

4. **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-app
Created: 2024-01-15
Last Used: 2024-01-20 14:30 UTC
Requests Today: 1,247
Status: Active
```

### Proses rotasi kunci

1. **Buat kunci baru**: Buat kunci pengganti
2. **Perbarui konfigurasi**: Terapkan dengan kunci baru
3. **Pantau**: Pastikan kunci baru bekerja dengan benar
4. **Masa tenggang**: Biarkan kunci lama tetap aktif selama 24 sampai 48 jam
5. **Cabut kunci lama**: Hapus kunci sebelumnya

### Pencabutan kunci darurat

Jika sebuah kunci disusupi:

1. **Pencabutan segera**: Hapus kunci dari dasbor
2. **Buat pengganti**: Segera buat kunci baru
3. **Perbarui aplikasi**: Terapkan dengan kunci baru secepat mungkin
4. **Pantau aktivitas**: Periksa adanya penggunaan tanpa izin
5. **Laporan insiden**: Dokumentasikan insiden keamanan tersebut

## Pembatasan laju dan kunci API

Brevo membatasi permintaan per endpoint, bukan per hari. Pada tingkatan umum, yang diperoleh setiap paket, `POST /v3/smtp/email` mengizinkan 1.000 permintaan per detik, endpoint `/v3/contacts` mengizinkan 10 per detik dan 36.000 per jam, dan endpoint tanpa batas sendiri mengizinkan 100 per jam. Paket Professional dan Enterprise membuka tingkatan yang lebih tinggi. Lihat [Batas laju](https://tajo.io/in/docs/rate-limits/) untuk tabel lengkap.

### Header pembatasan laju

```http
HTTP/1.1 200 OK
x-sib-ratelimit-limit: 1000
x-sib-ratelimit-remaining: 750
x-sib-ratelimit-reset: 1
```

### Menangani pembatasan laju

```javascript
async function makeApiCall() {
  try {
    const response = await fetch(url, { headers });

    if (response.status === 429) {
      // Seconds until the window resets
      const waitTime = Number(response.headers.get('x-sib-ratelimit-reset') || 1);

      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)**

```json
{
  "code": "unauthorized",
  "message": "Invalid API key provided"
}
```

**Izin tidak mencukupi (403)**

```json
{
  "code": "permission_denied",
  "message": "API key does not have required permissions"
}
```

**Batas laju terlampaui (429)**

```json
{
  "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](https://tajo.io/in/docs/authentication/oauth/)
- Pahami token JWT
- [Jelajahi batas laju](https://tajo.io/in/docs/rate-limits/)
- [Coba SDK](https://tajo.io/in/docs/sdks-libraries/)
