From e71bfc03284402f43a4474e5f1019e96a1af5221 Mon Sep 17 00:00:00 2001 From: Sirajmx Date: Tue, 6 Oct 2026 16:28:01 +0530 Subject: [PATCH 1/3] Add app identity to properties for app and CTV inventory MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit § 5.2 properties can carry apps[] (platform, bundle, storeurl, domain), keyed as the OpenRTB 2.6 app object where one exists. Each property must carry domains, apps or both. The CTV example carries an app. Refs #15 --- examples/line-item-ctv.yaml | 9 ++++++++- spec/CHANGELOG.md | 3 +++ spec/openproposal-3.0.md | 16 +++++++++++++++- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/examples/line-item-ctv.yaml b/examples/line-item-ctv.yaml index fda3994..410aab2 100644 --- a/examples/line-item-ctv.yaml +++ b/examples/line-item-ctv.yaml @@ -2,7 +2,14 @@ line_item_id: "weather-app-ctv" status: published channel: ctv -properties: { available: [{ id: "weather-app" }], included: ["weather-app"] } +properties: + available: + - id: "weather-app" + apps: + - { platform: roku, bundle: "000000", + storeurl: "https://channelstore.roku.com/details/000000/weather-app", + domain: "weather-app.example" } + included: ["weather-app"] environments: { available: ["ctv"], included: ["ctv"] } formats: { available: ["ctv/instream-15s", "ctv/instream-30s"], included: ["ctv/instream-15s"], diff --git a/spec/CHANGELOG.md b/spec/CHANGELOG.md index 1dfacef..5d794e3 100644 --- a/spec/CHANGELOG.md +++ b/spec/CHANGELOG.md @@ -5,6 +5,9 @@ issue that caused it, so the comment record and the spec history line up. ## [Unreleased] +- § 5.2 — Properties can carry `apps[]` for app and CTV inventory, keyed as + OpenRTB 2.6 `app` ([#15](https://github.com/IABTechLab/OpenProposal/issues/15)). + ## [3.0-draft-1] — 2026-09-22 Initial draft published for public comment. Ported from the working-group diff --git a/spec/openproposal-3.0.md b/spec/openproposal-3.0.md index 6940958..9b0596a 100644 --- a/spec/openproposal-3.0.md +++ b/spec/openproposal-3.0.md @@ -222,10 +222,24 @@ channel. | Field | Type | Mutability | Description | | :--- | :--- | :--- | :--- | -| `properties` | Object | selectable | `available[]` of `{ id, name, domains, supported_formats }`, `included[]`, `pricing`, `max_select` | +| `properties` | Object | selectable | `available[]` of `{ id, name, domains, apps, supported_formats }`, `included[]`, `pricing`, `max_select`. Each property MUST carry `domains`, `apps` or both | | `content_detail` | Object | seller-set | Shows, series, sections, network verticals | | `environments` | Object | selectable | `available[]` from `web_desktop` \| `web_mobile` \| `app_mobile` \| `ctv` \| `dooh` \| `audio_streaming` | +**App identity.** `apps[]` identifies the apps behind a property sold in +`app_mobile` or `ctv`. Keys follow the OpenRTB 2.6 `app` object where one +exists. + +| Key | Required | Meaning | +| :--- | :--- | :--- | +| `platform` | REQUIRED | `ios` \| `android` \| `roku` \| `fire_tv` \| `samsung_tv` and other store platforms. No OpenRTB equivalent | +| `bundle` | REQUIRED | Store ID. As OpenRTB 2.6 `app.bundle` | +| `storeurl` | OPTIONAL | Store listing URL. As `app.storeurl` | +| `domain` | OPTIONAL | Developer domain. As `app.domain` | + +Seller authorisation for an app is checked through `app-ads.txt` on its +developer domain, not through the property's `domains`. + ### 5.3 Audience reach | Field | Type | Mutability | Description | From dc0e37c8890b1ad6f197fd4a9418b7b231fab454 Mon Sep 17 00:00:00 2001 From: Sirajmx Date: Thu, 8 Oct 2026 16:33:43 +0530 Subject: [PATCH 2/3] Make the app developer domain RECOMMENDED Without apps[].domain a buyer has nothing to run the app-ads.txt check against. RECOMMENDED (SHOULD) rather than a conditional REQUIRED, as the object has no field in which a seller claims app-ads.txt authorisation. Refs #15 --- spec/openproposal-3.0.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/openproposal-3.0.md b/spec/openproposal-3.0.md index 9b0596a..927ad3b 100644 --- a/spec/openproposal-3.0.md +++ b/spec/openproposal-3.0.md @@ -235,7 +235,7 @@ exists. | `platform` | REQUIRED | `ios` \| `android` \| `roku` \| `fire_tv` \| `samsung_tv` and other store platforms. No OpenRTB equivalent | | `bundle` | REQUIRED | Store ID. As OpenRTB 2.6 `app.bundle` | | `storeurl` | OPTIONAL | Store listing URL. As `app.storeurl` | -| `domain` | OPTIONAL | Developer domain. As `app.domain` | +| `domain` | RECOMMENDED | Developer domain, against which `app-ads.txt` is checked. As `app.domain` | Seller authorisation for an app is checked through `app-ads.txt` on its developer domain, not through the property's `domains`. From 63d86c097c930395545ad5423292953609d81e37 Mon Sep 17 00:00:00 2001 From: Sirajmx Date: Wed, 28 Oct 2026 21:20:21 +0530 Subject: [PATCH 3/3] Correct the developer domain and define platform as the issuing store - Rename apps[].domain to developer_domain, as #15 filed it. It is the developer domain from the store listing that app-ads.txt uses, not OpenRTB 2.6 app.domain, which is the domain of the app. - Define platform as the store that issued bundle, since a bundle is unique only within its store. - List apps[].platform and apps[].bundle in the Summary Representation (section 2.1), as #15 asked. Refs #15 --- examples/line-item-ctv.yaml | 2 +- spec/CHANGELOG.md | 3 ++- spec/openproposal-3.0.md | 7 ++++--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/examples/line-item-ctv.yaml b/examples/line-item-ctv.yaml index 410aab2..1e80500 100644 --- a/examples/line-item-ctv.yaml +++ b/examples/line-item-ctv.yaml @@ -8,7 +8,7 @@ properties: apps: - { platform: roku, bundle: "000000", storeurl: "https://channelstore.roku.com/details/000000/weather-app", - domain: "weather-app.example" } + developer_domain: "weather-app.example" } included: ["weather-app"] environments: { available: ["ctv"], included: ["ctv"] } formats: { available: ["ctv/instream-15s", "ctv/instream-30s"], diff --git a/spec/CHANGELOG.md b/spec/CHANGELOG.md index 5d794e3..b8c9300 100644 --- a/spec/CHANGELOG.md +++ b/spec/CHANGELOG.md @@ -6,7 +6,8 @@ issue that caused it, so the comment record and the spec history line up. ## [Unreleased] - § 5.2 — Properties can carry `apps[]` for app and CTV inventory, keyed as - OpenRTB 2.6 `app` ([#15](https://github.com/IABTechLab/OpenProposal/issues/15)). + OpenRTB 2.6 `app`, and the Summary Representation lists the app identifier + ([#15](https://github.com/IABTechLab/OpenProposal/issues/15)). ## [3.0-draft-1] — 2026-09-22 diff --git a/spec/openproposal-3.0.md b/spec/openproposal-3.0.md index 927ad3b..4ec6662 100644 --- a/spec/openproposal-3.0.md +++ b/spec/openproposal-3.0.md @@ -76,7 +76,8 @@ Every line item has two representations. sellers' shelves. A catalog response MAY return it. It MUST contain, per line item: -`line_item_id` · `channel` · `content_detail` · property names · +`line_item_id` · `channel` · `content_detail` · property names and +`apps[].platform` / `apps[].bundle` · `formats.included[]` · `pricing.cost_method` · `pricing.gross_rate` · `min_spend` · `addressable_scale` · `committed_metrics[]` · `transaction_mechanism` @@ -232,10 +233,10 @@ exists. | Key | Required | Meaning | | :--- | :--- | :--- | -| `platform` | REQUIRED | `ios` \| `android` \| `roku` \| `fire_tv` \| `samsung_tv` and other store platforms. No OpenRTB equivalent | +| `platform` | REQUIRED | The app store that issued `bundle`: `ios` (Apple App Store) \| `android` (Google Play) \| `roku` (Roku Channel Store) \| `fire_tv` (Amazon Appstore) \| `samsung_tv` (Samsung Apps TV) and other stores. A `bundle` is unique only within its store. No OpenRTB equivalent | | `bundle` | REQUIRED | Store ID. As OpenRTB 2.6 `app.bundle` | | `storeurl` | OPTIONAL | Store listing URL. As `app.storeurl` | -| `domain` | RECOMMENDED | Developer domain, against which `app-ads.txt` is checked. As `app.domain` | +| `developer_domain` | RECOMMENDED | Developer domain from the store listing, against which `app-ads.txt` is checked. No OpenRTB equivalent: not `app.domain`, which is the domain of the app | Seller authorisation for an app is checked through `app-ads.txt` on its developer domain, not through the property's `domains`.