LemonPI events check creative library payloads.
Advisory checks for pinned LemonPI creative-library JSON carried in e on exact content.lemonpi.io/track/event. Recognized legacy/v2 click, impression and engagement profiles only. Unknown types, versions, engagement names and identifier types stay open; receiver acceptance remains external.
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 |
|---|---|---|---|---|
e |
optional | Pinned default URL builder carries event JSON in the e query value. No missing carrier rule is imposed on other profiles. Presence diagnostic severity: warning. | docs | |
type |
optional | Pinned SDK profile advice only. Identifier values, native types, registry membership and receiver acceptance remain open. Decoded body source: e. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"not","condition":{"kind":"value_in","param":"e","values":["LEMONPI%EVENTDATA"]}}. Presence diagnostic severity: warning. Value diagnostic severity: warning. | docs | |
version |
optional | Pinned SDK profile advice only. Identifier values, native types, registry membership and receiver acceptance remain open. Decoded body source: e. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"not","condition":{"kind":"value_in","param":"e","values":["LEMONPI%EVENTDATA"]}}. Presence diagnostic severity: warning. Value diagnostic severity: warning. | docs | |
name |
optional | Pinned SDK profile advice only. Identifier values, native types, registry membership and receiver acceptance remain open. Decoded body source: e. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"not","condition":{"kind":"value_in","param":"e","values":["LEMONPI%EVENTDATA"]}}. Presence diagnostic severity: warning. Value diagnostic severity: warning. | docs | |
schema |
recommended | Recognized legacy/v2 click and impression producers emit adset-creative. Unknown types and versions remain outside this assertion. Decoded body source: e. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"not","condition":{"kind":"value_in","param":"e","values":["LEMONPI%EVENTDATA"]}}. Applies when {"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["click","impression"]},{"kind":"any","conditions":[{"kind":"not","condition":{"kind":"exists","param":"version"}},{"kind":"value_in","param":"version","values":["2"]}]}]}. Presence diagnostic severity: warning. Value diagnostic severity: warning. Native JSON type: string. | vendor.lemonpi-events.body.schema.missingvendor.lemonpi-events.body.schema.emptyvendor.lemonpi-events.body.schema.invalid |
docs |
adsetId |
recommended | Pinned SDK profile advice only. Identifier values, native types, registry membership and receiver acceptance remain open. Decoded body source: e. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"not","condition":{"kind":"value_in","param":"e","values":["LEMONPI%EVENTDATA"]}}. Applies when {"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["click","impression"]},{"kind":"not","condition":{"kind":"exists","param":"version"}}]}. Presence diagnostic severity: warning. Value diagnostic severity: warning. | vendor.lemonpi-events.body.adsetId.missing |
docs |
creativeId |
recommended | Pinned SDK profile advice only. Identifier values, native types, registry membership and receiver acceptance remain open. Decoded body source: e. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"not","condition":{"kind":"value_in","param":"e","values":["LEMONPI%EVENTDATA"]}}. Applies when {"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["click","impression"]},{"kind":"not","condition":{"kind":"exists","param":"version"}}]}. Presence diagnostic severity: warning. Value diagnostic severity: warning. | vendor.lemonpi-events.body.creativeId.missing |
docs |
adset-id |
recommended | Pinned SDK profile advice only. Identifier values, native types, registry membership and receiver acceptance remain open. Decoded body source: e. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"not","condition":{"kind":"value_in","param":"e","values":["LEMONPI%EVENTDATA"]}}. Applies when {"kind":"any","conditions":[{"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["click"]},{"kind":"value_in","param":"version","values":["2"]}]},{"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["impression"]},{"kind":"value_in","param":"version","values":["2"]}]},{"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["engagement"]},{"kind":"value_in","param":"name","values":["viewability","interaction","interaction-time","interaction-click"]},{"kind":"any","conditions":[{"kind":"not","condition":{"kind":"exists","param":"version"}},{"kind":"value_in","param":"version","values":["2"]}]}]}]}. Presence diagnostic severity: warning. Value diagnostic severity: warning. | vendor.lemonpi-events.body.adset-id.missing |
docs |
creative-id |
recommended | Pinned SDK profile advice only. Identifier values, native types, registry membership and receiver acceptance remain open. Decoded body source: e. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"not","condition":{"kind":"value_in","param":"e","values":["LEMONPI%EVENTDATA"]}}. Applies when {"kind":"any","conditions":[{"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["click"]},{"kind":"value_in","param":"version","values":["2"]}]},{"kind":"all","conditions":[{"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["engagement"]},{"kind":"value_in","param":"name","values":["viewability","interaction","interaction-time","interaction-click"]},{"kind":"any","conditions":[{"kind":"not","condition":{"kind":"exists","param":"version"}},{"kind":"value_in","param":"version","values":["2"]}]}]},{"kind":"not","condition":{"kind":"exists","param":"version"}}]}]}. Presence diagnostic severity: warning. Value diagnostic severity: warning. | vendor.lemonpi-events.body.creative-id.missing |
docs |
impression-id |
recommended | Pinned SDK profile advice only. Identifier values, native types, registry membership and receiver acceptance remain open. Decoded body source: e. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"not","condition":{"kind":"value_in","param":"e","values":["LEMONPI%EVENTDATA"]}}. Applies when {"kind":"any","conditions":[{"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["impression"]},{"kind":"value_in","param":"version","values":["2"]}]},{"kind":"all","conditions":[{"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["engagement"]},{"kind":"value_in","param":"name","values":["viewability","interaction","interaction-time","interaction-click"]},{"kind":"any","conditions":[{"kind":"not","condition":{"kind":"exists","param":"version"}},{"kind":"value_in","param":"version","values":["2"]}]}]},{"kind":"value_in","param":"version","values":["2"]}]}]}. Presence diagnostic severity: warning. Value diagnostic severity: warning. | vendor.lemonpi-events.body.impression-id.missing |
docs |
advertiser-id |
recommended | Pinned SDK profile advice only. Identifier values, native types, registry membership and receiver acceptance remain open. Decoded body source: e. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"not","condition":{"kind":"value_in","param":"e","values":["LEMONPI%EVENTDATA"]}}. Applies when {"kind":"any","conditions":[{"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["impression"]},{"kind":"value_in","param":"version","values":["2"]}]},{"kind":"all","conditions":[{"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["engagement"]},{"kind":"value_in","param":"name","values":["viewability","interaction","interaction-time","interaction-click"]},{"kind":"any","conditions":[{"kind":"not","condition":{"kind":"exists","param":"version"}},{"kind":"value_in","param":"version","values":["2"]}]}]},{"kind":"value_in","param":"version","values":["2"]}]}]}. Presence diagnostic severity: warning. Value diagnostic severity: warning. | vendor.lemonpi-events.body.advertiser-id.missing |
docs |
creative-revision-id |
recommended | Pinned SDK profile advice only. Identifier values, native types, registry membership and receiver acceptance remain open. Decoded body source: e. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"not","condition":{"kind":"value_in","param":"e","values":["LEMONPI%EVENTDATA"]}}. Applies when {"kind":"any","conditions":[{"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["impression"]},{"kind":"value_in","param":"version","values":["2"]}]},{"kind":"all","conditions":[{"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["engagement"]},{"kind":"value_in","param":"name","values":["viewability","interaction","interaction-time","interaction-click"]},{"kind":"any","conditions":[{"kind":"not","condition":{"kind":"exists","param":"version"}},{"kind":"value_in","param":"version","values":["2"]}]}]},{"kind":"value_in","param":"version","values":["2"]}]}]}. Presence diagnostic severity: warning. Value diagnostic severity: warning. | vendor.lemonpi-events.body.creative-revision-id.missing |
docs |
out |
recommended | Recognized click producer emits an encodeURIComponent string. No URL grammar, nonempty requirement or extra decoding is inferred. Decoded body source: e. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"not","condition":{"kind":"value_in","param":"e","values":["LEMONPI%EVENTDATA"]}}. Applies when {"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["click"]},{"kind":"any","conditions":[{"kind":"not","condition":{"kind":"exists","param":"version"}},{"kind":"value_in","param":"version","values":["2"]}]}]}. Presence diagnostic severity: warning. Value diagnostic severity: warning. Native JSON type: string. | vendor.lemonpi-events.body.out.missingvendor.lemonpi-events.body.out.invalid |
docs |
tracker |
optional | Optional click tracker is an encodeURIComponent string. Absence and empty strings remain allowed; no URL grammar is imposed. Decoded body source: e. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"not","condition":{"kind":"value_in","param":"e","values":["LEMONPI%EVENTDATA"]}}. Applies when {"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["click"]},{"kind":"any","conditions":[{"kind":"not","condition":{"kind":"exists","param":"version"}},{"kind":"value_in","param":"version","values":["2"]}]}]}. Presence diagnostic severity: warning. Value diagnostic severity: warning. Native JSON type: string. | vendor.lemonpi-events.body.tracker.invalid |
docs |
content |
optional | Known content sources yield an object in v2 impressions. Unknown sources omit content, so presence is never required. Decoded body source: e. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"not","condition":{"kind":"value_in","param":"e","values":["LEMONPI%EVENTDATA"]}}. Applies when {"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["impression"]},{"kind":"value_in","param":"version","values":["2"]}]}. Presence diagnostic severity: warning. Value diagnostic severity: warning. Native JSON type: object. | vendor.lemonpi-events.body.content.invalid |
docs |
content.source |
recommended | When a v2 impression content object exists, normalizeContent emits one of these three producer source labels. Missing parent content remains allowed. Decoded body source: e. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"not","condition":{"kind":"value_in","param":"e","values":["LEMONPI%EVENTDATA"]}}. Applies when {"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["impression"]},{"kind":"value_in","param":"version","values":["2"]}]}. Presence diagnostic severity: warning. Value diagnostic severity: warning. Native JSON type: string. | vendor.lemonpi-events.body.content.source.missingvendor.lemonpi-events.body.content.source.emptyvendor.lemonpi-events.body.content.source.invalid |
docs |
data |
recommended | The four recognized engagement dispatch branches spread their caller payload into an object. Empty and arbitrary object members remain open. Decoded body source: e. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"not","condition":{"kind":"value_in","param":"e","values":["LEMONPI%EVENTDATA"]}}. Applies when {"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["engagement"]},{"kind":"value_in","param":"name","values":["viewability","interaction","interaction-time","interaction-click"]},{"kind":"any","conditions":[{"kind":"not","condition":{"kind":"exists","param":"version"}},{"kind":"value_in","param":"version","values":["2"]}]}]}. Presence diagnostic severity: warning. Value diagnostic severity: warning. Native JSON type: object. | vendor.lemonpi-events.body.data.missingvendor.lemonpi-events.body.data.invalid |
docs |
Validate a payload
pixellint validate url "$ARTIFACT" --rulepack vendor/lemonpi-events
Try this failing payload in the playground. An example with a validation finding.
https://content.lemonpi.io/track/event?e=%7Bbad
cargo install pixellint
·
npm install pixellint