EmailManajemen API Key

Manajemen API Key

API key digunakan untuk mengautentikasi permintaan API Zeabur Email Anda. Setiap key dapat memiliki tingkat izin yang berbeda.

Jenis Izin

Zeabur Email menyediakan tiga tingkat izin:

Jenis IzinDeskripsiContoh Penggunaan
Baca Saja (read_only)Hanya dapat memeriksa email dan statistikAnalisis data, dashboard pemantauan
Kirim Saja (send_only)Dapat mengirim email dan memeriksa statusAplikasi production (disarankan)
Akses Penuh (all)Mencakup semua izin operasiAlat manajemen, environment pengembangan
⚠️

Demi keamanan, disarankan menggunakan izin “Kirim Saja” di production dan menghindari penggunaan “Akses Penuh”.

Membuat API Key

Masuk ke Konsol

Buka halaman manajemen Zeabur Email di konsol Zeabur.

Buat Key Baru

  1. Buka “Kunci API”
  2. Klik “Buat Kunci API”
  3. Masukkan nama key (untuk identifikasi)
  4. Pilih jenis izin
  5. (Opsional) Batasi ke domain tertentu
  6. Klik “Buat”

Simpan Key

🚫

Key hanya ditampilkan satu kali saat dibuat! Segera simpan di lokasi yang aman.

Setelah dibuat, sistem akan menampilkan API key secara lengkap. Salin dan simpan dengan aman — Anda tidak akan dapat melihatnya lagi.

Pembatasan Domain

Anda dapat membatasi API key agar hanya dapat mengirim email dari domain tertentu untuk meningkatkan keamanan:

// Atur domain yang diizinkan saat membuat key
{
  "name": "Production API Key",
  "permission": "send_only",
  "allowed_domains": ["yourdomain.com", "mail.yourdomain.com"]
}

Dengan begitu, meskipun key bocor, penyerang tidak dapat menggunakan domain yang tidak diizinkan untuk mengirim email.

Menggunakan API Key

Header Permintaan HTTP

Sertakan key di setiap permintaan API:

POST /api/v1/zsend/emails
Host: api.zeabur.com
Content-Type: application/json
Authorization: Bearer zs_your_api_key_here
 
{
  "from": "hello@yourdomain.com",
  ...
}

Contoh Kode

JavaScript

const apiKey = process.env.ZSEND_API_KEY;
 
const response = await fetch('https://api.zeabur.com/api/v1/zsend/emails', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer ' + apiKey
  },
  body: JSON.stringify({
    from: 'hello@yourdomain.com',
    to: ['user@example.com'],
    subject: 'Test Email',
    html: '<p>Test Content</p>'
  })
});

Python

import os
import requests
 
api_key = os.environ.get('ZSEND_API_KEY')
 
response = requests.post(
    'https://api.zeabur.com/api/v1/zsend/emails',
    headers={
        'Content-Type': 'application/json',
        'Authorization': 'Bearer ' + api_key
    },
    json={
        'from': 'hello@yourdomain.com',
        'to': ['user@example.com'],
        'subject': 'Test Email',
        'html': '<p>Test Content</p>'
    }
)

Go

package main
 
import (
    "bytes"
    "encoding/json"
    "net/http"
    "os"
)
 
func sendEmail() error {
    apiKey := os.Getenv("ZSEND_API_KEY")
    
    payload := map[string]interface{}{
        "from":    "hello@yourdomain.com",
        "to":      []string{"user@example.com"},
        "subject": "Test Email",
        "html":    "<p>Test Content</p>",
    }
    
    jsonData, _ := json.Marshal(payload)
    req, _ := http.NewRequest("POST", "https://api.zeabur.com/api/v1/zsend/emails", bytes.NewBuffer(jsonData))
    req.Header.Set("Content-Type", "application/json")
    req.Header.Set("Authorization", "Bearer " + apiKey)
    
    client := &http.Client{}
    resp, err := client.Do(req)
    return err
}

Rotasi Key

Melakukan rotasi API key secara berkala merupakan praktik keamanan yang baik:

Buat Key Baru

Buat API key baru sambil tetap mempertahankan key lama agar tetap aktif.

Perbarui Konfigurasi Aplikasi

Secara bertahap, ganti API key di aplikasi Anda dengan key yang baru.

Hapus Key Lama

Setelah memastikan semua aplikasi telah diperbarui, hapus key lama.

Disarankan untuk melakukan rotasi key setiap 90 hari.

Mencabut Key

Jika sebuah key bocor atau tidak lagi diperlukan:

  1. Buka “Kunci API”
  2. Temukan key yang ingin dihapus
  3. Klik tombol “Hapus”
  4. Konfirmasi penghapusan
⚠️

Setelah key dihapus, semua permintaan API yang menggunakan key tersebut akan langsung gagal.

Praktik Keamanan Terbaik

1. Gunakan Environment Variables

Jangan pernah menuliskan API key secara langsung (hardcode) di dalam kode Anda:

// ❌ Tidak disarankan: Jangan hardcode
const apiKey = 'zs_xxxxxxxxxxxxxxxxxxxxxxxx';
 
// ✅ Disarankan: Gunakan environment variables
const apiKey = process.env.ZSEND_API_KEY;

2. Terapkan Prinsip Hak Akses Minimum

Buat key terpisah dengan izin yang sesuai untuk setiap aplikasi:

  • Aplikasi Production: Izin kirim saja + pembatasan domain
  • Analisis Data: Izin baca saja
  • Alat Admin: Akses penuh (hanya jika diperlukan)

3. Pantau Penggunaan Key

Lihat statistik penggunaan setiap key di konsol Zeabur Email:

  • Jumlah permintaan
  • Jumlah email terkirim
  • Tingkat error

Segera cabut key jika terdeteksi penggunaan yang tidak wajar.

4. Jangan Berbagi Key

Buat key terpisah untuk setiap aplikasi dan environment (development/production) agar lebih mudah dilacak dan dikelola.

Pemecahan Masalah

401 Unauthorized

{
  "error": "unauthorized",
  "message": "Invalid or missing API key"
}

Kemungkinan penyebab:

  • API key salah atau telah dihapus
  • Format header permintaan salah (seharusnya Authorization: Bearer <token>)
  • Key memiliki spasi di awal/akhir atau tidak memiliki prefiks Bearer

403 Forbidden

{
  "error": "permission denied",
  "message": "API key does not have permission to send from this domain"
}

Kemungkinan penyebab:

  • Izin key tidak mencukupi (misalnya menggunakan key baca saja untuk mengirim email)
  • Domain pengirim tidak termasuk dalam daftar domain yang diizinkan untuk key tersebut
  • Domain belum terverifikasi

429 Too Many Requests

{
  "error": "too many requests",
  "message": "Rate limit exceeded"
}

Solusi:

  • Terapkan mekanisme pembatasan laju permintaan (throttling) dan percobaan ulang (retry)
  • Pertimbangkan untuk meng-upgrade akun Anda agar mendapatkan batas laju yang lebih tinggi
  • Gunakan API pengiriman massal untuk mengurangi jumlah permintaan