Intercom events need a name, seconds, and a contact
event_name is required. created_at is Unix seconds. Identify the contact with user_id, email, or Intercom's id. The widget loader is vendor/intercom.
created_at carries a numeric Unix timestamp in seconds.
Intercom documents seconds. The pack checks the native integer value without treating a fixed digit count as a published hard limit. A text value such as yesterday fails the field contract.
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 |
|---|---|---|---|---|
event_name |
required | It is the name of the event. Intercom documents it as required. Native JSON type: string. Fix: Set `event_name` to a past-tense verb-noun, such as `placed-order`. | vendor.intercom-events.body.event_name.missingvendor.intercom-events.body.event_name.emptyvendor.intercom-events.body.event_name.invalid |
docs |
created_at |
required | Intercom documents a UTC Unix timestamp in seconds as an integer. Native JSON type: integer. Minimum numeric value: 0. Fix: Send an integer count of seconds since the Unix epoch. | vendor.intercom-events.body.created_at.missingvendor.intercom-events.body.created_at.emptyvendor.intercom-events.body.created_at.invalid |
docs |
user_id |
optional | It is your identifier for the user. Intercom requires `user_id`, `email`, or `id`. Native JSON type: string. | vendor.intercom-events.body.user_id.emptyvendor.intercom-events.body.user_id.invalid |
docs |
email |
optional | It is the user's email when email is how you identify contacts. Native JSON type: string. | vendor.intercom-events.body.email.emptyvendor.intercom-events.body.email.invalid |
docs |
id |
optional | It is Intercom's contact id. Required for leads when `user_id` and `email` are absent. Native JSON type: string. | vendor.intercom-events.body.id.emptyvendor.intercom-events.body.id.invalid |
docs |
intercom_user_id |
optional | It is Intercom's identifier for the user. Native JSON type: string. | vendor.intercom-events.body.intercom_user_id.emptyvendor.intercom-events.body.intercom_user_id.invalid |
docs |
metadata |
optional | The vendor documents `metadata` in the request contract. Value diagnostic severity: warning. Native JSON type: object. Maximum object properties: 10. | vendor.intercom-events.body.metadata.invalid |
docs |
root |
optional | The vendor documents `` in the request contract. Native JSON type: object. | vendor.intercom-events.body.root.invalid |
docs |
metadata_date… |
optional | Metadata keys ending in _date carry UTC Unix timestamp values. Native JSON type: integer. | vendor.intercom-events.body.metadata_date.invalid |
docs |
body.contact_identifier_required |
required | The event has no contact identifier. Intercom documents `user_id`, `email`, or `id` as required. Fix: Send `user_id`, `email`, or Intercom's `id`. | vendor.intercom-events.body.contact_identifier_required |
docs |
root |
optional | Body scope: metadata.*. Value diagnostic severity: warning. Native JSON type: string or number or object. | vendor.intercom-events.body.root.invalid |
docs |
url |
optional | Body scope: metadata.*. Native JSON type: string. | vendor.intercom-events.body.url.emptyvendor.intercom-events.body.url.invalid |
docs |
value |
optional | Body scope: metadata.*. Native JSON type: string. | vendor.intercom-events.body.value.invalid |
docs |
amount |
optional | Body scope: metadata.*. Native JSON type: integer. Minimum numeric value: 1. | vendor.intercom-events.body.amount.invalid |
docs |
currency |
optional | Body scope: metadata.*. Native JSON type: string. | vendor.intercom-events.body.currency.emptyvendor.intercom-events.body.currency.invalid |
docs |
other_member… |
optional | Intercom does not support nested JSON metadata structures. Body scope: metadata.*. Value diagnostic severity: warning. Native JSON type: string or number or boolean or null. | vendor.intercom-events.body.other_member.invalid |
docs |
body.rich_metadata_shape |
recommended | Object metadata must contain a rich link pair or monetary amount pair. Nested JSON metadata is unsupported. Body scope: metadata.*. | vendor.intercom-events.body.rich_metadata_shape |
docs |
method |
required | This published ingestion operation uses HTTP POST. Complete HTTP capture contract. Native JSON type: string. | vendor.intercom-events.http.method.missingvendor.intercom-events.http.method.emptyvendor.intercom-events.http.method.invalid |
docs |
content_type |
recommended | Use a published request media type. Complete HTTP capture contract. Presence diagnostic severity: warning. Value diagnostic severity: warning. Native JSON type: string. | vendor.intercom-events.http.content_type.missingvendor.intercom-events.http.content_type.emptyvendor.intercom-events.http.content_type.invalid |
docs |
body |
required | The request body is a JSON object. Complete HTTP capture contract. Native JSON type: object. | vendor.intercom-events.http.body.missingvendor.intercom-events.http.body.invalid |
docs |
headers.authorization |
required | This endpoint requires the documented authentication header. Complete HTTP capture contract. Native JSON type: string. | vendor.intercom-events.http.headers.authorization.missingvendor.intercom-events.http.headers.authorization.emptyvendor.intercom-events.http.headers.authorization.invalid |
docs |
headers.intercom-version |
optional | Optional API version override. Absent uses the app default. Complete HTTP capture contract. Presence diagnostic severity: warning. Value diagnostic severity: warning. Native JSON type: string. | vendor.intercom-events.http.headers.intercom-version.emptyvendor.intercom-events.http.headers.intercom-version.invalid |
docs |
Validate a payload
pixellint validate json @payload.json --rulepack vendor/intercom-events
Try this failing payload in the playground. Intercom event with a text timestamp.
{"event_name":"placed-order","created_at":"yesterday","user_id":"user-10024"}
cargo install pixellint
·
npm install pixellint