The first CAPI integration is usually Meta. The second is a copy with the host changed. That is how LinkedIn returns 422, TikTok stamps arrival time, and Pinterest drops the event for a missing event_id.
The clock is the tell
Meta CAPI event_time is Unix seconds, 10 digits. LinkedIn conversionHappenedAt is milliseconds, 13 digits. A seconds value on LinkedIn reads as 1970 and falls outside the 90-day window. TikTok Events API timestamp is ISO 8601. An epoch number there is treated as arrival time. Pinterest CAPI event_time is seconds again.
Date.now() is right for LinkedIn and wrong for Meta. Math.floor(Date.now()/1000) is right for Meta and wrong for LinkedIn. toISOString() is right for TikTok and a type error on Meta.
Required fields do not translate
LinkedIn requires user.userIds even when you match on userInfo or lead. The field is often an empty array. Omit it and the API returns 422. Meta does not have that field.
Pinterest CAPI requires event_id. Meta treats event_id as how you dedup against the pixel; people ship Meta without it and still see purchases. The same omission on Pinterest is invalid.
{
"event_name": "Purchase",
"event_time": 1770000000,
"user_data": { "em": ["64ec88ca..."] }
}
HTTP 200 is still not the contract
Validate the outbound body, not the warehouse row:
pixellint validate json @meta.json --rulepack vendor/meta-conversions-api
pixellint validate json @li.json --rulepack vendor/linkedin-conversions-api
pixellint validate json @tt.json --rulepack vendor/tiktok-events-api
A shared CAPI JSON is a bug, not a shortcut. Pixellint is not affiliated with Meta, LinkedIn, TikTok, or Pinterest. Playground.
Original: One CAPI JSON cannot serve every vendor
Top comments (1)
Some comments may only be visible to logged-in visitors. Sign in to view all comments.