Intercom events check rich metadata.
Intercom event payloads check event names, timestamps, contact alternatives and rich metadata. HTTP schemes are case-insensitive, and rich links receive URL syntax advice.
Currency assignment is heuristic advice only when a monetary amount is supplied. Metadata keys stay independent. Account configuration, API version defaults and receiver acceptance require external context.
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 | Rich links use HTTP or HTTPS URIs. Scheme spelling is case-insensitive. 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 |
body.rich_url_syntax |
recommended | The rich-link value does not parse as an absolute HTTP(S) URL. Check its host, IP literal and port. Body scope: metadata.*. | vendor.intercom-events.body.rich_url_syntax |
docs |
body.currency_assignment |
recommended | This monetary currency is not assigned in the built-in current or historical ISO 4217 registry. Verify whether the value is intentional. Body scope: metadata.*. Evidence: heuristic. | vendor.intercom-events.body.currency_assignment |
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 request @request.json --rulepack vendor/intercom-events
Try this failing payload in the playground. An example with a validation finding.
{
"url": "https://api.intercom.io/events",
"method": "POST",
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer synthetic-token"
},
"body": "{\"event_name\":\"placed-order\",\"created_at\":1792886400,\"user_id\":\"synthetic-user\",\"metadata\":{\"article\":{\"url\":\"https://example.org:65536/a\",\"value\":\"Read the article\"}}}"
}
cargo install pixellint
·
npm install pixellint