Cara Menggunakan Brevo API untuk SMS Marketing

Ashley Innocent

Ashley Innocent

24 March 2026

Cara Menggunakan Brevo API untuk SMS Marketing

Apidog untuk Perusahaan

Penerapan On-Premises

SSO & RBAC

Sesuai SOC 2

Jelajahi Apidog Enterprise

TL;DR

API Brevo memungkinkan Anda mengirim email pemasaran, email transaksional, dan pesan SMS secara terprogram. Anda melakukan otentikasi dengan kunci API, mengirim permintaan ke `api.brevo.com`, dan menggunakan webhook untuk melacak pengiriman dan interaksi. Untuk pengujian, gunakan Apidog untuk memvalidasi payload, menguji handler webhook, dan memastikan integrasi Anda menangani pantulan (bounces) dan berhenti berlangganan (unsubscribes) dengan benar.

Pendahuluan

Brevo (sebelumnya Sendinblue) memproses jutaan email setiap hari untuk lebih dari 500.000 bisnis. Ini menangani kampanye pemasaran, email transaksional, pemasaran SMS, dan alur kerja otomatisasi.

API Email terlihat sederhana - kirim pesan, selesai. Namun sistem email produksi perlu menangani pantulan, keluhan spam, berhenti berlangganan, dan waktu pengiriman. Brevo mengelola kerumitan ini agar Anda tidak perlu melakukannya.

API mencakup tiga kasus penggunaan utama:

💡
Jika Anda mengintegrasikan email ke dalam aplikasi Anda, Apidog membantu Anda menguji template, memvalidasi payload webhook, dan memastikan integrasi Anda berfungsi di seluruh klien email. Anda dapat meniru respons Brevo selama pengembangan dan menguji penanganan kesalahan tanpa mengirim email sungguhan.
button
button

Otentikasi dan pengaturan

Dapatkan kunci API

  1. Masuk ke Brevo
  2. Buka SMTP & API → Kunci API
  3. Buat kunci baru dengan izin yang sesuai
  4. Simpan dengan aman

Kunci API ditempatkan di header api-key:

curl -X GET "https://api.brevo.com/v3/account" \
  -H "accept: application/json" \
  -H "api-key: your-api-key-here"

URL dasar API

Semua permintaan masuk ke:

https://api.brevo.com/v3/

Batas tingkat permintaan

Brevo membatasi permintaan berdasarkan paket:

Periksa header X-RateLimit-Remaining untuk melacak penggunaan.

Mengirim email transaksional

Email transaksional adalah pesan individual yang dipicu oleh tindakan pengguna. Contohnya adalah reset kata sandi, konfirmasi pesanan, email selamat datang.

Kirim email sederhana

curl -X POST "https://api.brevo.com/v3/smtp/email" \
  -H "accept: application/json" \
  -H "api-key: your-api-key" \
  -H "content-type: application/json" \
  -d '{
    "sender": {
      "name": "Aplikasi Anda",
      "email": "noreply@yourapp.com"
    },
    "to": [
      {
        "email": "user@example.com",
        "name": "John Doe"
      }
    ],
    "subject": "Selamat Datang di Platform Kami",
    "htmlContent": "<html><body><h1>Selamat Datang!</h1><p>Terima kasih telah mendaftar.</p></body></html>",
    "textContent": "Selamat Datang! Terima kasih telah mendaftar."
  }'

Respons:

{
  "messageId": "<20260324123456.123456@relay.brevo.com>"
}

Menggunakan template

Buat template di editor visual Brevo, lalu kirim berdasarkan ID:

curl -X POST "https://api.brevo.com/v3/smtp/email" \
  -H "api-key: your-api-key" \
  -H "content-type: application/json" \
  -d '{
    "templateId": 15,
    "to": [
      {
        "email": "user@example.com",
        "name": "John Doe"
      }
    ],
    "params": {
      "name": "John",
      "order_number": "ORD-12345",
      "tracking_url": "https://tracking.example.com/ORD-12345"
    }
  }'

Variabel template menggunakan kurung kurawal ganda:

<p>Halo {{params.name}},</p>
<p>Pesanan Anda {{params.order_number}} telah dikirim.</p>
<p><a href="{{params.tracking_url}}">Lacak paket Anda</a></p>

Kirim dengan lampiran

const response = await fetch('https://api.brevo.com/v3/smtp/email', {
  method: 'POST',
  headers: {
    'api-key': process.env.BREVO_API_KEY,
    'content-type': 'application/json'
  },
  body: JSON.stringify({
    sender: { name: 'Aplikasi Anda', email: 'noreply@yourapp.com' },
    to: [{ email: 'user@example.com' }],
    subject: 'Faktur Anda',
    htmlContent: '<p>Silakan temukan faktur Anda terlampir.</p>',
    attachment: [
      {
        name: 'invoice.pdf',
        content: base64EncodedPdfContent
      }
    ]
  })
})

Kampanye pemasaran

Email pemasaran ditujukan ke daftar kontak. Brevo menangani tautan berhenti berlangganan, penjadwalan, dan analitik.

Buat kampanye

curl -X POST "https://api.brevo.com/v3/emailCampaigns" \
  -H "api-key: your-api-key" \
  -H "content-type: application/json" \
  -d '{
    "name": "Buletin Maret",
    "subject": "Apa yang Baru di Bulan Maret",
    "sender": {
      "name": "Merek Anda",
      "email": "newsletter@yourbrand.com"
    },
    "type": "classic",
    "htmlContent": "<html><body>Konten Buletin di sini...</body></html>",
    "recipients": {
      "listIds": [12, 15]
    },
    "scheduledAt": "2026-03-25T09:00:00+00:00"
  }'

Kirim segera

curl -X POST "https://api.brevo.com/v3/emailCampaigns/{campaignId}/sendNow" \
  -H "api-key: your-api-key"

Dapatkan statistik kampanye

curl -X GET "https://api.brevo.com/v3/emailCampaigns/{campaignId}" \
  -H "api-key: your-api-key"

Respons mencakup:

{
  "statistics": {
    "delivered": 4850,
    "opened": 1455,
    "clicked": 291,
    "unsubscribed": 12,
    "bounces": 150
  }
}

Manajemen kontak

Kontak adalah orang-orang yang Anda kirimi email. Atur mereka ke dalam daftar dan tambahkan atribut khusus.

Buat kontak

curl -X POST "https://api.brevo.com/v3/contacts" \
  -H "api-key: your-api-key" \
  -H "content-type: application/json" \
  -d '{
    "email": "new.user@example.com",
    "attributes": {
      "FIRSTNAME": "Jane",
      "LASTNAME": "Smith",
      "PLAN": "premium"
    },
    "listIds": [12, 15],
    "updateEnabled": true
  }'

Flag updateEnabled: true memperbarui kontak yang sudah ada daripada gagal.

Dapatkan detail kontak

curl -X GET "https://api.brevo.com/v3/contacts/user@example.com" \
  -H "api-key: your-api-key"

Tambahkan ke daftar

curl -X POST "https://api.brevo.com/v3/contacts/lists/12/contacts/add" \
  -H "api-key: your-api-key" \
  -H "content-type: application/json" \
  -d '{
    "emails": ["user1@example.com", "user2@example.com"]
  }'

Hapus dari daftar

curl -X DELETE "https://api.brevo.com/v3/contacts/lists/12/contacts/remove" \
  -H "api-key: your-api-key" \
  -H "content-type: application/json" \
  -d '{
    "emails": ["user@example.com"]
  }'

Berhenti berlangganan kontak

curl -X PUT "https://api.brevo.com/v3/contacts/user@example.com" \
  -H "api-key: your-api-key" \
  -H "content-type: application/json" \
  -d '{
    "emailBlacklisted": true
  }'

Pemasaran SMS

Brevo mengirim pesan SMS secara global melalui API SMS mereka.

Kirim SMS

curl -X POST "https://api.brevo.com/v3/transactionalSMS/sms" \
  -H "api-key: your-api-key" \
  -H "content-type: application/json" \
  -d '{
    "sender": "AplikasiAnda",
    "recipient": "+15551234567",
    "content": "Kode verifikasi Anda adalah: 123456",
    "type": "transactional"
  }'

Kirim SMS pemasaran

curl -X POST "https://api.brevo.com/v3/transactionalSMS/sms" \
  -H "api-key: your-api-key" \
  -H "content-type: application/json" \
  -d '{
    "sender": "MerekAnda",
    "recipient": "+15551234567",
    "content": "Flash sale! Diskon 50% hanya hari ini. Balas STOP untuk berhenti berlangganan.",
    "type": "marketing"
  }'

Dapatkan statistik SMS

curl -X GET "https://api.brevo.com/v3/transactionalSMS/statistics?startDate=2026-03-01&endDate=2026-03-31" \
  -H "api-key: your-api-key"

Webhook untuk pelacakan

Webhook memberi tahu aplikasi Anda tentang peristiwa email: terkirim, dibuka, diklik, terpental, berhenti berlangganan.

Konfigurasi webhook

Di dasbor Brevo: Pengaturan → Webhook → Tambah webhook

Peristiwa yang akan dilacak:

Tangani payload webhook

app.post('/webhooks/brevo', (req, res) => {
  const event = req.body
  
  switch (event.event) {
    case 'delivered':
      console.log(`Email ${event.messageId} terkirim ke ${event.email}`)
      break
    case 'opened':
      console.log(`Email dibuka oleh ${event.email} pada ${event.date}`)
      break
    case 'bounced':
      console.log(`Pantulan: ${event.email} - ${event.reason}`)
      // Tandai kontak sebagai tidak valid
      markContactBounced(event.email)
      break
    case 'spam':
      console.log(`Keluhan spam dari ${event.email}`)
      // Hapus dari semua daftar
      removeFromAllLists(event.email)
      break
    case 'unsubscribed':
      console.log(`Berhenti berlangganan: ${event.email}`)
      break
  }
  
  res.status(200).send('OK')
})

Pengujian dengan Apidog

API email memiliki mode kegagalan yang kompleks. Anda perlu menguji template, pantulan, dan webhook. Apidog membantu.

1. Mock pengiriman email

Selama pengembangan, jangan mengirim email sungguhan. Mock responsnya:

pm.test('API Email menerima payload yang valid', () => {
  const response = pm.response.json()
  pm.expect(response).to.have.property('messageId')
  pm.expect(response.messageId).to.match(/<.*@relay\.brevo\.com>/)
})

2. Uji penanganan webhook

Buat mock payload webhook di Apidog:

{
  "event": "bounced",
  "email": "invalid@example.com",
  "messageId": "<12345@relay.brevo.com>",
  "reason": "hard_bounce",
  "date": "2026-03-24T12:00:00Z",
  "subject": "Selamat Datang di Platform Kami"
}

Kirim ke endpoint webhook Anda dan verifikasi bahwa kode Anda menanganinya.

3. Validasi template

Simpan payload template dan uji bahwa variabel diganti dengan benar:

pm.test('Variabel template valid', () => {
  const payload = pm.request.body.toJSON()
  pm.expect(payload.params).to.have.property('name')
  pm.expect(payload.params).to.have.property('order_number')
})

4. Pemisahan lingkungan

# Pengembangan
BREVO_API_KEY: xkeysib-dev-xxx
BREVO_SENDER: dev@yourapp.com

# Produksi
BREVO_API_KEY: xkeysib-prod-xxx
BREVO_SENDER: noreply@yourapp.com

Uji API email Brevo dengan Apidog - gratis

Kesalahan umum dan perbaikannya

400 Bad Request - Bidang yang wajib diisi hilang

Penyebab: Payload kehilangan bidang yang wajib diisi.

Perbaikan: Periksa pesan kesalahan untuk detailnya:

{
  "code": "invalid_parameter",
  "message": "sender.email diperlukan"
}

401 Unauthorized

Penyebab: Kunci API tidak valid atau hilang.

Perbaikan: Verifikasi header api-key diatur dengan benar. Periksa apakah kunci belum dicabut.

402 Payment Required

Penyebab: Akun telah melebihi batas atau kehilangan kredit.

Perbaikan:

429 Too Many Requests

Penyebab: Batas tingkat permintaan terlampaui.

Perbaikan: Terapkan backoff eksponensial:

async function sendWithRetry(email, retries = 3) {
  for (let i = 0; i < retries; i++) {
    const response = await sendEmail(email)
    if (response.status === 429) {
      await sleep(Math.pow(2, i) * 1000)
    } else {
      return response
    }
  }
  throw new Error('Batas tingkat permintaan terlampaui')
}

404 Kontak tidak ditemukan

Penyebab: Mencoba memperbarui kontak yang tidak ada.

Perbaikan: Gunakan updateEnabled: true saat membuat kontak:

{
  "email": "new@example.com",
  "updateEnabled": true
}

Ini membuat atau memperbarui kontak.

Alternatif dan perbandingan

Fitur Brevo SendGrid Mailchimp Postmark
Harga 300 email/hari gratis 100 email/hari gratis 500 email/bulan gratis 100 email/bulan gratis
Email pemasaran Ya Ya Ya Tidak
Email transaksional Ya Ya Terbatas Ya (spesialisasi)
SMS Ya Tidak Tidak Tidak
Otomatisasi Ya Ya Ya Terbatas
Editor template Visual + kode Kode Visual Kode

Brevo menonjol karena dukungan email dan SMS gabungan dengan harga yang kompetitif.

Kasus penggunaan dunia nyata

Alur pesanan e-commerce. Toko online menggunakan Brevo untuk: konfirmasi pesanan (transaksional), notifikasi pengiriman (transaksional), pemulihan keranjang yang ditinggalkan (otomatisasi pemasaran), dan promosi mingguan (kampanye pemasaran). Semuanya dari satu integrasi.

Orientasi SaaS. Alat manajemen proyek mengirim email selamat datang, reset kata sandi, dan undangan tim melalui API transaksional. Email pemasaran mengumumkan fitur baru kepada pengguna yang memilih ikut serta.

Verifikasi SMS. Aplikasi fintech menggunakan API SMS Brevo untuk kode otentikasi dua faktor. Endpoint SMS transaksional mengirimkan kode dalam hitungan detik, dan webhook melacak kegagalan pengiriman untuk logika coba lagi.

Kesimpulan

Berikut adalah apa yang telah Anda pelajari:

Langkah selanjutnya:

  1. Buat akun Brevo dan dapatkan kunci API
  2. Kirim email transaksional pertama Anda
  3. Buat template di editor visual
  4. Siapkan handler webhook untuk pantulan dan berhenti berlangganan
  5. Uji dengan Apidog dalam pengembangan

Uji API email Brevo dengan Apidog - gratis

button

FAQ

Apa perbedaan antara Brevo dan Sendinblue?Produk yang sama, nama baru. Sendinblue berganti nama menjadi Brevo pada tahun 2023. API masih menggunakan `api.brevo.com` tetapi Anda akan melihat referensi Sendinblue di dokumentasi lama.

Berapa banyak email yang bisa saya kirim secara gratis?300 email per hari di paket gratis. Itu berarti 9.000 email per bulan. Untuk lebih banyak, tingkatkan ke paket berbayar mulai dari $25/bulan untuk 20.000 email.

Bisakah saya menggunakan Brevo untuk email dingin (cold emails)?Secara teknis ya, tapi itu berisiko. Email dingin memiliki tingkat pantulan dan spam yang tinggi. Brevo memantau reputasi pengirim. Tingkat keluhan yang tinggi menyebabkan akun ditangguhkan. Hangatkan domain Anda terlebih dahulu dan ikuti praktik terbaik email.

Bagaimana cara menangani pantulan email?Dengarkan webhook bounced. Pantulan keras (email tidak valid) harus menghapus kontak secara permanen. Pantulan lunak (kotak surat penuh, masalah sementara) dapat dicoba lagi. Lacak tingkat pantulan - jika melebihi 5%, reputasi pengirim Anda akan menurun.

Apa perbedaan antara email pemasaran dan email transaksional?Email transaksional dipicu oleh tindakan pengguna (pembelian, pendaftaran) dan dikirim ke satu penerima. Email pemasaran adalah kampanye yang dikirim ke banyak penerima secara bersamaan. Brevo memisahkannya demi alasan pengiriman dan kepatuhan.

Bagaimana cara menambahkan tautan berhenti berlangganan?Brevo secara otomatis menambahkan tautan berhenti berlangganan ke email pemasaran. Untuk email transaksional, tambahkan tautan Anda sendiri:

<a href="{{ unsubscribe_url }}">Berhenti Berlangganan</a>

Bisakah saya mengirim email dari domain saya sendiri?Ya. Atur catatan SPF, DKIM, dan DMARC. Brevo menyediakan nilainya di Pengaturan → Pengirim & IP. Tanpa otentikasi yang tepat, email mungkin masuk ke spam.

Bagaimana cara menjadwalkan email di zona waktu tertentu?Gunakan parameter scheduledAt dengan stempel waktu ISO 8601:

{
  "scheduledAt": "2026-03-25T09:00:00-05:00"
}

Apa yang terjadi jika saya mencapai batas tingkat permintaan?Anda akan mendapatkan kesalahan 429. Respons mencakup header X-RateLimit-Reset dengan detik hingga reset. Terapkan backoff eksponensial atau antrekan email untuk nanti.

Mengembangkan API dengan Apidog

Apidog adalah alat pengembangan API yang membantu Anda mengembangkan API dengan lebih mudah dan efisien.