Kevel pixels need the shim and the signature
Kevel documents e as the base64 event shim and s as the signature. Copy both from the Decision API impressionUrl or events[].url. Click redirects on /r are not this pack.
e is the encoded shim from the Decision API
An /i.gif call with no e cannot record the impression Kevel counted.
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 |
required | It is the base64 encoded event shim. Kevel documents e as unique to the event. Fix: Send e from the Decision API impressionUrl or events[].url. Do not invent it. | vendor.kevel.param.e.missingvendor.kevel.param.e.empty |
docs |
s |
required | It is the signature that verifies the shim. Kevel documents s on every tracking pixel. Fix: Send s from the same Decision API URL as e. | vendor.kevel.param.s.missingvendor.kevel.param.s.empty |
docs |
override |
optional | Kevel documents override as a monetary numeric event value. | vendor.kevel.param.override.emptyvendor.kevel.param.override.invalid |
docs |
additional |
optional | Kevel documents additional as a monetary numeric event value. | vendor.kevel.param.additional.emptyvendor.kevel.param.additional.invalid |
docs |
gmv |
optional | Kevel documents gmv as a monetary numeric event value. | vendor.kevel.param.gmv.emptyvendor.kevel.param.gmv.invalid |
docs |
productId |
optional | Kevel allows one to ten comma-separated productId strings on impression and custom-event URLs. | vendor.kevel.param.productId.emptyvendor.kevel.param.productId.invalid |
docs |
component |
optional | Kevel allows one to ten comma-separated component strings on impression and custom-event URLs. | vendor.kevel.param.component.emptyvendor.kevel.param.component.invalid |
docs |
position |
optional | Kevel allows one to ten comma-separated position strings on impression and custom-event URLs. | vendor.kevel.param.position.emptyvendor.kevel.param.position.invalid |
docs |
tracking_route |
optional | The concrete URL path distinguishes click redirects from impression and custom-event pixels. | docs | |
query_too_long |
required | Kevel limits the complete event URL query string to 1024 characters. | vendor.kevel.query_too_long |
docs |
click.productId.single |
required | Kevel click URLs accept only one productId value. | vendor.kevel.click.productId.single |
docs |
click.component.single |
required | Kevel click URLs accept only one component value. | vendor.kevel.click.component.single |
docs |
click.position.single |
required | Kevel click URLs accept only one position value. | vendor.kevel.click.position.single |
docs |
path |
optional | The published /i.gif impression and /r click endpoints support GET or POST. Complete HTTP capture contract. | docs | |
method |
required | Kevel documents GET or POST for impression and click tracking URLs. Complete HTTP capture contract. Applies when {"kind":"value_in","param":"path","values":["/i.gif","/r"]}. | vendor.kevel.http.method.missingvendor.kevel.http.method.emptyvendor.kevel.http.method.invalid |
docs |
headers.user-agent |
optional | For server-to-server event forwarding, Kevel instructs publishers to send the end-user User-Agent for bot filtering. Browser/server integration context is not inferred from method alone. Complete HTTP capture contract. | vendor.kevel.http.headers.user-agent.empty |
docs |
Validate a payload
pixellint validate url "$ARTIFACT" --rulepack vendor/kevel
Try this failing payload in the playground. Kevel impression pixel missing the shim.
https://e-1234.adzerk.net/i.gif?s=ujZhktar1g1emAP
cargo install pixellint
·
npm install pixellint