Conversions API
The Conversions API (CAPI) is Meta's server-to-server endpoint for sending conversion events directly to Meta, alongside or instead of the pixel.
What is the Conversions API?
The Conversions API, often shortened to CAPI, is Meta's interface for sending conversion events from your server to Meta. Each event describes something a person did, such as Purchase, Lead or CompleteRegistration, along with customer information Meta uses to match the event to an account.
The term is sometimes used loosely for any platform's server-side event API. TikTok's equivalent is the Events API, Google Ads uses offline conversion uploads and enhanced conversions, and GA4 uses the Measurement Protocol.
What a Conversions API event contains
A typical event includes an event name, an event time, an event id, the page URL, and a user_data object. User data can include hashed email and phone, the fbc click id (derived from the fbclid parameter on an ad click), the fbp browser id cookie, IP address and user agent.
Email, phone and other personal fields must be normalized and hashed with SHA-256 before sending. The click and browser ids are sent as-is. The more of these signals an event carries, the better Meta can match it, which shows up in Event Match Quality.
Running CAPI alongside the pixel
Meta recommends a redundant setup: the pixel fires in the browser and the same event is sent through the Conversions API. To avoid counting one purchase twice, both must send the same event name and the same event_id. Meta then keeps one and discards the duplicate.
Getting this wrong is common. A missing or mismatched event id inflates conversions; a missing fbc or email lowers match quality and weakens attribution.
How TracerKit handles it
TracerKit connects to Meta with a Conversions API access token and your pixel id, sends hashed email and phone plus the fbc and fbp ids captured on the landing hit, and reuses the browser pixel's event id so Meta dedupes the pair. Its reconciliation compares the counts it observed against what Meta reports.
See how TracerKit handles this: Server-side forwarding
Take a look →