Klaviyo Connector
Verbinde Klaviyo über Tajo mit Brevo, um Marketingdaten zwischen beiden Plattformen zu migrieren oder zu synchronisieren. Synchronisiere Profile, Events, Listen, Segmente, Flows und Kampagnendaten für eine einheitliche Multi-Channel-Marketingstrategie.
Überblick
| Eigenschaft | Wert |
|---|---|
| Plattform | Klaviyo |
| Kategorie | Marketing |
| Einrichtungsaufwand | Mittel |
| Offizielle Integration | Nein |
| Synchronisierte Daten | Profile, Events, Listen, Segmente, Kampagnen |
| Verfügbare Skills | 10 |
| API-Standard | JSON:API |
Funktionen
- Profil-Synchronisation - Bidirektionale Synchronisation von Kundenprofilen zwischen Klaviyo und Brevo
- Event-Weiterleitung - Leite in Klaviyo getrackte Events an Brevo weiter, um Automationen auszulösen
- Listen-Migration - Synchronisiere Klaviyo-Listen in Brevo-Kontaktlisten
- Segment-Sync - Exportiere Klaviyo-Segmente als Brevo-Listen oder -Segmente
- Flow-Datenexport - Hole dir Flow-Performance-Daten für plattformübergreifende Analytics
- Kampagnen-Sync - Koordiniere Kampagnen über Klaviyo- und Brevo-Kanäle hinweg
- Catalog-Sync - Spiegele Produktkataloge zwischen den Plattformen
- Coupon-Management - Synchronisiere Coupon-Codes und Nutzungsdaten
Voraussetzungen
Bevor du beginnst, stelle sicher, dass du Folgendes hast:
- Ein Klaviyo-Konto mit API-Zugriff
- Einen Private API Key mit den passenden Scopes
- Deinen Klaviyo Public API Key (6-stellige Company-ID)
- Ein Brevo-Konto mit API-Zugriff
- Ein Tajo-Konto mit API-Anmeldedaten
Authentifizierung
Private API Key
Klaviyo verwendet Private API Keys mit gescoptem Zugriff für die serverseitige Authentifizierung. Setze den Schlüssel im Authorization-Header:
curl https://a.klaviyo.com/api/profiles/ \ -H "Authorization: Klaviyo-API-Key your-private-api-key" \ -H "revision: 2026-01-15"Scopes für API-Schlüssel
Konfiguriere Scopes beim Anlegen deines Private Keys:
| Scope | Zugriff | Beschreibung |
|---|---|---|
profiles | Read/Full | Zugriff auf Kontaktprofile |
events | Read/Full | Zugriff auf getrackte Events |
lists | Read/Full | Zugriff auf Kontaktlisten |
segments | Read | Zugriff auf Segmente |
campaigns | Read | Zugriff auf Kampagnendaten |
metrics | Read | Zugriff auf Metrik-Definitionen |
flows | Read | Zugriff auf Flow-Konfigurationen |
catalogs | Read | Zugriff auf Produktkataloge |
Public API Key
Für das clientseitige Tracking verwendest du die 6-stellige Company-ID:
curl -X POST "https://a.klaviyo.com/client/events/?company_id=COMPANY_ID" \ -H "Content-Type: application/json" \ -d '{"data": {...}}'OAuth (Partner-Integrationen)
Klaviyo unterstützt OAuth für Tech-Partner und bietet damit verbesserte Sicherheit und höhere Rate Limits:
curl https://a.klaviyo.com/api/profiles/ \ -H "Authorization: Bearer YOUR_OAUTH_TOKEN" \ -H "revision: 2026-01-15"Konfiguration
Grundeinrichtung
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: 22Profil-Zuordnung
Ordne Klaviyo-Profileigenschaften den Brevo-Kontaktattributen zu:
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_PREFEvent-Mapping
Ordne Klaviyo-Metriken Brevo-Events zu:
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"API-Endpoints
| Methode | Endpoint | Beschreibung |
|---|---|---|
GET | /api/profiles/ | Profile auflisten |
POST | /api/profiles/ | Ein Profil anlegen |
PATCH | /api/profiles/{id}/ | Ein Profil aktualisieren |
POST | /api/profile-merge/ | Doppelte Profile zusammenführen |
GET | /api/events/ | Events auflisten |
POST | /api/events/ | Ein Event anlegen |
GET | /api/lists/ | Alle Listen auflisten |
POST | /api/lists/{id}/relationships/profiles/ | Profile zu einer Liste hinzufügen |
GET | /api/segments/ | Segmente auflisten |
GET | /api/campaigns/ | Kampagnen auflisten |
GET | /api/flows/ | Flows auflisten |
GET | /api/metrics/ | Metriken auflisten |
POST | /api/metric-aggregates/ | Aggregierte Metriken abfragen |
GET | /api/catalog-items/ | Katalog-Einträge auflisten |
Code-Beispiele
Klaviyo-Connector initialisieren
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});Profile zu Brevo synchronisieren
// 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 }// }// }Ein Event erstellen
// 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 } } })});Metrik-Aggregate abfragen
// 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)'] } } })});Rate Limits
| Authentifizierung | Burst-Limit | Steady-Limit |
|---|---|---|
| Private API Key | 75 Anfragen/Sek. | 700 Anfragen/Min. |
| OAuth | 150 Anfragen/Sek. | 1.500 Anfragen/Min. |
| Client API | 100 Anfragen/Sek. | N/A |
| Bulk-Operationen | 10 Anfragen/Sek. | 100 Anfragen/Min. |
API-Revision erforderlich
Alle Klaviyo-API-Anfragen benötigen einen revision-Header mit einem gültigen API-Versions-Datum (z. B. 2026-01-15). Anfragen ohne diesen Header werden abgelehnt.
Fehlerbehebung
| Problem | Ursache | Lösung |
|---|---|---|
400 Bad Request | Ungültiger oder fehlender API-Schlüssel | Private API Key auf Korrektheit prüfen |
403 Forbidden | Unzureichender Scope | Prüfen, ob die Scopes des API-Schlüssels zu den erforderlichen Berechtigungen passen |
Fehlender revision-Header | Header nicht gesetzt | revision: 2026-01-15 zu allen Anfragen hinzufügen |
| Profil nicht gefunden | Falscher Identifier | Für Lookups die Klaviyo-Profil-ID verwenden, nicht die E-Mail |
| Events werden nicht synchronisiert | Falscher Metrik-Name | Exakte Metrik-Namen so verwenden, wie sie in Klaviyo definiert sind |
429 Too Many Requests | Rate Limit überschritten | Exponentielles Backoff umsetzen und für höhere Limits OAuth in Betracht ziehen |
| JSON:API-Formatfehler | Falscher Content-Type | application/vnd.api+json für Content-Type- und Accept-Header verwenden |
Best Practices
- JSON:API-Format nutzen - Folge der JSON:API-Spezifikation für alle Request- und Response-Payloads
revision-Header setzen - Füge denrevision-Header mit dem aktuellsten API-Versions-Datum stets hinzu- Sparse Fieldsets verwenden - Fordere mit
?fields[profile]=email,first_namenur die benötigten Felder an, um den Payload zu verkleinern - Relationships nutzen - Verwende den JSON:API-Parameter
include, um zugehörige Ressourcen in einer einzigen Anfrage zu laden - Cursor-Pagination nutzen - Navigiere große Ergebnismengen mit dem Parameter
page[cursor] - Bulk-Operationen umsetzen - Nutze Bulk-Endpoints für Batch-Profil-Importe und das Erstellen von Events
- Für höhere Limits OAuth nutzen - Die OAuth-Authentifizierung bietet doppelt so hohe Rate Limits wie Private Keys
Sicherheit
- Scopes für Private API Keys - Granulare Read/Full-Zugriffssteuerung pro Ressourcentyp
- OAuth-Unterstützung - Sichere token-basierte Authentifizierung für Partner-Integrationen
- Isolation des Public Keys - Clientseitige Schlüssel sind auf Create-Operationen beschränkt
- TLS 1.2+ - Die gesamte API-Kommunikation wird bei der Übertragung verschlüsselt
- SOC 2 Type II - Klaviyo ist nach SOC 2 Type II zertifiziert
- DSGVO-Konformität - Data-Privacy-API für Anfragen zur Profil-Löschung