pixellint

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.

Rule: vendor.intercom-events.body.created_at.invalid

What this pack matches

Hosts
api.intercom.io, api.eu.intercom.io, api.au.intercom.io
Paths
/events
Vendor docs
developers.intercom.com/docs/references/rest-api/api.intercom.io/data-events/createdataevent

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.missing
vendor.intercom-events.body.event_name.empty
vendor.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.missing
vendor.intercom-events.body.created_at.empty
vendor.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.empty
vendor.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.empty
vendor.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.empty
vendor.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.empty
vendor.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.empty
vendor.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.empty
vendor.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.missing
vendor.intercom-events.http.method.empty
vendor.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.missing
vendor.intercom-events.http.content_type.empty
vendor.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.missing
vendor.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.missing
vendor.intercom-events.http.headers.authorization.empty
vendor.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.empty
vendor.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