Konektor Klaviyo
Hubungkan Klaviyo ke Brevo melalui Tajo untuk memigrasikan atau menyinkronkan data marketing antarplatform. Sinkronkan profil, event, daftar, segmen, flow, dan data kampanye demi strategi marketing multikanal yang terpadu.
Ikhtisar
| Properti | Nilai |
|---|---|
| Platform | Klaviyo |
| Kategori | Marketing |
| Kompleksitas setup | Sedang |
| Integrasi resmi | Tidak |
| Data yang disinkronkan | Profil, event, daftar, segmen, kampanye |
| Skill tersedia | 10 |
| Standar API | JSON:API |
Fitur
- Sinkronisasi profil - Sinkronisasi dua arah profil pelanggan antara Klaviyo dan Brevo
- Penerusan event - Teruskan event yang dilacak Klaviyo ke Brevo sebagai pemicu otomatisasi
- Migrasi daftar - Sinkronkan daftar Klaviyo ke daftar kontak Brevo
- Sinkronisasi segmen - Ekspor segmen Klaviyo sebagai daftar atau segmen Brevo
- Ekspor data flow - Tarik data performa flow untuk analitik lintas platform
- Sinkronisasi kampanye - Koordinasikan kampanye di kanal Klaviyo dan Brevo
- Sinkronisasi katalog - Cerminkan katalog produk antarplatform
- Pengelolaan kupon - Sinkronkan kode kupon dan data penggunaannya
Prasyarat
Sebelum memulai, pastikan Anda memiliki:
- Akun Klaviyo dengan akses API
- Private API Key dengan scope yang sesuai
- Public API Key Klaviyo Anda (company ID 6 karakter)
- Akun Brevo dengan akses API
- Akun Tajo dengan kredensial API
Autentikasi
Private API key
Klaviyo memakai private API key dengan akses ber-scope untuk autentikasi sisi server. Setel key tersebut pada header Authorization:
curl https://a.klaviyo.com/api/profiles/ \ -H "Authorization: Klaviyo-API-Key your-private-api-key" \ -H "revision: 2026-01-15"Scope API key
Konfigurasikan scope saat membuat private key Anda:
| Scope | Akses | Deskripsi |
|---|---|---|
profiles | Read/Full | Akses profil kontak |
events | Read/Full | Akses event yang dilacak |
lists | Read/Full | Akses daftar kontak |
segments | Read | Akses segmen |
campaigns | Read | Akses data kampanye |
metrics | Read | Akses definisi metrik |
flows | Read | Akses konfigurasi flow |
catalogs | Read | Akses katalog produk |
Public API key
Untuk pelacakan sisi klien, gunakan company ID 6 karakter:
curl -X POST "https://a.klaviyo.com/client/events/?company_id=COMPANY_ID" \ -H "Content-Type: application/json" \ -d '{"data": {...}}'OAuth (integrasi partner)
Klaviyo mendukung OAuth untuk tech partner, dengan keamanan dan batas rate yang lebih baik:
curl https://a.klaviyo.com/api/profiles/ \ -H "Authorization: Bearer YOUR_OAUTH_TOKEN" \ -H "revision: 2026-01-15"Konfigurasi
Setup dasar
connectors: klaviyo: enabled: true private_api_key: "your-klaviyo-private-key" public_api_key: "XXXXXX" api_revision: "2026-01-15"
# Data sync options sync: profiles: true events: true lists: true segments: true catalogs: false
# Brevo list assignment lists: all_contacts: 20 subscribers: 21 high_value: 22Pemetaan profil
Petakan properti profil Klaviyo ke atribut kontak Brevo:
profile_mapping: email: email first_name: FIRSTNAME last_name: LASTNAME phone_number: SMS city: CITY region: REGION country: COUNTRY zip: ZIP organization: COMPANY title: JOB_TITLE
# Custom properties lifetime_value: LTV total_orders: ORDER_COUNT last_order_date: LAST_ORDER_DATE preferred_channel: CHANNEL_PREFPemetaan event
Petakan metrik Klaviyo ke event Brevo:
event_mapping: "Placed Order": "order_completed" "Ordered Product": "product_purchased" "Started Checkout": "checkout_started" "Added to Cart": "cart_updated" "Viewed Product": "product_viewed" "Subscribed to List": "customer_subscribed" "Received Email": "email_received" "Opened Email": "email_opened" "Clicked Email": "email_clicked"Endpoint API
| Method | Endpoint | Deskripsi |
|---|---|---|
GET | /api/profiles/ | Menampilkan profil |
POST | /api/profiles/ | Membuat sebuah profil |
PATCH | /api/profiles/{id}/ | Memperbarui sebuah profil |
POST | /api/profile-merge/ | Menggabungkan profil duplikat |
GET | /api/events/ | Menampilkan event |
POST | /api/events/ | Membuat sebuah event |
GET | /api/lists/ | Menampilkan seluruh daftar |
POST | /api/lists/{id}/relationships/profiles/ | Menambahkan profil ke sebuah daftar |
GET | /api/segments/ | Menampilkan segmen |
GET | /api/campaigns/ | Menampilkan kampanye |
GET | /api/flows/ | Menampilkan flow |
GET | /api/metrics/ | Menampilkan metrik |
POST | /api/metric-aggregates/ | Mengueri agregat metrik |
GET | /api/catalog-items/ | Menampilkan item katalog |
Contoh kode
Inisialisasi konektor Klaviyo
import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY, brevoApiKey: process.env.BREVO_API_KEY});
// Connect Klaviyo accountawait tajo.connectors.connect('klaviyo', { privateApiKey: process.env.KLAVIYO_PRIVATE_KEY, publicApiKey: process.env.KLAVIYO_PUBLIC_KEY});Sinkronisasi profil ke Brevo
// Fetch Klaviyo profiles and sync to Brevoconst response = await fetch('https://a.klaviyo.com/api/profiles/', { headers: { 'Authorization': `Klaviyo-API-Key ${PRIVATE_KEY}`, 'revision': '2026-01-15', 'Accept': 'application/vnd.api+json' }});
const { data } = await response.json();
// Each profile follows JSON:API format// {// "type": "profile",// "id": "01ABCDEF",// "attributes": {// "email": "[email protected]",// "first_name": "Jane",// "last_name": "Kim",// "phone_number": "+15551234567",// "properties": { "lifetime_value": 450.00 }// }// }Membuat sebuah event
// Track an event in Klaviyo (forwarded to Brevo via Tajo)await fetch('https://a.klaviyo.com/api/events/', { method: 'POST', headers: { 'Authorization': `Klaviyo-API-Key ${PRIVATE_KEY}`, 'revision': '2026-01-15', 'Content-Type': 'application/vnd.api+json', 'Accept': 'application/vnd.api+json' }, body: JSON.stringify({ data: { type: 'event', attributes: { metric: { data: { type: 'metric', attributes: { name: 'Placed Order' } } }, profile: { }, properties: { OrderId: 'ORD-1234', Value: 89.99, Items: [ { ProductName: 'Widget Pro', Price: 89.99, Quantity: 1 } ] }, value: 89.99 } } })});Kueri agregat metrik
// Get aggregate metric data for reportingawait fetch('https://a.klaviyo.com/api/metric-aggregates/', { method: 'POST', headers: { 'Authorization': `Klaviyo-API-Key ${PRIVATE_KEY}`, 'revision': '2026-01-15', 'Content-Type': 'application/vnd.api+json' }, body: JSON.stringify({ data: { type: 'metric-aggregate', attributes: { metric_id: 'METRIC_ID', measurements: ['count', 'sum_value'], interval: 'day', filter: ['greater-or-equal(datetime,2024-01-01)', 'less-than(datetime,2024-02-01)'] } } })});Batas rate
| Autentikasi | Batas burst | Batas steady |
|---|---|---|
| Private API Key | 75 permintaan/dtk | 700 permintaan/mnt |
| OAuth | 150 permintaan/dtk | 1.500 permintaan/mnt |
| Client API | 100 permintaan/dtk | N/A |
| Operasi bulk | 10 permintaan/dtk | 100 permintaan/mnt |
Header revision wajib
Seluruh permintaan API Klaviyo membutuhkan header revision yang disetel ke tanggal versi API yang valid (misalnya 2026-01-15). Permintaan tanpa header ini akan ditolak.
Pemecahan masalah
| Masalah | Penyebab | Solusi |
|---|---|---|
400 Bad Request | API key tidak valid atau tidak ada | Pastikan private API key sudah benar |
403 Forbidden | Scope tidak mencukupi | Periksa apakah scope API key sesuai dengan izin yang dibutuhkan |
Header revision hilang | Header belum disetel | Tambahkan revision: 2026-01-15 pada seluruh permintaan |
| Profil tidak ditemukan | Identifier keliru | Gunakan profile ID Klaviyo, bukan email, untuk pencarian |
| Event tidak tersinkron | Nama metrik keliru | Cocokkan nama metrik persis seperti yang didefinisikan di Klaviyo |
429 Too Many Requests | Batas rate terlampaui | Terapkan exponential backoff, pertimbangkan OAuth untuk batas lebih tinggi |
| Error format JSON:API | Content type keliru | Gunakan application/vnd.api+json untuk header Content-Type dan Accept |
Praktik terbaik
- Gunakan format JSON:API - Ikuti spesifikasi JSON:API untuk seluruh payload permintaan dan respons
- Setel header revision - Selalu sertakan header
revisiondengan tanggal versi API terbaru - Gunakan sparse fieldset - Minta hanya field yang dibutuhkan dengan
?fields[profile]=email,first_nameuntuk memperkecil ukuran payload - Manfaatkan relasi - Gunakan parameter
includeJSON:API untuk mengambil resource terkait dalam satu permintaan - Gunakan paginasi kursor - Telusuri kumpulan hasil besar dengan parameter
page[cursor] - Terapkan operasi bulk - Gunakan endpoint bulk untuk impor profil dan pembuatan event secara batch
- Gunakan OAuth untuk batas lebih tinggi - Autentikasi OAuth memberi batas rate 2x lebih tinggi dibanding private key
Keamanan
- Scope private API key - Kontrol akses granular Read/Full per tipe resource
- Dukungan OAuth - Autentikasi berbasis token yang aman untuk integrasi partner
- Isolasi public key - Key sisi klien dibatasi hanya untuk operasi pembuatan
- TLS 1.2+ - Seluruh komunikasi API dienkripsi saat transit
- SOC 2 Type II - Klaviyo tersertifikasi SOC 2 Type II
- Kepatuhan GDPR - Data Privacy API untuk permintaan penghapusan profil