Connettore Klaviyo
Collega Klaviyo a Brevo tramite Tajo per migrare o sincronizzare i dati marketing tra le piattaforme. Sincronizza profili, eventi, liste, segmenti, flussi e dati di campagne per una strategia di marketing multi-canale unificata.
Panoramica
| Proprietà | Valore |
|---|---|
| Piattaforma | Klaviyo |
| Categoria | Marketing |
| Complessità di setup | Media |
| Integrazione ufficiale | No |
| Dati sincronizzati | Profili, Eventi, Liste, Segmenti, Campagne |
| Skill disponibili | 10 |
| Standard API | JSON:API |
Funzionalità
- Sync dei profili - Sync bidirezionale dei profili cliente tra Klaviyo e Brevo
- Inoltro eventi - Inoltra gli eventi tracciati di Klaviyo a Brevo per i trigger di automazione
- Migrazione liste - Sincronizza le liste Klaviyo con le liste contatti Brevo
- Sync dei segmenti - Esporta i segmenti Klaviyo come liste o segmenti Brevo
- Esportazione dati flow - Estrai dati di performance dei flow per analytics cross-platform
- Sync delle campagne - Coordina le campagne tra i canali Klaviyo e Brevo
- Sync del catalogo - Replica i cataloghi prodotti tra le piattaforme
- Gestione coupon - Sincronizza codici coupon e dati di utilizzo
Prerequisiti
Prima di iniziare, assicurati di avere:
- Un account Klaviyo con accesso API
- Una Private API Key con gli scope appropriati
- La tua Klaviyo Public API Key (company ID di 6 caratteri)
- Un account Brevo con accesso API
- Un account Tajo con credenziali API
Autenticazione
Private API Key
Klaviyo utilizza chiavi API private con accesso scopato per l’autenticazione server-side. Imposta la chiave nell’header Authorization:
curl https://a.klaviyo.com/api/profiles/ \ -H "Authorization: Klaviyo-API-Key your-private-api-key" \ -H "revision: 2026-01-15"Scope delle chiavi API
Configura gli scope al momento della creazione della tua chiave privata:
| Scope | Accesso | Descrizione |
|---|---|---|
profiles | Read/Full | Accesso ai profili contatti |
events | Read/Full | Accesso agli eventi tracciati |
lists | Read/Full | Accesso alle liste contatti |
segments | Read | Accesso ai segmenti |
campaigns | Read | Accesso ai dati delle campagne |
metrics | Read | Accesso alle definizioni delle metriche |
flows | Read | Accesso alle configurazioni dei flow |
catalogs | Read | Accesso ai cataloghi prodotti |
Public API Key
Per il tracking client-side, usa il company ID di 6 caratteri:
curl -X POST "https://a.klaviyo.com/client/events/?company_id=COMPANY_ID" \ -H "Content-Type: application/json" \ -d '{"data": {...}}'OAuth (Integrazioni Partner)
Klaviyo supporta OAuth per partner tecnologici, offrendo maggiore sicurezza e limiti di velocità più alti:
curl https://a.klaviyo.com/api/profiles/ \ -H "Authorization: Bearer YOUR_OAUTH_TOKEN" \ -H "revision: 2026-01-15"Configurazione
Setup di base
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: 22Mappatura dei profili
Mappa le proprietà dei profili Klaviyo agli attributi di contatto 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_PREFMappatura degli eventi
Mappa le metriche Klaviyo agli eventi 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
| Metodo | Endpoint | Descrizione |
|---|---|---|
GET | /api/profiles/ | Elenca i profili |
POST | /api/profiles/ | Crea un profilo |
PATCH | /api/profiles/{id}/ | Aggiorna un profilo |
POST | /api/profile-merge/ | Unisci profili duplicati |
GET | /api/events/ | Elenca gli eventi |
POST | /api/events/ | Crea un evento |
GET | /api/lists/ | Elenca tutte le liste |
POST | /api/lists/{id}/relationships/profiles/ | Aggiungi profili a una lista |
GET | /api/segments/ | Elenca i segmenti |
GET | /api/campaigns/ | Elenca le campagne |
GET | /api/flows/ | Elenca i flow |
GET | /api/metrics/ | Elenca le metriche |
POST | /api/metric-aggregates/ | Interroga gli aggregati delle metriche |
GET | /api/catalog-items/ | Elenca gli elementi del catalogo |
Esempi di codice
Inizializza il connettore 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});Sincronizza i profili su 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 }// }// }Crea un evento
// 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 } } })});Interroga aggregati di metriche
// 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)'] } } })});Limiti di velocità
| Autenticazione | Burst Limit | Steady Limit |
|---|---|---|
| Private API Key | 75 richieste/sec | 700 richieste/min |
| OAuth | 150 richieste/sec | 1.500 richieste/min |
| Client API | 100 richieste/sec | N/D |
| Operazioni bulk | 10 richieste/sec | 100 richieste/min |
Header revision richiesto
Tutte le richieste API Klaviyo richiedono l’header revision impostato su una data di versione API valida (es. 2026-01-15). Le richieste senza questo header verranno rifiutate.
Risoluzione dei problemi
| Problema | Causa | Soluzione |
|---|---|---|
400 Bad Request | Chiave API non valida o mancante | Verifica che la chiave API privata sia corretta |
403 Forbidden | Scope insufficiente | Controlla che gli scope della chiave API corrispondano ai permessi richiesti |
Header revision mancante | Header non impostato | Aggiungi revision: 2026-01-15 a tutte le richieste |
| Profilo non trovato | Identificatore errato | Usa l’ID del profilo Klaviyo, non l’email, per le ricerche |
| Eventi non sincronizzati | Nome metrica errato | Allinea i nomi delle metriche esattamente come definiti in Klaviyo |
429 Too Many Requests | Limite di velocità superato | Implementa il backoff esponenziale, considera OAuth per limiti più alti |
| Errori formato JSON:API | Content type errato | Usa application/vnd.api+json per gli header Content-Type e Accept |
Best practice
- Usa il formato JSON:API - Segui la specifica JSON:API per tutti i payload di richiesta e risposta
- Imposta l’header revision - Includi sempre l’header
revisioncon l’ultima data di versione API - Usa sparse fieldset - Richiedi solo i campi necessari con
?fields[profile]=email,first_nameper ridurre la dimensione del payload - Sfrutta le relazioni - Usa il parametro
includedi JSON:API per recuperare risorse correlate in una singola richiesta - Usa la paginazione cursor - Naviga grandi result set con il parametro
page[cursor] - Implementa operazioni bulk - Usa endpoint bulk per import di profili in batch e creazione eventi
- Usa OAuth per limiti più alti - L’autenticazione OAuth fornisce limiti di velocità 2x più alti rispetto alle chiavi private
Sicurezza
- Scope chiave API privata - Controllo accessi granulare Read/Full per tipo di risorsa
- Supporto OAuth - Autenticazione sicura basata su token per integrazioni partner
- Isolamento public key - Chiavi client-side limitate alle sole operazioni di creazione
- TLS 1.2+ - Tutte le comunicazioni API cifrate in transito
- SOC 2 Type II - Klaviyo è certificato SOC 2 Type II
- Conformità GDPR - Data Privacy API per richieste di eliminazione profilo