Post a conversion another system saw
Records a fact the site cannot see itself — a reservation paid on a booking site, a lead that became a customer — as an event with source: external, and delivers it to the ad platforms the Conversion reports to (Google Ads, Google Analytics 4, Meta, TikTok server APIs). Google Analytics only accepts it within 72 hours of when it happened.
Joining. The CMS joins the fact to a visitor’s journey with match, strongest first (visitor ID, the fk_at token, _gcl_au, a click ID, hashed email / phone), and copies that visitor’s attribution onto the event. join.by in the answer says which matched. The producer’s own click IDs win over the visitor record’s; its browser IDs only fill gaps.
Consent. The producer’s consent flags govern what is sent about the fact (omitted flags are granted). A denial trims what is sent — no contact details or browser data, Google receives CONSENT_DENIED — but the conversion is always stored and delivered.
Browser context. Send the customer’s client (IP, user agent) and page.url as captured when they booked; with them the fact reaches Meta as a website event (de-duplicated against the pixel), without them as system_generated.
Idempotent on eventId. Posting the same fact again returns the stored event with created: false; the same ID with different content is a 409. Retry freely.
Access: an API key with conversions:write — or its group master ads:all, or admin:all — or a signed-in user holding the conversion-events:write permission. Anonymous callers get 404.
Signed: every API key must sign this request (X-Fetchski-Timestamp + X-Fetchski-Signature, see the headers below), whatever its own signing mode. Signed-in users in the CMS need no signature. Signing requests shows how, from the API and both SDKs.
Rate limit: the key’s own writes-per-minute limit, set when the key is created (default 120); over it, 429 with Retry-After.
Authorizations
Headers
Required for API keys. v1= + the lower-case hex HMAC-SHA256, keyed with the API key’s signing secret (fss_…, shown once when the key is created or rotated), of <timestamp>.<METHOD>.<path including query>.<raw request body> — e.g. 1790000000.POST./api/v1/conversion-event/external.{"eventId":…}. Several comma-separated v1= values are accepted.
^v1=[0-9a-f]{64}(,\s*v1=[0-9a-f]{64})*$Body
Opaque, unique per site, stable. The CMS mints a UUID for events it originates; another system mints its own (e.g. tenant-42:order:1234:purchase). Forwarded unchanged to every ad platform as its de-duplication key.
128^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"tenant-42:order:1234:purchase"
Response
The stored event. created is false when this event ID was already stored with the same content.