Skip to main content
POST
Records one conversion event for a pixel your organization owns. Field and event names are the same as the browser pixel events. 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

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.

Request fields

string
required
A UUID you generate. Reuse the same value on every retry of the same conversion.
string
required
Up to 128 characters. Must belong to your organization.
string
required
Up to 128 characters. See the events reference.
string
required
standard or custom. Profound derives it from event_name: a standard event name is standard, anything else is custom. A mismatch is rejected.
integer
required
When the conversion happened, in Unix milliseconds. See Event time.
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.
object
Up to 32 entries of up to 2,048 characters each, keyed by click ID name, for example oppref. See Attribution.
string
Up to 256 characters. Send it together with utm_pf_ad_provider.
string
Up to 128 characters. openai is the only provider Profound uses today.
string
Up to 128 characters, not empty. Your order or transaction ID. See Deduplication.
string
Up to 128 characters. The visitor ID the browser pixel stored.
object
external_user_id and external_account_id, up to 256 characters each. Opaque IDs only.
object
first and last: the acquisition channel the browser pixel recorded.
object
url, referrer, and title, up to 2,048 characters each. Send all three when you send page.
object
Up to 128 entries. The event payload, such as amount and currency. See Field sets.
Where the consent state came from, for example onetrust, tcf, or explicit. An unrecognized value is stored as unknown.
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

string
queued.
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 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:

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.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 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.