Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
bd48eb8
ADS-112 document Ads channels
devin-ai-integration[bot] Jul 16, 2026
fe9c61c
ADS-112 clarify channel service fallbacks
devin-ai-integration[bot] Jul 16, 2026
08c307d
ADS-112 use autogenerated concepts sidebar, keep Getting started first
MaartenRimaux Jul 30, 2026
676c9a2
ADS-113 document ad breaks
devin-ai-integration[bot] Jul 16, 2026
dc9bc46
ADS-116 document ad templates
devin-ai-integration[bot] Jul 16, 2026
7d868de
ADS-114 document ad events
devin-ai-integration[bot] Jul 16, 2026
6594233
ADS-115 document marker detection
devin-ai-integration[bot] Jul 16, 2026
a542d76
ADS-117 document ad vendors
devin-ai-integration[bot] Jul 16, 2026
a05f03e
ADS-120 document break manifest
devin-ai-integration[bot] Jul 16, 2026
f8b7cff
ADS-112..120: add Vendors category and order concepts via sidebar_pos…
MaartenRimaux Jul 30, 2026
35101c5
ADS-112 rework channels concept per feedback
MaartenRimaux Jul 30, 2026
d06e795
ADS-112 rephrase integrations as SSAI with Google DAI
MaartenRimaux Jul 31, 2026
1a1b5de
ADS-112 move related resources to end with links
MaartenRimaux Jul 31, 2026
b75f7fb
ADS-112 channels feedback round 2
MaartenRimaux Jul 31, 2026
704e625
ADS-112 order related resources like sidebar
MaartenRimaux Jul 31, 2026
b2c876c
Restructure channels doc, rename Vendors to Integrations, move pollin…
devin-ai-integration[bot] Aug 10, 2026
a875612
Rewrite Ads breaks documentation to be customer-facing
MaartenRimaux Aug 14, 2026
d53bf9c
Rework templates page and align concept pages for customer-facing docs
MaartenRimaux Aug 14, 2026
91b493e
Rework events page sections per review feedback
MaartenRimaux Aug 14, 2026
6531d8e
Apply origins and break detection review feedback
MaartenRimaux Aug 14, 2026
c3024e0
Rework Break Manifest concept page for customer-facing docs
MaartenRimaux Aug 14, 2026
be8d12b
Rework Integrations overview page for customer-facing docs
MaartenRimaux Aug 14, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions ads/assets/img/break-manifest/side-loading.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
27 changes: 27 additions & 0 deletions ads/assets/img/breaks/break-lifecycle.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 8 additions & 0 deletions ads/assets/img/breaks/format-double.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 8 additions & 0 deletions ads/assets/img/breaks/format-lshape-ad.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 8 additions & 0 deletions ads/assets/img/breaks/format-lshape-content.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
7 changes: 7 additions & 0 deletions ads/assets/img/breaks/format-overlay.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 5 additions & 0 deletions ads/assets/img/breaks/format-single.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
81 changes: 81 additions & 0 deletions ads/concepts/break-manifest.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
---
sidebar_position: 7
sidebar_label: Break Manifest
---

# Break Manifest

The Break Manifest is the contract between the OptiView Ads backend and the player. It is a small JSON document that describes the ad breaks that are currently relevant for a [channel](/ads/concepts/channels), and the OptiView Player polls it to learn which breaks to prepare and play.

## Side-loading

The Break Manifest is **side-loaded**: it is served from its own endpoint, separately from the media manifest. The player fetches the media stream from your CDN as usual and, in parallel, polls the Break Manifest to drive ad break scheduling.

![Side-loading diagram](../assets/img/break-manifest/side-loading.svg)

Side-loading has some important advantages:

- **Streaming protocol independent.** Because the Break Manifest travels next to the stream instead of inside it, features do not have to be ported into an existing streaming protocol to support your use cases. It also allows us to bring features that are not possible today due to the limitations of those protocols.
- **Not in your critical path.** OptiView Ads never modifies your media manifest, so ad insertion cannot corrupt the stream and cause an outage the way an insertion platform writing wrong data into the media manifest can.
- **Minimal requirements on the stream.** The only thing the stream needs is time metadata to schedule the breaks against.

## Endpoint

The Break Manifest is served per channel:

```text
GET /manifest/v1/:orgId/channels/:channelId
```

The endpoint is a public read endpoint: it takes no authentication and is served with permissive CORS so that players and CDNs can fetch it directly.

```bash
curl 'https://us.markers.optiview.dolby.com/manifest/v1/org_123/channels/1f7f3a5a-9c2e-4a56-b1d4-3f8a2c9d6e01'
```

:::note Regional domains
The example uses the US region (`https://us.markers.optiview.dolby.com`). For the EU region, replace `us.` with `eu.` (`https://eu.markers.optiview.dolby.com`).
:::

Responses carry a `Cache-Control` header aligned with the channel's active polling interval, so a cached copy is never held longer than the fastest polling cadence the channel advertises.

## Manifest envelope

The Break Manifest document contains the following top-level properties:

| Property | Description |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `version` | The Break Manifest format version, following Semantic Versioning. Use it to guard against future format changes. |
| `channelId` | The identifier of the [channel](/ads/concepts/channels) this manifest serves. Players use it for reporting, analytics, and diagnostics. |
| `timebase` | How each break's `start` is expressed: `wallclock` (UTC ISO 8601 timestamp), `pts` (presentation timestamp), or `mediatime` (seconds from the start of a VOD asset). See [Channels](/ads/concepts/channels). |
| `polling` | How often the player should refresh the manifest. See [Polling](#polling). |
| `vendorConfiguration` | Session-level configuration per vendor integration — for example, the Google Ad Manager network code and custom asset key the player needs to create the stream session. |
| `breaks` | The breaks currently relevant for the channel. Each entry carries the break's schedule, controls, and variants — see [Breaks](./breaks.mdx) for what a break contains. |

Everything inside a break entry — `start`, `duration`, `resumeOffset`, `controls`, and `variant` — is described on the [Breaks](./breaks.mdx) page.

### Polling

The `polling` object advertises how often the player should refresh the manifest, with two cadences:

- **`polling.idle`** — the interval to poll at when no break is active. A slower cadence keeps request load low while nothing is happening. Default: `10` seconds.
- **`polling.active`** — the interval to poll at while a break is active. A faster cadence lets the player react quickly to duration changes, an early return, or late additions. Default: `1` second.

Both cadences are configured on the channel through its `pollingIdleSeconds` and `pollingActiveSeconds` settings.

### Which breaks are included

The Break Manifest reflects the breaks that are currently relevant for delivery, not the channel's entire break history:

- An upcoming break appears in the manifest ahead of its start, controlled by the channel's ad prefetch window (`adPrefetchMs`, default 10 seconds). This gives the player time to prepare the break before it starts.
- A past break remains included while its window still overlaps the channel's DVR window (`dvrWindowMs`, default 5 minutes), so viewers seeking back still get the break. Breaks that ended before the DVR look-back are dropped.
- Only fully prepared breaks are announced. Breaks that are still being prepared, [cued breaks](./breaks.mdx#cued-breaks) waiting to be punched, and failed breaks never appear — see the [break lifecycle](./breaks.mdx#break-lifecycle).

## Related resources

| Resource | Relationship |
| ------------------------------------------ | --------------------------------------------------------------------------------------------------- |
| [Getting started](/ads/getting-started/) | Integrating the OptiView Player that polls the Break Manifest. |
| [Channels](./channels.mdx) | The parent of the Break Manifest. The timebase and delivery window shape which breaks are included. |
| [Breaks](./breaks.mdx) | Scheduled or detected ad opportunities announced through the manifest. |
| [Integrations](../integrations/google.mdx) | Channel-level delivery integrations, such as Server-Side Ad Insertion with Google DAI. |
Loading