Conector de Klaviyo
Conecta Klaviyo con Brevo a través de Tajo para migrar o sincronizar datos de marketing entre ambas plataformas. Sincroniza perfiles, eventos, listas, segmentos, flows y datos de campañas para una estrategia de marketing multicanal unificada.
Resumen
| Propiedad | Valor |
|---|---|
| Plataforma | Klaviyo |
| Categoría | Marketing |
| Complejidad de configuración | Media |
| Integración oficial | No |
| Datos sincronizados | Perfiles, Eventos, Listas, Segmentos, Campañas |
| Skills disponibles | 10 |
| Estándar de API | JSON:API |
Funcionalidades
- Sincronización de perfiles - Sincronización bidireccional de perfiles de cliente entre Klaviyo y Brevo
- Reenvío de eventos - Reenvía los eventos registrados en Klaviyo a Brevo como triggers de automatización
- Migración de listas - Sincroniza las listas de Klaviyo con listas de contactos de Brevo
- Sincronización de segmentos - Exporta los segmentos de Klaviyo como listas o segmentos de Brevo
- Exportación de datos de flows - Obtén los datos de rendimiento de flows para analítica multiplataforma
- Sincronización de campañas - Coordina campañas entre canales de Klaviyo y Brevo
- Sincronización de catálogos - Replica los catálogos de productos entre plataformas
- Gestión de cupones - Sincroniza códigos de cupón y datos de uso
Requisitos previos
Antes de empezar, asegúrate de tener:
- Una cuenta de Klaviyo con acceso a la API
- Una Private API Key con los scopes adecuados
- Tu Klaviyo Public API Key (ID de empresa de 6 caracteres)
- Una cuenta de Brevo con acceso a la API
- Una cuenta de Tajo con credenciales de API
Autenticación
Private API Key
Klaviyo utiliza claves API privadas con acceso por scopes para la autenticación server-side. Incluye la clave en la cabecera Authorization:
curl https://a.klaviyo.com/api/profiles/ \ -H "Authorization: Klaviyo-API-Key your-private-api-key" \ -H "revision: 2026-01-15"Scopes de la clave API
Configura los scopes al crear tu clave privada:
| Scope | Acceso | Descripción |
|---|---|---|
profiles | Read/Full | Acceso a perfiles de contacto |
events | Read/Full | Acceso a eventos registrados |
lists | Read/Full | Acceso a listas de contactos |
segments | Read | Acceso a segmentos |
campaigns | Read | Acceso a datos de campañas |
metrics | Read | Acceso a definiciones de métricas |
flows | Read | Acceso a configuraciones de flows |
catalogs | Read | Acceso a catálogos de productos |
Public API Key
Para el tracking client-side, usa el ID de empresa de 6 caracteres:
curl -X POST "https://a.klaviyo.com/client/events/?company_id=COMPANY_ID" \ -H "Content-Type: application/json" \ -d '{"data": {...}}'OAuth (integraciones de partners)
Klaviyo admite OAuth para partners tecnológicos, lo que ofrece mayor seguridad y límites de velocidad más altos:
curl https://a.klaviyo.com/api/profiles/ \ -H "Authorization: Bearer YOUR_OAUTH_TOKEN" \ -H "revision: 2026-01-15"Configuración
Configuración básica
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: 22Asignación de perfiles
Asocia las propiedades de perfil de Klaviyo con los atributos de contacto de 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_PREFAsignación de eventos
Asocia las métricas de Klaviyo con eventos de 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"Endpoints de la API
| Método | Endpoint | Descripción |
|---|---|---|
GET | /api/profiles/ | Listar perfiles |
POST | /api/profiles/ | Crear un perfil |
PATCH | /api/profiles/{id}/ | Actualizar un perfil |
POST | /api/profile-merge/ | Fusionar perfiles duplicados |
GET | /api/events/ | Listar eventos |
POST | /api/events/ | Crear un evento |
GET | /api/lists/ | Listar todas las listas |
POST | /api/lists/{id}/relationships/profiles/ | Añadir perfiles a una lista |
GET | /api/segments/ | Listar segmentos |
GET | /api/campaigns/ | Listar campañas |
GET | /api/flows/ | Listar flows |
GET | /api/metrics/ | Listar métricas |
POST | /api/metric-aggregates/ | Consultar agregados de métricas |
GET | /api/catalog-items/ | Listar elementos de catálogo |
Ejemplos de código
Inicializar el conector de 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});Sincronizar perfiles con 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 }// }// }Crear 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 } } })});Consultar agregados de métricas
// 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)'] } } })});Límites de velocidad
| Autenticación | Límite de ráfaga | Límite sostenido |
|---|---|---|
| Private API Key | 75 peticiones/s | 700 peticiones/min |
| OAuth | 150 peticiones/s | 1.500 peticiones/min |
| Client API | 100 peticiones/s | N/A |
| Operaciones bulk | 10 peticiones/s | 100 peticiones/min |
Cabecera de revisión obligatoria
Todas las peticiones a la API de Klaviyo requieren la cabecera revision con una fecha de versión de API válida (por ejemplo, 2026-01-15). Las peticiones sin esta cabecera serán rechazadas.
Resolución de problemas
| Problema | Causa | Solución |
|---|---|---|
400 Bad Request | Clave API no válida o ausente | Verifica que la clave privada sea correcta |
403 Forbidden | Scope insuficiente | Comprueba que los scopes de la clave coincidan con los permisos necesarios |
Falta la cabecera revision | Cabecera no establecida | Añade revision: 2026-01-15 a todas las peticiones |
| Perfil no encontrado | Identificador incorrecto | Usa el profile ID de Klaviyo, no el email, para las búsquedas |
| Eventos no se sincronizan | Nombre de métrica incorrecto | Haz coincidir exactamente los nombres de métrica definidos en Klaviyo |
429 Too Many Requests | Límite de velocidad superado | Implementa backoff exponencial; considera OAuth para límites más altos |
| Errores de formato JSON:API | Content type incorrecto | Usa application/vnd.api+json en las cabeceras Content-Type y Accept |
Buenas prácticas
- Usa el formato JSON:API - Sigue la especificación JSON:API en todos los payloads de petición y respuesta
- Establece la cabecera revision - Incluye siempre la cabecera
revisioncon la fecha de versión más reciente - Usa sparse fieldsets - Pide solo los campos necesarios con
?fields[profile]=email,first_namepara reducir el tamaño del payload - Aprovecha las relaciones - Usa el parámetro
includede JSON:API para obtener recursos relacionados en una sola petición - Usa paginación por cursor - Navega por grandes conjuntos de resultados con el parámetro
page[cursor] - Implementa operaciones bulk - Usa endpoints bulk para importaciones masivas de perfiles y creación de eventos
- Usa OAuth para límites más altos - La autenticación OAuth ofrece el doble de límites de velocidad que las claves privadas
Seguridad
- Scopes de clave API privada - Control de acceso granular Read/Full por tipo de recurso
- Soporte OAuth - Autenticación segura basada en tokens para integraciones de partners
- Aislamiento de la clave pública - Las claves client-side se limitan a operaciones de solo creación
- TLS 1.2+ - Toda la comunicación con la API se cifra en tránsito
- SOC 2 Type II - Klaviyo está certificado SOC 2 Type II
- Cumplimiento RGPD - Data Privacy API para solicitudes de eliminación de perfiles