VAST-4.4-qrcode-position-percent
<QrCodePosition> coordinates must be percentages, not pixels
Short answer
This is the easiest mistake to make in the whole QR block. <Icon> types its xPosition and yPosition as vastIntegerOrPercent_type, so xPosition="120" is valid there. <QrCodePosition> types them as vastPercent_type, so the same markup is invalid. CTV screens vary too much in resolution for pixel coordinates to mean anything.
Why this matters in production
This rule is usually a delivery blocker. Many players, SDKs, and ad servers will discard the response or skip the affected creative once this condition is hit. The CTV Ad Portfolio standardises Pause, Screensaver, Overlay, Squeezeback and In-Scene ads, which ran for years on bespoke per-publisher integrations. These rules cover the VAST side of that contract: the NonLinear MediaFiles delivery model, the AdCOM signals round-tripped into Extensions so stitchers can validate the experience without the bid object, and the QR code block. The signaling guidance is final; the VAST 4.4 schema that accompanies it is still a working-group draft, so anything sourced only from the schema is reported as a warning or a note. Affected scope: All VAST versions.
Invalid
<QrCodePosition xPosition="120" yPosition="840"/>Valid
<QrCodePosition xPosition="10%" yPosition="70%"/>VAST-4.4-qrcode-position-percent and other issues instantly.Open the VAST tag validator →