Mixpanel Engage checks identity and profile operations in captured requests.
The /engage operation updates user profiles. $token is the project token, and $distinct_id identifies the profile associated with events. Each record needs $set or another documented operator. $time uses Unix seconds, $ip is an address, and verbose=1 is recommended for an observable response. Live token validity and identity history remain external.
The selected built-in Engage pack inspects the SDK's recognized text/plain data= string body on POST to exact /engage or /engage/ endpoints. One strict outer decode can expose the existing raw-JSON or Base64 profile records. The owning pack receives that interpretation while the observed header, original body and generic HTTP representation remain unchanged.
Repeated or extra form members, competing query data, unknown or redacted evidence and the verified paired-CESU-8 Base64 boundary remain information deferrals. Local evaluator bounds also leave dependent payload rules unvalidated when exceeded. Existing compression contracts are preserved. Custom, excluded and replacement plugins receive no built-in body capability.
A token and distinct_id are not an update
Mixpanel documents an operation object on every record. $set writes properties. The other operators increment, union, unset, or delete.
A local inspection limit keeps profile checks unvalidated.
The newly supported SDK plain-text form path bounds decoded text, JSON structure, projected finding text and rule work before running profile contracts. Exceeding a bound produces information rather than an invented Mixpanel quota error. Available endpoint and query evidence can still run.
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 |
|---|---|---|---|---|
verbose |
recommended | Mixpanel documents `verbose=1` so the 200 body says whether the update was accepted. Fix: Send `verbose=1` on `/engage` while you are implementing. | vendor.mixpanel-engage.param.verbose.missingvendor.mixpanel-engage.param.verbose.emptyvendor.mixpanel-engage.param.verbose.invalid |
docs |
strict |
optional | Mixpanel documents `strict=1` so failed records are named in the response. Fix: Send `strict=1` to see per-record validation errors. | vendor.mixpanel-engage.param.strict.emptyvendor.mixpanel-engage.param.strict.invalid |
docs |
ip |
optional | Mixpanel documents `ip=0` on server-side calls so the profile is not geolocated to your server. Fix: Send `ip=0` from a server. | vendor.mixpanel-engage.param.ip.emptyvendor.mixpanel-engage.param.ip.invalid |
docs |
data |
optional | The official browser SDK encodes the event or profile update in data for the legacy base64 transport. | vendor.mixpanel-engage.param.data.empty |
docs |
https_required |
required | Mixpanel explicitly rejects non-HTTPS API requests. | vendor.mixpanel-engage.https_required |
docs |
root |
optional | The JSON body is a nonempty array of records. Native JSON type: array. Minimum array items: 1. | vendor.mixpanel-engage.body.root.invalid |
docs |
$token |
required | Mixpanel documents `$token` as required. It is the project token. Body scope: []. Native JSON type: string. Fix: Send the project token from Mixpanel project settings as `$token`. | vendor.mixpanel-engage.body.$token.missingvendor.mixpanel-engage.body.$token.emptyvendor.mixpanel-engage.body.$token.invalid |
docs |
$distinct_id |
required | Mixpanel documents `$distinct_id` as required. It must be the same id you send on events. Body scope: []. Native JSON type: string. Fix: Send the same `distinct_id` you use on `/track` for this user. | vendor.mixpanel-engage.body.$distinct_id.missingvendor.mixpanel-engage.body.$distinct_id.emptyvendor.mixpanel-engage.body.$distinct_id.invalid |
docs |
$set |
optional | Sets profile properties, creating the profile if needed. Mixpanel documents it as required for the profile-set call. Body scope: []. Native JSON type: object. | vendor.mixpanel-engage.body.$set.invalid |
docs |
$set_once |
optional | Sets profile properties only when they are not already set. Body scope: []. Native JSON type: object. | vendor.mixpanel-engage.body.$set_once.invalid |
docs |
$add |
optional | Increments numeric profile properties. Body scope: []. Native JSON type: object. | vendor.mixpanel-engage.body.$add.invalid |
docs |
$union |
optional | Unions list profile properties. Body scope: []. Native JSON type: object. | vendor.mixpanel-engage.body.$union.invalid |
docs |
$append |
optional | Appends to list profile properties. Body scope: []. Native JSON type: object. | vendor.mixpanel-engage.body.$append.invalid |
docs |
$remove |
optional | Removes values from list profile properties. Body scope: []. Native JSON type: object. | vendor.mixpanel-engage.body.$remove.invalid |
docs |
$unset |
optional | Unsets named profile properties. Body scope: []. Native JSON type: array. | vendor.mixpanel-engage.body.$unset.invalid |
docs |
$delete |
optional | Deletes the profile. Body scope: []. Native JSON type: string. | vendor.mixpanel-engage.body.$delete.invalid |
docs |
$ip |
optional | Mixpanel uses `$ip` to geolocate the profile. Send a raw address, not a digest. Body scope: []. Native JSON type: string. | vendor.mixpanel-engage.body.$ip.emptyvendor.mixpanel-engage.body.$ip.invalid |
docs |
$time |
optional | Mixpanel documents `$time` as seconds since epoch for the profile update. Body scope: []. Native JSON type: integer. Fix: Send a Unix timestamp in seconds, not milliseconds and not an ISO string. | vendor.mixpanel-engage.body.$time.emptyvendor.mixpanel-engage.body.$time.invalid |
docs |
$ignore_time |
optional | Mixpanel documents `$ignore_time` as a boolean. `true` leaves Last Seen unchanged. Body scope: []. Native JSON type: boolean. | vendor.mixpanel-engage.body.$ignore_time.emptyvendor.mixpanel-engage.body.$ignore_time.invalid |
docs |
root |
optional | The vendor documents `` in the request contract. Body scope: []. Native JSON type: object. | vendor.mixpanel-engage.body.root.invalid |
docs |
$unset[] |
optional | The vendor documents `$unset[]` in the request contract. Body scope: []. Native JSON type: string. | vendor.mixpanel-engage.body.$unset[].invalid |
docs |
increment… |
optional | The vendor documents `increment` in the request contract. Body scope: []. Native JSON type: number. | vendor.mixpanel-engage.body.increment.invalid |
docs |
union… |
optional | The vendor documents `union` in the request contract. Body scope: []. Native JSON type: array. | vendor.mixpanel-engage.body.union.invalid |
docs |
body.hashed_plaintext_field |
required | `$ip` looks like a SHA-256 digest, but Mixpanel documents it as an IP address used for geolocation. Body scope: []. Fix: Send the raw IP address, or omit `$ip`. | vendor.mixpanel-engage.body.hashed_plaintext_field |
docs |
body.operation_required |
required | The profile update has no operation. Mixpanel documents `$set`, `$set_once`, `$add`, `$union`, `$append`, `$remove`, `$unset`, or `$delete`. Body scope: []. Fix: Send `$set` with the properties to write, or another documented engage operator. | vendor.mixpanel-engage.body.operation_required |
docs |
root |
optional | The JSON body is a nonempty array of records. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Native JSON type: object or array. Minimum array items: 1. | vendor.mixpanel-engage.body.root.invalid |
docs |
$token |
required | Mixpanel documents `$token` as required. It is the project token. Body scope: ["[]",""]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Native JSON type: string. Fix: Send the project token from Mixpanel project settings as `$token`. | vendor.mixpanel-engage.body.$token.missingvendor.mixpanel-engage.body.$token.emptyvendor.mixpanel-engage.body.$token.invalid |
docs |
$distinct_id |
required | Mixpanel documents `$distinct_id` as required. It must be the same id you send on events. Body scope: ["[]",""]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Native JSON type: string. Fix: Send the same `distinct_id` you use on `/track` for this user. | vendor.mixpanel-engage.body.$distinct_id.missingvendor.mixpanel-engage.body.$distinct_id.emptyvendor.mixpanel-engage.body.$distinct_id.invalid |
docs |
$set |
optional | Sets profile properties, creating the profile if needed. Mixpanel documents it as required for the profile-set call. Body scope: ["[]",""]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Native JSON type: object. | vendor.mixpanel-engage.body.$set.invalid |
docs |
$set_once |
optional | Sets profile properties only when they are not already set. Body scope: ["[]",""]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Native JSON type: object. | vendor.mixpanel-engage.body.$set_once.invalid |
docs |
$add |
optional | Increments numeric profile properties. Body scope: ["[]",""]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Native JSON type: object. | vendor.mixpanel-engage.body.$add.invalid |
docs |
$union |
optional | Unions list profile properties. Body scope: ["[]",""]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Native JSON type: object. | vendor.mixpanel-engage.body.$union.invalid |
docs |
$append |
optional | Appends to list profile properties. Body scope: ["[]",""]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Native JSON type: object. | vendor.mixpanel-engage.body.$append.invalid |
docs |
$remove |
optional | Removes values from list profile properties. Body scope: ["[]",""]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Native JSON type: object. | vendor.mixpanel-engage.body.$remove.invalid |
docs |
$unset |
optional | Unsets named profile properties. Body scope: ["[]",""]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Native JSON type: array. | vendor.mixpanel-engage.body.$unset.invalid |
docs |
$delete |
optional | Deletes the profile. Body scope: ["[]",""]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Native JSON type: string. | vendor.mixpanel-engage.body.$delete.invalid |
docs |
$ip |
optional | Mixpanel uses `$ip` to geolocate the profile. Send a raw address, not a digest. Body scope: ["[]",""]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Native JSON type: string. | vendor.mixpanel-engage.body.$ip.emptyvendor.mixpanel-engage.body.$ip.invalid |
docs |
$time |
optional | Mixpanel documents `$time` as seconds since epoch for the profile update. Body scope: ["[]",""]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Native JSON type: integer. Fix: Send a Unix timestamp in seconds, not milliseconds and not an ISO string. | vendor.mixpanel-engage.body.$time.emptyvendor.mixpanel-engage.body.$time.invalid |
docs |
$ignore_time |
optional | Mixpanel documents `$ignore_time` as a boolean. `true` leaves Last Seen unchanged. Body scope: ["[]",""]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Native JSON type: boolean. | vendor.mixpanel-engage.body.$ignore_time.emptyvendor.mixpanel-engage.body.$ignore_time.invalid |
docs |
root |
optional | The vendor documents `` in the request contract. Body scope: ["[]",""]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Native JSON type: object. | vendor.mixpanel-engage.body.root.invalid |
docs |
$unset[] |
optional | The vendor documents `$unset[]` in the request contract. Body scope: ["[]",""]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Native JSON type: string. | vendor.mixpanel-engage.body.$unset[].invalid |
docs |
increment… |
optional | The vendor documents `increment` in the request contract. Body scope: ["[]",""]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Native JSON type: number. | vendor.mixpanel-engage.body.increment.invalid |
docs |
union… |
optional | The vendor documents `union` in the request contract. Body scope: ["[]",""]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Native JSON type: array. | vendor.mixpanel-engage.body.union.invalid |
docs |
body.hashed_plaintext_field |
required | `$ip` looks like a SHA-256 digest, but Mixpanel documents it as an IP address used for geolocation. Body scope: ["[]",""]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Fix: Send the raw IP address, or omit `$ip`. | vendor.mixpanel-engage.body.hashed_plaintext_field |
docs |
body.operation_required |
required | The profile update has no operation. Mixpanel documents `$set`, `$set_once`, `$add`, `$union`, `$append`, `$remove`, `$unset`, or `$delete`. Body scope: ["[]",""]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Fix: Send `$set` with the properties to write, or another documented engage operator. | vendor.mixpanel-engage.body.operation_required |
docs |
root |
optional | Body scope: [].$set.**. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum object properties: 255. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: [].$set.**. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum decoded UTF-8 bytes: 255. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: [].$set.*. Applies when {"kind":"json_type","param":"","json_type":"object"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum container depth: 3. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: [].$set.**[]. Applies when {"kind":"json_type","param":"","json_type":"object"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum container depth: 1. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: [].$set_once.**. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum object properties: 255. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: [].$set_once.**. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum decoded UTF-8 bytes: 255. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: [].$set_once.*. Applies when {"kind":"json_type","param":"","json_type":"object"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum container depth: 3. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: [].$set_once.**[]. Applies when {"kind":"json_type","param":"","json_type":"object"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum container depth: 1. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: [].$append.**. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum object properties: 255. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: [].$append.**. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum decoded UTF-8 bytes: 255. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: [].$append.*. Applies when {"kind":"json_type","param":"","json_type":"object"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum container depth: 3. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: [].$append.**[]. Applies when {"kind":"json_type","param":"","json_type":"object"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum container depth: 1. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: [].$remove.**. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum object properties: 255. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: [].$remove.**. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum decoded UTF-8 bytes: 255. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: [].$remove.*. Applies when {"kind":"json_type","param":"","json_type":"object"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum container depth: 3. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: [].$remove.**[]. Applies when {"kind":"json_type","param":"","json_type":"object"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum container depth: 1. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: [].$union.**. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum object properties: 255. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: [].$union.**. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum decoded UTF-8 bytes: 255. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: [].$union.*. Applies when {"kind":"json_type","param":"","json_type":"object"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum container depth: 3. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: [].$union.**[]. Applies when {"kind":"json_type","param":"","json_type":"object"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum container depth: 1. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$set.**","$set.**"]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum object properties: 255. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$set.**","$set.**"]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum decoded UTF-8 bytes: 255. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$set.*","$set.*"]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Applies when {"kind":"json_type","param":"","json_type":"object"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum container depth: 3. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$set.**[]","$set.**[]"]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Applies when {"kind":"json_type","param":"","json_type":"object"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum container depth: 1. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$set_once.**","$set_once.**"]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum object properties: 255. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$set_once.**","$set_once.**"]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum decoded UTF-8 bytes: 255. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$set_once.*","$set_once.*"]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Applies when {"kind":"json_type","param":"","json_type":"object"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum container depth: 3. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$set_once.**[]","$set_once.**[]"]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Applies when {"kind":"json_type","param":"","json_type":"object"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum container depth: 1. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$append.**","$append.**"]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum object properties: 255. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$append.**","$append.**"]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum decoded UTF-8 bytes: 255. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$append.*","$append.*"]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Applies when {"kind":"json_type","param":"","json_type":"object"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum container depth: 3. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$append.**[]","$append.**[]"]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Applies when {"kind":"json_type","param":"","json_type":"object"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum container depth: 1. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$remove.**","$remove.**"]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum object properties: 255. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$remove.**","$remove.**"]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum decoded UTF-8 bytes: 255. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$remove.*","$remove.*"]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Applies when {"kind":"json_type","param":"","json_type":"object"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum container depth: 3. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$remove.**[]","$remove.**[]"]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Applies when {"kind":"json_type","param":"","json_type":"object"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum container depth: 1. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$union.**","$union.**"]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum object properties: 255. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$union.**","$union.**"]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum decoded UTF-8 bytes: 255. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$union.*","$union.*"]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Applies when {"kind":"json_type","param":"","json_type":"object"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum container depth: 3. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$union.**[]","$union.**[]"]. Decoded body source: data. Encoding: base64_json. Applies when {"kind":"not","condition":{"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}}. Applies when {"kind":"json_type","param":"","json_type":"object"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum container depth: 1. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | The JSON body is a nonempty array of records. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Native JSON type: object or array. Minimum array items: 1. | vendor.mixpanel-engage.body.root.invalid |
docs |
$token |
required | Mixpanel documents `$token` as required. It is the project token. Body scope: ["[]",""]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Native JSON type: string. Fix: Send the project token from Mixpanel project settings as `$token`. | vendor.mixpanel-engage.body.$token.missingvendor.mixpanel-engage.body.$token.emptyvendor.mixpanel-engage.body.$token.invalid |
docs |
$distinct_id |
required | Mixpanel documents `$distinct_id` as required. It must be the same id you send on events. Body scope: ["[]",""]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Native JSON type: string. Fix: Send the same `distinct_id` you use on `/track` for this user. | vendor.mixpanel-engage.body.$distinct_id.missingvendor.mixpanel-engage.body.$distinct_id.emptyvendor.mixpanel-engage.body.$distinct_id.invalid |
docs |
$set |
optional | Sets profile properties, creating the profile if needed. Mixpanel documents it as required for the profile-set call. Body scope: ["[]",""]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Native JSON type: object. | vendor.mixpanel-engage.body.$set.invalid |
docs |
$set_once |
optional | Sets profile properties only when they are not already set. Body scope: ["[]",""]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Native JSON type: object. | vendor.mixpanel-engage.body.$set_once.invalid |
docs |
$add |
optional | Increments numeric profile properties. Body scope: ["[]",""]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Native JSON type: object. | vendor.mixpanel-engage.body.$add.invalid |
docs |
$union |
optional | Unions list profile properties. Body scope: ["[]",""]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Native JSON type: object. | vendor.mixpanel-engage.body.$union.invalid |
docs |
$append |
optional | Appends to list profile properties. Body scope: ["[]",""]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Native JSON type: object. | vendor.mixpanel-engage.body.$append.invalid |
docs |
$remove |
optional | Removes values from list profile properties. Body scope: ["[]",""]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Native JSON type: object. | vendor.mixpanel-engage.body.$remove.invalid |
docs |
$unset |
optional | Unsets named profile properties. Body scope: ["[]",""]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Native JSON type: array. | vendor.mixpanel-engage.body.$unset.invalid |
docs |
$delete |
optional | Deletes the profile. Body scope: ["[]",""]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Native JSON type: string. | vendor.mixpanel-engage.body.$delete.invalid |
docs |
$ip |
optional | Mixpanel uses `$ip` to geolocate the profile. Send a raw address, not a digest. Body scope: ["[]",""]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Native JSON type: string. | vendor.mixpanel-engage.body.$ip.emptyvendor.mixpanel-engage.body.$ip.invalid |
docs |
$time |
optional | Mixpanel documents `$time` as seconds since epoch for the profile update. Body scope: ["[]",""]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Native JSON type: integer. Fix: Send a Unix timestamp in seconds, not milliseconds and not an ISO string. | vendor.mixpanel-engage.body.$time.emptyvendor.mixpanel-engage.body.$time.invalid |
docs |
$ignore_time |
optional | Mixpanel documents `$ignore_time` as a boolean. `true` leaves Last Seen unchanged. Body scope: ["[]",""]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Native JSON type: boolean. | vendor.mixpanel-engage.body.$ignore_time.emptyvendor.mixpanel-engage.body.$ignore_time.invalid |
docs |
root |
optional | The vendor documents `` in the request contract. Body scope: ["[]",""]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Native JSON type: object. | vendor.mixpanel-engage.body.root.invalid |
docs |
$unset[] |
optional | The vendor documents `$unset[]` in the request contract. Body scope: ["[]",""]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Native JSON type: string. | vendor.mixpanel-engage.body.$unset[].invalid |
docs |
increment… |
optional | The vendor documents `increment` in the request contract. Body scope: ["[]",""]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Native JSON type: number. | vendor.mixpanel-engage.body.increment.invalid |
docs |
union… |
optional | The vendor documents `union` in the request contract. Body scope: ["[]",""]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Native JSON type: array. | vendor.mixpanel-engage.body.union.invalid |
docs |
body.hashed_plaintext_field |
required | `$ip` looks like a SHA-256 digest, but Mixpanel documents it as an IP address used for geolocation. Body scope: ["[]",""]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Fix: Send the raw IP address, or omit `$ip`. | vendor.mixpanel-engage.body.hashed_plaintext_field |
docs |
body.operation_required |
required | The profile update has no operation. Mixpanel documents `$set`, `$set_once`, `$add`, `$union`, `$append`, `$remove`, `$unset`, or `$delete`. Body scope: ["[]",""]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Fix: Send `$set` with the properties to write, or another documented engage operator. | vendor.mixpanel-engage.body.operation_required |
docs |
root |
optional | Body scope: ["[].$set.**","$set.**"]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum object properties: 255. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$set.**","$set.**"]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum decoded UTF-8 bytes: 255. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$set.*","$set.*"]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Applies when {"kind":"json_type","param":"","json_type":"object"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum container depth: 3. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$set.**[]","$set.**[]"]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Applies when {"kind":"json_type","param":"","json_type":"object"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum container depth: 1. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$set_once.**","$set_once.**"]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum object properties: 255. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$set_once.**","$set_once.**"]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum decoded UTF-8 bytes: 255. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$set_once.*","$set_once.*"]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Applies when {"kind":"json_type","param":"","json_type":"object"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum container depth: 3. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$set_once.**[]","$set_once.**[]"]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Applies when {"kind":"json_type","param":"","json_type":"object"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum container depth: 1. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$append.**","$append.**"]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum object properties: 255. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$append.**","$append.**"]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum decoded UTF-8 bytes: 255. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$append.*","$append.*"]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Applies when {"kind":"json_type","param":"","json_type":"object"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum container depth: 3. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$append.**[]","$append.**[]"]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Applies when {"kind":"json_type","param":"","json_type":"object"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum container depth: 1. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$remove.**","$remove.**"]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum object properties: 255. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$remove.**","$remove.**"]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum decoded UTF-8 bytes: 255. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$remove.*","$remove.*"]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Applies when {"kind":"json_type","param":"","json_type":"object"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum container depth: 3. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$remove.**[]","$remove.**[]"]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Applies when {"kind":"json_type","param":"","json_type":"object"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum container depth: 1. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$union.**","$union.**"]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum object properties: 255. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$union.**","$union.**"]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum decoded UTF-8 bytes: 255. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$union.*","$union.*"]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Applies when {"kind":"json_type","param":"","json_type":"object"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum container depth: 3. | vendor.mixpanel-engage.body.root.invalid |
docs |
root |
optional | Body scope: ["[].$union.**[]","$union.**[]"]. Decoded body source: data. Encoding: json. Applies when {"kind":"value_pattern","param":"data","pattern":"^\\s*[\\[{]"}. Applies when {"kind":"json_type","param":"","json_type":"object"}. Presence diagnostic severity: error. Value diagnostic severity: warning. Native JSON type: string or number or boolean or object or array or null. Maximum container depth: 1. | vendor.mixpanel-engage.body.root.invalid |
docs |
method |
required | The official SDK uses POST or GET fallback for this operation. Complete HTTP capture contract. Native JSON type: string. | vendor.mixpanel-engage.http.method.missingvendor.mixpanel-engage.http.method.emptyvendor.mixpanel-engage.http.method.invalid |
docs |
content_type |
optional | Published native JSON, XHR form and sendBeacon text representations are retained. Complete HTTP capture contract. Applies when {"kind":"value_in","param":"method","values":["POST"]}. Presence diagnostic severity: warning. Value diagnostic severity: warning. Native JSON type: string. | vendor.mixpanel-engage.http.content_type.emptyvendor.mixpanel-engage.http.content_type.invalid |
docs |
headers.content-encoding |
optional | HTTP content encoding, when supplied. This endpoint documents its own gzip policy. Complete HTTP capture contract. Native JSON type: string. | vendor.mixpanel-engage.http.headers.content-encoding.emptyvendor.mixpanel-engage.http.headers.content-encoding.invalid |
docs |
http.gzip_unsupported |
required | This profile endpoint explicitly does not support gzip. Complete HTTP capture contract. | vendor.mixpanel-engage.http.gzip_unsupported |
docs |
Validate a payload
Use an explicit request capture to retain the SDK body, method and observed headers.
pixellint validate request @request.json --rulepack vendor/mixpanel-engage
pixellint validate json @payload.json --rulepack vendor/mixpanel-engage
Try this failing payload in the playground. Mixpanel engage with a hashed $ip.
[{"$token":"project-token","$distinct_id":"user-13793","$ip":"a85e9ca18f34935ab9b0381b25bfad2455444112b0149270fd88e3da172fe196","$set":{"$email":"user@example.com","$name":"Ada"}}]
cargo install pixellint
·
npm install pixellint