Skip to content

Support instream video through the auction API - #1325

Open
aleksUIX wants to merge 2 commits into
IABTechLab:mainfrom
aleksUIX:contribution/openrtb-video-361
Open

aleksUIX wants to merge 2 commits into
IABTechLab:mainfrom
aleksUIX:contribution/openrtb-video-361

Conversation

@aleksUIX

@aleksUIX aleksUIX commented Oct 14, 2026 •

Copy link
Copy Markdown

Summary

A video-only ad unit currently disappears before provider dispatch. Accept typed linear instream video input on POST /auction, route it to standard OpenRTB and PBS providers, and return inline VAST to the caller's player.

Preserve banner behavior and PBS routing. APS receives eligible banners. Video input with configured mediation fails before dispatch. Mixed inventory uses declared media identity so an incompatible higher-priced bid cannot win.

Changes

  • Add typed video requirements and provider-specific inventory routing.
  • Admit standard/PBS video responses independently of banner dimension rules. Retain protocol, duration and declared creative dimensions.
  • Preserve VAST through API serialization and keep video out of the existing browser and GPT banner delivery paths.
  • Return explicit banner/video media identity. Reject declared video APIs the player did not offer, and retain normalized API metadata for the caller.
  • Document the direct API contract and caller responsibilities for VAST validation, playback, macros and tracking.
  • Add request, provider, endpoint, delivery and browser regressions. Other constructor changes initialize the new optional fields for existing banner fixtures.

Closes

Refs #361. This PR adds the direct API contract for linear instream video through standard OpenRTB and PBS. Browser video adapters, cache-only VAST delivery and mediation remain outside this scope.

Test plan

All checks below passed locally on bb487795. Hosted GitHub Actions workflows await maintainer approval.

  • Before-patch regression: video-only request produces zero slots instead of one.
  • Focused native video checks: 17 passed, including real handle_auction paths with stubbed standard and PBS transports.
  • Review regressions: missing banner media identity and incompatible video API selection fail before correction and pass after it.
  • JS tests: 1,212 passed on pinned Node 24.12.0 with two workers and unchanged assertions/timeouts.
  • JS format.
  • Docs format and non-doc Markdown format.
  • Native core suite: 2,954 unit tests, 20 build metadata tests and four doctests passed. Four existing doctests ignored. Runtime runner removes Cargo-injected build metadata from the legacy settings test environment.
  • Native adapter tests: Axum 48, Cloudflare 54 and Spin 88 passed. One existing doctest ignored in each adapter.
  • Native adapter lints: Axum, Cloudflare and Spin passed with warnings denied.
  • CLI/codegen/build-digest lints, domain audit and Rust format.
  • Fastly tests under Viceroy: 2,948 core unit cases (six existing native-only cases ignored), 222 adapter cases and shared-crate tests. Reusable sandbox configuration passed 222 adapter cases.
  • Fastly strict lint, debug build and production release WASM build.
  • Cloudflare/Spin WASM strict lints, Cloudflare production build, Spin check and WASM clock lint.
  • Final integration parity: 17 passed across Axum, Cloudflare and Spin in process.

Local network tests required loopback access outside the sandbox. Builds used locked dependencies, one Cargo job and disabled incremental caching. No assertions or timeouts were weakened.

Deployed bidder integration and actual video player playback were not exercised. The caller owns player integration under this first API transport contract.

Checklist

  • Changes follow AGENTS.md conventions.
  • No production unwrap calls.
  • New behavior has regression coverage.
  • Test URLs use fictional example domains.
  • No credentials or private configuration added.

Preserve video-only inventory through standard and PBS routing.
Return inline VAST to a caller-owned player and keep banner
consumers isolated from video bids.

Refs IABTechLab#361.
Emit explicit media identity for banner winners so mixed inventory
callers can select the correct renderer. Check video API declarations
against the player capabilities before choosing a winner, normalize
legacy declarations, and preserve the accepted APIs in the response.

Cover mixed banner delivery, malformed and unsupported declarations,
and compatible video selection through standard and PBS providers.
@aleksUIX
aleksUIX marked this pull request as ready for review October 14, 2026 04:20
@aram356 aram356 linked an issue Oct 15, 2026 that may be closed by this pull request
4 tasks
@jevansnyc

Copy link
Copy Markdown
Collaborator

Hi @aleksUIX we really appreciate the interest and contribution. I'm going to open up a spec against this PR so we can work together on a solid TS integration of video support through the /auction mechanism. Usually the way it works is that we have at least 2-3 reviewers and commenters on the spec and then we plan the implementation. Would love to have you involved in the spec creation and then we can move forward with implementation shape.

@aleksUIX

Copy link
Copy Markdown
Author

Thanks. I will join the spec review. I will leave this PR open as the current /auction video sketch until that spec settles the shape. Please point me at the spec when it is open.

@jevansnyc

Copy link
Copy Markdown
Collaborator

Thanks for this. We've written a design spec for #361 in #1437, using this PR's request contract and admission rules as input. It's a draft and still going through review rounds, but it's the design we'd like this implementation to converge on. Main differences from the current branch: per-provider media opt-in (video off by default), banner admission kept identical to main, a structural VAST check, a config error for video plus a mediator, authoritative PBS video impressions, and first-price requests as a prerequisite. Comments on the spec are welcome there.

@aleksUIX

Copy link
Copy Markdown
Author

I read #1437 at 9836f37. I will leave this PR as the sketch until that spec finishes review round 2.

The branch should then follow the spec. Video stays off unless the provider opts in through media. Banner admission stays as on main. VAST is passed through after the structural check. Video plus a mediator is a configuration error. PBS video impressions are authoritative. First-price requests are a prerequisite.

Open questions 1–3 are still open, so I am not changing this branch yet.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support Video in OpenRTB requests

2 participants