VASTlint

VAST examples / Pricing & metadata

A <Pricing> element missing model and currency

VAST 3.02 errors1 warningVAST-3.0-pricing-model

The scenario

A supply partner passed a price floor inside the VAST <Pricing> element so downstream exchanges and wrappers could honor it during resale of the inventory in a programmatic chain.

The broken tag

<?xml version="1.0" encoding="UTF-8"?>
<!-- Pricing missing model and currency — VAST-3.0-pricing-model, VAST-3.0-pricing-currency -->
<VAST version="3.0">
  <Ad id="1">
    <InLine>
      <AdSystem>Test</AdSystem>
      <AdTitle>Test</AdTitle>
      <Impression><![CDATA[https://example.com/imp]]></Impression>
      <Pricing>1.50</Pricing>
      <Creatives>
        <Creative>
          <Linear>
            <Duration>00:00:30</Duration>
            <MediaFiles>
              <MediaFile delivery="progressive" type="video/mp4" width="640" height="360">
                <![CDATA[https://example.com/video.mp4]]>
              </MediaFile>
            </MediaFiles>
          </Linear>
        </Creative>
      </Creatives>
    </InLine>
  </Ad>
</VAST>

What the validator reports

Running this tag through vastlint produces the following. The primary failure for this example:

errorVAST-3.0-pricing-modelIAB VAST 3.0 §2.3.10line 9

<Pricing> is missing required model attribute

The same tag also surfaces these secondary findings — real tags rarely fail in isolation:

errorVAST-3.0-pricing-currencyIAB VAST 3.0 §2.3.10line 9

<Pricing> is missing required currency attribute

warningVAST-2.0-linear-tracking-quartilesIAB VAST 4.1 §3.14.2line 12

<Linear> has no standard quartile tracking events (start/firstQuartile/midpoint/thirdQuartile/complete) — ad will serve but measurement system receives no signal

Why it breaks

The <Pricing> element contains a numeric value but no model and no currency attributes. Both are required: model states whether the figure is CPM, CPC, or CPE, and currency states the ISO currency code. A bare number — '5' — is ambiguous: $5 CPM, €5 CPC, and £5 CPE are wildly different economics, and no consumer can act on it safely.

What it costs

Exchanges and wrappers that cannot parse the price either ignore the floor (so the inventory can clear below the intended price, costing the seller money) or reject the response (causing no-fill). In a multi-hop resale chain the ambiguity compounds, leading to mispriced transactions and reconciliation disputes between partners.

The fix

Always set both model (CPM/CPC/CPE) and currency (ISO 4217 code) on <Pricing>, with the value expressed in that model and currency.

<Pricing model="CPM" currency="USD">
  <![CDATA[5.00]]>
</Pricing>

Check your own version of this tag

Paste the resolved XML to run the same spec check, test a live tag URL, or inspect the wrapper chain hop by hop.

Related examples

Related reading