Klaviyo 连接器

通过 Tajo 将 Klaviyo 连接到 Brevo,实现平台间营销数据的迁移或同步。同步用户档案、事件、列表、细分、流程和营销活动数据,构建统一的多渠道营销策略。

概览

属性
平台Klaviyo
类别营销
设置复杂度中等
官方集成
同步数据用户档案、事件、列表、细分、营销活动
可用技能10
API 标准JSON:API

功能

  • 档案同步 - Klaviyo 和 Brevo 之间的双向客户档案同步
  • 事件转发 - 将 Klaviyo 跟踪事件转发到 Brevo 触发自动化
  • 列表迁移 - 将 Klaviyo 列表同步到 Brevo 联系人列表
  • 细分同步 - 将 Klaviyo 细分导出为 Brevo 列表或细分
  • 流程数据导出 - 提取流程绩效数据用于跨平台分析
  • 营销活动同步 - 协调 Klaviyo 和 Brevo 渠道的营销活动
  • 目录同步 - 在平台间镜像产品目录
  • 优惠券管理 - 同步优惠券代码和使用数据

前提条件

开始之前,请确保您已具备:

  1. 具有 API 访问权限的 Klaviyo 账户
  2. 具有适当范围的私有 API 密钥
  3. 您的 Klaviyo 公共 API 密钥(6 字符公司 ID)
  4. 具有 API 访问权限的 Brevo 账户
  5. 具有 API 凭据的 Tajo 账户

认证

私有 API 密钥

Klaviyo 使用具有范围访问的私有 API 密钥进行服务器端认证。在 Authorization 请求头中设置密钥:

Terminal window
curl https://a.klaviyo.com/api/profiles/ \
-H "Authorization: Klaviyo-API-Key your-private-api-key" \
-H "revision: 2026-01-15"

API 密钥范围

创建私有密钥时配置范围:

范围访问权限描述
profiles读取/完全访问联系人档案
events读取/完全访问跟踪事件
lists读取/完全访问联系人列表
segments读取访问细分
campaigns读取访问营销活动数据
metrics读取访问指标定义
flows读取访问流程配置
catalogs读取访问产品目录

公共 API 密钥

用于客户端跟踪,使用 6 字符公司 ID:

Terminal window
curl -X POST "https://a.klaviyo.com/client/events/?company_id=COMPANY_ID" \
-H "Content-Type: application/json" \
-d '{"data": {...}}'

OAuth(合作伙伴集成)

Klaviyo 为技术合作伙伴提供 OAuth,提供更好的安全性和更高的速率限制:

Terminal window
curl https://a.klaviyo.com/api/profiles/ \
-H "Authorization: Bearer YOUR_OAUTH_TOKEN" \
-H "revision: 2026-01-15"

配置

基础设置

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: 22

档案映射

将 Klaviyo 档案属性映射到 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_PREF

事件映射

将 Klaviyo 指标映射到 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"

API 端点

方法端点描述
GET/api/profiles/列出档案
POST/api/profiles/创建档案
PATCH/api/profiles/{id}/更新档案
POST/api/profile-merge/合并重复档案
GET/api/events/列出事件
POST/api/events/创建事件
GET/api/lists/列出所有列表
POST/api/lists/{id}/relationships/profiles/将档案添加到列表
GET/api/segments/列出细分
GET/api/campaigns/列出营销活动
GET/api/flows/列出流程
GET/api/metrics/列出指标
POST/api/metric-aggregates/查询指标聚合
GET/api/catalog-items/列出目录项目

代码示例

初始化 Klaviyo 连接器

import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({
apiKey: process.env.TAJO_API_KEY,
brevoApiKey: process.env.BREVO_API_KEY
});
// Connect Klaviyo account
await tajo.connectors.connect('klaviyo', {
privateApiKey: process.env.KLAVIYO_PRIVATE_KEY,
publicApiKey: process.env.KLAVIYO_PUBLIC_KEY
});

将档案同步到 Brevo

// Fetch Klaviyo profiles and sync to Brevo
const 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 }
// }
// }

创建事件

// 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: {
data: { type: 'profile', attributes: { email: '[email protected]' } }
},
properties: {
OrderId: 'ORD-1234',
Value: 89.99,
Items: [
{ ProductName: 'Widget Pro', Price: 89.99, Quantity: 1 }
]
},
value: 89.99
}
}
})
});

查询指标聚合

// Get aggregate metric data for reporting
await 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)']
}
}
})
});

速率限制

认证方式突发限制稳定限制
私有 API 密钥75 请求/秒700 请求/分钟
OAuth150 请求/秒1,500 请求/分钟
客户端 API100 请求/秒
批量操作10 请求/秒100 请求/分钟

需要 API 修订版本

所有 Klaviyo API 请求都需要将 revision 请求头设置为有效的 API 版本日期(例如 2026-01-15)。没有此请求头的请求将被拒绝。

故障排除

问题原因解决方案
400 Bad RequestAPI 密钥无效或缺失验证私有 API 密钥是否正确
403 Forbidden范围不足检查 API 密钥范围是否与所需权限匹配
缺少 revision 请求头未设置请求头在所有请求中添加 revision: 2026-01-15
找不到档案标识符错误查找时使用 Klaviyo 档案 ID,而非邮箱
事件未同步指标名称错误与 Klaviyo 中定义的指标名称完全匹配
429 Too Many Requests超出速率限制实施指数退避,考虑使用 OAuth 获得更高限制
JSON:API 格式错误内容类型错误Content-Type 和 Accept 请求头使用 application/vnd.api+json

最佳实践

  1. 使用 JSON:API 格式 - 所有请求和响应负载遵循 JSON:API 规范
  2. 设置修订版本请求头 - 始终包含最新 API 版本日期的 revision 请求头
  3. 使用稀疏字段集 - 使用 ?fields[profile]=email,first_name 只请求所需字段,减少负载大小
  4. 利用关联关系 - 使用 JSON:API include 参数在单次请求中获取相关资源
  5. 使用游标分页 - 使用 page[cursor] 参数浏览大型结果集
  6. 实施批量操作 - 使用批量端点进行批量档案导入和事件创建
  7. 使用 OAuth 获得更高限制 - OAuth 认证提供比私有密钥高 2 倍的速率限制

安全

  • 私有 API 密钥范围 - 每种资源类型的细粒度读取/完全访问控制
  • OAuth 支持 - 合作伙伴集成的安全基于令牌的认证
  • 公共密钥隔离 - 客户端密钥仅限于创建操作
  • TLS 1.2+ - 所有 API 通信在传输中加密
  • SOC 2 Type II - Klaviyo 通过 SOC 2 Type II 认证
  • GDPR 合规 - 数据隐私 API 用于档案删除请求

相关资源

Subscribe to updates

developer-docs

Drop your email or phone number — we'll send you what matters next.

auto-detect
AI 助手

你好!关于文档有任何问题都可以问我。