Nielsen audit pings check HTTPS and browser transport.
Nielsen documents HTTPS audit pings and prefers simple GET requests because downstream collectors reject browser preflight. Captured requests can receive advice for MIME types, raw unsafe header bytes and the 128-byte Content-Type safelist bound.
Content-Type advice requires captured cross-origin context. Missing, redacted and unsupported Origin values preserve that uncertainty. No Origin or Content-Type header is required. These checks do not certify complete CORS behavior or delivery.
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 |
|---|---|---|---|---|
prd |
required | It marks the request as an audit ping. Nielsen documents the ads audit URL as /cgi-bin/gn?prd=audit. Fix: Set prd=audit on every ads audit ping. | vendor.nielsen-audit.param.prd.missingvendor.nielsen-audit.param.prd.emptyvendor.nielsen-audit.param.prd.invalid |
docs |
intid |
required | It is the integration ID Nielsen assigns for all audit pings across platforms. Fix: Set intid to the integration ID Nielsen issued. | vendor.nielsen-audit.param.intid.missingvendor.nielsen-audit.param.intid.empty |
docs |
sessionid |
required | It is the session ID generated when the player is instantiated. Nielsen documents it as mandatory. Fix: Send a stable sessionid for the playback session, and fire again if it changes. | vendor.nielsen-audit.param.sessionid.missingvendor.nielsen-audit.param.sessionid.emptyvendor.nielsen-audit.param.sessionid.invalid |
docs |
product |
required | It names the Nielsen product the ping corresponds to. Nielsen documents examples dar, dcr, and dtvr. Fix: Set product to the Nielsen product for this integration, such as dar, dcr, or dtvr. | vendor.nielsen-audit.param.product.missingvendor.nielsen-audit.param.product.emptyvendor.nielsen-audit.param.product.invalid |
docs |
createtm |
required | It is the time the ping was fired. Nielsen documents createtm as Unix time. Fix: Set createtm to the Unix timestamp when the ping fired, such as 1643858542. | vendor.nielsen-audit.param.createtm.missingvendor.nielsen-audit.param.createtm.emptyvendor.nielsen-audit.param.createtm.invalid |
docs |
apid |
optional | It is the Nielsen Server App ID. Nielsen documents apid as required only for content measurement. Fix: Send apid when this audit ping is for content measurement. | vendor.nielsen-audit.param.apid.empty |
docs |
content_app_id_required |
required | Nielsen requires its Server App ID for content measurement audit pings. | vendor.nielsen-audit.content_app_id_required |
docs |
https_required |
required | Nielsen documents audit pings as HTTPS requests. Fix: Use https://audit.imrworldwide.com/cgi-bin/gn with the generated audit parameters. | vendor.nielsen-audit.https_required |
docs |
method |
recommended | Nielsen prefers simple GET audit requests to avoid preflight. This is advice rather than a universal receiver method enumeration. Complete HTTP capture contract. Presence diagnostic severity: warning. | vendor.nielsen-audit.http.method.missingvendor.nielsen-audit.http.method.emptyvendor.nielsen-audit.http.method.invalid |
docs |
headers.origin |
optional | Capture context for cross-origin browser transport advice. No Origin header is required and its syntax is not newly constrained. Complete HTTP capture contract. | docs | |
content_type |
optional | For a captured request carrying a non-collector Origin, these MIME essences are CORS-safelisted. A different media type can require preflight, which Nielsen warns its downstream collectors reject. Header absence is allowed. Complete HTTP capture contract. Applies when {"kind":"all","conditions":[{"kind":"present","param":"headers.origin"},{"kind":"value_pattern","param":"headers.origin","pattern":"(?i)^(?:null|https?://[^/?#\\s]+)$"},{"kind":"not","condition":{"kind":"value_pattern","param":"headers.origin","pattern":"(?i)^https://audit\\.imrworldwide\\.com(?::443)?$"}}]}. Presence diagnostic severity: warning. Evidence: formal standard. Fix: For browser cross-origin audit GETs, omit Content-Type or use a CORS-safelisted media type, such as text/plain. | vendor.nielsen-audit.http.content_type.emptyvendor.nielsen-audit.http.content_type.invalid |
docs |
headers.content-type |
optional | Fetch limits a CORS-safelisted Content-Type value to 128 bytes and excludes CORS-unsafe bytes. For a captured Latin-1 header value each character is one byte, including MIME parameters. Values outside Latin-1 remain unverified by this raw-header advice. This does not certify the complete browser preflight decision. Complete HTTP capture contract. Applies when {"kind":"all","conditions":[{"kind":"all","conditions":[{"kind":"present","param":"headers.origin"},{"kind":"value_pattern","param":"headers.origin","pattern":"(?i)^(?:null|https?://[^/?#\\s]+)$"},{"kind":"not","condition":{"kind":"value_pattern","param":"headers.origin","pattern":"(?i)^https://audit\\.imrworldwide\\.com(?::443)?$"}}]},{"kind":"value_pattern","param":"headers.content-type","pattern":"^[\\x00-\\xff]*$"}]}. Presence diagnostic severity: warning. Evidence: formal standard. Maximum decoded characters: 128. Fix: Use a short Content-Type value without CORS-unsafe bytes. For this audit GET, the header may also be omitted. | vendor.nielsen-audit.http.headers.content-type.emptyvendor.nielsen-audit.http.headers.content-type.invalid |
docs |
Validate a payload
pixellint validate request @request.json --rulepack vendor/nielsen-audit
Try this failing payload in the playground. A cross-origin Nielsen audit request with a preflight-triggering MIME type.
{
"url": "https://audit.imrworldwide.com/cgi-bin/gn?prd=audit&intid=synthetic&sessionid=Session123&product=dar&createtm=1792600000",
"method": "GET",
"headers": {
"Origin": "https://publisher.example.test",
"Content-Type": "application/json"
}
}
cargo install pixellint
·
npm install pixellint