pixellint

vendor/braze · vendor documented

Braze user track wants ISO 8601, not epoch

events[].time and purchases[].time are ISO 8601 datetimes. An epoch number fails the contract. Every event and purchase needs one of external_id, user_alias, braze_id, email, or phone.

A purchase also needs product_id, an ISO 4217 currency code, and price. A symbol like $ is not a currency code.

What this pack matches

Hosts
braze.com, braze.eu
Paths
…/users/track…
Vendor docs
www.braze.com/docs/api/endpoints/user_data/post_user_track/

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
external_id optional Braze documents one of external_id, user_alias, braze_id, email, or phone as required on every object. vendor.braze.body.external_id.empty docs
user_alias optional Braze documents one of external_id, user_alias, braze_id, email, or phone as required on every object. vendor.braze.body.user_alias.empty docs
braze_id optional Braze documents one of external_id, user_alias, braze_id, email, or phone as required on every object. vendor.braze.body.braze_id.empty docs
email optional Braze documents one of external_id, user_alias, braze_id, email, or phone as required on every object. vendor.braze.body.email.empty docs
phone optional Braze documents one of external_id, user_alias, braze_id, email, or phone as required on every object. vendor.braze.body.phone.empty docs
name required Braze documents the event name as required. Fix: Name the custom event. vendor.braze.body.name.missing
vendor.braze.body.name.empty
docs
time required Braze documents the event time as an ISO 8601 datetime, such as `2026-07-26T06:00:00+00:00`. Fix: Send an ISO 8601 datetime rather than an epoch number. vendor.braze.body.time.missing
vendor.braze.body.time.empty
vendor.braze.body.time.invalid
docs
body.event_needs_an_identifier required The object carries none of `external_id`, `user_alias`, `braze_id`, `email`, or `phone`. Braze documents one of them as required, and cannot attach the data to a user without one. Fix: Add one of the documented identifiers to the object. vendor.braze.body.event_needs_an_identifier docs
external_id optional Braze documents one of external_id, user_alias, braze_id, email, or phone as required on every object. vendor.braze.body.external_id.empty docs
user_alias optional Braze documents one of external_id, user_alias, braze_id, email, or phone as required on every object. vendor.braze.body.user_alias.empty docs
braze_id optional Braze documents one of external_id, user_alias, braze_id, email, or phone as required on every object. vendor.braze.body.braze_id.empty docs
email optional Braze documents one of external_id, user_alias, braze_id, email, or phone as required on every object. vendor.braze.body.email.empty docs
phone optional Braze documents one of external_id, user_alias, braze_id, email, or phone as required on every object. vendor.braze.body.phone.empty docs
product_id required Braze documents the product id as required on a purchase. vendor.braze.body.product_id.missing
vendor.braze.body.product_id.empty
docs
currency required Braze documents the currency as required on a purchase, as an ISO 4217 code. Fix: Use the three-letter code, such as `USD`. vendor.braze.body.currency.missing
vendor.braze.body.currency.empty
vendor.braze.body.currency.invalid
docs
price required Braze documents the price as required on a purchase. vendor.braze.body.price.missing docs
time required Braze documents the purchase time as an ISO 8601 datetime. Fix: Send an ISO 8601 datetime rather than an epoch number. vendor.braze.body.time.missing
vendor.braze.body.time.empty
vendor.braze.body.time.invalid
docs
body.purchase_needs_an_identifier required The object carries none of `external_id`, `user_alias`, `braze_id`, `email`, or `phone`. Braze documents one of them as required, and cannot attach the data to a user without one. Fix: Add one of the documented identifiers to the object. vendor.braze.body.purchase_needs_an_identifier docs

Validate a payload

pixellint validate json @payload.json --rulepack vendor/braze

Or paste it into the playground. Same engine, in the browser, nothing sent anywhere.

cargo install pixellint · npm install pixellint