---
title: "Konektor SendGrid"
description: "Panduan integrasi SendGrid lengkap untuk menyinkronkan kontak, email transaksional, kampanye marketing, dan event keterlibatan dengan Brevo melalui Tajo."
url: https://tajo.io/in/docs/connectors/marketing/sendgrid/
markdown: https://tajo.io/in/docs/connectors/marketing/sendgrid.md
lang: id-ID
robots: noindex
---

Ajukan akses awal

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

# Konektor SendGrid

Status konektor: Dalam pengerjaan Sedang dibangun. Belum terverifikasi.

| Field sumber | Field tujuan | Nilai contoh |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Hubungkan akun SendGrid Anda ke Brevo melalui Tajo untuk migrasi infrastruktur email, sinkronisasi kontak, transfer data kampanye, dan analitik keterlibatan terpadu di kedua platform.

## Ikhtisar

| Properti | Nilai |
| --- | --- |
| **Platform** | SendGrid (Twilio) |
| **Kategori** | Marketing |
| **Kompleksitas setup** | Mudah |
| **Integrasi resmi** | Tidak |
| **Data yang disinkronkan** | Kontak, kampanye, email transaksional, event |
| **Base URL API** | `https://api.sendgrid.com/v3` |

## Fitur

- **Migrasi kontak** - Migrasikan kontak SendGrid Marketing ke Brevo beserta field kustomnya
- **Sinkronisasi email transaksional** - Lacak event email transaksional untuk pelaporan terpadu
- **Data kampanye** - Sinkronkan data performa kampanye Single Send dan Automation
- **Webhook event** - Teruskan event email (delivered, opened, clicked, bounced) ke Brevo
- **Sinkronisasi suppression** - Migrasikan daftar bounce, block, dan unsubscribe demi kepatuhan
- **Migrasi template** - Ekspor Dynamic Transactional Template untuk dipakai di Brevo
- **Verifikasi pengirim** - Sinkronkan identitas pengirim terverifikasi dan autentikasi domain
- **Sinkronisasi statistik** - Impor statistik keterlibatan historis ke atribut Brevo

## Prasyarat

Sebelum memulai, pastikan Anda memiliki:

1. Akun SendGrid (Free, Essentials, Pro, atau Premier)
2. API key SendGrid dengan izin yang dibutuhkan
3. Akun Brevo dengan akses API
4. Akun Tajo

## Autentikasi

### Autentikasi API key

SendGrid memakai autentikasi bearer token.

```bash
curl https://api.sendgrid.com/v3/marketing/contacts \
  -H "Authorization: Bearer SG.YOUR_API_KEY" \
  -H "Content-Type: application/json"
```

Buat API key di SendGrid Settings > API Keys dengan tingkat izin tertentu:

- **Full Access** - Akses API sepenuhnya
- **Restricted Access** - Kontrol izin secara granular
- **Billing Access** - Operasi penagihan saja

#### Izin yang dibutuhkan

```
Marketing: Full Access
  - Contacts (read)
  - Single Sends (read)
  - Automations (read)
Mail Send: Full Access
  - Mail Send (read)
Stats: Read Access
Suppressions: Read Access
Tracking: Read Access
```

Keamanan API key

API key SendGrid hanya ditampilkan sekali saat dibuat. Simpan dengan aman. Jika hilang, Anda harus membuat key baru.

## Konfigurasi

### Setup dasar

```yaml
connectors:
  sendgrid:
    enabled: true
    api_key: "${SENDGRID_API_KEY}"

    # Data sync options
    sync:
      contacts: true
      campaigns: true
      transactional: true
      suppressions: true
      statistics: true

    # List mapping to Brevo
    list_mapping:
      "All Contacts": 60
      "Newsletter": 61
      "Transactional": 62
```

### Pemetaan field

Petakan field kontak SendGrid ke atribut kontak Brevo:

#### Pemetaan default

| Parameter | Type | Description |
| --- | --- | --- |
| `email` required | string | Alamat email kontak (identifier unik) |
| `first_name` optional | string | Dipetakan ke atribut FIRSTNAME |
| `last_name` optional | string | Dipetakan ke atribut LASTNAME |
| `phone_number` optional | string | Dipetakan ke atribut SMS |
| `city` optional | string | Kota kontak |
| `country` optional | string | Negara kontak |
| `custom_fields` optional | object | Pasangan key-value field kustom |
| `list_ids` optional | array | Keanggotaan daftar SendGrid |

#### Pemetaan field kustom

```yaml
field_mapping:
  # Standard fields
  email: email
  first_name: FIRSTNAME
  last_name: LASTNAME
  phone_number: SMS

  # Location fields
  city: CITY
  state_province_region: STATE
  country: COUNTRY
  postal_code: POSTAL_CODE

  # Engagement metrics
  avg_open_rate: AVG_OPEN_RATE
  avg_click_rate: AVG_CLICK_RATE

  # Custom fields
  custom_fields.company: COMPANY_NAME
  custom_fields.plan: PLAN_TYPE
```

## Endpoint API

### Marketing Contacts

| Method | Endpoint | Deskripsi |
| --- | --- | --- |
| `PUT` | `/v3/marketing/contacts` | Menambahkan atau memperbarui kontak |
| `POST` | `/v3/marketing/contacts/search` | Mencari kontak |
| `GET` | `/v3/marketing/contacts/count` | Mengambil jumlah kontak |
| `POST` | `/v3/marketing/contacts/exports` | Mengekspor kontak |
| `DELETE` | `/v3/marketing/contacts` | Menghapus kontak |
| `GET` | `/v3/marketing/lists` | Menampilkan seluruh daftar kontak |

### Email transaksional (Mail Send)

| Method | Endpoint | Deskripsi |
| --- | --- | --- |
| `POST` | `/v3/mail/send` | Mengirim sebuah email |
| `GET` | `/v3/templates` | Menampilkan Dynamic Template |
| `GET` | `/v3/templates/{id}` | Mengambil detail template |

### Kampanye (Single Send)

| Method | Endpoint | Deskripsi |
| --- | --- | --- |
| `GET` | `/v3/marketing/singlesends` | Menampilkan Single Send |
| `GET` | `/v3/marketing/singlesends/{id}` | Mengambil detail Single Send |
| `GET` | `/v3/marketing/automations` | Menampilkan Automation |

### Statistik

| Method | Endpoint | Deskripsi |
| --- | --- | --- |
| `GET` | `/v3/stats` | Mengambil statistik email global |
| `GET` | `/v3/categories/stats` | Mengambil statistik kategori |
| `GET` | `/v3/marketing/stats/singlesends` | Mengambil statistik Single Send |

### Suppression

| Method | Endpoint | Deskripsi |
| --- | --- | --- |
| `GET` | `/v3/suppression/bounces` | Menampilkan email yang bounce |
| `GET` | `/v3/suppression/blocks` | Menampilkan email yang diblokir |
| `GET` | `/v3/suppression/spam_reports` | Menampilkan laporan spam |
| `GET` | `/v3/suppression/unsubscribes` | Menampilkan unsubscribe global |

## Event

### Event email (melalui Event Webhook)

| Event | Pemicu | Kasus penggunaan |
| --- | --- | --- |
| `processed` | Email diterima SendGrid | Konfirmasi pengiriman |
| `delivered` | Email sampai ke penerima | Pelacakan pengiriman |
| `open` | Email dibuka | Skoring keterlibatan |
| `click` | Tautan diklik | Pelacakan minat |
| `bounce` | Email bounce | Higienitas daftar |
| `dropped` | Email ditekan | Peninjauan kepatuhan |
| `deferred` | Pengiriman ditunda | Pemantauan retry |
| `spam_report` | Ditandai sebagai spam | Pengelolaan reputasi |
| `unsubscribe` | Berhenti berlangganan lewat tautan | Sinkronisasi preferensi |

## Contoh kode

### Inisialisasi konektor

```javascript
import { TajoClient } from '@tajo/sdk';

const tajo = new TajoClient({
  apiKey: process.env.TAJO_API_KEY,
  brevoApiKey: process.env.BREVO_API_KEY
});

// Connect SendGrid
await tajo.connectors.connect('sendgrid', {
  apiKey: process.env.SENDGRID_API_KEY
});
```

### Migrasi kontak ke Brevo

```javascript
// Full contact migration from SendGrid to Brevo
await tajo.connectors.sync('sendgrid', {
  type: 'full',
  resources: ['contacts', 'suppressions'],
  options: {
    includeCustomFields: true,
    migrateListMemberships: true,
    migrateSuppressions: true
  }
});

// Check migration status
const status = await tajo.connectors.status('sendgrid');
console.log(status);
// {
//   connected: true,
//   lastSync: '2024-01-15T10:30:00Z',
//   contactsMigrated: 45000,
//   suppressionsSynced: 3200,
//   listsMapped: 8
// }
```

### Meneruskan event email

```javascript
// Handle SendGrid Event Webhook
app.post('/webhooks/sendgrid', async (req, res) => {
  const signature = req.get('X-Twilio-Email-Event-Webhook-Signature');

  // Verify webhook signature (ECDSA)
  if (!verifySendGridSignature(req.body, signature)) {
    return res.status(401).send('Unauthorized');
  }

  // Process batch of events
  for (const event of req.body) {
    await tajo.connectors.handleWebhook('sendgrid', {
      type: event.event,
      email: event.email,
      timestamp: event.timestamp,
      payload: event
    });
  }

  res.status(200).send('OK');
});
```

## Batas rate

Batas rate API SendGrid:

| Endpoint | Batas | Detail |
| --- | --- | --- |
| Mail Send (`/v3/mail/send`) | Bergantung paket | Free: 100/hari, Essentials: sesuai paket |
| PUT Marketing Contacts | 3 permintaan/detik | Batch hingga 30.000 kontak |
| Search Marketing Contacts | 50 permintaan/detik | Per API key |
| API umum | 1.000 permintaan/detik | Per API key |
| Event Webhook | Pengiriman batch | Hingga 1.000 event per POST |

Batas Mail Send

Batas Mail Send bergantung pada paket SendGrid Anda. Akun gratis dibatasi 100 email/hari. Periksa detail paket Anda untuk batas pengiriman yang persis.

## Pemecahan masalah

### Masalah umum

| Masalah | Penyebab | Solusi |
| --- | --- | --- |
| 401 Unauthorized | API key tidak valid | Periksa API key di SendGrid Settings |
| 403 Forbidden | Izin API key tidak mencukupi | Buat key baru dengan scope yang dibutuhkan |
| Ekspor kontak tertunda | Pemrosesan dataset besar | Polling endpoint status ekspor sampai selesai |
| Sinkronisasi suppression tidak lengkap | Perlu paginasi | Terapkan paginasi dengan parameter offset |
| Event webhook tidak diterima | URL belum terverifikasi | Selesaikan verifikasi URL webhook di SendGrid |

### Mode debug

Aktifkan logging verbose:

```yaml
connectors:
  sendgrid:
    debug: true
    log_level: verbose
    log_webhooks: true
```

### Menguji koneksi

```bash
tajo connectors test sendgrid
# ✓ API connection successful
# ✓ Contacts readable
# ✓ Lists accessible
# ✓ Statistics readable
# ✓ Suppressions accessible
```

## Praktik terbaik

1. **Migrasikan suppression lebih dulu** - Pastikan bounce, block, dan unsubscribe sudah ada di Brevo sebelum mengirim
2. **Gunakan unggahan kontak batch** - Kirim PUT hingga 30.000 kontak per permintaan agar efisien
3. **Verifikasi Event Webhook** - Aktifkan webhook bertanda tangan dengan verifikasi ECDSA
4. **Petakan field kustom** - Buat atribut Brevo yang setara sebelum migrasi kontak
5. **Sinkronkan data keterlibatan** - Impor statistik historis untuk segmentasi di Brevo
6. **Tangani ekspor asinkron** - Ekspor kontak bersifat asinkron, lakukan polling sampai selesai

## Keamanan

- **Autentikasi API key** - Bearer token dengan tingkat izin granular
- **Penandatanganan Event Webhook** - Verifikasi tanda tangan ECDSA untuk payload webhook
- **Enkripsi TLS** - Seluruh komunikasi API dienkripsi melalui HTTPS
- **IP Access Management** - Batasi akses Dashboard dan API berdasarkan IP
- **Autentikasi dua faktor** - 2FA tersedia untuk akses akun

## Sumber daya terkait

- [Dokumentasi API SendGrid](https://docs.sendgrid.com/api-reference)
- [Panduan SendGrid Event Webhook](https://docs.sendgrid.com/for-developers/tracking-events/event)
- [Konektor Brevo](https://tajo.io/in/docs/connectors/marketing/brevo)
- [Konektor Mailchimp](https://tajo.io/in/docs/connectors/marketing/mailchimp)
- [Skill Sinkronisasi Pelanggan](https://tajo.io/in/docs/skills/data-sync/customer-sync)
