# conversion.received

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 for `conversion.received`:**

- **id** (required) `string`: 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**: `WebhookProfiles` - See schema definition
- **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** (required) `string`: No description - one of: conversion.received
- **conversion** (required) `object`: 
  - **eventId** (required) `string`: No description
  - **eventName** (required) `string`: No description
  - **eventTime** (required) `string` (date-time): No description
  - **receivedAt** (required) `string` (date-time): No description
  - **source** (required) `string`: Who sent it: `api`, `relay`, a lead form (`meta_leads`, `google_leads`, `linkedin_leads`, `tiktok_leads`), a store (`shopify`, `woocommerce`) or `hubspot`.
  - **actionSource** `string,null`: No description
  - **value** `number,null`: No description
  - **currency** `string,null`: No description
  - **sourceUrl** `string,null`: Origin, path and attribution parameters only.
  - **utm** `object`: 
    - **source** `string,null`: No description
    - **medium** `string,null`: No description
    - **campaign** `string,null`: No description
    - **content** `string,null`: No description
  - **zrn** `string,null`: No description
  - **clickIds** `object`: 
    - **gclid** `string,null`: No description
    - **fbc** `string,null`: No description
  - **destinationsSent** `integer`: No description
  - **hasEmail** `boolean`: No description
  - **hasPhone** `boolean`: No description
  - **hasExternalId** `boolean`: No description
  - **campaign** (required) `object,null`: The campaign the event counts for in campaign results and ad rules.
  - **campaignMatch** (required) `string`: `matched`, or why there is no campaign: `no_hint`, `no_campaign`, `ambiguous`, `not_counted` or `match_failed`.
- **profileId** (required) `string`: The profile the event belongs to.
- **timestamp** (required) `string` (date-time): UTC time at which Zernio generated this event.