---
title: "Conversion received event"
method: POST
path: "conversion.received"
tags: ["Webhook Events"]
---

# Conversion received event

`POST conversion.received` (webhook)

Zernio stored an event: one sent to `POST /v1/events` or `POST /v1/ads/conversions`, or one a connected source sent for you (a lead form lead, a Shopify or WooCommerce order, a HubSpot deal). It fires again when a newer version of the same event is stored, such as an order that changed.

`conversion` has the fields of `GET /v1/events/{eventId}`, plus `source`, `campaign` (the campaign the event counts for, or null) and `campaignMatch` (why there is none). Personal data is never sent: `hasEmail`, `hasPhone` and `hasExternalId` only say what the event carried.

### Deduplication

The event `id` follows the stored event and its version, so a resend of the same version carries the same `id`. Deduplicate on it.

### Not sent for

Test events (they are never stored), corrections made with `PATCH` or `DELETE /v1/events/{eventId}`, and the hourly re-match that ties an earlier event to its campaign.

## Payload

- WebhookPayloadConversion: Webhook payload for conversion.received events.
  - `id` string, required: Stable webhook event ID: the dedupe key, also sent as the X-Zernio-Event-Id header. It follows the stored event and its version.
  - `profiles` object[]: The profiles this event belongs to, each with the externalId you set on it (null when none is set). Use it to route the event to your tenant without storing Zernio profile ids. Present on every event tied to a profile, absent on events that belong to none. Events spanning several profiles (a post published to accounts of different profiles) list each once.
    - `id` string, required
    - `externalId` string, nullable, required
  - `test` boolean: Always true when present: only a sample sent by POST /v1/webhooks/test with an event carries it. Real deliveries never do.
  - `event` 'conversion.received', required
  - `conversion` object, required
    - `eventId` string, required
    - `eventName` string, required
    - `eventTime` string, date-time, required
    - `receivedAt` string, date-time, required
    - `source` string, required: Who sent it: `api`, `relay`, a lead form (`meta_leads`, `google_leads`, `linkedin_leads`, `tiktok_leads`), a store (`shopify`, `woocommerce`) or `hubspot`.
    - `actionSource` string, nullable
    - `value` number, nullable
    - `currency` string, nullable
    - `sourceUrl` string, nullable: Origin, path and attribution parameters only.
    - `utm` object
      - `source` string, nullable
      - `medium` string, nullable
      - `campaign` string, nullable
      - `content` string, nullable
    - `zrn` string, nullable
    - `clickIds` object
      - `gclid` string, nullable
      - `fbc` string, nullable
    - `destinationsSent` integer
    - `hasEmail` boolean
    - `hasPhone` boolean
    - `hasExternalId` boolean
    - `campaign` object, nullable, required: The campaign the event counts for in campaign results and ad rules.
      - `platform` string
      - `adAccountId` string
      - `campaignId` string
    - `campaignMatch` string, required: `matched`, or why there is no campaign: `no_hint`, `no_campaign`, `ambiguous`, `not_counted` or `match_failed`.
  - `profileId` string, required: The profile the event belongs to.
  - `timestamp` string, date-time, required: UTC time at which Zernio generated this event.

## Acknowledgement `200`

Webhook received successfully

---

[API](https://skmtc.dev/zernio/apis/zernio-api.md) - [All operations](https://skmtc.dev/zernio/apis/zernio-api/llms.txt) - [OpenAPI document](https://skmtc.dev/zernio/apis/zernio-api/revisions/a79c233ebf22?raw)
