VASTlint

OMID: Open Measurement SDK and VAST AdVerification

OMID (Open Measurement Interface Definition) is the IAB Tech Lab standard for third-party viewability, audio, and fraud measurement across video and audio ad inventory. It defines a secure API that lets measurement vendors — IAS, DoubleVerify, Moat, and others — collect consistent signals from any web, app, or CTV player without executing privileged code inside the player itself.

The current version is OMID 1.5 (June 2024). OMID replaced VPAID as the standard mechanism for ad verification and viewability measurement. Where VPAID combined interactivity and measurement into one executable unit, OMID handles only measurement — cleanly, securely, and in a way that works on CTV and SSAI environments where VPAID cannot run.

Why OMID exists

Before OMID, measurement vendors had no standardised way to integrate across players. Each vendor shipped its own JavaScript snippet that had to be inserted into the ad tag. Those scripts often ran in the same context as the player, exposing the publisher page to security and performance risks identical to VPAID. Worse, a script that worked in one player was not guaranteed to work in another.

OMID draws a hard boundary. The measurement script loads into an isolated context and talks to the player through a standardised API. The player reports media events and geometry data to the OM SDK; the SDK forwards them to vendor scripts via the OMID API. No DOM access, no shared JavaScript context, no ability to fire tracking pixels outside the defined event model.

How OMID fits into the VAST ecosystem

VAST describes the ad: media files, tracking URLs, companion ads. OMID describes who measures the ad and how. Starting with VAST 4.1, the <AdVerifications> element carries one or more <Verification> entries, each pointing to a vendor's OMID-compatible measurement script.

Players that support OM SDK parse <AdVerifications> automatically, load the scripts, and begin reporting signals as soon as the ad enters the viewport. Players that do not support OM SDK skip the element gracefully — OMID degrades without breaking playback.

The <AdVerifications> element

<AdVerifications> sits directly inside <InLine> or <Wrapper> in a VAST 4.1+ document. It contains one <Verification> element per measurement vendor.

Key attributes and children of <Verification>

  • vendor (required): uniquely identifies the measurement vendor in domain-omid format, e.g. doubleverify.com-omid. VASTlint validates the format of this value.
  • <JavaScriptResource> (required for web/app): URL to the vendor's OMID-compatible measurement script. Must have apiFramework="omid".
  • browserOptional on <JavaScriptResource>: when true, native-app players can skip loading the JS resource and use native SDK integration instead. When false (the default), the JavaScript resource is required even in app contexts.
  • <VerificationParameters> (optional): a CDATA block containing vendor-specific parameters — typically key-value pairs the vendor script needs at initialisation (placement ID, publisher ID, etc.).
  • <TrackingEvents>: should contain a verificationNotExecuted tracking URL. The player fires this pixel when it cannot load or execute the verification script, so the vendor knows measurement failed rather than inferring it from missing signals.
<AdVerifications>
  <Verification vendor="doubleverify.com-omid">
    <JavaScriptResource apiFramework="omid" browserOptional="true">
      <![CDATA[https://cdn.doubleverify.com/dvtp_src.js]]>
    </JavaScriptResource>
    <VerificationParameters>
      <![CDATA[ctx=12345678&cmp=DV123456]]>
    </VerificationParameters>
    <TrackingEvents>
      <Tracking event="verificationNotExecuted">
        <![CDATA[https://cdn.doubleverify.com/dvtp_not_executed.js?ctx=12345678&reason=[REASON]]]>
      </Tracking>
    </TrackingEvents>
  </Verification>

  <!-- Multiple vendors are allowed -->
  <Verification vendor="ias.com-omid">
    <JavaScriptResource apiFramework="omid" browserOptional="false">
      <![CDATA[https://pixel.adsafeprotected.com/jload]]>
    </JavaScriptResource>
    <VerificationParameters>
      <![CDATA[anId=12345&advId=67890]]>
    </VerificationParameters>
    <TrackingEvents>
      <Tracking event="verificationNotExecuted">
        <![CDATA[https://pixel.adsafeprotected.com/jload?not_executed=1&reason=[REASON]]]>
      </Tracking>
    </TrackingEvents>
  </Verification>
</AdVerifications>

VAST XML fragment only. This excerpt belongs inside a complete VAST document, so standalone validation will fail until it is wrapped in a full <VAST>response.

OMID vs. VPAID: measurement comparison

FeatureVPAID (for measurement)OMID
Security modelScript runs in shared player JS contextScript runs in isolated context via OM SDK API
DOM accessFull access to publisher DOMNone — signals delivered via standardised API only
CTV / native playersNot supported — requires browser JS runtimeSupported via native OM SDK libraries
SSAI environmentsNot possibleSupported
Multiple vendorsEach vendor ships its own ad wrapperMultiple <Verification> elements in one tag
Failed measurement signalNo standard mechanismverificationNotExecuted tracking event
Fraud riskHigh — script can fire arbitrary pixelsLow — constrained to defined OMID event model
StatusDeprecated by IAB Tech LabCurrent standard (v1.5)

VAST version support

VAST versionAdVerifications supportNotes
VAST 2.0, 3.0None (native)Some players accept AdVerifications in an Extensions block — non-standard
VAST 4.0Pre-OMID<AdVerifications> exists but predates OMID — no apiFramework="omid" or browserOptional attributes
VAST 4.1FullCanonical placement introduced; the version most OM SDK integrations target
VAST 4.2, 4.3FullInherited from 4.1 without structural changes

The browserOptional attribute

browserOptional="true" on <JavaScriptResource> signals that the vendor has a native OM SDK integration and the JavaScript resource is only needed for web players. A native iOS or Android player can skip loading the JS file and use the vendor's native SDK instead.

Setting browserOptional="false" (or omitting it, since false is the default) tells native-app players they must load the JavaScript resource to satisfy the measurement requirement. If the player cannot execute JavaScript, it should fire the verificationNotExecuted pixel.

The verificationNotExecuted tracking event

When a player cannot load or execute a verification script — because JavaScript is unavailable, the script URL fails to load, or the OM SDK is not integrated — it should fire the verificationNotExecuted pixel so the vendor knows measurement failed. The [REASON] macro is replaced by a numeric reason code; for example, code 1 is used when the player explicitly refuses to execute the verification resource. The full enumeration is in section 3.17.4 of the VAST 4.1 specification.

OMID and wrapper chains

<AdVerifications> can appear in both <InLine> and <Wrapper> documents. When a wrapper chain is involved:

  • The player accumulates all <Verification> entries from every hop in the chain — from the outermost wrapper down to the InLine.
  • Each vendor's script is loaded independently. Duplicate vendors (same vendor attribute value at multiple hops) should be deduplicated by the player — only one instance per vendor should run.
  • The VAST Inspector shows the AdVerifications block at each hop, so you can see which vendors are introduced at which level of the chain.

How VASTlint validates OMID

VASTlint validates the VAST XML structure around OMID verification entries. The current checks include:

  • Vendor format: the vendor attribute must follow the domain-omid pattern. Missing or malformed vendor values are flagged.
  • apiFramework value: <JavaScriptResource> must have apiFramework="omid" (lowercase). Incorrect or missing values are flagged.
  • HTTPS enforcement: the script URL inside <JavaScriptResource> must be HTTPS. HTTP URLs are flagged as errors.
  • Duplicate vendor detection: more than one <Verification> with the same vendor value in the same document is flagged as a warning, since players should deduplicate but behaviour varies.
  • VerificationParameters guidance: if <VerificationParameters> is present but empty, VASTlint surfaces an advisory since empty parameters are typically a configuration oversight.

VASTlint does not execute the verification script or validate the runtime OMID session. That requires a live player environment with OM SDK integrated. For live URL testing, use the VAST Tag Tester.

Validate OMID AdVerifications in your VAST tag

Paste a VAST 4.1+ tag to check vendor format, apiFramework values, HTTPS enforcement, and duplicate vendor entries instantly.

Common mistakes

MistakeEffect
apiFramework="OMID" (uppercase)Some players treat the attribute as case-sensitive and fail to recognise the vendor
HTTP script URLMixed-content block in modern browsers; script never loads
Missing vendor attributePlayer cannot deduplicate vendors or route the script correctly
Vendor value not in domain-omid formatNon-standard values may be silently ignored by strict OM SDK implementations
Missing verificationNotExecuted tracking URLVendor has no signal when measurement fails; discrepancy goes undetected
Duplicate vendor at multiple wrapper hopsSome players run both instances, causing double-counting
AdVerifications in VAST 2.0 / 3.0 without Extensions wrapperStructurally invalid; most players will ignore the block entirely
Check OMID AdVerification structure in any VAST 4.1+ tag instantly.Validate a tag →

Further reading