How It Works
Accessibility in advertising creatives depends on who controls the rendering:- Format-rendered creatives (image + headline + CTA): The format controls the output. It can guarantee contrast ratios, keyboard navigation, and ARIA landmarks — it just needs the right inputs from the creative (alt text for images, captions for video, etc.).
- Opaque creatives (HTML bundles, JavaScript tags): The format can’t inspect or modify the content. The asset must self-declare its accessibility properties.
accessibility object and per-asset-type accessibility metadata.
Format Accessibility
Formats declare their accessibility posture through theaccessibility object:
accessibility.wcag_level
The WCAG conformance level that creatives produced by this format will meet. Values: A, AA, AAA.
For format-rendered creatives, this is a guarantee from the format. For opaque creatives, this reflects the level the format requires assets to self-certify to.
accessibility.requires_accessible_assets
When true, all assets with accessibility-relevant fields must include those fields. This is the enforcement mechanism — it tells validation to treat optional accessibility fields as required.
alt_text on the image asset (because alt_text is marked as an accessibility field on the image asset type).
Asset Accessibility Fields
Each asset type defines which of its fields are accessibility-relevant using thex-accessibility schema marker. These fields are always optional by default, but become required when the format sets accessibility.requires_accessible_assets: true.
Inspectable Assets
These assets provide structured data that the format uses to render accessibly.| Asset Type | Accessibility Fields | Purpose |
|---|---|---|
| Image | alt_text | Alternative text for screen readers |
| Video | captions_url | URL to captions file (WebVTT, SRT) |
transcript_url | URL to text transcript | |
audio_description_url | URL to audio description track | |
| Audio | transcript_url | URL to text transcript |
Opaque Assets
HTML and JavaScript assets are black boxes — the format can’t inspect their rendering. These assets carry anaccessibility object with self-declared properties.
| Field | Type | Description |
|---|---|---|
alt_text | string | Text alternative describing the creative content |
keyboard_navigable | boolean | Creative can be fully operated via keyboard |
motion_control | boolean | Respects prefers-reduced-motion or provides pause/stop controls |
screen_reader_tested | boolean | Creative has been tested with screen readers |
Third-Party Tags
VAST and DAAST assets wrap video and audio delivered by third parties. They carry accessibility fields alongside their existing tag properties.| Asset Type | Accessibility Fields |
|---|---|
| VAST | captions_url, audio_description_url |
| DAAST | transcript_url |
Assets Without Accessibility Fields
Some asset types don’t produce standalone rendered content and have no accessibility fields. When a format setsaccessibility.requires_accessible_assets: true, these are effectively no-ops:
- Text — rendered by the format
- Markdown — rendered by the format
- CSS — styles, not content
- URL — links, not rendered content
- Webhook — server-side
Discovering Accessible Formats
Buyers can filter for accessible formats using thewcag_level parameter in list_creative_formats:
AA returns formats with AA or AAA.
Implementation Notes
Enforcement is application-level. Thex-accessibility marker is a JSON Schema extension keyword. Standard JSON Schema validators ignore it — enforcement of accessibility.requires_accessible_assets must be implemented in application code that scans asset schemas for x-accessibility: true fields and validates their presence.
For format implementers:
- Set
accessibility.wcag_levelonly when you can substantiate the claim — through your own rendering guarantees or by requiring accessible assets - If your format renders from structured inputs, ensure your rendering pipeline meets the declared WCAG level (contrast, keyboard nav, ARIA)
- If your format wraps opaque assets,
accessibility.requires_accessible_assets: trueensures the inputs carry the right declarations
- When submitting to a format with
accessibility.requires_accessible_assets: true, include all accessibility fields for your asset types - For opaque assets, test accessibility properties before declaring them
- Provide captions and transcripts as separate hosted files, not embedded in the asset
Related Documentation
- Creative Formats — Format structure and requirements
- Asset Types — Asset specifications and payload schemas
- Creative Manifests — Pairing assets with formats
- list_creative_formats — Format discovery with filtering