> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tryprofound.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Send a conversion event

> Record a conversion event for a Profound browser pixel

Records one conversion event for a pixel your organization owns.

Field and event names are the same as the [browser pixel events](https://docs.tryprofound.com/pixel/events.md). The API rejects a request that contains a field it doesn't recognize. A `202` response means Profound queued the event. Any other status means Profound didn't record it.

## Authorizations

**Authorization** `string` *required*

Bearer authentication header of the form `Bearer <your key>`. The key starts with `pfck_`. To learn how to generate your key, see [Get started with Conversions API](https://docs.tryprofound.com/pixel-conversions-api/introduction#get-a-capi-key).

## Request fields

**event\_id** `string` *required*

A UUID you generate. Reuse the same value on every retry of the same conversion.

**pixel\_id** `string` *required*

Up to 128 characters. Must belong to your organization.

**event\_name** `string` *required*

Up to 128 characters. See the [events reference](https://docs.tryprofound.com/pixel/events.md).

**event\_type** `string` *required*

`standard` or `custom`. Profound derives it from `event_name`: a [standard event](https://docs.tryprofound.com/pixel/events.md#standard-events) name is `standard`, anything else is `custom`. A mismatch is rejected.

**ts\_client** `integer` *required*

When the conversion happened, in Unix milliseconds. See [Event time](#event-time).

**consent** `object` *required*

`storage`, `send`, and `share_ads`, all booleans. `send` is required and must be `true`. The other two default to `false`. See [Consent and personal data](#consent-and-personal-data).

**click\_ids** `object`

Up to 32 entries of up to 2,048 characters each, keyed by click ID name, for example `oppref`. See [Attribution](#attribution).

**utm\_pf\_ad\_id** `string`

Up to 256 characters. Send it together with `utm_pf_ad_provider`.

**utm\_pf\_ad\_provider** `string`

Up to 128 characters. `openai` is the only provider Profound uses today.

**dedup\_key** `string`

Up to 128 characters, not empty. Your order or transaction ID. See [Deduplication](#deduplication).

**anon\_id** `string`

Up to 128 characters. The visitor ID the browser pixel stored.

**identity** `object`

`external_user_id` and `external_account_id`, up to 256 characters each. Opaque IDs only.

**source** `object`

`first` and `last`: the acquisition channel the browser pixel recorded.

**page** `object`

`url`, `referrer`, and `title`, up to 2,048 characters each. Send all three when you send `page`.

**props** `object`

Up to 128 entries. The event payload, such as `amount` and `currency`. See [Field sets](https://docs.tryprofound.com/pixel/events.md#field-sets).

**consent\_source** `string`

Where the consent state came from, for example `onetrust`, `tcf`, or `explicit`. An unrecognized value is stored as `unknown`.

**schema\_v** `integer`

Only `1` is accepted, and it's the default.

Profound sets the following fields itself. A request that contains any of them is rejected: `ingest_id`, `ts_server`, `ip_address`, `origin`, `query_params`, `user_agent`, `channel`, `org_id`.

### Event time

`ts_client` is the moment the conversion happened, not the moment you send the event. It must fall within the last seven days and no more than five minutes in the future. Events older than a week are rejected rather than recorded with the wrong date.

## Response

**status** `string`

`queued`.

**event\_id** `string`

The `event_id` you sent.

## Attribution

Attribution fields aren't required, but a request without them isn't credited to any ad. The browser pixel stores the attribution values in first-party [cookies](https://docs.tryprofound.com/pixel/consent-and-privacy.md#cookies) on your domain, so only a request from the visitor's browser carries them. If the conversion is confirmed later by a request that doesn't come from the browser, such as a payment webhook, read the cookies from an earlier browser request (for example, at checkout), store them with the order, and copy them into the event when you send it:

| Send | Read from cookie | Cookie contents | Lifetime |
| - | - | - | - |
| `click_ids` | `_pf_clk` | URL-encoded JSON keyed by click ID name: `oppref`, `utm_adid`, `gclid` | 90 days |
| `utm_pf_ad_id` and `utm_pf_ad_provider` | `_pf_id` | URL-encoded JSON. The ad ID is under `ai` and its provider under `ap` | 365 days |

### Tips

* **Send click IDs in `click_ids`.** If an ad platform added a click ID to your landing URL, such as OpenAI's `oppref`, send it in `click_ids` so the conversion can be credited to that ad.
* **Send the ad pair together.** Profound accepts `utm_pf_ad_id` without `utm_pf_ad_provider`, but then can't credit the conversion to an ad. Send both or neither. For OpenAI ads the provider value is `openai`.
* **Both cookies need storage consent.** If the visitor declined storage, the browser pixel didn't write them, so there's nothing to send.

## Deduplication

* **Same conversion sent more than once**: Profound counts two events with the same `event_id` for the same pixel as one. Reuse the ID when you retry a request, and generate a new one only for a new conversion. Profound removes duplicate events shortly after they arrive.
* **Same order from the browser pixel and this API**: if the browser pixel also sends an event for the order, send the same `dedup_key` (your order ID) on both events. Profound stores it on both so the pair can be matched.

## Consent and personal data

`consent.send` must be `true`, or Profound refuses the event. `consent.share_ads` is a separate permission for sharing with an ad platform and is not implied by `send`. Pass through the consent state your consent tooling recorded at the time of the conversion. See [Consent and privacy](https://docs.tryprofound.com/pixel/consent-and-privacy.md) for what each permission controls.

Never put an email address, a name, or another personal identifier in an event. Profound scrubs `props` and `page` and keeps the event. Anywhere else, such as `click_ids`, `identity`, `dedup_key`, or `event_name`, a detected identifier rejects the whole request. `dedup_key`, `identity`, and the ad pair are checked for email addresses, card numbers, and social security numbers only, so an order ID made of formatted digits is safe. Every other field also rejects values that look like phone numbers.

Profound derives nothing from the connection: no IP address, geography, or user agent. The address calling this endpoint is your server, not a visitor.

```bash cURL theme={null}
curl -i -X POST https://capi.profound.click/v1/events \
  -H "Authorization: Bearer YOUR_CAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "event_id": "3f9c1b04-8d24-4b7a-9f10-2c5d8e7b4a91",
    "pixel_id": "YOUR_PIXEL_ID",
    "event_name": "order_created",
    "event_type": "standard",
    "ts_client": '"$(( $(date +%s) * 1000 ))"',
    "dedup_key": "ord_8843291001",
    "anon_id": "anon_7c1e9b42",
    "click_ids": { "oppref": "YOUR_OPPREF" },
    "utm_pf_ad_id": "YOUR_PF_AD_ID",
    "utm_pf_ad_provider": "openai",
    "props": { "amount": 1999, "currency": "USD" },
    "consent": { "storage": true, "send": true, "share_ads": false }
  }'
```

```json 202 Accepted theme={null}
{
  "status": "queued",
  "event_id": "3f9c1b04-8d24-4b7a-9f10-2c5d8e7b4a91"
}
```
