Woopra push batches retain each event record.
The event and identify GET collectors share project and visitor context. The pinned SDK also sends multipart push requests whose payload field contains independent NDJSON records.
SDK batch checks are advisory. Enterprise projects can configure additional unique identifiers, so missing default identifiers produces information. Custom properties remain open.
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 |
|---|---|---|---|---|
operation |
optional | Collector operation from the endpoint path. | docs | |
payload |
optional | SDK push batches contain NDJSON. | docs | |
project |
required | The configured project name. Applies when {"kind":"not","condition":{"kind":"value_in","param":"operation","values":["push"]}}. | vendor.woopra.param.project.missingvendor.woopra.param.project.empty |
docs |
event |
required | Event names are lowercase strings; spaces are allowed. Applies when {"kind":"all","conditions":[{"kind":"not","condition":{"kind":"value_in","param":"operation","values":["push"]}},{"kind":"value_in","param":"operation","values":["ce"]}]}. | vendor.woopra.param.event.missingvendor.woopra.param.event.emptyvendor.woopra.param.event.invalid |
docs |
cookie |
optional | Opaque visitor device cookie. Applies when {"kind":"not","condition":{"kind":"value_in","param":"operation","values":["push"]}}. | vendor.woopra.param.cookie.empty |
docs |
cv_id |
optional | Optional configured visitor identity. Applies when {"kind":"not","condition":{"kind":"value_in","param":"operation","values":["push"]}}. | docs | |
cv_email |
optional | Optional visitor email identity. Applies when {"kind":"not","condition":{"kind":"value_in","param":"operation","values":["push"]}}. | docs | |
timestamp |
optional | Optional event time in Unix milliseconds. Applies when {"kind":"not","condition":{"kind":"value_in","param":"operation","values":["push"]}}. | vendor.woopra.param.timestamp.emptyvendor.woopra.param.timestamp.invalid |
docs |
ip |
optional | Optional visitor IPv4 or IPv6. Applies when {"kind":"not","condition":{"kind":"value_in","param":"operation","values":["push"]}}. | vendor.woopra.param.ip.emptyvendor.woopra.param.ip.invalid |
docs |
timeout |
optional | Optional visit timeout in milliseconds. Applies when {"kind":"not","condition":{"kind":"value_in","param":"operation","values":["push"]}}. | vendor.woopra.param.timeout.emptyvendor.woopra.param.timeout.invalid |
docs |
referer |
optional | The legacy example accepts a schemeless referring URL. Applies when {"kind":"not","condition":{"kind":"value_in","param":"operation","values":["push"]}}. | docs | |
redirect |
optional | Optional allowlisted redirect destination. Applies when {"kind":"not","condition":{"kind":"value_in","param":"operation","values":["push"]}}. | vendor.woopra.param.redirect.emptyvendor.woopra.param.redirect.invalid |
docs |
identity_context |
required | Supply a cookie or a configured unique visitor property. Enterprise projects can configure identifiers beyond cv_id and cv_email. | vendor.woopra.identity_context |
docs |
future_timestamp |
required | Event timestamps cannot be in the future. A one-second tolerance matches the validator clock resolution. | vendor.woopra.future_timestamp |
docs |
root |
optional | The published contract specifies this field type. Decoded body source: payload. Encoding: ndjson. Decoding diagnostic severity: warning. Applies when {"kind":"value_in","param":"operation","values":["push"]}. Presence diagnostic severity: warning. Evidence: vendor template. Native JSON type: array. | vendor.woopra.body.root.invalid |
docs |
root |
optional | The published contract specifies this field type. Body scope: []. Decoded body source: payload. Encoding: ndjson. Decoding diagnostic severity: warning. Applies when {"kind":"value_in","param":"operation","values":["push"]}. Presence diagnostic severity: warning. Evidence: vendor template. Native JSON type: object. | vendor.woopra.body.root.invalid |
docs |
endpoint |
recommended | The published contract specifies this field type. Body scope: []. Decoded body source: payload. Encoding: ndjson. Decoding diagnostic severity: warning. Applies when {"kind":"value_in","param":"operation","values":["push"]}. Presence diagnostic severity: warning. Evidence: vendor template. Native JSON type: string. | vendor.woopra.body.endpoint.missingvendor.woopra.body.endpoint.invalid |
docs |
params |
recommended | The published contract specifies this field type. Body scope: []. Decoded body source: payload. Encoding: ndjson. Decoding diagnostic severity: warning. Applies when {"kind":"value_in","param":"operation","values":["push"]}. Presence diagnostic severity: warning. Evidence: vendor template. Native JSON type: object. | vendor.woopra.body.params.missingvendor.woopra.body.params.invalid |
docs |
params.project |
recommended | The configured project name. Body scope: []. Decoded body source: payload. Encoding: ndjson. Decoding diagnostic severity: warning. Applies when {"kind":"value_in","param":"operation","values":["push"]}. Presence diagnostic severity: warning. Evidence: vendor template. Native JSON type: string. | vendor.woopra.body.params.project.missingvendor.woopra.body.params.project.emptyvendor.woopra.body.params.project.invalid |
docs |
params.event |
recommended | Event names are lowercase strings; spaces are allowed. Body scope: []. Decoded body source: payload. Encoding: ndjson. Decoding diagnostic severity: warning. Applies when {"kind":"value_in","param":"operation","values":["push"]}. Applies when {"kind":"value_in","param":"endpoint","values":["ce"]}. Presence diagnostic severity: warning. Evidence: vendor template. Native JSON type: string. | vendor.woopra.body.params.event.missingvendor.woopra.body.params.event.emptyvendor.woopra.body.params.event.invalid |
docs |
params.cookie |
optional | Opaque visitor device cookie. Body scope: []. Decoded body source: payload. Encoding: ndjson. Decoding diagnostic severity: warning. Applies when {"kind":"value_in","param":"operation","values":["push"]}. Presence diagnostic severity: warning. Evidence: vendor template. Native JSON type: string. | vendor.woopra.body.params.cookie.emptyvendor.woopra.body.params.cookie.invalid |
docs |
params.cv_id |
optional | Optional configured visitor identity. Body scope: []. Decoded body source: payload. Encoding: ndjson. Decoding diagnostic severity: warning. Applies when {"kind":"value_in","param":"operation","values":["push"]}. Presence diagnostic severity: warning. Evidence: vendor template. Native JSON type: string. | vendor.woopra.body.params.cv_id.invalid |
docs |
params.cv_email |
optional | Optional visitor email identity. Body scope: []. Decoded body source: payload. Encoding: ndjson. Decoding diagnostic severity: warning. Applies when {"kind":"value_in","param":"operation","values":["push"]}. Presence diagnostic severity: warning. Evidence: vendor template. Native JSON type: string. | vendor.woopra.body.params.cv_email.invalid |
docs |
params.timestamp |
optional | Optional event time in Unix milliseconds. Body scope: []. Decoded body source: payload. Encoding: ndjson. Decoding diagnostic severity: warning. Applies when {"kind":"value_in","param":"operation","values":["push"]}. Presence diagnostic severity: warning. Evidence: vendor template. Native JSON type: integer. | vendor.woopra.body.params.timestamp.emptyvendor.woopra.body.params.timestamp.invalid |
docs |
params.ip |
optional | Optional visitor IPv4 or IPv6. Body scope: []. Decoded body source: payload. Encoding: ndjson. Decoding diagnostic severity: warning. Applies when {"kind":"value_in","param":"operation","values":["push"]}. Presence diagnostic severity: warning. Evidence: vendor template. Native JSON type: string. | vendor.woopra.body.params.ip.emptyvendor.woopra.body.params.ip.invalid |
docs |
params.timeout |
optional | Optional visit timeout in milliseconds. Body scope: []. Decoded body source: payload. Encoding: ndjson. Decoding diagnostic severity: warning. Applies when {"kind":"value_in","param":"operation","values":["push"]}. Presence diagnostic severity: warning. Evidence: vendor template. Native JSON type: integer. | vendor.woopra.body.params.timeout.emptyvendor.woopra.body.params.timeout.invalid |
docs |
params.referer |
optional | The legacy example accepts a schemeless referring URL. Body scope: []. Decoded body source: payload. Encoding: ndjson. Decoding diagnostic severity: warning. Applies when {"kind":"value_in","param":"operation","values":["push"]}. Presence diagnostic severity: warning. Evidence: vendor template. Native JSON type: string. | vendor.woopra.body.params.referer.invalid |
docs |
params.redirect |
optional | Optional allowlisted redirect destination. Body scope: []. Decoded body source: payload. Encoding: ndjson. Decoding diagnostic severity: warning. Applies when {"kind":"value_in","param":"operation","values":["push"]}. Presence diagnostic severity: warning. Evidence: vendor template. Native JSON type: string. | vendor.woopra.body.params.redirect.emptyvendor.woopra.body.params.redirect.invalid |
docs |
identity_context |
required | Supply a cookie or a configured unique visitor property. Enterprise projects can configure identifiers beyond cv_id and cv_email. Body scope: []. Decoded body source: payload. Encoding: ndjson. Decoding diagnostic severity: warning. Applies when {"kind":"value_in","param":"operation","values":["push"]}. Evidence: vendor template. | vendor.woopra.identity_context |
docs |
path |
optional | Collector route. Complete HTTP capture contract. | docs | |
method |
required | GET event or identity transport. Complete HTTP capture contract. Applies when {"kind":"not","condition":{"kind":"value_in","param":"path","values":["/track/push","/track/push/"]}}. | vendor.woopra.http.method.missingvendor.woopra.http.method.emptyvendor.woopra.http.method.invalid |
docs |
push_method |
recommended | The pinned SDK sends push batches with POST. Complete HTTP capture contract. Applies when {"kind":"value_in","param":"path","values":["/track/push","/track/push/"]}. Presence diagnostic severity: warning. | vendor.woopra.http.push_method.missingvendor.woopra.http.push_method.emptyvendor.woopra.http.push_method.invalid |
docs |
body.payload |
recommended | The published contract specifies this field type. Complete HTTP capture contract. Applies when {"kind":"value_in","param":"path","values":["/track/push","/track/push/"]}. Presence diagnostic severity: warning. Native JSON type: string. | vendor.woopra.http.body.payload.missingvendor.woopra.http.body.payload.invalid |
docs |
Validate a payload
pixellint validate request @request.json --rulepack vendor/woopra
Try this failing payload in the playground. A Woopra push batch with an uppercase event name.
{"url": "https://www.woopra.com/track/push/", "method": "POST", "headers": {"Content-Type": "application/x-www-form-urlencoded"}, "body": "payload=%7B%22endpoint%22%3A+%22ce%22%2C+%22params%22%3A+%7B%22project%22%3A+%22example.test%22%2C+%22event%22%3A+%22email+open%22%2C+%22cookie%22%3A+%22opaque%22%7D%7D%0A%7B%22endpoint%22%3A+%22ce%22%2C+%22params%22%3A+%7B%22project%22%3A+%22example.test%22%2C+%22event%22%3A+%22Upper%22%2C+%22cookie%22%3A+%22opaque%22%7D%7D"}
cargo install pixellint
·
npm install pixellint