Meta CAPI (Conversions API) is Meta’s server-to-server interface for sending conversion events. Instead of a browser script reporting a conversion, your server sends it directly.
Why it exists
After ATT and browser restrictions, browser-side signals became incomplete: the pixel could not always fire, and could not always identify the user. CAPI gives the platform a server-side signal, which is not affected by ad blockers or by a page that fails to load.
In practice: the three steps
Sending an event to CAPI does not need an integration. It needs three pieces.
- Dataset and token. You need the dataset (pixel) ID and an access token that can manage events. The token lives on the server, never in the browser.
- The event payload. At minimum
event_name,event_timein UTC,event_idfor deduplication,action_source(usuallywebsite) anduser_datawith the matching keys: email or phone hashed in SHA-256,fbclid, IP and user agent. Withoutuser_datathe event arrives but is attributed to nobody. - The call. A
POSTtohttps://graph.facebook.com/<VERSION>/<DATASET_ID>/eventswithdata=[…]and the token. The response reports how many events were received and how many found a match.
What to check afterwards: events received equal events sent, and no event dropped because its event_time is older than 7 days.
Deduplication
If both the pixel and CAPI report the same conversion, Meta must know they are the same event, or it counts two. The mechanism is an event_id shared by both reports:
pixel: fbq('track', 'Lead', { ... }, { eventID: 'lead_9f21' })
CAPI: { event_name: 'Lead', event_id: 'lead_9f21', ... }
Without a consistent event_id, conversions are inflated — and inflated conversions lower the reported CPL, which makes the platform’s number look better than reality. It is the first thing to check when the two CPLs disagree.
What it improves
- Match quality: sending
fbclid, hashed email or phone raises the share of events the platform can attribute. - Optimisation: the platform’s optimiser learns from the events it receives. If it only sees a fraction, it optimises on a fraction.
What it does not do
It does not make the platform’s reported numbers equal to your first-party numbers. The model still applies its own window and modelling — see real CPL vs platform CPL.
Related terms
- fbclid — the identifier that improves matching
- Server-side tracking — the general pattern
- Real CPL — the number you decide on