vendor/openai-conversions-api · vendor documented
OpenAI CAPI timestamps are milliseconds
The server hop is /v1/events, not /v1/sdk/events. timestamp_ms is thirteen digits. A ten-digit Unix second is invalid. action_source=web also needs source_url.
timestamp_ms is 13 digits
Math.floor(Date.now() / 1000) is the Meta clock. OpenAI wants milliseconds. Sending seconds makes timestamp_ms too short and the event does not attribute.
Rule: vendor.openai-conversions-api.body.timestamp_ms.invalid
What this pack matches
Rules
Codes are stable. A finding in CI, MCP, or the playground lands on the same id.
| Field | Required | What it checks | Rule ids | Source |
|---|---|---|---|---|
pid |
required | It is the Pixel ID, and it travels on the query string. Fix: Send `pid` as a query parameter on `/v1/events`. | vendor.openai-conversions-api.param.pid.missingvendor.openai-conversions-api.param.pid.empty |
docs |
events |
required | The Conversions API posts events under `events`, and OpenAI documents that array as required. Fix: Send at least one event in `events`. | vendor.openai-conversions-api.body.events.missing |
docs |
id |
required | It identifies the event for deduplication. OpenAI documents it as required on every event. Fix: Set `id` to the same value the image tag sent as `event_id`. | vendor.openai-conversions-api.body.id.missingvendor.openai-conversions-api.body.id.empty |
docs |
type |
required | It is the event type. OpenAI documents it as required. `app_installed` and `app_opened` are CAPI-only with `action_source=mobile_app`. Fix: Set `type` to a documented event name. | vendor.openai-conversions-api.body.type.missingvendor.openai-conversions-api.body.type.emptyvendor.openai-conversions-api.body.type.invalid |
docs |
timestamp_ms |
required | It is the event time in milliseconds. OpenAI documents `timestamp_ms`, so a 10-digit seconds value is the wrong unit. Fix: Send milliseconds, a 13-digit Unix timestamp. | vendor.openai-conversions-api.body.timestamp_ms.missingvendor.openai-conversions-api.body.timestamp_ms.emptyvendor.openai-conversions-api.body.timestamp_ms.invalid |
docs |
action_source |
optional | It names where the event happened. `source_url` is required when this is `web`. | vendor.openai-conversions-api.body.action_source.empty |
docs |
source_url |
optional | It is the page URL. OpenAI documents it as required when `action_source` is `web`. Fix: Send `source_url` on web events. | vendor.openai-conversions-api.body.source_url.emptyvendor.openai-conversions-api.body.source_url.invalid |
docs |
body.web_requires_source_url |
required | The event is marked `action_source: web` but carries no `source_url`. OpenAI documents the page URL as required for web events. Fix: Set `source_url` to the HTTPS page URL. | vendor.openai-conversions-api.body.web_requires_source_url |
docs |
Validate a payload
pixellint validate json @payload.json --rulepack vendor/openai-conversions-api
Or paste it into the playground. Same engine, in the browser, nothing sent anywhere.
cargo install pixellint
·
npm install pixellint