Heap identify needs app_id, user_id, and identity
Not /api/track. Identify migrates an anonymous SDK user_id onto a known identity. user_id is digits. Heap drops a second identity on the same user_id. Track stays vendor/heap-track.
user_id is the SDK id, not the email
Heap documents user_id as the numeric string from the SDK. identity is the email or login.
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 |
|---|---|---|---|---|
app_id |
required | It is the Heap environment ID. Heap documents it as required on identify. Native JSON type: string. Fix: Set app_id to the environment ID from Heap Projects. | vendor.heap-identify.body.app_id.missingvendor.heap-identify.body.app_id.emptyvendor.heap-identify.body.app_id.invalid |
docs |
user_id |
required | It is the anonymous user_id from the Heap SDK. Heap documents a numeric string between 0 and 2^53-1. Native JSON type: string. Minimum numeric value: 0. Maximum numeric value: 9007199254740991. Fix: Send the Heap SDK user_id as digits, not the login email. | vendor.heap-identify.body.user_id.missingvendor.heap-identify.body.user_id.emptyvendor.heap-identify.body.user_id.invalid |
docs |
identity |
required | It is the known identity, such as an email. Heap documents it as required and case-sensitive, limited to 255 characters. Native JSON type: string. Maximum decoded characters: 255. Fix: Send a unique identity. Heap drops a second identity on the same user_id. | vendor.heap-identify.body.identity.missingvendor.heap-identify.body.identity.emptyvendor.heap-identify.body.identity.invalid |
docs |
timestamp |
optional | ISO 8601 timestamp. The source does not mandate a timezone. Native JSON type: string. Fix: Send an ISO 8601 timestamp, such as 2017-03-10T22:21:56+00:00. | vendor.heap-identify.body.timestamp.emptyvendor.heap-identify.body.timestamp.invalid |
docs |
root |
optional | The vendor documents `` in the request contract. Native JSON type: object. | vendor.heap-identify.body.root.invalid |
docs |
method |
required | This published ingestion operation uses HTTP POST. Complete HTTP capture contract. Native JSON type: string. | vendor.heap-identify.http.method.missingvendor.heap-identify.http.method.emptyvendor.heap-identify.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.heap-identify.http.content_type.missingvendor.heap-identify.http.content_type.emptyvendor.heap-identify.http.content_type.invalid |
docs |
body |
required | The request body is a JSON object. Complete HTTP capture contract. Native JSON type: object. | vendor.heap-identify.http.body.missingvendor.heap-identify.http.body.invalid |
docs |
Validate a payload
pixellint validate json @payload.json --rulepack vendor/heap-identify
Try this failing payload in the playground. Heap identify missing identity.
{"app_id":"11","user_id":"1847839267195673"}
cargo install pixellint
·
npm install pixellint