pixellint

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

Hosts
www.woopra.com, kr.track.airis.appier.net
Paths
/track/ce, /track/ce/, /track/identify, /track/identify/, /track/push, /track/push/
Vendor docs
docs.woopra.com/reference/track-ce

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.missing
vendor.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.missing
vendor.woopra.param.event.empty
vendor.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.empty
vendor.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.empty
vendor.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.empty
vendor.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.empty
vendor.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.missing
vendor.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.missing
vendor.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.missing
vendor.woopra.body.params.project.empty
vendor.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.missing
vendor.woopra.body.params.event.empty
vendor.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.empty
vendor.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.empty
vendor.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.empty
vendor.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.empty
vendor.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.empty
vendor.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.missing
vendor.woopra.http.method.empty
vendor.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.missing
vendor.woopra.http.push_method.empty
vendor.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.missing
vendor.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