diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000000..f18a02c5d7 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,11 @@ +{ + "image": "mcr.microsoft.com/devcontainers/jekyll:2", + "customizations": { + "vscode": { + "extensions": [ + "rebornix.Ruby", + "DavidAnson.vscode-markdownlint" + ] + } + } +} \ No newline at end of file diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 62842de840..a395386038 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -4,6 +4,8 @@ Please give a short description and check the matching checkboxes to help us rev Please make the PR writeable. This allows us to fix typos, grammar and linting errors ourselves, which makes merging and reviewing a lot faster for everybody. + +⚠️ The documentation is merged after the related code changes are merged and release ⚠️ --> ## 🏷 Type of documentation diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f72c668240..4b63e8ff72 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,15 +15,15 @@ jobs: name: run markdownlint runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 - - uses: tj-actions/changed-files@v41 + - uses: tj-actions/changed-files@v46 id: changed-files with: files: '**/*.md' separator: "," - - uses: DavidAnson/markdownlint-cli2-action@v15 + - uses: DavidAnson/markdownlint-cli2-action@v16 if: steps.changed-files.outputs.any_changed == 'true' with: globs: "${{ steps.changed-files.outputs.all_changed_files }},!_includes" diff --git a/.github/workflows/code-path-changes.yml b/.github/workflows/code-path-changes.yml new file mode 100644 index 0000000000..23e0c19db6 --- /dev/null +++ b/.github/workflows/code-path-changes.yml @@ -0,0 +1,37 @@ +name: Notify Code Path Changes + +on: + pull_request_target: + types: [opened, synchronize] + paths: + - '**' + +env: + OAUTH2_CLIENT_ID: ${{ secrets.OAUTH2_CLIENT_ID }} + OAUTH2_CLIENT_SECRET: ${{ secrets.OAUTH2_CLIENT_SECRET }} + OAUTH2_REFRESH_TOKEN: ${{ secrets.OAUTH2_REFRESH_TOKEN }} + GITHUB_REPOSITORY: ${{ github.repository }} + GITHUB_PR_NUMBER: ${{ github.event.pull_request.number }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + +permissions: + contents: read + +jobs: + notify: + runs-on: ubuntu-latest + steps: + - name: Checkout Code + uses: actions/checkout@v3 + + - name: Set up Node.js + uses: actions/setup-node@v3 + with: + node-version: '18' + + - name: Install dependencies + run: npm install axios nodemailer + + - name: Run Notification Script + run: | + node .github/workflows/scripts/send-notification-on-change.js diff --git a/.github/workflows/scripts/codepath-notification b/.github/workflows/scripts/codepath-notification new file mode 100644 index 0000000000..f3857c7a79 --- /dev/null +++ b/.github/workflows/scripts/codepath-notification @@ -0,0 +1,18 @@ +# when a changed file paths matches the regex, send an alert email +# structure of the file is: +# +# javascriptRegex : email address +# +# For example, in the Prebid docs repo, the file pattern is generally +# +# /dev-docs/bidders/BIDDERCODE.md +# +# The aim is to find a minimal set of regex patterns that matches any file in these paths + +/dev-docs/bidders/rubicon : header-bidding@magnite.com +/dev-docs/bidders/ix : pdu-supply-prebid@indexexchange.com +/dev-docs/bidders/appnexus|/dev-docs/bidders/msft : prebid@microsoft.com +/dev-docs/bidders/pubmatic : header-bidding@pubmatic.com +/dev-docs/bidders/openx : prebid@openx.com +/dev-docs/bidders/teads : tech-ssp-video@teads.tv +/dev-docs/bidders/kargo : kraken@kargo.com diff --git a/.github/workflows/scripts/send-notification-on-change.js b/.github/workflows/scripts/send-notification-on-change.js new file mode 100644 index 0000000000..af79cefd29 --- /dev/null +++ b/.github/workflows/scripts/send-notification-on-change.js @@ -0,0 +1,139 @@ +// send-notification-on-change.js +// +// called by the code-path-changes.yml workflow, this script queries github for +// the changes in the current PR, checks the config file for whether any of those +// file paths are set to alert an email address, and sends email to multiple +// parties if needed + +const fs = require('fs'); +const path = require('path'); +const axios = require('axios'); +const nodemailer = require('nodemailer'); + +async function getAccessToken(clientId, clientSecret, refreshToken) { + try { + const response = await axios.post('https://oauth2.googleapis.com/token', { + client_id: clientId, + client_secret: clientSecret, + refresh_token: refreshToken, + grant_type: 'refresh_token', + }); + return response.data.access_token; + } catch (error) { + console.error('Failed to fetch access token:', error.response?.data || error.message); + process.exit(1); + } +} + +(async () => { + const configFilePath = path.join(__dirname, 'codepath-notification'); + const repo = process.env.GITHUB_REPOSITORY; + const prNumber = process.env.GITHUB_PR_NUMBER; + const token = process.env.GITHUB_TOKEN; + + // Generate OAuth2 access token + const clientId = process.env.OAUTH2_CLIENT_ID; + const clientSecret = process.env.OAUTH2_CLIENT_SECRET; + const refreshToken = process.env.OAUTH2_REFRESH_TOKEN; + + // validate params + if (!repo || !prNumber || !token || !clientId || !clientSecret || !refreshToken) { + console.error('Missing required environment variables.'); + process.exit(1); + } + + // the whole process is in a big try/catch. e.g. if the config file doesn't exist, github is down, etc. + try { + // Read and process the configuration file + const configFileContent = fs.readFileSync(configFilePath, 'utf-8'); + const configRules = configFileContent + .split('\n') + .filter(line => line.trim() !== '' && !line.trim().startsWith('#')) // Ignore empty lines and comments + .map(line => { + const [regex, email] = line.split(':').map(part => part.trim()); + return { regex: new RegExp(regex), email }; + }); + + // Fetch changed files from github + const [owner, repoName] = repo.split('/'); + const apiUrl = `https://api.github.com/repos/${owner}/${repoName}/pulls/${prNumber}/files`; + const response = await axios.get(apiUrl, { + headers: { + Authorization: `Bearer ${token}`, + Accept: 'application/vnd.github.v3+json', + }, + }); + + const changedFiles = response.data.map(file => file.filename); + console.log('Changed files:', changedFiles); + + // match file pathnames that are in the config and group them by email address + const matchesByEmail = {}; + changedFiles.forEach(file => { + configRules.forEach(rule => { + if (rule.regex.test(file)) { + if (!matchesByEmail[rule.email]) { + matchesByEmail[rule.email] = []; + } + matchesByEmail[rule.email].push(file); + } + }); + }); + + // Exit successfully if no matches were found + if (Object.keys(matchesByEmail).length === 0) { + console.log('No matches found. Exiting successfully.'); + process.exit(0); + } + + console.log('Grouped matches by email:', matchesByEmail); + + // get ready to email the changes + const accessToken = await getAccessToken(clientId, clientSecret, refreshToken); + + // Configure Nodemailer with OAuth2 + // service: 'Gmail', + const transporter = nodemailer.createTransport({ + host: "smtp.gmail.com", + port: 465, + secure: true, + auth: { + type: 'OAuth2', + user: 'info@prebid.org', + clientId: clientId, + clientSecret: clientSecret, + refreshToken: refreshToken, + accessToken: accessToken + }, + }); + + // Send one email per recipient + for (const [email, files] of Object.entries(matchesByEmail)) { + const emailBody = ` + ${email}, +

+ Files owned by you have been changed in open source ${repo}. The pull request is #${prNumber}. These are the files you own that have been modified: +

+ `; + + try { + await transporter.sendMail({ + from: `"Prebid Info" `, + to: email, + subject: `Files have been changed in open source ${repo}`, + html: emailBody, + }); + + console.log(`Email sent successfully to ${email}`); + console.log(`${emailBody}`); + } catch (error) { + console.error(`Failed to send email to ${email}:`, error.message); + } + } + } catch (error) { + console.error('Error:', error.message); + process.exit(1); + } +})(); diff --git a/ADS - Acceso directo.lnk b/ADS - Acceso directo.lnk new file mode 100644 index 0000000000..192bf02077 Binary files /dev/null and b/ADS - Acceso directo.lnk differ diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000000..028d81b2c6 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,7 @@ +# Agent Guidelines + +- Run `markdownlint` on any edited Markdown files using the repository configuration with `markdownlint --config .markdownlint.json README.md`. Replace `README.md` with each file you change. +- If lint errors occur, fix them before creating a pull request. +- Verify the site builds with `bundle exec jekyll build` when possible. +- Please name your branch to include codex or agent in the branch name +- If you cannot run markdownlint please warn your user to setup their environment using the instructions in README.md and document your failure in your pr description diff --git a/Gemfile b/Gemfile index 4d0186505c..752b337f20 100755 --- a/Gemfile +++ b/Gemfile @@ -1,4 +1,4 @@ source 'https://rubygems.org' gem 'github-pages', '>= 228' - +gem 'ffi', '1.16.3' gem "webrick", "~> 1.7" diff --git a/README.md b/README.md index 3825aa02c9..744af1333d 100755 --- a/README.md +++ b/README.md @@ -112,6 +112,26 @@ This means an adaptor is not available to download from Prebid.org as soon as th * [jekyll - check for non empty](https://michaelcurrin.github.io/dev-cheatsheets/cheatsheets/jekyll/liquid/conditionals/non-empty.html) +## Codex + +To get started with Codex with Ruby 3.4.4 preinstalled on this repo, you can set up your environment like this + +```bash +echo "3.4.4" > .ruby-version +export NOKOGIRI_USE_SYSTEM_LIBRARIES=1 +gem install jekyll bundler +npm install boostrap +gem install github-pages --no-document --force +npm install -g markdownlint-cli +bundle install +``` + +Codex can then check for linting success with + +```bash +markdownlint --config .markdownlint.json "**/*.md" +``` + ## Thanks Many thanks to the following people who have submitted content to Prebid.org. We really appreciate the help! diff --git a/_data/sidebar.yml b/_data/sidebar.yml index 892a9936d1..b06ea827e5 100644 --- a/_data/sidebar.yml +++ b/_data/sidebar.yml @@ -43,6 +43,14 @@ sectionTitle: subgroup: 0 +- sbSecId: 0 + title: Statement on Sustainability + link: /overview/statement-on-sustainability.html + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 0 + - sbSecId: 0 title: Developers link: /developers.html @@ -227,7 +235,7 @@ - sbSecId: 1 title: Native Ads - link: /formats/native.html + link: /dev-docs/examples/native-ad-example.html isHeader: 0 isSectionHeader: 0 sectionTitle: @@ -250,21 +258,13 @@ subgroup: 1 - sbSecId: 1 - title: Running without an ad server + title: Running Prebid.js as an ad server link: /dev-docs/examples/no-adserver.html isHeader: 0 isSectionHeader: 0 sectionTitle: subgroup: 1 -- sbSecId: 1 - title: Legacy Browser Example - link: /dev-docs/examples/legacy-browser-example.html - isHeader: 0 - isSectionHeader: 0 - sectionTitle: - subgroup: 1 - - sbSecId: 1 title: Using Prebid.js with Microsoft Monetize Ad Server link: /dev-docs/examples/use-prebid-with-appnexus-ad-server.html @@ -316,6 +316,15 @@ sectionTitle: subgroup: 1 +- sbSecId: 1 + title: In-renderer Integration + link: /dev-docs/examples/in-renderer-integration.html + Item: 1 + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 1 + - sbSecId: 1 title: Troubleshooting link: @@ -390,6 +399,14 @@ sectionTitle: subgroup: 3 +- sbSecId: 1 + title: Renderer + link: /dev-docs/renderer.html + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 3 + - sbSecId: 1 title: Bidder Params link: /dev-docs/bidders.html @@ -441,6 +458,14 @@ sectionTitle: subgroup: 4 +- sbSecId: 1 + title: How to Add A User ID submodule + link: /dev-docs/userId-module.html + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 4 + - sbSecId: 1 title: How to Add a Prebid.js Video submodule link: /dev-docs/add-video-submodule.html @@ -498,6 +523,14 @@ sectionTitle: subgroup: 5 +- sbSecId: 1 + title: User ID Modules + link: /dev-docs/modules/index.html#user-id-modules + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 5 + - sbSecId: 1 title: External Interfaces link: @@ -642,6 +675,14 @@ sectionTitle: subgroup: 0 +- sbSecId: 2 + title: Prebid Mobile 3.0 + link: /prebid-mobile/updates-3.0/sdk-key-features.html + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 0 + - sbSecId: 2 title: Prebid AMP link: /dev-docs/show-prebid-ads-on-amp-pages.html @@ -735,7 +776,7 @@ subgroup: 2 - sbSecId: 2 - title: GAM Original Integration + title: GAM Bidding-Only Integration link: /prebid-mobile/pbm-api/ios/ios-sdk-integration-gam-original-api.html isHeader: 0 isSectionHeader: 0 @@ -743,8 +784,8 @@ subgroup: 2 - sbSecId: 2 - title: Custom or No mediation - link: /prebid-mobile/modules/rendering/ios-sdk-integration-pb.html + title: GAM Prebid-Rendered Integration + link: /prebid-mobile/modules/rendering/ios-sdk-integration-gam.html isHeader: 0 isSectionHeader: 0 sectionTitle: @@ -767,13 +808,21 @@ subgroup: 2 - sbSecId: 2 - title: GAM Rendering Integration - link: /prebid-mobile/modules/rendering/ios-sdk-integration-gam.html + title: Custom Integration + link: /prebid-mobile/modules/rendering/ios-sdk-integration-pb.html isHeader: 0 isSectionHeader: 0 sectionTitle: subgroup: 2 +- sbSecId: 2 + title: Ad Experience Specification + link: /prebid-mobile/modules/rendering/combined-ui-ux-policy.html + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 2 + - sbSecId: 2 title: Ad Experience Controls link: /prebid-mobile/modules/rendering/combined-ad-experience-controls.html @@ -790,6 +839,30 @@ sectionTitle: subgroup: 2 +- sbSecId: 2 + title: Prebid Plugin Renderer + link: /prebid-mobile/pbm-api/ios/pbm-plugin-renderer.html + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 2 + +- sbSecId: 2 + title: Prebid Mobile 3.0 API Changes + link: /prebid-mobile/updates-3.0/ios/api-changes.html + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 2 + +- sbSecId: 2 + title: API Reference + link: /prebid-mobile-ios/index.html + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 2 + - sbSecId: 2 title: "For Android" link: @@ -809,14 +882,14 @@ - sbSecId: 2 title: Global Parameters - link: /prebid-mobile/pbm-api/android/pbm-targeting-params-android.html + link: /prebid-mobile/pbm-api/android/pbm-targeting-android.html isHeader: 0 isSectionHeader: 0 sectionTitle: subgroup: 3 - sbSecId: 2 - title: GAM Original Integration + title: GAM Bidding-Only Integration link: /prebid-mobile/pbm-api/android/android-sdk-integration-gam-original-api.html isHeader: 0 isSectionHeader: 0 @@ -824,8 +897,8 @@ subgroup: 3 - sbSecId: 2 - title: Custom or No mediation - link: /prebid-mobile/modules/rendering/android-sdk-integration-pb.html + title: GAM Prebid-Rendered Integration + link: /prebid-mobile/modules/rendering/android-sdk-integration-gam.html isHeader: 0 isSectionHeader: 0 sectionTitle: @@ -848,8 +921,16 @@ subgroup: 3 - sbSecId: 2 - title: GAM Rendering Integration - link: /prebid-mobile/modules/rendering/android-sdk-integration-gam.html + title: Custom Integration + link: /prebid-mobile/modules/rendering/android-sdk-integration-pb.html + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 3 + +- sbSecId: 2 + title: Ad Experience Specification + link: /prebid-mobile/modules/rendering/combined-ui-ux-policy.html isHeader: 0 isSectionHeader: 0 sectionTitle: @@ -879,6 +960,22 @@ sectionTitle: subgroup: 3 +- sbSecId: 2 + title: Prebid Mobile 3.0 API Changes + link: /prebid-mobile/updates-3.0/android/api-changes.html + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 3 + +- sbSecId: 2 + title: API Reference + link: /prebid-mobile-android/index.html + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 3 + #--------------Ad Ops--------------| - sbSecId: 3 @@ -974,6 +1071,14 @@ sectionTitle: subgroup: 1 +- sbSecId: 3 + title: 'Prebid Mobile AdOps' + link: /adops/mobile-adops.html + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 1 + - sbSecId: 3 title: "Ad Ops Information" link: @@ -1042,7 +1147,7 @@ subgroup: 2 - sbSecId: 3 - title: 'Creative Setup: Banner/Outstream/AMP' + title: 'Creative Setup: Banner/In-Renderer/AMP' link: /adops/gam-creative-banner-sbs.html isHeader: 0 isSectionHeader: 0 @@ -1066,7 +1171,7 @@ subgroup: 2 - sbSecId: 3 - title: "Setting up Order for Mobile Rendering API" + title: "Mobile: Setting up GAM for Prebid-Rendered" link: /adops/mobile-rendering-gam-line-item-setup.html isHeader: 0 isSectionHeader: 0 @@ -1487,16 +1592,16 @@ subgroup: 3 - sbSecId: 5 - title: Programmatic Guaranteed - link: /prebid-server/features/pg/pbs-pg-idx.html + title: Modules + link: /prebid-server/pbs-modules/ isHeader: 0 isSectionHeader: 0 sectionTitle: subgroup: 3 - sbSecId: 5 - title: Modules - link: /prebid-server/pbs-modules/ + title: Prebid Cache Storage + link: /prebid-server/features/pbs-pbc-storage.html isHeader: 0 isSectionHeader: 0 sectionTitle: @@ -1722,6 +1827,14 @@ sectionTitle: subgroup: 0 +- sbSecId: 6 + title: Connected TV + link: /formats/ctv.html + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 0 + - sbSecId: 6 title: Native link: /prebid/native-implementation.html @@ -1784,6 +1897,22 @@ sectionTitle: subgroup: 0 +- sbSecId: 7 + title: FAQs + link: /faq/faq.html + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 0 + +- sbSecId: 7 + title: Blog + link: https://prebid.org/blog/ + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 0 + - sbSecId: 7 title: Privacy Resources link: @@ -1801,7 +1930,7 @@ subgroup: 1 - sbSecId: 7 - title: Prebid and MSPA + title: Prebid US Compliance link: /features/mspa-usnat.html isHeader: 0 isSectionHeader: 0 @@ -1815,20 +1944,22 @@ subgroup: 1 - sbSecId: 7 - title: FAQs - link: /faq/faq.html - isHeader: 0 + title: Sustainability Resources + link: + isHeader: 1 + headerId: sustainability isSectionHeader: 0 sectionTitle: - subgroup: 0 + subgroup: 2 - sbSecId: 7 - title: Blog - link: https://prebid.org/blog/ + title: Sustainability Portal + link: /support/sustainability-portal.html isHeader: 0 isSectionHeader: 0 sectionTitle: - subgroup: 0 + subgroup: 2 + #-------------- Tools --------------| diff --git a/_includes/astjs.html b/_includes/astjs.html new file mode 100644 index 0000000000..f850b09ec6 --- /dev/null +++ b/_includes/astjs.html @@ -0,0 +1,6 @@ + + diff --git a/_includes/body-end.html b/_includes/body-end.html index e8bcc5edb4..86bfd1bc1a 100644 --- a/_includes/body-end.html +++ b/_includes/body-end.html @@ -1,6 +1,6 @@ + + {{ include.html }} + + +
+
{{ include.html | xml_escape}}
+
+
+
{{ include.js }}
+
+
+
<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <meta http-equiv="X-UA-Compatible" content="ie=edge">
+    <title>{{ page.title }}</title>
+
+    <!-- required scripts -->
+    {% assign scripts = include.scripts | split: "," %}{% for script in scripts %}{% if script == "pbjs" %}<script async src="https://cdn.jsdelivr.net/npm/prebid.js@latest/dist/not-for-prod/prebid.js"></script>
+    {% elsif script == "gpt" %}<script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script>
+    {% elsif script == "astjs" %}<script async src="https://adsdk.microsoft.com/ast/ast.js"></script>{% else %}<!-- unknown script tag '{{ script }}' required -->{% endif %}{% else %}<script async src="//cdn.jsdelivr.net/npm/prebid.js@latest/dist/not-for-prod/prebid.js"></script>
+    <script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script>{% endfor %}
+  </head>
+  <body>
+  
+  <!-- javascript -->
+  <script>{{ include.js }}</script>
+
+  <!-- html -->
+  {{ include.html | xml_escape}}
+  </body>
+</html>
+    
+
+ + diff --git a/_includes/default-keyword-targeting.md b/_includes/default-keyword-targeting.md index fc733bd2cb..d9f1de06ba 100644 --- a/_includes/default-keyword-targeting.md +++ b/_includes/default-keyword-targeting.md @@ -1,7 +1,9 @@ +# Default Keyword Targeting + {: .table .table-bordered .table-striped } -| Default Key | Scope | Description | Example | -| :---- |:---- | :---- | :---- | -| `hb_pb` | Required | The price bucket. Used by the line item to target. | `2.10` | -| `hb_adid` | Required | The ad Id. Used by the ad server creative to render ad. | `234234` | -| `hb_bidder` | Required | The bidder code. Used for logging and reporting to learn which bidder has higher fill rate/CPM. | `rubicon` | +| Default Key | Scope | Description | Example | +| :---- |:---- | :---- | :---- | +| `hb_pb` | Required | The price bucket. Used by the line item to target. | `2.10` | +| `hb_adid` | Required | The ad Id. Used by the ad server creative to render ad. | `234234` | +| `hb_bidder` | Required | The bidder code. Used for logging and reporting to learn which bidder has higher fill rate/CPM. | `rubicon` | diff --git a/_includes/dev-docs/bidder-meta-data.html b/_includes/dev-docs/bidder-meta-data.html index 734f9bbff4..4fd1a4da92 100644 --- a/_includes/dev-docs/bidder-meta-data.html +++ b/_includes/dev-docs/bidder-meta-data.html @@ -54,14 +54,18 @@ {% if page.fpd_supported == true %}yes{% elsif page.fpd_supported == false %}no{% else %}check with bidder{% endif %} - User IDs - {% if page.userIds and page.userIds != '' %}{{page.userIds}}{% else %}none{% endif %} + Endpoint Compression + {% if page.endpoint_compression == true %}yes{% elsif page.endpoint_compression == false %}no{% else %}check with bidder{% endif %} ORTB Blocking Support {% if page.ortb_blocking_supported == true %}yes{% elsif page.ortb_blocking_supported == false %}no{% elsif page.ortb_blocking_supported == 'partial' %}partial{% else %}check with bidder{% endif %} + User IDs + {% if page.userIds and page.userIds != '' %}{{page.userIds}}{% else %}none{% endif %} Privacy Sandbox {% if page.privacy_sandbox %}{{page.privacy_sandbox}}{% else %}check with bidder{% endif %} + + {% if page.pbs == true %} Prebid Server App Support {% if page.pbs_app_supported == false %}no{% elsif page.pbs_app_supported == true %}yes{% else %}check with bidder{% endif %} @@ -69,6 +73,8 @@ {% endif %} + + diff --git a/_includes/dev-docs/fingerprinting.md b/_includes/dev-docs/fingerprinting.md new file mode 100644 index 0000000000..0c230d30ec --- /dev/null +++ b/_includes/dev-docs/fingerprinting.md @@ -0,0 +1,2 @@ +{: .alert.alert-warning :} +This adapter uses JavaScript APIs commonly used in fingerprinting and may get your Prebid build flagged as a fingerprinting script. \ No newline at end of file diff --git a/_includes/dev-docs/native-assets.md b/_includes/dev-docs/native-assets.md index 912b0e62ee..58468731cc 100644 --- a/_includes/dev-docs/native-assets.md +++ b/_includes/dev-docs/native-assets.md @@ -1,3 +1,4 @@ + {: .table .table-bordered .table-striped } | Asset Code | Description | Macro | |---------------+--------------------------------------------------------------------------------------|-----------------------| @@ -9,8 +10,8 @@ | `image` | A picture that is associated with the brand, or grabs the user's attention. | `##hb_native_image##` | | `clickUrl` | Where the user will end up if they click the ad. | `##hb_native_linkurl##` | | `displayUrl` | Text that can be displayed instead of the raw click URL. e.g, "Example.com/Specials" | `##hb_native_displayUrl##`| -| `privacyLink` | Link to the Privacy Policy of the Buyer, e.g. http://example.com/privacy | `##hb_native_privacy##` | -| `privacyIcon` | Icon to display for the privacy link, e.g. http://example.com/privacy_icon.png | `##hb_native_privicon##` | +| `privacyLink` | Link to the Privacy Policy of the Buyer, e.g. | `##hb_native_privacy##` | +| `privacyIcon` | Icon to display for the privacy link, e.g. | `##hb_native_privicon##` | | `cta` | *Call to Action* text, e.g., "Click here for more information". | `##hb_native_cta##` | | `rating` | Rating information, e.g., "4" out of 5. | `##hb_native_rating##` | | `downloads` | The total downloads of the advertised application/product | `##hb_native_downloads##` | diff --git a/_includes/dev-docs/storageAllowed.md b/_includes/dev-docs/storageAllowed.md new file mode 100644 index 0000000000..ad0de11d01 --- /dev/null +++ b/_includes/dev-docs/storageAllowed.md @@ -0,0 +1,2 @@ +{: .alert.alert-info :} +Prebid note: please review with your legal counsel before enabling storageAllowed. Bidders utilizing browser storage may trigger the need for additional disclosures in your privacy policy and may imply that the bid adapter is performing an activity redundant with user ID systems like SharedID. See the ePrivacy Directive article 5(3) reference to 'comprehensive information'. diff --git a/_includes/dev-docs/vendor-exception.md b/_includes/dev-docs/vendor-exception.md new file mode 100644 index 0000000000..65979daf1f --- /dev/null +++ b/_includes/dev-docs/vendor-exception.md @@ -0,0 +1,3 @@ +{: .alert.alert-warning :} +Prebid.org recommends working with a privacy lawyer before making enforcement exceptions for any vendor. +{% if include.gvlId %}We recommend publishers let Prebid.js make use of their registered GVL ID {{ include.gvlId }} instead of a vendor exception.{% endif %} diff --git a/_includes/disqus_addon.html b/_includes/disqus_addon.html deleted file mode 100644 index 0a6d69eaab..0000000000 --- a/_includes/disqus_addon.html +++ /dev/null @@ -1,5 +0,0 @@ - - - -
- diff --git a/_includes/icon__format--ctv.svg b/_includes/icon__format--ctv.svg new file mode 100644 index 0000000000..9c018e0d38 --- /dev/null +++ b/_includes/icon__format--ctv.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_includes/mobile/adunit-config-android.md b/_includes/mobile/adunit-config-android.md new file mode 100644 index 0000000000..f469856135 --- /dev/null +++ b/_includes/mobile/adunit-config-android.md @@ -0,0 +1,116 @@ +Each ad unit in the Original API is a subclass of the `AdUnit` class, which provides the following properties and methods for additional configuration. + +### Arbitrary OpenRTB + +(requires SDK v2.3.1) + +Prebid SDK allows the customization of the OpenRTB request on the impression level using the `setImpORTBConfig()` function: + +``` kotlin +adUnit.setImpOrtbConfig( + "{" + + " \"bidfloor\": 0.01," + + " \"banner\": {" + + " \"battr\": [1,2,3,4]" + + " }" + + "}" +); +``` + +The parameter passed to `setImpOrtbConfig()` will be merged into the respective `imp` object for this Ad Unit. For instance, the above example will add the `$.imp[0].bidfloor` and `$.imp[0].banner.battr` parameters to the bid request. + +To empty out a previously provided impression config, just set it to the empty string: + +``` swift +adUnit.setImpOrtbConfig("") +``` + +### Auto Refresh + +#### setAutoRefreshPeriodMillis +{:.no_toc} + +{: .alert.alert-warning :} +Starting from PrebidMobile `3.0.0` the `setAutoRefreshPeriodMillis` method is removed. Use the `setAutoRefreshInterval` method instead. + +If set on a given Prebid Mobile ad unit, the `fetchDemand` function will be called every `periodMillis` until `stopAutoRefresh` is called. Each call to `fetchDemand` will invoke the `onComplete` function. This refresh only pertains to Prebid Mobile and not to any ad server refresh processes. It is suggested that the adServers refresh be turned off. + +**Parameters** + +- `periodMillis`: Integer defining the refresh time in milliseconds. + +#### setAutoRefreshInterval +{:.no_toc} + +If set on a given Prebid Mobile ad unit, the `fetchDemand` function will be called every `periodMillis` until `stopAutoRefresh` is called. Each call to `fetchDemand` will invoke the `onComplete` function. This refresh only pertains to Prebid Mobile and not to any ad server refresh processes. It is suggested that the adServers refresh be turned off. + +**Parameters** + +- `seconds`: Integer defining the refresh time in seconds. + +#### startAutoRefresh +{:.no_toc} + +Starts the auto-refresh behavior for a given Prebid Mobile ad unit. + +#### stopAutoRefresh +{:.no_toc} + +Halts the auto-refresh behavior for a given Prebid Mobile ad unit. If no auto-refresh behavior has been set, `stopAutoRefresh` will be ignored. + +### GPID + +(requires SDK v2.1.6) + +The Global Placement ID (GPID) is a key that uniquely identifies a specific instance of an adunit. Some bidders require this value. An important scenario is "infinite scroll" -- if your app creates instances +of an adunit dynamically as the user scrolls through content, the the GPID must be different for each by appending some kind of sequence or ID. e.g. "/newsfeed#7" + +Using the following method, you can set the impression-level [GPID](https://docs.prebid.org/features/pbAdSlot.html#the-gpid) value to the bid request: + +``` kotlin +adUnit?.gpid = "/36117602/hnp-sfgate.com/Homepage/AP300" +``` + +### Ad Position + +The `adPosition` property allows developers to specify the position of the ad within the publisher's content. This property maps to the `pos` field in the OpenRTB specification under the `imp[].banner` or `imp[].video` objects, depending on the ad format. The possible values for this field could be found in the [respective specification](https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/main/AdCOM%20v1.0%20FINAL.md#list--placement-positions-). + +You can set `adPosition` by using the following method: + +```kotlin +adUnit.setAdPosition(AdPosition.FOOTER); +``` + + +### Native Impression Tracking + +The SDK offers an API that enables impression tracking for the following ad unit types: `BannerAdUnit`, `InterstitialAdUnit`, and `PrebidAdUnit`. An example implementation is provided below: + +`BannerAdUnit`: + +```kotlin +val adView = AdManagerAdView(this) +val adUnit = BannerAdUnit(CONFIG_ID, WIDTH, HEIGHT) +adUnit.activatePrebidImpressionTracker(adView) +``` + +`InterstitialAdUnit`: + +```kotlin +val adUnit = InterstitialAdUnit(CONFIG_ID, 80, 60) +adUnit.activateInterstitialPrebidImpressionTracker() +``` + +`PrebidAdUnit`: + +```kotlin +val prebidAdUnit = PrebidAdUnit(configId) + +// Use this method for banners +prebidAdUnit.activatePrebidImpressionTracker(adView) + +// Use this method for interstitials +prebidAdUnit.activateInterstitialPrebidImpressionTracker() +``` + +**NOTE**: The SDK support only `seatbid[].bid[].burl` as impression tracking URL for now. \ No newline at end of file diff --git a/_includes/mobile/adunit-config-ios.md b/_includes/mobile/adunit-config-ios.md new file mode 100644 index 0000000000..f3e4871d7b --- /dev/null +++ b/_includes/mobile/adunit-config-ios.md @@ -0,0 +1,151 @@ +Each ad unit in the original integration method is a subclass of the `AdUnit` class, which provides the following properties and methods for the additional configuration. + +### Arbitrary OpenRTB + +(requires SDK v2.3.1) + +Prebid SDK allows the customization of the OpenRTB request on the ad unit level using the `setImpORTBConfig()` function: + +``` swift +adUnit.setImpORTBConfig("{\"bidfloor\":0.01,\"banner\":{\"battr\":[1,2,3,4]}}") +``` + +The parameter passed to `setImpORTBConfig()` will be merged into the respective `imp` object for this Ad Unit. For instance, the above example will add the `$.imp[0].bidfloor` and `$.imp[0].banner.battr` parameters to the bid request. + +To empty out a previously provided impression config, just set it to the empty string: + +``` swift +adUnit.setImpORTBConfig("") +``` + +### Autorefresh + +#### setAutoRefreshMillis +{:.no_toc} + +If set on a given banner ad unit, the `fetchDemand` function will be called every `periodMillis` until `stopAutoRefresh` is called. Each call to `fetchDemand` will invoke the `onComplete` function. This refresh only pertains to Prebid Mobile and not to any ad server refresh processes. It is suggested that the adServes refresh be turned off. + +#### stopAutoRefresh +{:.no_toc} + +Halts the auto-refresh behavior for a given Prebid Mobile ad unit. If no auto-refresh behavior has been set, `stopAutoRefresh` will be ignored. + +#### resumeAutoRefresh +{:.no_toc} + +Resumes a stopped autorefresh for the ad unit with the previously-defined autorefresh value. + +### GPID + +(requires SDK v2.1.6) + +The Global Placement ID (GPID) is a key that uniquely identifies a specific instance of an adunit. Some bidders require this value. An important scenario is "infinite scroll" -- if your app creates instances +of an adunit dynamically as the user scrolls through content, the the GPID must be different for each by appending some kind of sequence or ID. e.g. "/newsfeed#7" + +Using the following method, you can set the impression-level [GPID](https://docs.prebid.org/features/pbAdSlot.html#the-gpid) value to the bid request: + +``` swift +adUnit.setGPID("/36117602/hnp-sfgate.com/Homepage/AP300") +``` + +### Ad Position + +The `adPosition` property allows developers to specify the position of the ad within the publisher's content. This property maps to the `pos` field in the OpenRTB specification under the `imp[].banner` or `imp[].video` objects, depending on the ad format. The possible values for this field could be found in the [respective specification](https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/main/AdCOM%20v1.0%20FINAL.md#list--placement-positions-). + +You can set `adPosition` by using the following property: + +```swift +adUnit.adPosition = .footer +``` + +### Native Impression Tracking + +The SDK offers an API that enables impression tracking for the following ad unit types: `BannerAdUnit`, `InterstitialAdUnit`, and `PrebidAdUnit`. An example implementation is provided below: + +`BannerAdUnit`: + +```swift +let adUnit = BannerAdUnit(configId: CONFIG_ID, size: AD_SIZE) +let gamBanner = GAMBannerView(adSize: GADAdSizeFromCGSize(AD_SIZE)) +adUnit.activatePrebidImpressionTracker(adView: gamBanner) +``` + +`InterstitialAdUnit`: + +```swift +let adUnit = InterstitialAdUnit(configId: CONFIG_ID, minWidthPerc: 50, minHeightPerc: 70) +adUnit.activatePrebidImpressionTracker() +``` + +`PrebidAdUnit`: + +```swift +let adUnit = PrebidAdUnit(configId: CONFIG_ID) + +// Use this method for intersitials +adUnit.activatePrebidInterstitialImpressionTracker() + +// Use this method for banners +let gamBanner = GAMBannerView(adSize: GADAdSizeFromCGSize(AD_SIZE)) +adUnit.activatePrebidAdViewImpressionTracker(adView: gamBanner) +``` + +**NOTE**: The SDK support only `seatbid[].bid[].burl` as impression tracking URL for now. + +### SKAdNetwork + +The SDK supports two SKAdNetwork methods for ad networks to deliver ads in a bidding-only scenario, specifically for **banner** and **native** ad formats: + +- View-through ads +- StoreKit-rendered ads + +Both methods are automatically enabled for the **native** ad format, with no additional configuration required. The support of view-through ads is also automatically enabled for the **banner** ad format. However, in order to activate StoreKit-rendered ads flow, you must call a method appropriate to the case: + +`BannerAdUnit`: + +```swift +let gamBanner = GAMBannerView(adSize: GADAdSizeFromCGSize(AD_SIZE)) +adUnit.activatePrebidSKAdNetworkStoreKitAdsFlow(adView: gamBanner) +``` + +`InterstitialAdUnit`: + +```swift +adUnit.activatePrebidSKAdNetworkStoreKitAdsFlow() +``` + +`PrebidAdUnit`: + +```swift +let adUnit = PrebidAdUnit(configId: CONFIG_ID) + +// Use this method for intersitials +adUnit.activatePrebidInterstitialSKAdNetworkStoreKitAdsFlow() + +// Use this method for banners +let gamBanner = GAMBannerView(adSize: GADAdSizeFromCGSize(AD_SIZE)) +adUnit.activatePrebidBannerSKAdNetworkStoreKitAdsFlow(adView: gamBanner) +``` + +#### SKOverlay + +The SDK also provides support of SKOverlay for interstitials. In order to activate it, set `supportSKOverlay` to `true`: + +```swift +adUnit.supportSKOverlay = true +``` + +You should also call the method below when you are about to show the ad: + +```swift +// Present SKOverlay if available +adUnit.activateSKOverlayIfAvailable() +// Present the interstitial +gamInterstitial.present(from: controller) +``` + +In order to dismiss SKOverlay, use the method below: + +```swift +adUnit.dismissSKOverlayIfAvailable() +``` diff --git a/_includes/mobile/banner-params.md b/_includes/mobile/banner-params.md new file mode 100644 index 0000000000..64129178cb --- /dev/null +++ b/_includes/mobile/banner-params.md @@ -0,0 +1,23 @@ +Using the `BannerParameters` object you can customize the bid request for banner ads. + +{: .alert.alert-warning :} +Starting from PrebidMobile `2.1.0` the `BannerBaseAdUnit.Parameters` class is deprecated. Use `BannerParameters` instead. + +#### adSizes + +Defines the OpenRTB banner.formats array. + +#### interstitialMinWidthPerc and interstitialMinHeightPerc +{:.no_toc} + +For interstitials only, these define which sizes Prebid Server will choose to send to bidders. See [Prebid Server interstitial support](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#interstitial-support). If this option is used, you'll need to set the size to 1x1. + +#### api +{:.no_toc} + +The `api` property is dedicated to adding values for API Frameworks to bid response according to the [OpenRTB 2.6](https://iabtechlab.com/wp-content/uploads/2022/04/OpenRTB-2-6_FINAL.pdf) spec. The supported values for GMA SDK integration are: + +- `3` or `Signals.Api.MRAID_1` : MRAID-1 support signal +- `5` or `Signals.Api.MRAID_2` : MRAID-2 support signal +- `6` or `Signals.Api.MRAID_3` : MRAID-3 support signal +- `7` or `Signals.Api.OMID_1` : signals OMSDK support diff --git a/_includes/mobile/gam-native-adops.html b/_includes/mobile/gam-native-adops.html index 07bba2763c..896a280030 100644 --- a/_includes/mobile/gam-native-adops.html +++ b/_includes/mobile/gam-native-adops.html @@ -20,7 +20,7 @@

hb_native_title
hb_native_brand
- + \ No newline at end of file + diff --git a/_includes/send-all-bids-keyword-targeting.md b/_includes/send-all-bids-keyword-targeting.md index f8f977684d..2ba6d4d662 100644 --- a/_includes/send-all-bids-keyword-targeting.md +++ b/_includes/send-all-bids-keyword-targeting.md @@ -1,8 +1,11 @@ +# Send-All-Bids Keyword Targeting + **Important:** Google Ad Manager has a key-value key character [limit](https://support.google.com/dfp_premium/answer/1628457?hl=en#Key-values) of up to **20 characters**. Some of the keys without truncation will exceed 20 chars. Prebid.js automatically truncates the key length to 20 characters. For example, `hb_adid_longBidderName` is truncated to `hb_adid_longBidderNa` (`me` is truncated). Note that the key is case-sensitive. To get the exact key-value keys for each bidder, find them at [Bidder Params](/dev-docs/bidders.html). {: .table .table-bordered .table-striped } -| Default Key | Scope | Description | Example | -| :---- |:---- | :---- | :---- | -| `hb_pb_BIDDERCODE` | Required | The price bucket. Used by the line item to target. Case sensitive and truncated to 20 chars. The `BIDDERCODE` is documented at [Bidder Params](/dev-docs/bidders.html). | `hb_pb_rubicon` = `2.10` | -| `hb_adid_BIDDERCODE` | Required | The ad Id. Used by the ad server creative to render ad. Case sensitive and truncated to 20 chars. The `BIDDERCODE` is documented at [Bidder Params](/dev-docs/bidders.html). | `hb_adid_longBidderNa` = `234234` | + +| Default Key | Scope | Description | Example | +| :---- | :---- | :---- | :---- | +| `hb_pb_BIDDERCODE` | Required | The price bucket. Used by the line item to target. Case sensitive and truncated to 20 chars. The `BIDDERCODE` is documented at [Bidder Params](/dev-docs/bidders.html). | `hb_pb_rubicon` = `2.10` | +| `hb_adid_BIDDERCODE` | Required | The ad Id. Used by the ad server creative to render ad. Case sensitive and truncated to 20 chars. The `BIDDERCODE` is documented at [Bidder Params](/dev-docs/bidders.html). | `hb_adid_longBidderNa` = `234234` | | `hb_size_BIDDERCODE` | Optional | This is not required for adops. Case sensitive and truncated to 20 chars. | `hb_size_appnexus` = `300x250` | diff --git a/_includes/video/pb-is-jw01.html b/_includes/video/pb-is-jw01.html index f5c3c3bf94..a96915d12d 100644 --- a/_includes/video/pb-is-jw01.html +++ b/_includes/video/pb-is-jw01.html @@ -44,7 +44,7 @@ pbjs.setConfig({ debug: true, cache: { - url: "https://prebid.adnxs.com/pbc/v1/cache", + url: "https://prebid.example.com/pbc/v1/cache", }, }); diff --git a/_includes/video/pb-is-jw02.html b/_includes/video/pb-is-jw02.html index 0db58fb5a5..8162a69928 100644 --- a/_includes/video/pb-is-jw02.html +++ b/_includes/video/pb-is-jw02.html @@ -48,7 +48,7 @@ pbjs.setConfig({ debug: true, cache: { - url: "https://prebid.adnxs.com/pbc/v1/cache", + url: "https://prebid.example.com/pbc/v1/cache", }, }); diff --git a/_includes/video/pb-is-vjs.html b/_includes/video/pb-is-vjs.html index fe351b8694..bdedf89b65 100644 --- a/_includes/video/pb-is-vjs.html +++ b/_includes/video/pb-is-vjs.html @@ -65,7 +65,7 @@ pbjs.setConfig({ debug: true, cache: { - url: "https://prebid.adnxs.com/pbc/v1/cache", + url: "https://prebid.example.com/pbc/v1/cache", }, }); diff --git a/_includes/video/pb-lf-fw.html b/_includes/video/pb-lf-fw.html index 8b51be86bc..b40c5d204d 100644 --- a/_includes/video/pb-lf-fw.html +++ b/_includes/video/pb-lf-fw.html @@ -95,7 +95,7 @@ pbjs.setConfig({ debug: true, cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' + url: 'https://prebid.example.com/pbc/v1/cache' }, adpod: { brandCategoryExclusion: true diff --git a/_includes/video/pb-os-dfp.html b/_includes/video/pb-os-dfp.html index 4496ea51a0..bc7fe61309 100644 --- a/_includes/video/pb-os-dfp.html +++ b/_includes/video/pb-os-dfp.html @@ -48,10 +48,14 @@ if (pbjs.initAdserverSet) return; pbjs.initAdserverSet = true; googletag.cmd.push(function () { - pbjs.que.push(function () { - pbjs.setTargetingForGPTAsync(); + if (pbjs.libLoaded) { + pbjs.que.push(function () { + pbjs.setTargetingForGPTAsync(); + googletag.pubads().refresh(); + }); + } else { googletag.pubads().refresh(); - }); + } }); } diff --git a/_layouts/api_prebidjs.html b/_layouts/api_prebidjs.html index 1fe9a1afe8..487551fe54 100644 --- a/_layouts/api_prebidjs.html +++ b/_layouts/api_prebidjs.html @@ -39,10 +39,6 @@

{{ page.title }}

Back to Publisher API Reference

- - {% if page.show_disqus %} - {% include disqus_addon.html %} - {% endif %} diff --git a/_layouts/bidder.html b/_layouts/bidder.html index 54c7c37499..62a52c9e95 100644 --- a/_layouts/bidder.html +++ b/_layouts/bidder.html @@ -86,10 +86,6 @@

"Send All Bids" Ad Server Keys

Back to Bidders

- - {% if page.show_disqus %} - {% include disqus_addon.html %} - {% endif %} diff --git a/_layouts/example.html b/_layouts/example.html index f88e6fcfd1..13f8ebdb9d 100644 --- a/_layouts/example.html +++ b/_layouts/example.html @@ -51,27 +51,10 @@

About this example:

-

-

- In the JSFiddle example below: -

  • Click Result to see the example output.
  • -
  • Click Edit in JSFiddle to open the example in the JSFiddle editor in a new tab.
-

- -
- - +
+ {{ content }} +
diff --git a/_layouts/home.html b/_layouts/home.html index 19af7069e8..e9df870893 100644 --- a/_layouts/home.html +++ b/_layouts/home.html @@ -71,6 +71,12 @@

Formats

{% include icon__format--video.svg %}
+
+
+ Connected TV +
{% include icon__format--ctv.svg %}
+
+
AMP diff --git a/_layouts/internal_api_prebidjs.html b/_layouts/internal_api_prebidjs.html index 4098fa3c1e..1047377310 100644 --- a/_layouts/internal_api_prebidjs.html +++ b/_layouts/internal_api_prebidjs.html @@ -39,10 +39,6 @@

{{ page.title }}

Back to Internal API Reference

- - {% if page.show_disqus %} - {% include disqus_addon.html %} - {% endif %}
diff --git a/_layouts/test.html b/_layouts/test.html index 945088e888..fe14d47a2b 100644 --- a/_layouts/test.html +++ b/_layouts/test.html @@ -49,9 +49,6 @@

Send All Bids Ad Server Keys

- {% if page.show_disqus %} - {% include disqus_addon.html %} - {% endif %} diff --git a/_layouts/userid.html b/_layouts/userid.html index aff73773ec..deb991406f 100644 --- a/_layouts/userid.html +++ b/_layouts/userid.html @@ -30,6 +30,24 @@

Back to User ID Module

{{ page.title }}

+ + + + + + + + + + + + + + + + + +
Module{{ page.useridmodule }}
EID Source{{ page.eidsource }}
bidRequest.userId{{ page.bidRequestUserId }}
Example{{ page.example }}
{{content}} diff --git a/_sass/components/_card.scss b/_sass/components/_card.scss index 956a0d05d8..fc1588d2d5 100644 --- a/_sass/components/_card.scss +++ b/_sass/components/_card.scss @@ -88,6 +88,13 @@ } } } + + /** this is required for the CTV icon the path segment is not painted, but filled */ + + .card-media-ctv { + path { + fill: $t-text-color--reverse; + } + } } + .card-media { diff --git a/adops/ad-server-integration.md b/adops/ad-server-integration.md index 00d8fe0782..28afb7b10a 100644 --- a/adops/ad-server-integration.md +++ b/adops/ad-server-integration.md @@ -22,17 +22,17 @@ If you want to include information about a particular ad server not documented h ## Google Ad Manager -Google Ad Manager (GAM) is currently the most-used ad server. Google is beta testing header bidding support in yield groups, a technology to help publishers manage external integrations. Because header bidding often involved the creation of hundreds or even thousands of line items, yield groups could be a useful option. Here are some things to consider when deciding whether to use GAM yield groups with Prebid: +Google Ad Manager (GAM) is currently the most-used ad server. Google has header bidding support in a feature called [Header Bidding Trafficking](https://support.google.com/admanager/answer/12273163?hl=en), a technology to help publishers manage external integrations. Because header bidding often involved the creation of hundreds or even thousands of line items, this feature could be a useful option. Here are some things to consider when deciding whether to use it with Prebid: -- As of this writing, the feature was still in beta testing. - You must have a GAM premium GAM account to use yield groups. - The following use cases currently don’t work with yield groups: Native, video, AMP, Post-Bid. Google is open to feedback from the community about these scenarios. - The Prebid Universal Creative is not utilized. Google has ported some portions of the PUC to an internal creative. - Not all Prebid bid adapters are supported. - Aliases are not currently supported, but Google may eventually support aliases that are commonly used. There may also be future updates to support custom aliases. - Google Publisher Toolkit (GPT) determines bid values using Prebid.js events. -- The yield group should win when the adjusted bid price is higher than the header bidding price bucket, which should typically occur if the publisher is rounding bids down, as is the Prebid default. +- The trafficking group should win when the adjusted bid price is higher than the header bidding price bucket, which should typically occur if the publisher is rounding bids down, as is the Prebid default. - While we haven’t seen any detailed performance testing, we hope that the improved auction dynamics from no longer using price bucketing will have beneficial effects on auction outcomes. +- Most Prebid Mobile scenarios are not supported. For step-by-step instructions on using GAM, see the [Google Ad Manager Step by Step](/adops/step-by-step.html). @@ -57,7 +57,7 @@ For step-by-step instructions on using some of the other ad servers, see the fol [Send All Bids vs Top Price](/adops/send-all-vs-top-price.html) -## Further Reader +## Further Reading - [Planning Guide](/adops/adops-planning-guide.html) - [Key Values for Ad Ops](/adops/key-values.html) diff --git a/adops/adops-general-sbs.md b/adops/adops-general-sbs.md index 7a1b506366..369b71de20 100644 --- a/adops/adops-general-sbs.md +++ b/adops/adops-general-sbs.md @@ -8,7 +8,6 @@ sidebarType: 3 --- # General Ad Server Prebid Setup - {: .no_toc } * TOC @@ -63,7 +62,7 @@ The exact order of the following steps will differ depending on your ad server. 1. Enter a name for your line item. Suggested format: Prebid – format - bidder – price bucket. For example, `Prebid – banner - BidderA – 1.50`. 2. Set the priority of your line item to whatever you think is appropriate. Typically Prebid line items are prioritized below direct-sold but above house/remnant. 3. Enter the sizes of your creatives: - * Banner/Outstream/AMP/Video: Select the sizes of all ad slots included in the Prebid process. + * Banner/Non-InstreamVideo/AMP/Video: Select the sizes of all ad slots included in the Prebid process. * Native: Select a native template. 4. Long-Form (OTT) Video only: If you’re using competitive exclusions, fill in the associated field with the appropriate value. You’ll need to include this value when you set your targeting for the `hb_pb_cat_dur` key. See [Targeting](#targeting) below for more information. @@ -82,16 +81,16 @@ Target the price bucket key: `hb_pb_BIDDERCODE` (where BIDDERCODE is the actual The following additional keys must be added for the corresponding formats: -**Banner/Outstream/Native:** +**Banner/Non-InstreamVideo/Native:** -You can use the same line item for banner, outstream, and/or native creatives. If your ad slot could be filled by two or more of these formats, you should include the hb_format_BIDDERCODE key with values specifying all expected formats. +You can use the same line item for banner, non-instream (formerly called "outstream"), and/or native creatives. If your ad slot could be filled by two or more of these formats, you should include the hb_format_BIDDERCODE key with values specifying all expected formats. {: .alert.alert-warning :} If you combine native with another format in a single line item, you’ll need to add creative-level targeting to designate which creatives target which format. If your ad server doesn't support creative-level targeting, you may need to break out a separate set of line items. -**In-Player and Outstream Video:** +**In-Player and In-Renderer Video:** -Both in-player (instream) and outstream video ads receive the `hb_format_BIDDERCODE=video` key-value pair, so targeting on that key alone is not enough to choose the correct line items. If you're running both in-player and outstream video ads, they will most likely be separate line items, so you will need to target outstream line items to a “display” inventory type, or perhaps separate them by adunits. +Both in-player (instream) and in-renderer (formatly "outstream") video ads receive the `hb_format_BIDDERCODE=video` key-value pair, so targeting on that key alone is not enough to choose the correct line items. If you're running both in-player and in-renderer video ads, they will most likely be separate line items, so you will need to target non-instream line items to a “display” inventory type, or perhaps separate them by adunits. **Long-Form (OTT) Video:** @@ -117,22 +116,24 @@ If your ad server supports targeting creatives within the line item, it could co You’ve now added all fields required for targeting Prebid line items. You can add any other line item options you would normally use, such as additional targeting for geography. When you’ve filled in all the appropriate fields, save your line item. + + ## Create Your Creatives The process of creating your creatives will differ based on the type of creative. In general, you can interpret the instructions for setting up creatives in Google Ad Manager with some modifications; specifically, to the MACROs used in the ad tag. (See below for details.) Refer to the following for GAM documentation: -* [GAM Creative Setup: Banner/Outstream/AMP](/adops/gam-creative-banner-sbs.html) +* [GAM Creative Setup: Banner/In-Renderer/AMP](/adops/gam-creative-banner-sbs.html) * [GAM Creative Setup: Native](/adops/gam-native.html) * [GAM Creative Setup: Video](/adops/setting-up-prebid-video-in-dfp.html) We recommend using the [Prebid Universal Creative](/overview/prebid-universal-creative.html) and targeting an ad unit size of 1x1. -If you’re working with banner or outstream creatives, the HTML you’ll enter in the creatives will be similar to the following (utilizing whatever macro format is supported by your ad server): +If you’re working with banner or in-renderer creatives, the HTML you’ll enter in the creatives will be similar to the following (utilizing whatever macro format is supported by your ad server): ```html - + + + + - -``` - -{: .alert.alert-warning :} -When using Send All Bids, use `ucTagData.adId = "%%PATTERN:hb_adid_BIDDERCODE%%";` rather than `ucTagData.adId = "%%PATTERN:hb_adid%%";` for each bidder’s creative, replacing `BIDDERCODE` with the actual bidder code, such as `%%PATTERN:hb_adid_BidderA%%`. - -The example CSS in the previous section applies here as well. - ## Create a New Native Creative Now that you've defined your native template you can create your native creatives. @@ -215,7 +192,7 @@ Now that you've defined your native template you can create your native creative {:start="7"} 7. Click **Save and preview**. -### Create Mobile In-App Creative +## Create Mobile In-App Template Use these instructions if you integrate In-App native ads on [iOS](/prebid-mobile/pbm-api/ios/ios-sdk-integration-gam-original-api.html#in-app-native) or [Android](/prebid-mobile/pbm-api/android/android-sdk-integration-gam-original-api.html#in-app-native). The difference is in choosing the GAM option for supporting Android & iOS app code. @@ -255,9 +232,9 @@ Follow the instructions in [Google Ad Manager with Prebid Step by Step](/adops/s ## Further Reading -* [Google Ad Manager with Prebid Step by Step](/adops/step-by-step.html) -* [Prebid Native Implementation Guide](/prebid/native-implementation.html) -* [Send All Bids vs Top Price](/adops/send-all-vs-top-price.html) -* [Prebid Universal Creatives](/overview/prebid-universal-creative.html) -* [Creative Considerations](/adops/creative-considerations.html) -* [Ad Ops Planning Guide](/adops/adops-planning-guide.html) +- [Google Ad Manager with Prebid Step by Step](/adops/step-by-step.html) +- [Prebid Native Implementation Guide](/prebid/native-implementation.html) +- [Send All Bids vs Top Price](/adops/send-all-vs-top-price.html) +- [Prebid Universal Creative](/overview/prebid-universal-creative.html) +- [Creative Considerations](/adops/creative-considerations.html) +- [Ad Ops Planning Guide](/adops/adops-planning-guide.html) diff --git a/adops/key-values.md b/adops/key-values.md index 6c2f77d784..641ba1c3c7 100644 --- a/adops/key-values.md +++ b/adops/key-values.md @@ -36,13 +36,13 @@ You can work with your engineers to modify the default list. See [Restricting Da | hb_pb | targeting | All | The bid price bucket (adjusted for price granularity). | 2.10 | | hb_adid | rendering | All | The ad ID. Used by the Prebid Universal Creative (PUC) ad server creative to render the winning Prebid ad. | 123456 | | hb_bidder | targeting and reporting | Could be used for creative-level targeting in video scenarios; reporting for all scenarios | The bidder code. Used for logging and reporting to learn which bidder has higher fill rate/CPM. | BidderA | -| hb_size | rendering | Banner, native, outstream. Not used for video. | The size used for resizing the iframe for the winning creative. | 300x250 | +| hb_size | rendering | Banner, native, in-renderer. Not used for instream video. | The size used for resizing the iframe for the winning creative. | 300x250 | | hb_format | targeting and reporting | Needed only if there's a different set of line items for different media types | Used when creating a separate set of line items for banner vs video | video | | hb_deal | targeting | All | Target private marketplace deals | 7777777 | | hb_uuid | rendering | Video only | Carries the cache retrieval ID for VAST video creatives | 1111-2222-3333-4444 | -| hb_cache_id | rendering | Banner, native, outstream; mobile app only | Carries the cache retrieval ID for mobile bids | 2222-3333-4444-5555 | -| hb_cache_host | rendering | Banner, native, outstream; mobile app only | The host where the cached creative lives | `"https://mycachehost.example.com"` | -| hb_cache_path | rendering | Banner, native, outstream; mobile app only | The web path where the cached creative lives | /cache | +| hb_cache_id | rendering | Banner, native, in-renderer; mobile app only | Carries the cache retrieval ID for mobile bids | 2222-3333-4444-5555 | +| hb_cache_host | rendering | Banner, native, in-renderer; mobile app only | The host where the cached creative lives | `"https://mycachehost.example.com"` | +| hb_cache_path | rendering | Banner, native, in-renderer; mobile app only | The web path where the cached creative lives | /cache | | hb_source | reporting | Server-to-server testing | Used to report the A/B test results for client- vs server-side performance. | s2s | | hb_adomain | reporting and special | All | Used to report on VAST errors, set floors on certain buyers, monitor volume from a buyer, or track down bad creatives | example.com | diff --git a/adops/line-item-creation.md b/adops/line-item-creation.md index 51abec0d1e..821a780689 100644 --- a/adops/line-item-creation.md +++ b/adops/line-item-creation.md @@ -1,61 +1,73 @@ --- layout: page_v2 -title: Line Item Creation -head_title: Line Item Creation +title: Line Item Considerations +head_title: Line Item Considerations sidebarType: 3 sbUUID: 3.2 --- -# Line Item Creation - +# Line Item Considerations {: .no_toc } - TOC {: toc } -The settings you apply when creating line items to capture bids coming in from the header bidding process are typically different from those you apply when creating line items for house ads. This document will walk you through some of the differences, and outline requirements and recommendations for creating line items to work with Prebid. +The settings you apply when creating line items to capture bids coming in from the header bidding process are different from those you apply when creating line items for house ads. This document will walk you through some of the differences, and outline requirements and recommendations for creating line items to work with Prebid. {: .alert.alert-success :} Manually configuring ad server elements for Prebid can be a fair amount of work. If you’re using Google Ad Manager (GAM), consider using our official command line tool, [Prebid Line Item Manager](/tools/line-item-manager.html#prebid-line-item-manager.html), to create the setup. Using this tool may save you time and help you avoid mistakes. -## Advertisers and Orders +## Overview -Line items (and creatives) must, at some level, be associated with advertisers. When you create line items to capture Prebid bids, you won’t know who the actual advertisers are. Instead you need to create generic advertisers in your ad server that are used for Prebid. For example, you can create an advertiser named “Prebid Advertiser.” Or if you’re using Send All Bids, you can create one advertiser per bidder, such as “Prebid BidderA,” “Prebid BidderB,” etc. You then associate your line items and creatives with those advertisers. +The ad server configuration that supports Prebid is important. Header bidding is a way to gather bids from many sources and funnel them into your ad server, so the ad server needs to have a way to detect and prioritize these bids against other sources. -Depending on your ad server, line items are typically grouped within orders under each advertiser. +The traditional Prebid.js setup is to have two sets of line items in your ad server: one set that covers the price granularity range for display, non-instream video, and native, and another set that covers the price granularity range for instream video. This is because instream video generally has a higher price profile. -## Line Item Details +However, there may be reasons to set up more than 2 sets of line items. You can start by considering a few questions: -You have many options for the way in which you set up your line items. The following are Prebid requirements, and also some recommendations, to ensure bids are captured correctly and to make keeping track of your header bidding line items easier. +- What Prebid scenarios do you need now and in the forseeable future? Is Prebid.js all you need? Or do you have an [AMP](/formats/formats.html#amp) version of your site? Do you have a mobile app? +- How many line items can you afford to create? Very high [price granularities](/adops/price-granularity.html) can consume a large number of line items, and some ad servers have strict limits on the number of active and/or historic line items. + +Here's a set of basic recommendations to use as a starting point: + +1. **Do you run Prebid.js only?** Create 2 sets of line items: one set for instream-video and another set for everything else. +1. **Do you run Prebid.js and AMP?** + 1. For now, you'll need to have two sets of line items: one for instream video, and one that uses the PUC for everything else. + 1. In the future, there will be an option to run three sets of line items to utilize the [dynamic creative](/adops/creative-considerations.html#prebidjs-dynamic-creatives) for Prebid.js. +1. **Do you run Prebid.js and Prebid Mobile?** + 1. If you're using multiformat banner and "in-renderer" video (formerly "outstream"), you will need to have a separate set of adunits and line items for mobile. This is because Prebid Mobile does not support javascript renderers like Prebid.js does, instead relying on the ad server SDK, which requires them to be treated the same as instream video. So in this scenario you'll have 4 sets of line items: (1) Prebid.js instream, (2) Prebid.js banner+native+noninstream, (3) mobile video, and (4) mobile banner. If you run mobile native or rewarded video, each will be another set of line items. + 1. If you have chosen the Prebid-Rendered approach for your mobile apps in order to get SKAdNetork and advanced adunit support, you'll want to have separate sets of line items for mobile and Prebid.js as described for the multiformat item above. + 1. If you're running Rewarded Video, you'll want to define which adunits run that format and have a separate set of video line items that target those units. This is because rewarded video has a special creative type. +1. **Or just Prebid Mobile?** + 1. As a base, you'll want one set of line items that covers all video (instream and non-instream), and another set for banner. + 1. If you run native, you'll want another set of line items for them. + 1. And then if you run rewarded video, another set of line items for those ad units. -### At a Glance +Yes, setting up line items for Prebid Mobile is complicated. We recommend reading the "Ad Operations Guidance" section of the +specific mobile integration method you're using: -These tables show the Prebid line item recommendations and requirements. The following sections provide more details on each. +- GAM Bidding-Only for [iOS](/prebid-mobile/pbm-api/ios/ios-sdk-integration-gam-original-api.html#ad-operations-guidance)/[Android](/prebid-mobile/pbm-api/android/android-sdk-integration-gam-original-api.html#ad-operations-guidance) +- GAM Prebid-Rendered for [iOS](/prebid-mobile/modules/rendering/ios-sdk-integration-gam#ad-operations-guidance)/[Android](/prebid-mobile/modules/rendering/android-sdk-integration-gam#ad-operations-guidance) +- AdMob for [iOS](/prebid-mobile/modules/rendering/ios-sdk-integration-admob#ad-operations-guidance)/[Android](/prebid-mobile/modules/rendering/android-sdk-integration-admob#ad-operations-guidance) +- MAX for [iOS](/prebid-mobile/modules/rendering/ios-sdk-integration-max#ad-operations-guidance)/[Android](/prebid-mobile/modules/rendering/android-sdk-integration-max#ad-operations-guidance) -**Required** +## Advertisers and Orders + +Line items (and creatives) must, at some level, be associated with advertisers. When you create line items to capture Prebid bids, you won’t know who the actual advertisers are. Instead you need to create one or more generic advertisers in your ad server that are used for Prebid. For example, you can create an advertiser named “Prebid Advertiser.” Or if you’re using Send All Bids, you can create one advertiser per bidder, such as “Prebid BidderA,” “Prebid BidderB,” etc. You then associate your line items and creatives with those advertisers. -{: .table .table-bordered .table-striped } -| Detail | Requirement | -| ------ | ----------- | -| Line Item Type | Price Priority (depending on your ad server) | -| Key Value Pricing | Include the number of decimal places that are defined in the price granularity precision. Normally this is two decimal places, e.g. hb_pb=0.50 or hb_pb=1.00 | +{: .alert.alert-info :} +The tradeoff for advertisers is this: having just one advertiser for all Prebid config makes it easier to share creates across line items. +But having separate advertisers for each bidder may be more useful within ad server reports. -**Recommended** +Depending on your ad server, line items are typically grouped within orders under each advertiser. -{: .table .table-bordered .table-striped } -| Detail | Recommendation | -| ------ | -------------- | -| Line Item Groups | Determine the number of containers you'll need to store the line items based on price granularity, number of bidders, and ad server restrictions. Name your group in the format Prebid, format, bidder name (for [Send All Bids](/adops/send-all-vs-top-price.html)), and unique number; for example, `Prebid - banner - BidderA - 1`. | -| Line Item Name | Name each line item for the header bidding price bucket. Use the naming pattern Prebid, mediatype, bidder (for Send All Bids), and price bucket; for example, `Prebid - banner - BidderA - 1.50`. | -| Creative Name | In the creative name, include Prebid, the media type and the size (if applicable), and a unique identifying number (if more than one creative of a given size is attached to the line item). If using Send All Bids, also include the bidder name; for example, `Prebid - banner - BidderA - 1x1 - 1`. | -| Start and End Dates | Start immediately, no end date | -| Priority | Above house ads but below directly sold ads | -| Impression Goal | None | -| Media Types | Group media types by price granularity. This typically means you can group banner, outstream video, and native together but video will be a separate set of line items. | +## Line Item Details + +You have many options for the way in which you set up your line items. The following are Prebid requirements, and also some recommendations, to ensure bids are captured correctly and to make keeping track of your header bidding line items easier. ### Line Item Type -If your ad server supports it, you should set your line item type to Price Priority, which will let it compete with bids from other sources. +If your ad server supports it, you should set your line item type to "Price Priority", which will let it compete with bids from other sources based on bid price. ### Key Value Pricing @@ -70,19 +82,19 @@ See [Key Values](/adops/key-values.html) for general information about key value ### Line Item Groups -If you are [sending all bids](/adops/send-all-vs-top-price.html) to the ad server, you’ll most likely want to group your line items by bidder. (In Google Ad Manager this means creating at least one set of orders per bidder, with that bidder’s line items attached to the order.) This allows each group to have a set of line items that use the same targeting keywords, all of which include the bidder’s name. For example, if you are working with BidderA, all line items within a group would use the key hb_pb_BidderA in the line item’s key-value targeting, and hb_adid_BidderA in the attached creative. +If you are [sending all bids](/adops/send-all-vs-top-price.html) to the ad server, you’ll most likely want to group your line items by bidder. This means creating a set of orders per bidder, with that bidder’s line items attached to the order. This allows each group to have a set of line items that use the same targeting keywords, all of which include the bidder’s name. For example, if you are working with BidderA, all line items within a group would use the key hb_pb_BidderA in the line item’s key-value targeting, and hb_adid_BidderA in the attached creative. Depending on your ad server and the number of line items you’re creating, you might need more than one group per bidder. For example, suppose you need to create 2000 line items for one bidder. If GAM is your ad server, you’re allowed only 450 line items per order, so you will need five orders per bidder to store the 2000 line items, for a total of 25 orders. -We recommend naming the group to include “Prebid”, media type, the bidder name, and also a number or other identifier if you need more than one group per bidder. For example, `Prebid - banner - BidderA - 1`. For [Send Top Price Bid](/adops/send-all-vs-top-price.html) you can omit the bidder name: `Prebid - banner - 1`. +We recommend naming the group to include “Prebid”, media type, the bidder name, and also a number or other identifier if you need more than one group per bidder. For example, `Prebid.js - banner - BidderA - 1`. For [Send Top Price Bid](/adops/send-all-vs-top-price.html) you can omit the bidder name: `Prebid SDK - banner - 1`. ### Line Item Name -Because you’ll be creating one line item per price within each [price bucket](/adops/price-granularity.html), it’s helpful to name your line items based on the price. It can also be helpful to include the mediatype, since different types of media could be priced the same. Some examples include `Prebid - banner - 1.00`, `Prebid - video - 1.50`, etc. If you’re [sending all bids](/adops/send-all-vs-top-price.html), include the bidder code: `Prebid - banner - BidderA - 1.00`, `Prebid - banner - BidderA - 1.50`. +Because you’ll be creating one line item per price within each [price bucket](/adops/price-granularity.html), it’s helpful to name your line items based on the price. It can also be helpful to include the mediatype, since different types of media could be priced the same. Some examples include `Prebid.js - banner - 1.00`, `Prebid.js - video - 1.50`, etc. If you’re [sending all bids](/adops/send-all-vs-top-price.html), include the bidder code: `Prebid SDK - banner - BidderA - 1.00`, `Prebid SDK - banner - BidderA - 1.50`. ### Creative Name -We recommend naming creatives to include the media type, size (where applicable), and a number if there is more than one. For example, `Prebid - banner - BidderA - 1x1 - 1`; `Prebid - video - BidderA - 1`. +We recommend naming creatives to include the media type, size (where applicable), and a number if there is more than one. For example, `Prebid.js - banner - BidderA - 1x1 - 1`; `Prebid.js - video - BidderA - 1`. ### Start and End Dates @@ -106,7 +118,7 @@ Prebid supports many media types, and you can set up a single line item with mul Grouping media types within line items is typically dictated by the pricing structure: -- Banner, outstream video, and native generally run together because they have similar pricing expectations and therefore can share [price granularities](/adops/price-granularity.html). +- Banner, non-instream video, and native generally run together because they have similar pricing expectations and therefore can share [price granularities](/adops/price-granularity.html). - Instream video is normally created as a separate set of line items because they are usually priced higher than other formats, often requiring custom price granularity. You must set a key value for each format used by an ad unit using the hb_format (or hb_format_BIDDER) key and setting its value to the appropriate format. For example, if the ad unit is set up as a banner ad, you would target hb_format=banner (along with the price, such as hb_pb=1.00). If your ad unit supports multiple types, set the key value to include all types: `hb_format` in `banner`,`native`. @@ -118,50 +130,50 @@ Here's an example that encapsulates a number of the key decisions outlined in th - Send Top Bid - Banner granularity: high - Video granularity: custom -- Order naming pattern: Prebid - banner - N, Prebid - video - N -- Line Item naming pattern: Prebid - banner - PRICE, Prebid - video - PRICE -- Creative naming pattern: Prebid - banner - 1x1 - N, Prebid - video - N +- Order naming pattern: Prebid.js - banner - N, Prebid - video - N +- Line Item naming pattern: Prebid.js - banner - PRICE, Prebid - video - PRICE +- Creative naming pattern: Prebid.js - banner - 1x1 - N, Prebid - video - N - Choosing to make three copies of each creative The granularity we’ve chosen means we’ll be creating 2000 line items for banner and 1000 line items for video. Those line items will be named as shown here: -- Order: Prebid - banner - 1 - - LI: Prebid - banner - 0.00 (If the bid is less than 1 penny, it rounds down to 0, but is still worth something) - - Creative: Prebid - banner - 1x1 - 1 - - Creative: Prebid - banner - 1x1 - 2 - - Creative: Prebid - banner - 1x1 - 3 - - LI: Prebid - banner - 0.01 +- Order: Prebid.js - banner - 1 + - LI: Prebid.js - banner - 0.00 (If the bid is less than 1 penny, it rounds down to 0, but is still worth something) + - Creative: Prebid.js - banner - 1x1 - 1 + - Creative: Prebid.js - banner - 1x1 - 2 + - Creative: Prebid.js - banner - 1x1 - 3 + - LI: Prebid.js - banner - 0.01 - ... creatives ... - - LI: Prebid - banner - 0.02 - - LI: Prebid - banner - 0.03 + - LI: Prebid.js - banner - 0.02 + - LI: Prebid.js - banner - 0.03 - ... - - LI: Prebid - banner - 4.49 -- Order: Prebid - banner - 2 - - LI: Prebid - banner - 4.50 - - LI: Prebid - banner - 4.51 - - LI: Prebid - banner - 4.52 - - LI: Prebid - banner - 4.53 + - LI: Prebid.js - banner - 4.49 +- Order: Prebid.js - banner - 2 + - LI: Prebid.js - banner - 4.50 + - LI: Prebid.js - banner - 4.51 + - LI: Prebid.js - banner - 4.52 + - LI: Prebid.js - banner - 4.53 - ... - - LI: Prebid - banner - 09.49 + - LI: Prebid.js - banner - 09.49 - ... other banner orders up to 20.00 ... -- Order: Prebid - video - 1 - - LI: Prebid - video - 0.00 - - Creative: Prebid - video - 1 - - Creative: Prebid - video - 2 - - Creative: Prebid - video - 3 - - LI: Prebid - video - 0.05 - - LI: Prebid - video - 0.10 +- Order: Prebid.js - video - 1 + - LI: Prebid.js - video - 0.00 + - Creative: Prebid.js - video - 1 + - Creative: Prebid.js - video - 2 + - Creative: Prebid.js - video - 3 + - LI: Prebid.js - video - 0.05 + - LI: Prebid.js - video - 0.10 - ... - ... If we had chosen Send All Bids (the Prebid default), every element shown above would be recreated for each bidder, and each name would include the bidder name. For example: -- Order: Prebid - banner - BidderA - 1 - - LI: Prebid - banner - BidderA - 0.00 - - Creative: Prebid - banner - BidderA - 1x1 - 1 - - Creative: Prebid - banner - BidderA - 1x1 - 2 - - Creative: Prebid - banner - BidderA - 1x1 - 3 +- Order: Prebid.js - banner - BidderA - 1 + - LI: Prebid.js - banner - BidderA - 0.00 + - Creative: Prebid.js - banner - BidderA - 1x1 - 1 + - Creative: Prebid.js - banner - BidderA - 1x1 - 2 + - Creative: Prebid.js - banner - BidderA - 1x1 - 3 - ... ## Next Step diff --git a/adops/mobile-adops.md b/adops/mobile-adops.md new file mode 100644 index 0000000000..a6737d2826 --- /dev/null +++ b/adops/mobile-adops.md @@ -0,0 +1,35 @@ +--- +layout: page_v2 +title: Prebid Mobile Ad Operations +head_title: Prebid Mobile Ad Operations +description: Special considerations for Prebid Mobile Ad Operations +sidebarType: 3 +--- + +# Prebid Mobile Ad Operations + +This page covers some important things to know if you're setting up an ad server to support a mobile app integration with [Prebid SDK](/prebid-mobile/prebid-mobile.html). + +As background, it should be noted that Prebid Mobile evolved separately from Prebid.js for a long time. The committees are now attempting to keep their decisions more uniform, but it may take some time to bring them back into better alignment. + +## Important differences + +These differences explain the special mobile procedures noted in other documents. + +1. In-Renderer video (formerly known as "outstream") in mobile must be implemented in GAM with AdUnits that support video adsizes and the `VastUrl` creative. This contrasts with Prebid.js which utilizes 3rd party HTML creatives for in-renderer video. +1. How ads are rendered is different in various scenarios. See the 'AdOps guidance' section in your ad server use case for details. This can be particular important when you are investigating discrepancies between reports from various sources. +1. You will need to consider whether you want Prebid Server to cache creatives. This answer will inform the contents of the Prebid Server configuration. + +## Publishers using both Prebid.js and Prebid mobile + +If your a company using both Prebid.js and Prebid mobile that employs In-Renderer video, your line item setup will be more complicated. + +Probably the easiest way to manage this scenario will be to create separate line items for placements running Prebid.js vs placements running Prebid mobile. +The Prebid.js line items will set up In-Renderer video as 3rd party HTML while the mobile line items will set them up as video. + +## Further Reading + +- [Ad Ops Planning Guide](/adops/adops-planning-guide.html) +- [Ad Ops GAM setup for Prebid-Rendered apps](/adops/mobile-rendering-gam-line-item-setup.html) +- [Ad Ops AdMob setup for Prebid-Rendered apps](/adops/mobile-rendering-admob-line-item-setup.html) +- [Ad Ops MAX setup for Prebid-Rendered apps](/adops/mobile-rendering-max-line-item-setup.html) diff --git a/adops/mobile-rendering-admob-line-item-setup.md b/adops/mobile-rendering-admob-line-item-setup.md index 39db9166ad..d92d3ca858 100644 --- a/adops/mobile-rendering-admob-line-item-setup.md +++ b/adops/mobile-rendering-admob-line-item-setup.md @@ -9,6 +9,8 @@ sidebarType: 3 # AdMob Setup +This document outlines how to set up [AdMob](https://admob.google.com/home/) for Prebid Mobile. See the appropriate integration method [iOS](/prebid-mobile/modules/rendering/ios-sdk-integration-admob.html#rendering-and-tracking)/[Android](/prebid-mobile/modules/rendering/android-sdk-integration-admob.html#rendering-and-tracking)) document for information about rendering and tracking. + ## Mediation Group Setup ### Step 1: Create Mediation Group @@ -84,3 +86,8 @@ Press `DONE` and repeat the adding of the custom events for all needed prices. Pipeline Screenshot Once you add all needed custom events - press `DONE`. The Mediation Group is ready to serve the prebid demand to your app. + +## Further Reading + +- [Prebid Mobile Overview](/prebid-mobile/prebid-mobile) +- Prebid Mobile Admob Integration Method for [iOS](/prebid-mobile/modules/rendering/ios-sdk-integration-admob.html), [Android](/prebid-mobile/modules/rendering/android-sdk-integration-admob.html) diff --git a/adops/mobile-rendering-gam-line-item-setup.md b/adops/mobile-rendering-gam-line-item-setup.md index f9d35b6da5..01d92d97db 100644 --- a/adops/mobile-rendering-gam-line-item-setup.md +++ b/adops/mobile-rendering-gam-line-item-setup.md @@ -1,54 +1,46 @@ --- layout: page_v2 -title: Prebid Mobile Rendering GAM Line Item Setup -description: Prebid Mobile Rendering Modules GAM line item setup +title: Prebid-Rendered Mobile GAM Setup +description: Prebid-Rendered Mobile GAM Setup sidebarType: 3 --- -# Google Ad Manager Setup +# AdOps Guide to setting up GAM for Prebid-Rendered Mobile +{: .no_toc} -## Step 1: Create New Order +- TOC +{:toc} - Pipeline Screenshot +## Overview -## Step 2: Create Line Item +This guide is for mobile app developers that have chosen to use the "Prebid-Rendered" integration approach for [iOS](/prebid-mobile/modules/rendering/ios-sdk-integration-gam.html) or [Android](/prebid-mobile/modules/rendering/android-sdk-integration-gam.html). -To integrate the Prebid demand you have to create a Line Items with a specific price and targeting keywords. +The orders and line items are the same as for other types of integration, but the creative setup +has a number of differences. -> Even though a Line Item can be named in any way, we strongly recommend to use the price or targeting keyword in the name. It will help to navigate through hundreds of them. +## Getting Started -### Select Type +See the [GAM with Prebid guide](/adops/step-by-step.html) for details on the Advertiser, +Orders, and Line Items. When you get to the creatives, come back here. -Create a Line Item depending on the type of expected creative kind: +## Prepare the Prebid Creatives -* **Display** - for the Banner, HTML Interstitial -* **Video and Audio** - for the Video Interstitial, Rewarded Video, and Outstream Video ads. +{: .table .table-bordered .table-striped } +| Scenario | Type of Creative | +| --- | --- | +| Display Banner
Video Banner
Display Interstitial
Video Interstitial | [3rd party HTML](#third-party-html) | +| Rewarded Video | [Special VastUrl](#rewarded-video) | -Pipeline Screenshot +### Third Party HTML -Set sizes respectively to expected creatives. +For most ad formats, instead of using the Prebid Universal Creative, the Prebid SDK just needs to get a signal +from the Google Mobile Ad SDK that there's an ad ready to render. The Prebid SDK will +figure the rest of it out: rending the creative, handling the Open Measurement activities, +and for iOS, the SKAdnetwork calls. -### Select Price - -The Line Item price should be chosen according to the price granularity policy. - -Pipeline Screenshot - -### Set Targeting Keywords - -The **Custom targeting** property should contain a special keyword with the price of winning bid. The same as a Rate of the Line Item. - -Pipeline Screenshot - -## Step 3: Prepare Prebid Creative - -### Display Banner, Video Banner, Display Interstitial, Video Interstitial - -The Prebid SDK integrates with GAM basing on [App Events](https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#app_events) feature, almost for all ad formats. That means that creative should contain a special tag that will be processed by Prebid's GAM Event Handlers. - -If GAM Event Handler receives the `PrebidAppEvent` event it will render the winning bid. Otherwise the control will be passed to the GAM Ad View and it will render the received creative. +Here's the body of the creative: ``` html ``` +TBD - what's `bidid`? + +It will look something like this in GAM interface: + Pipeline Screenshot +{: .alert.alert-info :} +Developer background: The Prebid SDK integrates with the Google Moble Ads (GMA) SDK using the [App Events](https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#app_events) feature for most ad formats. The creative above contains a special tag that will be processed by Prebid SDK's GAM Event Handlers. When the handler receives the `PrebidAppEvent` event it will render the winning bid. Otherwise control will be passed to the GAM Ad View and the GMA SDK will render the received creative. + ### Rewarded Video -Prebid rendering for Rewarded video ads is based on the [OnAdMetadataChangedListener](https://developers.google.com/android/reference/com/google/android/gms/ads/rewarded/OnAdMetadataChangedListener). So you need to set up a special VAST tag in the creative. +Prebid rendering for Rewarded video ads is based on the [OnAdMetadataChangedListener](https://developers.google.com/android/reference/com/google/android/gms/ads/rewarded/OnAdMetadataChangedListener). So you need to set up a special VAST tag in the creative: ``` js https://cdn.jsdelivr.net/npm/prebid-universal-creative/dist/prebid-mobile-rewarded-vast.xml ``` +It will look something like this in the GAM interface: + Pipeline Screenshot If GAM Event Handler receives the tag's info it will render the winning bid. Otherwise the control will be passed to the GAM Ad View and it will render the received creative. @@ -202,3 +203,7 @@ p { } ``` --> + +## Further Reading + +- [GAM with Prebid guide](/adops/step-by-step.html) diff --git a/adops/mobile-rendering-max-line-item-setup.md b/adops/mobile-rendering-max-line-item-setup.md index 4c7786b848..b95e83f50f 100644 --- a/adops/mobile-rendering-max-line-item-setup.md +++ b/adops/mobile-rendering-max-line-item-setup.md @@ -9,6 +9,8 @@ sidebarType: 3 # AppLovin MAX Setup +This document outlines how to set up [Applovin MAX](https://developers.applovin.com/en) for Prebid Mobile. See the appropriate integration method ([iOS](/prebid-mobile/modules/rendering/ios-sdk-integration-max.html#rendering-and-tracking)/[Android](/prebid-mobile/modules/rendering/android-sdk-integration-max.html#rendering-and-tracking)) document for information about rendering and tracking. + ## Custom Network Setup In your MAX account go to `Mediation` -> `Manage` -> `Networks` and click `Click here to add a Custom Network`. Then create an **SDK** custom network with the following adapter names: @@ -35,7 +37,7 @@ Create or choose an existing Ad Unit. Go the the `Custom Networks & Deals` secti Pipeline Screenshot -Make sure that the `Custom Parameters` field contain expecting targetting keywords of the winning bid: +Make sure that the `Custom Parameters` field contains the expected targeting keywords of the winning bid: ```json {"hb_pb":"0.10"} @@ -43,3 +45,8 @@ Make sure that the `Custom Parameters` field contain expecting targetting keywor {: .alert.alert-warning :} The adapter will render the winning bid only if the bid's targeting keywords contain `all` keywords from the `Custom Parameters` field. + +## Further Reading + +- [Prebid Mobile Overview](/prebid-mobile/prebid-mobile) +- Prebid Mobile Applovin Integration Method for [iOS](/prebid-mobile/modules/rendering/ios-sdk-integration-max.html), [Android](/prebid-mobile/modules/rendering/android-sdk-integration-max.html) diff --git a/adops/setting-up-prebid-video-in-dfp.md b/adops/setting-up-prebid-video-in-dfp.md index 13b3327fcf..a4a1ca87ac 100644 --- a/adops/setting-up-prebid-video-in-dfp.md +++ b/adops/setting-up-prebid-video-in-dfp.md @@ -8,21 +8,28 @@ sidebarType: 3 --- # GAM Step by Step - Video Creatives - {: .no_toc } - TOC {:toc} +## Overview + This page walks you through the steps required to create in-player and long-form video creatives to attach to your Prebid line items in Google Ad Manager (GAM). +It applies to these scenarios: + +- Instream video (also called "in-player") +- For Prebid Mobile only, it also applies to In-Renderer video (formerly known as "outstream") +- Long form video + {: .alert.alert-success :} For complete instructions on setting up Prebid line items in Google Ad Manager, see [Google Ad Manager with Prebid Step by Step](/adops/step-by-step.html). {: .alert.alert-info :} For engineering setup instructions, see [Show Video Ads with a Google Ad Manager Video Tag](/dev-docs/show-video-with-a-dfp-video-tag.html). -Each VAST creative contains a URL that points to the cached VAST XML. (This is because most video players can only work with a URL that returns VAST XML.) When setting up video creatives, it's important to understand where the VAST XML is stored for each of your bidders. The most common place to store VAST XML is the AppNexus cache, but some bidders (such as RubiconProject and SpotX) use their own cache services. To support such bidders, see [Multiple Cache Locations](#multiple-cache-locations) below. +Each VAST creative contains a URL that points to the cached VAST XML. (This is because most video players can only work with a URL that returns VAST XML.) When setting up video creatives, it's important to understand where the VAST XML is stored for each of your bidders. Prebid.js supports server-side, client-side, and local caching as outlined in [pbjs.setConfig documentation](/dev-docs/publisher-api-reference/setConfig.html#client-side-caching-of-vast-xml). See [Multiple Cache Locations](#multiple-cache-locations) below for details on bidder-specific cache locations. ## Single Cache Location @@ -48,7 +55,7 @@ Google Ad Manager will show you a warning stating that fetching VAST from the cr If you’re using a Send Top Price Bid configuration, then the VAST URL will be the same for each bidder: -`https://prebid.adnxs.com/pbc/v1/cache?uuid=%%PATTERN:hb_uuid%%` +`https://my-pbs.example.com/cache?uuid=%%PATTERN:hb_uuid%%` or @@ -56,7 +63,7 @@ or If you’re using Send All Bids, the VAST URL will include the bidder-specific targeting variable. Be sure to replace `BIDDERCODE` with the actual bidder code for your bidders: -`https://prebid.adnxs.com/pbc/v1/cache?uuid=%%PATTERN:hb_uuid_BIDDERCODE%%` +`https://my-pbs.example.com/cache?uuid=%%PATTERN:hb_uuid_BIDDERCODE%%` or @@ -66,11 +73,11 @@ or If your creative is for long-form (OTT) video, you must include a prefix in your VAST URL. For example (Send Top Price Bid): -`https://prebid.adnxs.com/pbc/v1/cache?uuid=50.00_news_30s_%%PATTERN:hb_cache_id%%` +`https://my-pbs.example.com/cache?uuid=50.00_news_30s_%%PATTERN:hb_cache_id%%` or (Send All Bids): -`https://prebid.adnxs.com/pbc/v1/cache?uuid=50.00_news_30s_%%PATTERN:hb_cache_id_BIDDERCODE%%` +`https://my-pbs.example.com/cache?uuid=50.00_news_30s_%%PATTERN:hb_cache_id_BIDDERCODE%%` In these examples, the `uuid` is set to the value of the `hb_pb_cat_dur` key you target in your line item. This value consists of the price bucket, label (for competitive exculsions), and video duration. In this example we've specified a price bucket of `50.00`, a label of `news`, and a duration of `30s`. See [GAM with Prebid Step by Step](/adops/step-by-step.html#targeting) for more information. @@ -79,7 +86,7 @@ In these examples, the `uuid` is set to the value of the `hb_pb_cat_dur` key you The resulting creative should look something like the following: -![GAM Video Creative Setup](/assets/images/ad-ops/gam-sbs/appnexus_vast_tag.png) +![GAM Video Creative Setup](/assets/images/ad-ops/gam-sbs/gam-tag-setup.png)! {:start="7"} 7. If you're using jsdelivr, set your **Associated ad technology provider**: @@ -101,6 +108,6 @@ If you're utilizing any bidders that cache their own VAST, you have two options: - [Google Ad Manager with Prebid Step by Step](/adops/step-by-step.html) - [Show Video Ads with Google Ad Manager](/dev-docs/show-video-with-a-dfp-video-tag.html) - [Send All Bids vs Top Price](/adops/send-all-vs-top-price.html) -- [Prebid Universal Creatives](/overview/prebid-universal-creative.html) +- [Prebid Universal Creative](/overview/prebid-universal-creative.html) - [Creative Considerations](/adops/creative-considerations.html) - [Ad Ops Planning Guide](/adops/adops-planning-guide.html) diff --git a/adops/setting-up-prebid-video-in-freewheel.md b/adops/setting-up-prebid-video-in-freewheel.md index ad1a7ac7f4..a0a9ade18e 100644 --- a/adops/setting-up-prebid-video-in-freewheel.md +++ b/adops/setting-up-prebid-video-in-freewheel.md @@ -11,6 +11,11 @@ sidebarType: 3 {: .alert.alert-warning :} This guide is not written, maintained, or endorsed by Freewheel. Freewheel recommends speaking to your account team before implementing any header-bidding setup to ensure full implications for direct-sold ad delivery, forecasting, and reporting is understood. +{: .alert.alert-warning :} +The approach described here could create too many line items in the ad server +if the price buckets are too granular. We recommend that you consider how many +line items can be supported and plan out the price granularity/category/duration combinations. + This page describes how to set up Campaigns for long form video using FreeWheel's ad server. As with Google Ad Manager for digital ads, ad ops will need to configure their FreeWheel server account so that the server can provide the correct creatives for the video player. If you do not have an account visit [FreeWheel](https://www.freewheel.com/) to create one. @@ -131,7 +136,7 @@ The scheme, host, and path should point to your Prebid Server cache. For instanc utilize Xandr's AppNexus cache: ```text -https://prebid.adnxs.com/pbc/v1/cache +https://prebid.example.com/pbc/v1/cache ``` The query should have one key-value items: @@ -147,13 +152,13 @@ The second macro, `#{request.keyValue(“hb_cache_id”)`, formats the unique Pr In real-time, when the dynamic URL is formatted it will appear like: ```text -https://prebid.adnxs.com/pbc/v1/cache?uuid=12.00_391_30s_6c422e51-46cf-4b0a-ae41-64c61c1ca125 +https://prebid.example.com/pbc/v1/cache?uuid=12.00_391_30s_6c422e51-46cf-4b0a-ae41-64c61c1ca125 ``` In order for the above URL to format correctly ensure that the URL in the text box appears as: ```text -https://prebid.adnxs.com/pbc/v1/cache?uuid=#{ad.placement.name}_#{request.keyValue("hb_cache_id")} +https://prebid.example.com/pbc/v1/cache?uuid=#{ad.placement.name}_#{request.keyValue("hb_cache_id")} ``` Your ad ops should now be completed and set up for premium long-form video. diff --git a/adops/setting-up-prebid-with-the-appnexus-ad-server.md b/adops/setting-up-prebid-with-the-appnexus-ad-server.md index 43aa5ca4c1..cfff8b85d0 100644 --- a/adops/setting-up-prebid-with-the-appnexus-ad-server.md +++ b/adops/setting-up-prebid-with-the-appnexus-ad-server.md @@ -80,7 +80,7 @@ Follow the banner creative setup instructions in [Add Creatives](https://docs.xa * Self-Audit the creative and confirm compliance. ```html - + +``` + +### User Sync + +Akcelo strongly recommends enabling user syncing through iFrames. This functionality +improves DSP user match rates and increases the bid rate and bid price. + +```js +// https://docs.prebid.org/dev-docs/publisher-api-reference/setConfig.html#setConfig-Configure-User-Syncing +pbjs.setConfig({ + userSync: { + filterSettings: { + iframe: { + bidders: ['akcelo'], + filter: 'include', + }, + }, + }, +}); +``` + +### First Party Data + +Akcelo supports both `ortb2` and `ortb2Imp` methods to set [First Party Data](/features/firstPartyData.html). + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|-------------------|----------|-------------------------------------------------------------------------------------------------|-------------------|----------------| +| `ortb2.site` | optional | Information about the publisher's website provided through an OpenRTB Site object. | N/A | `object` | +| `ortb2.user` | optional | Information about the advertising device's human user, provided through an OpenRTB User object. | N/A | `object` | +| `ortb2.device` | optional | Information about the user's device provided through an OpenRTB device object. | N/A | `object` | diff --git a/dev-docs/bidders/algorix.md b/dev-docs/bidders/algorix.md index 83265c579e..0edf4aba1a 100644 --- a/dev-docs/bidders/algorix.md +++ b/dev-docs/bidders/algorix.md @@ -9,7 +9,7 @@ usp_supported: true coppa_supported: true schain_supported: true media_types: banner, video, native -pbjs: false +pbjs: true pbs: true pbs_app_supported: true prebid_member: true @@ -21,7 +21,7 @@ userIds: all AlgoriX adapter requires setup and approval from the AlgoriX team, even for existing in-app developers and publishers. Please reach out to your account team or email to for more information. -### Bid Params +### Prebid Server Adapter Params {: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | @@ -37,3 +37,35 @@ Note: * Prebid Server adapter only checks for and uses first imp bid params. All other imp bid params are ignored. * placementId and appId will be generated on AlgoriX Platform. * region is optional param, which determine the AlgoriX server. APAC for SG endpoint, USE for US endpoint, EUC for EU endpoint, Other for Global endpoint. + +### Prebid.js Adapter Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +| ------------- | -------- | ------------- | ------------------------------------ | -------- | +| `sid` | required | Sid | `'260785'` | `string` | +| `token` | required | Token | `'89b6d58567e3913e507f2be61fe8823e'` | `string` | +| `region` | optional | Server Region | `'APAC', 'USE', 'EUC'` | `string` | + +### Test Parameters + +```javascript +var adUnits = [ +{ + sizes: [ + [300, 250] // a display size + ], + bids: [{ + bidder: 'algorix', + params: { + region: 'APAC', // optional + sid: '260785', // required + token: '89b6d58567e3913e507f2be61fe8823e', // required + } + }] +}]; +``` + +Note: + +* AlgoriX server-side Prebid Server adapter supports only `banner`, `video`,`native` media types. But AlgoriX client-side Prebid.js adapter supports only `banner`, doesn't support `video` and `native`. diff --git a/dev-docs/bidders/altstar.md b/dev-docs/bidders/altstar.md new file mode 100644 index 0000000000..4a637afc03 --- /dev/null +++ b/dev-docs/bidders/altstar.md @@ -0,0 +1,37 @@ +--- +layout: bidder +title: Altstar Media +description: Prebid Altstar Media Bidder Adaptor +biddercode: altstar +pbjs: true +pbs: false +media_types: video, banner +userIds: all +fpd_supported: false +tcfeu_supported: false +usp_supported: true +coppa_supported: true +schain_supported: true +prebid_member: false +ortb_blocking_supported: true +multiformat_supported: will-bid-on-one +floors_supported: false +aliasCode: limelightDigital +sidebarType: 1 +--- + +### Bid Params + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|:--------------|:---------|:---------------------------------------------------------|:-------------------------|:----------| +| `host` | required | Ad network's RTB host | `'ads-altstarmedia.com'` | `string` | +| `adUnitId` | required | Ad Unit Id will be generated on Altstar Media Platform. | `42` | `integer` | +| `adUnitType` | required | Type of Ad Unit (`'video'`, `'banner'`) | `'banner'` | `string` | +| `publisherId` | required | Publisher ID | `'12345'` | `string` | +| `custom1` | optional | Custom targeting field 1 | `'custom1'` | `string` | +| `custom2` | optional | Custom targeting field 2 | `'custom2'` | `string` | +| `custom3` | optional | Custom targeting field 3 | `'custom3'` | `string` | +| `custom4` | optional | Custom targeting field 4 | `'custom4'` | `string` | +| `custom5` | optional | Custom targeting field 5 | `'custom5'` | `string` | diff --git a/dev-docs/bidders/alvads.md b/dev-docs/bidders/alvads.md new file mode 100644 index 0000000000..8c6590608a --- /dev/null +++ b/dev-docs/bidders/alvads.md @@ -0,0 +1,33 @@ +--- +layout: bidder +title: Alvads +description: Prebid Alva Bidder Adapter +biddercode: alvads +tcfeu_supported: false +dsa_supported: false +gvl_id: none +usp_supported: true +coppa_supported: true +gpp_sids: none +schain_supported: false +dchain_supported: false +media_types: banner, video +safeframes_ok: false +deals_supported: false +floors_supported: true +fpd_supported: true +pbjs: true +pbs: false +prebid_member: false +multiformat_supported: will-bid-on-any +ortb_blocking_supported: partial +privacy_sandbox: no +sidebarType: 1 +--- + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|---------------|--------------------------------------------------------------------------|-----------| +| `publisherUniqueId` | required | Publisher Unique ID | `D7DACCE3-C23D-4AB9-8FE6-9FF41BF32F8F` | `string` | diff --git a/dev-docs/bidders/ampliffy.md b/dev-docs/bidders/ampliffy.md index 653794a1fd..daf211a984 100644 --- a/dev-docs/bidders/ampliffy.md +++ b/dev-docs/bidders/ampliffy.md @@ -12,7 +12,7 @@ multiformat_supported: will-bid-on-one safeframes_ok: true --- -## Table of contents +### Table of contents * [Table of contents](#table-of-contents) * [Introduction](#introduction) @@ -23,13 +23,13 @@ safeframes_ok: true * [Video](#video) * [Examples](#examples) -## Introduction +### Introduction Publishers can use Prebid.js to call Ampliffy through our client-side adapter: Prebid.js calls ampliffy directly from the browser using our client-side adapter. For configuration instructions, see the below on this page. ### Example -## Supported media types +### Supported media types The following table lists the media types that Ampliffy supports. @@ -41,7 +41,7 @@ The following table lists the media types that Ampliffy supports. | video | | native | -## Modules to include in your build process +### Modules to include in your build process If you are building the JS binary on your own from source code, follow the instructions in [Prebid.js project README](https://github.com/prebid/Prebid.js/blob/master/README.md#build-optimization). You will need to include the `ampliffyBidAdapter`. To show video ads with Google Ad Manager, you need to include the `dfpAdServerVideo` module. We highly recommend adding the `gptPreAuction` module as well, which improves a DSP's ability to bid accurately on your supply. The following is an example build command that include these modules:
`gulp build --modules=ampliffyBidAdapter,dfpAdServerVideo,gptPreAuction` @@ -56,7 +56,7 @@ If you are using a JSON file to specify modules, add `ampliffyBidAdapter` and `d ] ``` -## Bid request parameters +### Bid request parameters ### Banner @@ -82,7 +82,7 @@ You must include these parameters at the bidder level. | `format` | Required | String | specify 'video' for this kind of inventory` | | `server` | Optional | String | An Ampliffy-specific identifier that is associated with this ad unit` | -## Examples +### Examples **Video (instream):**
diff --git a/dev-docs/bidders/amx.md b/dev-docs/bidders/amx.md index b19d3bdce9..d912291823 100644 --- a/dev-docs/bidders/amx.md +++ b/dev-docs/bidders/amx.md @@ -33,7 +33,9 @@ sidebarType: 1 ### Bidder Settings -The AMX RTB bid adapter uses local storage. Please add `storageAllowed` in your bidder settings: +The AMX RTB bid adapter uses local storage. Please add `storageAllowed` in your bidder settings. + +{% include dev-docs/storageAllowed.md %} ```js // https://docs.prebid.org/dev-docs/publisher-api-reference/bidderSettings.html diff --git a/dev-docs/bidders/aniview.md b/dev-docs/bidders/aniview.md index bf101762d3..0001dce443 100644 --- a/dev-docs/bidders/aniview.md +++ b/dev-docs/bidders/aniview.md @@ -1,16 +1,21 @@ --- layout: bidder -title: ANIVIEW -description: Prebid ANIVIEW Bidder Adapter +title: Aniview +description: Prebid Aniview Bidder Adapter pbjs: true biddercode: aniview media_types: banner, video +gpp_sids: tcfeu, tcfca, usnat, usstate_all, usp +ortb_blocking_supported: true +multiformat_supported: will-bid-on-any tcfeu_supported: true +floors_supported: true usp_supported: true schain_supported: true safeframes_ok: true gvl_id: 780 sidebarType: 1 +userIds: all --- ### Note @@ -20,29 +25,131 @@ For more information about [Aniview Ad Server](https://www.aniview.com/), please ### Bid Params {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|------------------|----------|------------------|------------------------------|----------| -| `AV_PUBLISHERID` | required | Publisher/Netid | `'55b88d4a181f465b3e8b4567'` | `string` | -| `AV_CHANNELID` | required | Channel id | `'5a5f17a728a06102d14c2718'` | `string` | +| Name | Scope | Description | Example | Type | +|------------------|----------|-----------------------|----------------------|----------| +| `AV_PUBLISHERID` | required | Publisher/Network ID | `'Get from Aniview'` | `string` | +| `AV_CHANNELID` | required | Channel ID | `'Get from Aniview'` | `string` | -### Test Parameters +### Setup for Video ```javascript -const videoAdUnit = [ -{ - code: 'video1', +const adUnit = [{ + code: 'videoAdUnit', mediaTypes: { video: { + // Required playerSize: [[640, 480]], - context: 'outstream' + context: 'outstream', + mimes: ['video/mp4', 'video/mpeg', 'application/javascript'], + + // Optional + playbackmethod: [1, 2], + protocols: [1, 2, 3, 5, 6, 7, 8], + api: [1, 2], + maxduration: 60, + plcmt: 4, }, }, bids: [{ bidder: 'aniview', params: { - AV_PUBLISHERID: '55b78633181f4603178b4568', - AV_CHANNELID: '5d19dfca4b6236688c0a2fc4' - } - }] + // Required + AV_PUBLISHERID: 'Get from Aniview', + AV_CHANNELID: 'Get from Aniview', + }, + }], +}]; +``` + +### Setup for Banner + +```javascript +const adUnit = [{ + code: 'bannerAdUnit', + mediaTypes: { + banner: { + // Required + sizes: [[300, 250], [300, 600]], + }, + }, + bids: [{ + bidder: 'aniview', + params: { + // Required + AV_PUBLISHERID: 'Get from Aniview', + AV_CHANNELID: 'Get from Aniview', + }, + }], +}]; +``` + +### Setup for Multi-format (Banner & Video) + +```javascript +const adUnit = [{ + code: 'multiformatAdUnit', + mediaTypes: { + banner: { + // Required + sizes: [[300, 250], [300, 600]], + }, + video: { + // Required + playerSize: [[640, 480]], + context: 'outstream', + mimes: ['video/mp4', 'video/mpeg', 'application/javascript'], + }, + }, + bids: [{ + bidder: 'aniview', + params: { + // Required + AV_PUBLISHERID: 'Get from Aniview', + AV_CHANNELID: 'Get from Aniview', + }, + }], }]; ``` + +### Bidder specific configs + +```javascript +pbjs.setBidderConfig({ + bidders: ['aniview'], + config: { + ortb2: { + ext: { + aniview: { + // Additional data to send to the Ad Server + }, + }, + }, + }, +}, true); +``` + +### User Sync example + +```javascript +pbjs.setConfig({ + userSync: { + filterSettings: { + // Iframe and Image + all: { + bidders: ['aniview'], + filter: 'include', + }, + + // Or you can specify which type should be enabled/disabled: + iframe: { + bidders: ['aniview'], + filter: 'include', + }, + image: { + bidders: '*', // '*' represents all bidders + filter: 'include', // or 'exclude' + }, + }, + }, +}); +``` diff --git a/dev-docs/bidders/anyclip.md b/dev-docs/bidders/anyclip.md index e4ae4913cb..5468ed391f 100644 --- a/dev-docs/bidders/anyclip.md +++ b/dev-docs/bidders/anyclip.md @@ -25,7 +25,7 @@ sidebarType: 1 ### Note -For more information about [AnyClip](https://www.anyclip.com), please contact [support@anyclip.com](support@anyclip.com). +For more information about [AnyClip](https://www.anyclip.com), please contact . ### Bid Params diff --git a/dev-docs/bidders/anzu.md b/dev-docs/bidders/anzu.md new file mode 100644 index 0000000000..874ffa8d0b --- /dev/null +++ b/dev-docs/bidders/anzu.md @@ -0,0 +1,39 @@ +--- +layout: bidder +title: Anzu +description: Anzu Bidder Adapter +biddercode: anzu +aliasCode : smarthub +usp_supported: true +coppa_supported: true +schain_supported: true +dchain_supported: true +media_types: banner, video, native +safeframes_ok: true +deals_supported: true +floors_supported: true +fpd_supported: false +pbjs: true +pbs: false +pbs_app_supported: true +multiformat_supported: will-bid-on-any +--- + +### Prebid.js Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|---------------------------------|-------------------------------------|-----------| +| `seat` | required | Seat value | `'9Q20EdGxzgWdfPYShScl'` | `string` | +| `token` | required | Token | `'eKmw6alpP3zWQhRCe3flOpz0wpuwRFjW'` | `string` | +| `iabCat` | optional | Array of IAB content categories that describe the content producer | `['IAB1-1', 'IAB3-1', 'IAB4-3']` | `Array(String)` | +| `minBidfloor` | optional | Minimal CPM value | `0.03` | `float` | +| `pos` | optional | The position of the placement on the page, see Open RTB spec v2.5. | `4` | `number` | + +### Prebid Server Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|---------------------|--------------------------------------|----------| +| `seat` | required | Seat value | `'9Q20EdGxzgWdfPYShScl'` | `string` | +| `token` | required | Token | `'eKmw6alpP3zWQhRCe3flOpz0wpuwRFjW'` | `string` | diff --git a/dev-docs/bidders/anzuExchange.md b/dev-docs/bidders/anzuExchange.md new file mode 100644 index 0000000000..9126a13afb --- /dev/null +++ b/dev-docs/bidders/anzuExchange.md @@ -0,0 +1,37 @@ +--- +layout: bidder +title: Anzu Exchange +description: Prebid Anzu Exchange Bidder Adaptor +biddercode: anzuExchange +pbjs: true +pbs: false +media_types: video, banner +userIds: all +fpd_supported: false +tcfeu_supported: false +usp_supported: true +coppa_supported: true +schain_supported: true +prebid_member: false +ortb_blocking_supported: true +multiformat_supported: will-bid-on-one +floors_supported: false +aliasCode: limelightDigital +sidebarType: 1 +--- + +### Bid Params + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|:--------------|:---------|:----------------------------------------------------------|:-----------------------|:----------| +| `host` | required | Ad network's RTB host | `'marketplace-anzu.io'`| `string` | +| `adUnitId` | required | Ad Unit Id will be generated on Anzu Exchange Platform. | `42` | `integer` | +| `adUnitType` | required | Type of Ad Unit (`'video'`, `'banner'`) | `'banner'` | `string` | +| `publisherId` | required | Publisher ID | `'12345'` | `string` | +| `custom1` | optional | Custom targeting field 1 | `'custom1'` | `string` | +| `custom2` | optional | Custom targeting field 2 | `'custom2'` | `string` | +| `custom3` | optional | Custom targeting field 3 | `'custom3'` | `string` | +| `custom4` | optional | Custom targeting field 4 | `'custom4'` | `string` | +| `custom5` | optional | Custom targeting field 5 | `'custom5'` | `string` | diff --git a/dev-docs/bidders/appStockSSP.md b/dev-docs/bidders/appStockSSP.md new file mode 100644 index 0000000000..e49e3a424f --- /dev/null +++ b/dev-docs/bidders/appStockSSP.md @@ -0,0 +1,37 @@ +--- +layout: bidder +title: AppStockSSP +description: Prebid AppStockSSP Bidder Adapter +biddercode: appStockSSP +gpp_sids: usstate_all +tcfeu_supported: true +usp_supported: true +coppa_supported: true +schain_supported: true +deals_supported: false +floors_supported: true +fpd_supported: false +ortb_blocking_supported: false +media_types: banner, video, native +multiformat_supported: will-not-bid +userIds: all +pbjs: true +pbs: true +pbs_app_supported: true +safeframes_ok: true +gvl_id: 1223 +sidebarType: 1 +--- + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|--------------|---------------------------------|------------| +| `placementId` | optional | Placement Id | `'0'` | `'string'` | +| `endpointId` | optional | Endpoint Id | `'0'` | `'string'` | +| `region` | optional | Region (for Prebid.js) | `'us-east'` (default) or `'eu'` or `'apac'` | `'string'` | + +### Note + +For the prebid server and prebid.js you only need to use one parameter: either placementId or endpointId. diff --git a/dev-docs/bidders/appnexus.md b/dev-docs/bidders/appnexus.md index a8dff8af88..5d190a1250 100644 --- a/dev-docs/bidders/appnexus.md +++ b/dev-docs/bidders/appnexus.md @@ -28,6 +28,7 @@ sidebarType: 1 - [Video Object](#video-object) - [User Object](#user-object) - [App Object](#app-object) + - [Video Bid params and Video MediaTypes params](#video-bid-params-and-video-mediatypes-params) - [Custom Targeting keys](#custom-targeting-keys) - [Auction Level Keywords](#auction-level-keywords) - [Passing Keys Without Values](#passing-keys-without-values) @@ -40,11 +41,14 @@ sidebarType: 1 {: .alert.alert-danger :} -All AppNexus (Xandr) placements included in a single call to `requestBids` must belong to the same parent Publisher. If placements from two different publishers are included in the call, the AppNexus bidder will not return any demand for those placements.
+All AppNexus (Microsoft/Xandr) placements included in a single call to `requestBids` must belong to the same parent Publisher. If placements from two different publishers are included in the call, the AppNexus bidder will not return any demand for those placements.
*Note: This requirement does not apply to adapters that are [aliasing](/dev-docs/publisher-api-reference/aliasBidder.html) the AppNexus adapter.* #### Bid Params +{: .alert.alert-danger :} +Starting with Prebid.js version 9.0, an update was made to the `appnexusBidAdapter.js` file to remove the support for the `transformBidParams` function. Previously this standard adapter function was used in conjunction of Prebid.js > PBS requests to modify any bid params for that bidder to the bid param format used by the PBS endpoint. Part of the changes for 9.0 in general were to remove these functions from the client-side adapter files, in order to reduce the build size of Prebid.js for those publishers who wanted to make the PBS requests. In the case of our adapter, we instead created a new module named `anPspParamsConverter` that would mimic behavior of the `transformBidParams` function. There's no setup instructions needed on the Prebid.js configs, the module only needs to be included in the Prebid.js build file and it will perform the needed steps. If you have any questions on this change, please reach out to your Microsoft representative and they can help. + {: .alert.alert-danger :} Starting with Prebid.js version 7.36.0, an update was made to the `appnexusBidAdapter.js` file to support bid params in a lower-case underscore format (eg `invCode` to `inv_code`) similar to how the params are formatted for the Prebid Server AppNexus bidder. This change was implemented to streamline publisher setups for both projects instead of maintaining separate versions of the same params depending on what setup is used. To avoid breaking changes, the old 'camelCase' format is still currently supported for all AppNexus bid params in the `appnexusBidAdapter.js` file. If you are using an older version of Prebid.js, you will need to continue to use the older 'camelCase' format as appropriate. @@ -61,10 +65,10 @@ The table below will reflect both formats, though it's recommended to use the lo | `user` | optional | Object that specifies information about an external user. See [User Object](#appnexus-user-object) for details. | `user: { age: 25, gender: 0, dnt: true}` | `object` | | `allowSmallerSizes` or `allow_smaller_sizes` | optional | If `true`, ads smaller than the values in your ad unit's `sizes` array will be allowed to serve. Defaults to `false`. | `true` | `boolean` | | `usePaymentRule` (PBJS) or `use_pmt_rule` (PBS+PBJS) | optional | If `true`, Appnexus will return net price to Prebid.js after publisher payment rules have been applied. | `true` | `boolean` | -| `keywords` | optional | A set of key-value pairs applied to all ad slots on the page. Mapped to [buy-side segment targeting](https://monetize.xandr.com/docs/segment-targeting) (login required). A maximum of 100 key/value pairs can be defined at the page level. Each tag can have up to 100 additional key/value pairs defined. Values can be empty. See [Passing Keys Without Values](#appnexus-no-value) below for examples. If you want to pass keywords for all adUnits, see [Auction Level Keywords](#appnexus-auction-keywords) for an example. Note that to use keyword with the Prebid Server adapter, that feature must be enabled for your account by an AppNexus account manager. | `keywords: { genre: ['rock', 'pop'] }` | `object` | +| `keywords` | optional | A set of key-value pairs applied to all ad slots on the page. Mapped to [buy-side segment targeting](https://learn.microsoft.com/en-us/xandr/monetize/segment-targeting) (login required). A maximum of 100 key/value pairs can be defined at the page level. Each tag can have up to 100 additional key/value pairs defined. Values can be empty. See [Passing Keys Without Values](#appnexus-no-value) below for examples. If you want to pass keywords for all adUnits, see [Auction Level Keywords](#appnexus-auction-keywords) for an example. Note that to use keyword with the Prebid Server adapter, that feature must be enabled for your account by an AppNexus account manager. | `keywords: { genre: ['rock', 'pop'] }` | `object` | | `video` | optional | Object containing video targeting parameters. See [Video Object](#appnexus-video-object) for details. | `video: { playback_method: ['auto_play_sound_off'] }` | `object` | | `app` | optional | Object containing mobile app parameters. See the [App Object](#appnexus-app-object) for details. | `app : { id: 'app-id'}` | `object` | -| `reserve` | optional | Sets a floor price for the bid that is returned. If floors have been configured in the AppNexus Console, those settings will override what is configured here unless 'Reserve Price Override' is checked. See [Xandr docs](https://docs.xandr.com/bundle/monetize_monetize-standard/page/topics/create-a-floor-rule.html) | `0.90` | `float` | +| `reserve` | optional | Sets a floor price for the bid that is returned. If floors have been configured in the AppNexus Console, those settings will override what is configured here unless 'Reserve Price Override' is checked. See [Microsoft Learn](https://learn.microsoft.com/en-us/xandr/monetize/create-a-floor-rule) | `0.90` | `float` | | `position` | optional | Identify the placement as above or below the fold. Allowed values: Unknown: `unknown`; Above the fold: `above`; Below the fold: `below` | `'above'` | `string` | | `trafficSourceCode` or `traffic_source_code` | optional | Specifies the third-party source of this impression. | `'my_traffic_source'` | `string` | | `supplyType` or `supply_type` | optional | Indicates the type of supply for this placement. Possible values are `web`, `mobile_web`, `mobile_app` | `'web'` | `string` | @@ -77,12 +81,14 @@ The table below will reflect both formats, though it's recommended to use the lo #### Video Object +For details on how these video params work with the params set in the adUnit.mediaTypes.video object, see [Video Bid params and Video MediaTypes params](#appnexus-video-params) section below. + {: .table .table-bordered .table-striped } | Name | Description | Type | |-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------| | `minduration` | Integer that defines the minimum video ad duration in seconds. | `integer` | | `maxduration` | Integer that defines the maximum video ad duration in seconds. | `integer` | -|`context` | A string that indicates the type of video ad requested. Allowed values: `"pre_roll"`; `"mid_roll"`; `"post_roll"`; `"outstream"`. | `string` | +|`context` | A string that indicates the type of video ad requested. Allowed values: `"pre_roll"`; `"mid_roll"`; `"post_roll"`; `"outstream"`; `"in-banner"`, `"in-feed"`, `"interstitial"`, `"accompanying_content_pre_roll"`, `"accompanying_content_mid_roll"`, `"accompanying_content_post_roll"`. | `string` | | `skippable` | Boolean which, if `true`, means the user can click a button to skip the video ad. Defaults to `false`. | `boolean` | |`skipoffset`| Integer that defines the number of seconds until an ad can be skipped. Assumes `skippable` setting was set to `true`. | `integer` | | `playback_method` | A string that sets the playback method supported by the publisher. Allowed values: `"auto_play_sound_on"`; `"auto_play_sound_off"`; `"click_to_play"`; `"mouse_over"`; `"auto_play_sound_unknown"`. | `string` | @@ -147,6 +153,16 @@ pbjs.bidderSettings = { } ``` + + +#### Video Bid params and Video MediaTypes params + +It is possible to have setup video params within the adUnit's AppNexus bid object as well as in the adUnit's `mediaTypes.video` object. In this case, there is a set of logic that the AppNexus bid adapter follows to resolve which values should be passed along to the ad server request. Generally speaking, the adapter prefers the values from bid param video object over the mediaTypes video object, in order to preserve historical setups. So for instance, if the playbackmethod field was set in both locations, then the bid params `playback_method` would be chosen over the mediaTypes `playbackmethod`. If there are different fields set between the two locations and they don't overlap, then the `mediaTypes.video` params would be included along with the bid params. + +To note - not all the fields between the two locations have a single direct comparison, nor are all fields from the `mediaTypes.video` object are supported by the ad server endpoint. The fields/values set in the `mediaTypes.video` object follow the OpenRTB convention, while our bid params follow the convention for the ad server endpoint (which is **not** a straight OpenRTB endpoint). The AppNexus bid adapter converts the matching fields from the `mediaTypes.video` object where there is a correlation to help support as much as possible. For example, to help infer the `context` field, the adapter will look to the `mediaTypes.video.plcmt`, `mediaTypes.video.startdelay`, and `mediaTypes.video.placement` fields to help determine the appropriate `context` value. The `startdelay` field is included here to help clarify the type of instream video that is used (ie pre/mid/post-roll). + +If you want to transition from video bid params to use the `mediaTypes.video` params (to simplify the adUnit setup), please contact your AppNexus contact to help identify the proper fields/values are populated to ensure a smooth transition. + #### Auction Level Keywords diff --git a/dev-docs/bidders/artechnology.md b/dev-docs/bidders/artechnology.md new file mode 100644 index 0000000000..ecb0b3f28a --- /dev/null +++ b/dev-docs/bidders/artechnology.md @@ -0,0 +1,31 @@ +--- +layout: bidder +title: Artechnology +description: Artechnology Bidder Adapter +biddercode: artechnology +aliasCode : smarthub +usp_supported: true +coppa_supported: true +schain_supported: true +dchain_supported: true +media_types: banner, video, native +safeframes_ok: true +deals_supported: true +floors_supported: true +fpd_supported: false +pbjs: true +pbs: true +pbs_app_supported: true +multiformat_supported: true +--- + +### Prebid.js Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|---------------------------------|-------------------------------------|-----------| +| `seat` | required | Seat value | `'9Q20EdGxzgWdfPYShScl'` | `string` | +| `token` | required | Token | `'eKmw6alpP3zWQhRCe3flOpz0wpuwRFjW'` | `string` | +| `iabCat` | optional | Array of IAB content categories that describe the content producer | `['IAB1-1', 'IAB3-1', 'IAB4-3']` | `Array(String)` | +| `minBidfloor` | optional | Minimal CPM value | `0.03` | `float` | +| `pos` | optional | The position of the placement on the page, see Open RTB spec v2.5. | `4` | `number` | diff --git a/dev-docs/bidders/aso.md b/dev-docs/bidders/aso.md index 3f87d72d84..cdd6ff6bf4 100644 --- a/dev-docs/bidders/aso.md +++ b/dev-docs/bidders/aso.md @@ -58,7 +58,7 @@ Note that the Adserver.Online adapter expects a client-side Prebid Cache to be e ```js pbjs.setConfig({ cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' + url: 'https://prebid.example.com/pbc/v1/cache' } }); ``` diff --git a/dev-docs/bidders/attekmi.md b/dev-docs/bidders/attekmi.md new file mode 100644 index 0000000000..f2c22d9b58 --- /dev/null +++ b/dev-docs/bidders/attekmi.md @@ -0,0 +1,42 @@ +--- +layout: bidder +title: Attekmi +description: Attekmi Bidder Adapter +biddercode: smarthub +usp_supported: true +media_types: banner, video, native +tcfeu_supported: false +pbjs: true +pbs: true +coppa_supported: true +schain_supported: true +dchain_supported: true +safeframes_ok: true +deals_supported: true +floors_supported: true +fpd_supported: false +pbs_app_supported: true +multiformat_supported: true +sidebarType: 1 +--- + +### Prebid.js Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|---------------------------------|-------------------------------------|-----------| +| `partnerName` | required | Unique partner name | `'partnertest'` | `string` | +| `seat` | required | Seat value | `'9Q20EdGxzgWdfPYShScl'` | `string` | +| `token` | required | Token | `'eKmw6alpP3zWQhRCe3flOpz0wpuwRFjW'` | `string` | +| `iabCat` | optional | Array of IAB content categories that describe the content producer | `['IAB1-1', 'IAB3-1', 'IAB4-3']` | `Array(String)` | +| `minBidfloor` | optional | Minimal CPM value | `0.03` | `float` | +| `pos` | optional | The position of the placement on the page, see Open RTB spec v2.5. | `4` | `number` | + +### Prebid Server Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|---------------------|--------------------------------------|----------| +| `partnerName` | required | Unique partner name | `'partnertest'` | `string` | +| `seat` | required | Seat value | `'9Q20EdGxzgWdfPYShScl'` | `string` | +| `token` | required | Token | `'eKmw6alpP3zWQhRCe3flOpz0wpuwRFjW'` | `string` | diff --git a/dev-docs/bidders/audiencemedia.md b/dev-docs/bidders/audiencemedia.md index c81575e8ee..22df58259d 100644 --- a/dev-docs/bidders/audiencemedia.md +++ b/dev-docs/bidders/audiencemedia.md @@ -3,23 +3,28 @@ layout: bidder title: Audience Media description: Prebid Audience Media Bidder Adaptor biddercode: audiencemedia -pbjs: true -pbs: false -media_types: banner, native, video -gvl_id: 14 (adkernel) +aliasCode: adkernel tcfeu_supported: true +dsa_supported: false +gvl_id: 14 (adkernel) usp_supported: true coppa_supported: true -gpp_supported: true -pbs_app_supported: true +gpp_sids: tcfeu, usp schain_supported: true -userIds: all +dchain_supported: false +userId: all +media_types: banner, video, native +safeframes_ok: true +deals_supported: false +floors_supported: true fpd_supported: true +pbjs: true +pbs: false +pbs_app_supported: false prebid_member: false +multiformat_supported: will-bid-on-any ortb_blocking_supported: true -multiformat_supported: will-bid-on-one -floors_supported: true -aliasCode: adkernel +privacy_sandbox: no sidebarType: 1 --- diff --git a/dev-docs/bidders/bcm.md b/dev-docs/bidders/bcm.md index 1f1de2e6b9..bacb49f791 100644 --- a/dev-docs/bidders/bcm.md +++ b/dev-docs/bidders/bcm.md @@ -3,23 +3,28 @@ layout: bidder title: BCM description: BCM Bid Adapter biddercode: bcm -pbjs: true -pbs: false -media_types: banner, native, video -gvl_id: 14 (adkernel) +aliasCode: adkernel tcfeu_supported: true +dsa_supported: false +gvl_id: 14 (adkernel) usp_supported: true coppa_supported: true -gpp_supported: true -pbs_app_supported: true +gpp_sids: tcfeu, usp schain_supported: true -userIds: all +dchain_supported: false +userId: all +media_types: banner, video, native +safeframes_ok: true +deals_supported: false +floors_supported: true fpd_supported: true +pbjs: true +pbs: false +pbs_app_supported: false prebid_member: false +multiformat_supported: will-bid-on-any ortb_blocking_supported: true -multiformat_supported: will-bid-on-one -floors_supported: true -aliasCode: adkernel +privacy_sandbox: no sidebarType: 1 --- diff --git a/dev-docs/bidders/bcmint.md b/dev-docs/bidders/bcmint.md index 2fd3001dac..b5126cc3ab 100644 --- a/dev-docs/bidders/bcmint.md +++ b/dev-docs/bidders/bcmint.md @@ -38,7 +38,7 @@ Note that the BCM International adapter expects a client-side Prebid Cache to be ```js pbjs.setConfig({ cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' + url: 'https://prebid.example.com/pbc/v1/cache' } }); ``` diff --git a/dev-docs/bidders/beop.md b/dev-docs/bidders/beop.md index ef0799f8ac..00365c998e 100644 --- a/dev-docs/bidders/beop.md +++ b/dev-docs/bidders/beop.md @@ -12,16 +12,91 @@ usp_supported: false floors_supported: true schain_supported: true sidebarType: 1 +dsa_supported: false +coppa_supported: false +gpp_sids: tcfeu +dchain_supported: false +userIds: none +safeframes_ok: false +deals_supported: false +fpd_supported: true +prebid_member: false +multiformat_supported: will-bid-on-one +ortb_blocking_supported: false +privacy_sandbox: no --- ### Disclosure -The BeOp bidder adaptor needs an account id that you can find as a publisher, a reseller or a media group directly in your BeOp platform access. We also need to approve your account to be available for BeOp demand, so don't hesitate to reach your account manager or for more information. +The BeOp bidder adapter requires an `accountId` or `networkId`, which you can retrieve from your BeOp platform dashboard (as a publisher, reseller, or media group). To activate BeOp demand on your account, please contact your account manager or reach out to . ### Bid Params {: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | |---------------|----------|-------------|---------|----------| -| `accountId` or `networkId` | required | Your BeOp account ID | `'5a8af500c9e77c00017e4cad'` | `string` | -| `currency` | optional | Your currency | `'EUR'` (default) or `'USD'` | `string` | +| `accountId` or `networkId` | required | Your BeOp account ID (24-character hex string) | `'5a8af500c9e77c00017e4cad'` | `string` | +| `networkPartnerId` | optional | Your internal network partner ID (used for advanced partner tracking) | `'MY-WEBSITE-123'` | `string` | +| `currency` | optional | Preferred bidding currency (defaults to `'EUR'`) | `'EUR'` or `'USD'` | `string` | +| `keywords` | optional | Contextual keywords string or array to help target your campaign | `'cars, racing'` or `['cars', 'racing']` | `string/array` | + +### User Syncs + +BeOp supports iframe and pixel-based user syncs using the `getUserSyncs` method. + +{: .table .table-bordered .table-striped } +| Type | Supported | Description | +|------|-----------|-------------| +| iframe | yes | A sync iframe may be returned by the bidder response via `syncFrame`. | +| pixel | yes | Additional sync pixels can be returned via `syncPixels` array in the bid response body. | + +> Syncs are GDPR-aware and only triggered when appropriate consent is provided. + +### GDPR Compliance + +- Vendor ID: `666` +- BeOp supports TCFv2 and relies on the `gdprApplies` and `consentString` fields in the bid request. +- If no valid consent is found, external user syncs will be disabled. + +### Cookie Usage + +BeOp sets a first-party cookie `beopid` for frequency capping and user session purposes. This ID is anonymized and used to improve campaign performance, capping logic, and personalization within publisher domains. + +### First-Party Data Support + +BeOp fully supports First-Party Data (FPD) and leverages it to enhance both targeting and audience intelligence for publishers. + +- Audience Enrichment: BeOp campaigns often include interactive formats (polls, quizzes, votes) that collect high-quality declarative data. This data can be matched against publisher segments to enrich their DMPs (Data Management Platforms). +- Publisher-Centric Segments: Collected FPD (such as quiz responses, poll preferences, etc.) can be made available to the publisher under consent, allowing creation of custom audience segments usable across future campaigns. +- Ortb2 Integration: BeOp reads ortb2.user.ext.data, ortb2.user.ext.bpsegs, and similar fields in the bid request to enhance match rates and ensure contextually relevant responses. +- Respect for Privacy: All data is handled in accordance with GDPR, with processing based on user consent and transparent storage mechanisms. + +Thanks to BeOp’s unique interactive formats, publishers benefit not only from monetization, but also from deeper understanding and activation of their audiences through real-time feedback. + +### Test Parameters + +```js +var adUnits = [ + { + code: "div-id", + mediaTypes: { + banner: { + sizes: [ + [300, 250], + [1, 1], + ], + }, + }, + bids: [ + { + bidder: "beop", + params: { + accountId: "5a8af500c9e77c00017e4cad", + currency: "EUR", + keywords: ["sports", "elections"], + }, + }, + ], + }, +]; +``` diff --git a/dev-docs/bidders/bidbuddy.md b/dev-docs/bidders/bidbuddy.md index 0cafaa8a77..d7fb29872d 100644 --- a/dev-docs/bidders/bidbuddy.md +++ b/dev-docs/bidders/bidbuddy.md @@ -3,23 +3,28 @@ layout: bidder title: Bidbuddy description: Bidbuddy Bidder Adaptor biddercode: bidbuddy -pbjs: true -pbs: false -media_types: banner, native, video -gvl_id: 14 (adkernel) +aliasCode: adkernel tcfeu_supported: true -gpp_supported: true +dsa_supported: false +gvl_id: 14 (adkernel) usp_supported: true coppa_supported: true -pbs_app_supported: true +gpp_sids: tcfeu, usp schain_supported: true -userIds: all +dchain_supported: false +userId: all +media_types: banner, video, native +safeframes_ok: true +deals_supported: false +floors_supported: true fpd_supported: true +pbjs: true +pbs: false +pbs_app_supported: false prebid_member: false +multiformat_supported: will-bid-on-any ortb_blocking_supported: true -multiformat_supported: will-bid-on-one -floors_supported: true -aliasCode: adkernel +privacy_sandbox: no sidebarType: 1 --- diff --git a/dev-docs/bidders/bidgency.md b/dev-docs/bidders/bidgency.md index 541557fc33..e5617a3c7e 100644 --- a/dev-docs/bidders/bidgency.md +++ b/dev-docs/bidders/bidgency.md @@ -38,7 +38,7 @@ Note that the Bidgency Group adapter expects a client-side Prebid Cache to be en ```js pbjs.setConfig({ cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' + url: 'https://prebid.example.com/pbc/v1/cache' } }); ``` diff --git a/dev-docs/bidders/bidsmind.md b/dev-docs/bidders/bidsmind.md new file mode 100644 index 0000000000..08d5c146a5 --- /dev/null +++ b/dev-docs/bidders/bidsmind.md @@ -0,0 +1,115 @@ +--- +layout: bidder +title: Bidsmind +description: Prebid Bidsmind Bidder Adapter +aliasCode: adverxo +pbjs: true +pbs: true +pbs_app_supported: true +biddercode: bidsmind +userIds: +media_types: banner, native, video +schain_supported: true +dchain_supported: false +ortb_blocking_supported: true +floors_supported: true +multiformat_supported: will-bid-on-any +tcfeu_supported: false +dsa_supported: false +gvl_id: none +usp_supported: false +coppa_supported: false +gpp_sids: none +userId: no +safeframes_ok: false +deals_supported: true +fpd_supported: true +prebid_member: false +privacy_sandbox: no +sidebarType: 1 +--- + +### Note + +The Bidsmind Bidding adapter requires setup and approval before beginning. Please reach out to for +more details. + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------|----------|-----------------------|---------------------------|----------| +| `adUnitId` | required | Unique identifier for the ad unit in Bidsmind platform. | `1` | `integer` | +| `auth` | required | Authentication token provided by Bidsmind platform for the AdUnit. | `'61336e75e414c77c367eq5c47c2599ce80a8032b'` | `string` | + +### Setting First Party Data (FPD) + +Publishers should use the `ortb2` method of setting First Party Data. The following fields are supported: + +- ortb2.site.\* +- ortb2.app.\* +- ortb2.user.\* + +Example first party data: + +```javascript +pbjs.setConfig({ + ortb2: { + site: { + keywords: "kw1,kw2", + content: { + title: "title1", + series: "series1" + } + }, + user: { + keywords: "a,b", + gender: "M", + yob: 1984 + } + } +}); +``` + +### ORTB Blocking + +Bidsmind supports the next blocking parameters: + +- Blocked advertisers list (`badv`) is an array of domains as strings. +- Blocked apps list (`bapp`) is an array of apps names as strings, for mobile apps in Google Play Store, these should be + bundle or package names (e.g. com.foo.mygame). For apps in Apple App Store, these should be a numeric ID. +- Blocked categories list (`bcat`) is an array of IAB categories as strings. +- Blocked attributes list (`battr`) is an array of integers. Refer to section 5.3 of the IAB specification for a list of + attributes. + +#### Globally defined ORTB Blocking + +```javascript +pbjs.setConfig({ + ortb2: { + badv: ["domain1.com", "domain2.com"], + bapp: ["com.foo.mygame", "284708449"], + bcat: ["IAB23-1", "IAB23-5", "IAB25-3", "IAB25-2"] + } +}); +``` + +#### ORTB Blocking specific only to the Bidsmind bidder + +```javascript +pbjs.setBidderConfig({ + bidders: ['bidsmind'], // Or alias + config: { + ortb2: { + badv: ["domain1.com", "domain2.com"], + bapp: ["com.foo.mygame"], + bcat: ["IAB23-1", "IAB23-5", "IAB25-3", "IAB25-2"] + } + } +}); +``` + +#### Media Type defined ORTB Blocking + +Additionally `battr` ORTB blocking param may be set on media types to specify blocked creative +attributes. Refer to section 5.3 of the IAB specification for a list of attributes. diff --git a/dev-docs/bidders/bidtheatre.md b/dev-docs/bidders/bidtheatre.md new file mode 100644 index 0000000000..17e70f2eb5 --- /dev/null +++ b/dev-docs/bidders/bidtheatre.md @@ -0,0 +1,52 @@ +--- +layout: bidder +title: Bidtheatre +description: Bidtheatre Prebid Bidder Adapter +biddercode: bidtheatre +gvl_id: 30 +tcfeu_supported: true +media_types: banner, video +safeframes_ok: true +deals_supported: true +floors_supported: true +fpd_supported: true +ortb_blocking_supported: partial +multiformat_supported: will-bid-on-one +privacy_sandbox: topics +pbjs: true +sidebarType: 1 +pbs: true +pbs_app_supported: true +--- + +### Registration + +The Bidtheatre bidding adapter requires manual set up before use. Please contact us at [operations@bidtheatre.com](mailto:operations@bidtheatre.com) if you would like to access Bidtheatre's demand. + +### Bid Params + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|---------------|----------|-----------------------|-----------|-----------| +| `publisherId` | required | Manually set up publisher ID | `'73b20b3a-12a0-4869-b54e-8d42b55786ee'` | `string` | + +In addition to the required bid param above, Bidtheatre will also enforce the following requirements + +- All ad slots on a page must belong to the same publisher ID +- The publisher must provide either a client IP and/or explicit geo data in the request + +### First Party Data + +Publishers should use the `ortb2` method of setting First Party Data. All standard OpenRTB 2.5 properties are supported, including but not limited to + +- ortb2.site.* +- ortb2.user.* + +### ORTB Blocking + +`bcat`, `badv` and `battr` are all supported. + +### Media Types + +All standard OpenRTB 2.5 properties are supported for both banner and video. Bidtheatre Bidding adapter will always return VAST 2.0 or lower for video requests. diff --git a/dev-docs/bidders/bigoad.md b/dev-docs/bidders/bigoad.md new file mode 100644 index 0000000000..4629ede58c --- /dev/null +++ b/dev-docs/bidders/bigoad.md @@ -0,0 +1,37 @@ +--- +layout: bidder +title: BigoAd +description: Prebid BigoAd Bidder Adapter +biddercode: bigoad +tcfeu_supported: false +gvl_id: none +usp_supported: false +coppa_supported: true +gpp_sids: none +schain_supported: true +dchain_supported: false +userId: none +media_types: banner, video, native +safeframes_ok: false +deals_supported: false +floors_supported: false +fpd_supported: false +pbjs: false +pbs: true +pbs_app_supported: false +prebid_member: false +multiformat_supported: will-bid-on-one +ortb_blocking_supported: true +privacy_sandbox: no +--- + +### Registration + +The BigoAd Bidding adapter requires setup before beginning. Please contact us at + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|--------------------------------------------------------|------------|----------| +| `sspid` | required | Ssp ID, This parameter expects all imps to be the same | `"123"` | `string` | diff --git a/dev-docs/bidders/bitmedia.md b/dev-docs/bidders/bitmedia.md new file mode 100644 index 0000000000..482a1724b9 --- /dev/null +++ b/dev-docs/bidders/bitmedia.md @@ -0,0 +1,225 @@ +--- +layout: bidder +title: Bitmedia +description: Prebid Bitmedia Bidder Adapter +biddercode: bitmedia +pbjs: true +pbs: false +gvl_id: none +tcfeu_supported: false +usp_supported: false +coppa_supported: false +gpp_sids: none +schain_supported: false +dchain_supported: false +userId: none +media_types: banner +safeframes_ok: true +deals_supported: false +floors_supported: true +fpd_supported: false +ortb_blocking_supported: false +multiformat_supported: will-not-bid +privacy_sandbox: no +prebid_member: false +sidebarType: 1 +--- + + +### Table of Contents + +- [Table of Contents](#table-of-contents) +- [Description](#description) +- [Bid Params](#bid-params) +- [Test Parameters](#test-parameters) +- [Testing Instructions](#testing-instructions) + + + +### Description + +The Bitmedia Bid Adapter allows publishers to integrate with BitmediaIO for banner advertising. + +#### Key Points + +- Supported Media Type: **Banner** +- Bids are only provided in **USD**. +- Access to **local storage** is optional. + +Before using this adapter, simply [create a publisher account](https://bitmedia.io/become-a-publisher) on our platform to obtain your `adUnitID`. + +More about us: [https://bitmedia.io](https://bitmedia.io) + + + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|--------------|----------|------------------------------------|-------------------|----------| +| `adUnitID` | required | The ad unit ID from Bitmedia | `'exampleAdUnitID'` | `string` | +| `currency` | optional | Currency of the bid (default: USD) | `'USD'` | `string` | + + + +## Test Parameters +### Example + +```javascript +var adUnits = [ + { + code: 'banner-div', + mediaTypes: { + banner: { + sizes: [[300, 250], [300, 600]], + }, + }, + bids: [{ + bidder: 'bitmedia', + params: { + adUnitID: 'exampleAdUnitID', + currency: 'USD', + }, + }], + }, +]; +``` + +--- + +## Testing Instructions + +The HTML file below can be used to test the integration of the Bitmedia Bid Adapter. + +### Simple Test HTML + +{% include dev-docs/storageAllowed.md %} + +```html + + + + + + + + + + + + + + + + + + +

Ad Serverless Test Page

+ +
+
+
+ + +``` diff --git a/dev-docs/bidders/bizzclick.md b/dev-docs/bidders/bizzclick.md deleted file mode 100644 index 15872a4126..0000000000 --- a/dev-docs/bidders/bizzclick.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -layout: bidder -title: BizzClick -description: Prebid BizzClick Bidder Adaptor -biddercode: bizzclick -tcfeu_supported: false -usp_supported: true -coppa_supported: true -schain_supported: true -media_types: banner, video, native -safeframes_ok: true -deals_supported: true -pbjs: true -pbs: true -pbs_app_supported: true -sidebarType: 1 -floors_supported: true -prebid_member: false -fpd_supported: false -gvl_id: none -multiformat_supported: will-bid-on-one -ortb_blocking_supported: true -userIds: all ---- - -### Note - -The Example Bidding adapter requires setup before beginning. Please contact us at .BizzClick will only respond to the first impression and that multiple ad formats of that single impression are not supported. - -### Bid Params for Prebid Server and Prebid Mobile - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|-----------------------|-----------|-----------| -| `sourceId` | required | Unique hash provided by bizzclick | `'6dllcEHSxYdSb6yLmCqE'` | `string` | -| `accountId` | required | Unique name provided by bizzclick | `'bizzclick-test'` | `string` | -| `host` | optional | Bizzclick server region. US East by default | `'us-e-node1'` | `string` | -| `placementId` | required | Deprecated parameter. Please use sourceId instead |`'6dllcEHSxYdSb6yLmCqE'`|`string` | - -### Bid Params for Prebid.js - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|-----------------------|-----------|-----------| -| `sourceId` | required | Unique hash provided by bizzclick | `'6dllcEHSxYdSb6yLmCqE'` | `string` | -| `accountId` | required | Unique name provided by bizzclick | `'bizzclick-test'` | `string` | -| `host` | optional | Bizzclick server region. US East by default | `'us-e-node1'` | `string` | diff --git a/dev-docs/bidders/blasto.md b/dev-docs/bidders/blasto.md new file mode 100644 index 0000000000..cda556c3a6 --- /dev/null +++ b/dev-docs/bidders/blasto.md @@ -0,0 +1,48 @@ +--- +layout: bidder +title: Blasto +description: Prebid Blasto Bidder Adaptor +biddercode: blasto +tcfeu_supported: false +usp_supported: true +coppa_supported: true +schain_supported: true +media_types: banner, video, native +safeframes_ok: true +deals_supported: true +pbjs: true +pbs: true +pbs_app_supported: true +sidebarType: 1 +floors_supported: true +prebid_member: false +fpd_supported: false +gvl_id: none +multiformat_supported: will-bid-on-one +ortb_blocking_supported: true +userIds: all +--- + +### Note + +The Example Bidding adapter requires setup before beginning. Please contact us at . +Blasto will only respond to the first impression. + +### Bid Params for Prebid Server +Blasto supports diffrent regions for the prebid server. By default US East. +Please deploy the prebid config in each of your datacenters with the appropriate regional subdomain. + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|-----------------------|-----------|-----------| +| `sourceId` | required | Unique hash provided by blasto | `'6dllcEHSxYdSb6yLmCqE'` | `string` | +| `accountId` | required | Unique name provided by blasto | `'blasto-test'` | `string` | + +### Bid Params for Prebid.js + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|-----------------------|-----------|-----------| +| `sourceId` | required | Unique hash provided by blasto | `'6dllcEHSxYdSb6yLmCqE'` | `string` | +| `accountId` | required | Unique name provided by blasto | `'blasto-test'` | `string` | +| `host` | optional | Blasto server region. US East by default | `'us-e-node1'` | `string` | diff --git a/dev-docs/bidders/blis.md b/dev-docs/bidders/blis.md new file mode 100644 index 0000000000..0555f34539 --- /dev/null +++ b/dev-docs/bidders/blis.md @@ -0,0 +1,41 @@ +--- +layout: bidder +title: blis +description: Prebid Blis Bidder Adapter +biddercode: blis +tcfeu_supported: true +gvl_id: 94 +usp_supported: true +coppa_supported: true +gpp_sids: tcfeu, usnat, usp +schain_supported: true +dchain_supported: false +userId: adserver, liveramp, sharedid, pubcid, id5-sync, criteo, quantcast +media_types: banner, video, native +safeframes_ok: false +deals_supported: true +floors_supported: true +fpd_supported: false +pbjs: false +pbs: true +pbs_app_supported: true +prebid_member: true +multiformat_supported: will-bid-on-one +ortb_blocking_supported: partial +privacy_sandbox: no +--- + +### Registration + +Blis adapter requires setup before beginning. Please contact us at . + +### ORTB Blocking + +Blis bidder supports bcat, badv and battr. + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|-------------------------------------------|-----------|----------| +| `spid` | required | Unique supply partner ID provided by Blis | `'999'` | `string` | diff --git a/dev-docs/bidders/blue.md b/dev-docs/bidders/blue.md index f7200c9154..5f5bab5674 100644 --- a/dev-docs/bidders/blue.md +++ b/dev-docs/bidders/blue.md @@ -27,3 +27,4 @@ The bidder requires setup before usage. Please get in touch with our publisher t | Name | Scope | Description | Example | Type | |---------------|----------|---------------------|---------------|----------| | `publisherId` | required | Unique publisher ID | `'ABCDEF'` | `string` | +| `placementId` | optional | Unique placement ID | `'ABCDEF'` | `string` | diff --git a/dev-docs/bidders/bluebillywig.md b/dev-docs/bidders/bluebillywig.md index 33c8a43772..53ae1c57c0 100644 --- a/dev-docs/bidders/bluebillywig.md +++ b/dev-docs/bidders/bluebillywig.md @@ -11,6 +11,7 @@ schain_supported: true coppa_supported: true usp_supported: true userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId +pbjs_version_notes: removed in 9.0 sidebarType: 1 --- diff --git a/dev-docs/bidders/bms.md b/dev-docs/bidders/bms.md new file mode 100644 index 0000000000..d1cf2205b8 --- /dev/null +++ b/dev-docs/bidders/bms.md @@ -0,0 +1,30 @@ +--- +layout: bidder +title: Blue Media Services LTDA +description: Prebid BMS Bidder Adapter +tcfeu_supported: true +pbjs: true +pbs: false +biddercode: bms +prebid_member: false +floors_supported: true +safeframes_ok: true +media_types: banner +schain_supported: true +userIds: id5Id, identityLink, pubProvidedId +pbs_app_supported: false +gvl_id: 1105 +sidebarType: 1 +--- + +### Note + +The bidder requires setup before usage. Please get in touch with our publisher team at to get started. + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|---------------------|---------------|----------| +| `publisherId` | required | Unique publisher ID | `'ABCDEF'` | `string` | +| `placementId` | optional | Unique placement ID | `'ABCDEF'` | `string` | diff --git a/dev-docs/bidders/brainx.md b/dev-docs/bidders/brainx.md new file mode 100644 index 0000000000..331b2adbe3 --- /dev/null +++ b/dev-docs/bidders/brainx.md @@ -0,0 +1,37 @@ +--- +layout: bidder +title: brainx +description: Prebid brainx Bidder Adapter +biddercode: brainx +tcfeu_supported: false +dsa_supported: false +gvl_id: none +usp_supported: false +coppa_supported: false +gpp_sids: none +schain_supported: true +dchain_supported: false +media_types: banner +safeframes_ok: false +deals_supported: true +floors_supported: true +fpd_supported: false +pbjs: true +pbs: false +prebid_member: false +multiformat_supported: will-bid-on-any +ortb_blocking_supported: true +sidebarType: 1 +--- + +### Registration + +If you have any questions regarding set up, please reach out to your account manager or . + +### Bid Parameters + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +| ---------- | ------------ | ------------------------------------ | -------------------------------------- | -------- | +| `pubId` | required | Placement Id | `F7B53DBC-85C1-4685-9A06-9CF4B6261FA3` | `string` | +| `endpoint` | Not required | The endpoint provided by Brainx Url. | `https://dsp.brainx.tech/bid` | `string` | diff --git a/dev-docs/bidders/bridgeupp.md b/dev-docs/bidders/bridgeupp.md new file mode 100644 index 0000000000..4bbbec8a92 --- /dev/null +++ b/dev-docs/bidders/bridgeupp.md @@ -0,0 +1,70 @@ +--- +layout: bidder +title: Bridgeupp +description: Bridgeupp Bidder Adapter +biddercode: sonarads +tcfeu_supported: true +usp_supported: true +gvl_id: 1300 +coppa_supported: true +schain_supported: true +media_types: banner +pbjs: true +pbs_app_supported: true +sidebarType: 1 +multiformat_supported: will-bid-on-any +safeframes_ok: false +deals_supported: false +floors_supported: true +fpd_supported: false +pbs: false +--- + +### Note + +The Bridgeupp Prebid adapter requires a setup to create a Site IDs. Please contact your Bridgeupp partner manager for setup assistance. +For queries, write to us at + +### Bid Params + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|---------------|----------|----------------------|----------|----------| +| `siteId` | required | Placement ID | `'1234'` | `string` | +| `bidfloor` | optional | Minimum price in USD | `'1.50'` | `float` | + +### First Party Data + +Bridgeupp supports both `ortb2` and `ortb2Imp` methods to set [First Party Data](https://docs.prebid.org/features/firstPartyData.html). +Propertis like : + +| Name | Scope | Description | Example | Type | +|-------------------|----------|-------------------------------------------------------------------------------------------------|-------------------|----------------| +| `ortb2.site` | optional | Information about the publisher's website provided through an OpenRTB Site object. | N/A | `object` | +| `ortb2.user` | optional | Information about the advertising device's human user, provided through an OpenRTB User object. | N/A | `object` | +| `ortb2.device` | optional | Information about the user's device provided through an OpenRTB device object. | N/A | `object` | +| `ortb2.bcat` | optional | Blocked advertiser categories using the IAB content categories. | `[ "IAB25" ]` | `string array` | +| `ortb2.badv` | optional | Block list of advertisers by their domains | `[ "ford.com" ]` | `string array` | + +### Example Ad-Units + +#### Banner + +```javascript + var adUnits = [{ + code: 'test-div', + mediaTypes: { + banner: { + sizes: [[300, 250], [336, 336]] + } + }, + bids: [{ + bidder: 'sonarads', + params: { + siteId: 'site-id-example-132', // siteId provided by Bridgeupp + bidfloor: 0.01 + } + }] + }]; +``` diff --git a/dev-docs/bidders/brightcom.md b/dev-docs/bidders/brightcom.md deleted file mode 100644 index 2953aba6a7..0000000000 --- a/dev-docs/bidders/brightcom.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -layout: bidder -title: Brightcom -description: Prebid Brightcom Bidder Adaptor -top_nav_section: dev_docs -nav_section: reference -pbjs: true -biddercode: brightcom -gvl_id: 883 -tcfeu_supported: true -sidebarType: 1 ---- - -### Note - -The Brightcom bidder adapter requires setup and approval from the Brightcom team. Please reach out to your account manager for more information and to start using it. - -### Bid params - -{: .table .table-bordered .table-striped } - -| Name | Scope | Description | Example | Type | -| ---- | ----- | ----------- | ------- | ---- | -| `publisherId` | required | The publisher ID from Brightcom | `2141020` | `integer` | -| `bidFloor` | optional | The minimum bid value desired | `1.23` | `float` | diff --git a/dev-docs/bidders/brightcomssp.md b/dev-docs/bidders/brightcomssp.md deleted file mode 100644 index d78e661a67..0000000000 --- a/dev-docs/bidders/brightcomssp.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -layout: bidder -title: Brightcom SSP -description: Prebid Brightcom SSP Bidder Adaptor -top_nav_section: dev_docs -nav_section: reference -pbjs: true -biddercode: bcmssp -filename: brightcomSSPBidAdapter -tcfeu_supported: true -usp_supported: true -coppa_supported: true -schain_supported: true -sidebarType: 1 -gvl_id: 883 -floors_supported: true ---- - -### Note - -The Brightcom SSP bidder adapter requires setup and approval from the Brightcom team. Please reach out to your account manager for more information and to start using it. - -### Bid params - -{: .table .table-bordered .table-striped } - -| Name | Scope | Description | Example | Type | -| ---- | ----- | ----------- | ------- | ---- | -| `publisherId` | required | The publisher ID from Brightcom | `2141020` | `integer` | -| `bidFloor` | optional | The minimum bid value desired | `1.23` | `float` | diff --git a/dev-docs/bidders/browsi.md b/dev-docs/bidders/browsi.md index 7f548f0b90..5ca38ae574 100644 --- a/dev-docs/bidders/browsi.md +++ b/dev-docs/bidders/browsi.md @@ -20,12 +20,13 @@ For more information about [Browsi](https://www.browsi.com), please contact [sup ### Bid Params {: .table .table-bordered .table-striped } + | Name | Scope | Description | Example | Type | |------------------|----------|------------------|------------------------------|----------| | `pubId` | required | Publisher ID | `'117a476f-9791-4a82-80db-4c01c1683db0'` | `string` | | `tagId` | required | Tag ID | `'1'` | `string` | -# Sample Ad Unit: For Publishers +### Sample Ad Unit: For Publishers ```javascript let videoAdUnit = [ diff --git a/dev-docs/bidders/bwx.md b/dev-docs/bidders/bwx.md index fd3b2e9cac..d21e097742 100644 --- a/dev-docs/bidders/bwx.md +++ b/dev-docs/bidders/bwx.md @@ -5,7 +5,7 @@ description: BoldwinX Bidder Adapter biddercode: bwx media_types: banner, video, native coppa_supported: true -tcfeu_supported: false +tcfeu_supported: true usp_supported: true prebid_member: false pbjs: false @@ -15,6 +15,7 @@ floors_supported: true multiformat_supported: will-bid-on-any sidebarType: 1 safeframes_ok: true +gvl_id: 1151 --- ### Prebid Server Bid Params diff --git a/dev-docs/bidders/caroda.md b/dev-docs/bidders/caroda.md index 2b20b41273..9580de1bd6 100644 --- a/dev-docs/bidders/caroda.md +++ b/dev-docs/bidders/caroda.md @@ -14,7 +14,6 @@ schain_supported: true userIds: all gvl_id: 954 floors_supported: true -multiformat_supported: will-bid-on-any, will-bid-on-one fpd_supported: true safeframes_ok: true ortb_blocking_supported: false @@ -27,6 +26,7 @@ sidebarType: 1 The Caroda Bidding adapter requires setup before beginning. Please contact us on {: .table .table-bordered .table-striped } + | Name | Scope | Description | Example | Type | |---------------|----------------------------|-----------------------------------------------------------------|-------------------|-----------| | `ctok` | required | id unique to a customer | `"abcdef"` | `string` | diff --git a/dev-docs/bidders/cleanmedianet.md b/dev-docs/bidders/cleanmedianet.md index 2035fd58e0..920038d7c7 100644 --- a/dev-docs/bidders/cleanmedianet.md +++ b/dev-docs/bidders/cleanmedianet.md @@ -4,30 +4,151 @@ title: Clean Media Net description: Clean Media Bidder Adapter biddercode: cleanmedianet pbjs: true +pbs: true media_types: banner, video -tcfeu_supported: false -usp_supported: true -coppa_supported: false +userIds: all +gvl_id: 644 +tcfeu_supported: true +tcf2_supported: true schain_supported: true -floors_supported: true -userIds: -prebid_member: false -safeframes_ok: true -deals_supported: false -pbs_app_supported: false -fpd_supported: false -ortb_blocking_supported: false -gvl_id: -multiformat_supported: will-bid-on-any +usp_supported: true +ortb_blocking_supported: true +multiformat_supported: will-bid-on-one +sidebarType: 1 +aliasCode: gamoshi --- -### Disclosure - -Note: This bidder appears to only consider gdprApplies if a consent string is available. This may result in some incorrect GDPR processing, such as when the consent string is not yet available but the publisher has decided GDPR always applies. See - ### Bid params {: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | -|-------------------+----------+--------------------------------------------------------+-------------------------+---------| -| `supplyPartnerId` | required | The supply account's ID in your Clean Media dashboard. | `"1253"`, `"1254"`, etc | string | +|-------------------|----------|---------------------------------------------------------------|----------------------|----------| +| `supplyPartnerId` or `inventory_id` or `supply_partner_id` | required | ID of the supply partner. This parameter can be either a `string` or `integer` for Prebid.js, however `integer` is preferred | `12345` | `integer` | +| `bidfloor` | optional | Minimum acceptable bid price. Must be a positive number. | `0.5` | `number` | +| `instl` | optional | Interstitial flag (1 for interstitial, 0 for non-interstitial). | `1` | `integer` | +| `pos` | optional | Ad position on the page. | `1` | `integer` | +| `video` | optional | Object containing video targeting parameters. See [Video Object](#video-object) for details. | `video: { playback_method: ['auto_play_sound_off'] }` | `object` | + +This adapter only requires you to provide your Inventory Id (Supply partner id), and optionally your RTB endpoint. + +#### Video Object + +For details on how these video params work with the params set in the adUnit.mediaTypes.video object. + +{: .table .table-bordered .table-striped } +| Name | Description | Type | +|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------| +| `minduration` | Integer that defines the minimum video ad duration in seconds. | `integer` | +| `maxduration` | Integer that defines the maximum video ad duration in seconds. | `integer` | +| `protocols` | Array of integers listing the supported video protocols (VAST versions). | `Array` | +| `mimes` | Array of strings listing the supported MIME types for the video creative. | `Array` | +| `pos` | Ad position on the screen. | `integer` | +| `api` | Array of integers listing the supported API frameworks. | `Array` | +| `skip` | Indicates if the player will allow the video to be skipped (0 = no, 1 = yes). | `integer` | +| `plcmt` | Video placement type. | `integer` | +| `placement` | Placement type for the impression. | `integer` | +| `playbackmethod` | Array of integers listing the playback methods. | `Array` | +| `startdelay` | Indicates the offset of the ad placement from the start of the video content. | `integer` | +| `context` | Content context (e.g., 'instream', 'outstream'). | `string` | + +### Example Ad Unit Configurations + +#### Banner Ad Unit + +```javascript +var adUnits = [ + { + code: 'banner-div', + mediaTypes: { + banner: { + sizes: [[300, 250], [728, 90]] + } + }, + bids: [ + { + bidder: 'cleanmedianet', + params: { + supplyPartnerId: 12345, + bidfloor: 0.5, + pos: 1 + } + } + ] + } +]; +``` + +#### Video Ad Unit (Instream) + +```javascript +var adUnits = [ + { + code: 'video-div', + mediaTypes: { + video: { + playerSize: [[640, 480]], + context: 'instream', + mimes: ['video/mp4', 'video/webm'], + protocols: [2, 3, 5, 6], + maxduration: 30, + api: [1, 2] + } + }, + bids: [ + { + bidder: 'cleanmedianet', + params: { + supplyPartnerId: 12345, + video: { + minduration: 5, + maxduration: 30, + protocols: [2, 3, 5, 6], + mimes: ['video/mp4', 'video/webm'], + playbackmethod: [2], + skip: 1, + startdelay: 0, + api: [1, 2], + plcmt: 1 + } + } + } + ] + } +]; +``` + +#### Video Ad Unit (Outstream) + +```javascript +var adUnits = [ + { + code: 'outstream-div', + mediaTypes: { + video: { + playerSize: [[640, 480]], + context: 'outstream', + mimes: ['video/mp4', 'video/webm'] + } + }, + bids: [ + { + bidder: 'cleanmedianet', + params: { + supplyPartnerId: 12345, + rendererUrl: 'https://example.com/outstream-renderer.js', + video: { + minduration: 5, + maxduration: 30, + protocols: [2, 3, 5, 6], + mimes: ['video/mp4', 'video/webm'], + playbackmethod: [2], + placement: 3, + plcmt: 3, + context: 'outstream' + } + } + } + ] + } +]; +``` diff --git a/dev-docs/bidders/cointraffic.md b/dev-docs/bidders/cointraffic.md index 336d71f251..e97e89fdf6 100644 --- a/dev-docs/bidders/cointraffic.md +++ b/dev-docs/bidders/cointraffic.md @@ -3,6 +3,7 @@ layout: bidder title: Cointraffic description: Prebid Cointraffic Bidder Adaptor pbjs: true +pbs: true biddercode: cointraffic sidebarType: 1 --- diff --git a/dev-docs/bidders/colossus.md b/dev-docs/bidders/colossus.md index a377f317eb..4b16843149 100644 --- a/dev-docs/bidders/colossus.md +++ b/dev-docs/bidders/colossus.md @@ -14,10 +14,6 @@ pbs_app_supported: true sidebarType: 1 --- -### Disclosure - -This adapter is known to use an HTTP 1 endpoint. Header bidding often generates multiple requests to the same host and bidders are encouraged to change to HTTP 2 or above to help improve publisher page performance via multiplexing. - ### Prebid.Server Bid Params {: .table .table-bordered .table-striped } diff --git a/dev-docs/bidders/colossusssp.md b/dev-docs/bidders/colossusssp.md index 4edb102200..57d78f1ab9 100644 --- a/dev-docs/bidders/colossusssp.md +++ b/dev-docs/bidders/colossusssp.md @@ -22,4 +22,4 @@ sidebarType: 1 | `group_id` | optional | Group Id will be generated on Colossus SSP Platform. Use instead of placement_id | `0` | `integer` | | `traffic` | optional | Type traffic | `'banner'` | `string` | -*For colossus prebid server parametres, look into colossus.md* +*For colossus prebid server parameters, look into colossus.md* diff --git a/dev-docs/bidders/compass.md b/dev-docs/bidders/compass.md index 49b7428af3..f962d3f7ef 100644 --- a/dev-docs/bidders/compass.md +++ b/dev-docs/bidders/compass.md @@ -8,6 +8,7 @@ tcfeu_supported: true coppa_supported: true schain_supported: true floors_supported: true +gpp_sids: tcfeu, usstate_all, usp media_types: banner, video, native pbjs: true pbs: true diff --git a/dev-docs/bidders/conceptx.md b/dev-docs/bidders/conceptx.md index eb5520af43..efd4c875c4 100644 --- a/dev-docs/bidders/conceptx.md +++ b/dev-docs/bidders/conceptx.md @@ -3,7 +3,8 @@ layout: bidder title: Conceptx description: Conceptx bidder adapter biddercode: conceptx -tcfeu_supported: false +tcfeu_supported: true +gvl_id: 1340 usp_supported: false coppa_supported: false schain_supported: false diff --git a/dev-docs/bidders/concert.md b/dev-docs/bidders/concert.md index 40f627720a..fa2c3f1bdf 100644 --- a/dev-docs/bidders/concert.md +++ b/dev-docs/bidders/concert.md @@ -4,8 +4,11 @@ title: Concert description: Prebid Concert Bidder Adaptor hide: true pbjs: true +pbs: true biddercode: concert -media_types: banner +media_types: banner, audio, video +pbs_app_supported: true +deals_supported: true tcfeu_supported: false usp_supported: true gpp_supported: true diff --git a/dev-docs/bidders/condorx.md b/dev-docs/bidders/condorx.md new file mode 100644 index 0000000000..79fbdbeabf --- /dev/null +++ b/dev-docs/bidders/condorx.md @@ -0,0 +1,132 @@ +--- +layout: bidder +title: CondorX +description: Prebid CondorX Bidder Adapter +biddercode: condorx +tcfeu_supported: true +dsa_supported: false +gvl_id: 1375 +usp_supported: false +coppa_supported: false +schain_supported: true +dchain_supported: false +media_types: banner, native +safeframes_ok: false +deals_supported: false +floors_supported: true +fpd_supported: false +pbjs: true +pbs: false +prebid_member: false +multiformat_supported: will-bid-on-any +ortb_blocking_supported: false +privacy_sandbox: no +sidebarType: 1 +--- + +### Note + +The CondorX Bidding adapter requires setup before beginning. Please contact us at [CondorX](https://condorx.io). + +### Bid params + +| Name | Scope | Description | Example | Type | Default | +|----------|----------|-------------------------------------------------------------|----------------------|---------|---------| +| `widget` | required | The widget ID, by CondorX | `12345` | integer | - | +| `website`| required | The website ID, by CondorX | `12345` | integer | - | +| `url` | optional | Current url | `https://condorx.io` | string | `'current url'` | +| `bidfloor` | optional | Minimum bid price in USD | `0.50` | number | `-1` | +| `useOpenRTB` | optional | Enable OpenRTB format requests | `true` | boolean | `false` | + +### Request Formats + +The adapter supports both legacy and OpenRTB request formats: + +#### Legacy Format (Default) +Uses GET request to legacy endpoint: + +```http +GET https://api.condorx.io/cxb/get.json +``` + +#### OpenRTB Format +Uses POST request to OpenRTB endpoint: + +```http +POST https://api.condorx.io/cxb/openrtb.json +``` + +To enable OpenRTB format, set `useOpenRTB: true` in the bid parameters. + +### Example Ad Units + +```javascript +var adUnits = [{ + code: 'condorx-container-id', + mediaTypes: { + banner: { + sizes: [[300, 250]], + } + }, + bids: [{ + bidder: "condorx", + params: { + widget: 'widget id by CondorX', + website: 'website id by CondorX', + url:'current url', + bidfloor: 0.50 + } + }] +}, + { + code: 'condorx-container-id', + mediaTypes: { + native: { + image: { + required: true, + sizes: [236, 202] + }, + title: { + required: true, + len: 100 + }, + sponsoredBy: { + required: true + }, + clickUrl: { + required: true + }, + body: { + required: true + } + } + }, + bids: [{ + bidder: "condorx", + params: { + widget: 'widget id by CondorX', + website: 'website id by CondorX', + url:'current url', + bidfloor: 0.75 + } + }] + }, + { + code: 'condorx-container-id', + mediaTypes: { + banner: { + sizes: [[728, 90]], + } + }, + bids: [{ + bidder: "condorx", + params: { + widget: 'widget id by CondorX', + website: 'website id by CondorX', + url:'current url', + bidfloor: 1.00, + useOpenRTB: true + } + }] + }]; +``` diff --git a/dev-docs/bidders/connatix.md b/dev-docs/bidders/connatix.md index d961bb7cac..f72c364cb0 100644 --- a/dev-docs/bidders/connatix.md +++ b/dev-docs/bidders/connatix.md @@ -11,13 +11,13 @@ gpp_sids: tcfeu, usp schain_supported: false dchain_supported: false userId: none -media_types: banner +media_types: video, banner safeframes_ok: true deals_supported: true floors_supported: true fpd_supported: false pbjs: true -pbs: false +pbs: true prebid_member: false multiformat_supported: will-bid-on-one ortb_blocking_supported: true @@ -27,28 +27,109 @@ sidebarType: 1 ### Bid Params {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | +| Name | Scope | Description | Example | Type | |---------------|----------|-----------------------|-----------|-----------| -| `placementId` | required | Placement id | `'ed8a9c16-88ea-4724-aa0d-013c3e595e49'` | `string` | -| `bidfloor` | optional | Floor price | `2.5` | `float` | +| `placementId` | required | Placement id | `'ed8a9c16-88ea-4724-aa0d-013c3e595e49'` | `string` | +| `bidfloor` | optional | Floor price | `2.5` | `float` | +| `viewabilityPercentage` | optional | The viewability percentage during the action time must be a value between 0 and 1 | `0.25` | `float` | +| `viewabilityContainerIdentifier` | optional | The container ID for viewability measurement | `'#containerID'` | `string` | -#### Example +### Media Types + +#### Video + +The following parameters are available for `mediaTypes.video`. + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------------|--------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------|-----------| +| context | recommended | instream or outstream |"instream" | string | +| playerSize| required | width, height of the player in pixels | [640,360] - will be translated to w and h in bid request | Array\ | +| mimes | recommended | List of content MIME types supported by the player (see openRTB v2.5 for options) | ["video/mp4"]| Array\| +| protocols | recommended | Supported video bid response protocol values
1: VAST 1.0
2: VAST 2.0
3: VAST 3.0
4: VAST 1.0 Wrapper
5: VAST 2.0 Wrapper
6: VAST 3.0 Wrapper
7: VAST 4.0
8: VAST 4.0 Wrapper | [2,3,5,6] | Array\| +| linearity | recommended | OpenRTB2 linearity. 1: linear (in-stream ad), 2: non-linear (overlay ad) | 1 | integer | +| maxduration | recommended | Maximum video ad duration in seconds. | 30 | integer | +| minduration | recommended | Minimum video ad duration in seconds | 6 | integer | +| playbackmethod | recommended | Playback methods that may be in use. Only one method is typically used in practice. (see [openRTB v2.5](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf) section 5.10 for options)| [2]| Array\ | +| api | optional | Supported API framework values:
1: VPAID 1.0
2: VPAID 2.0
3: MRAID-1
4: ORMMA
5: MRAID-2 | [2] | Array\ | +| skip | optional | Indicates if the player will allow the video to be skipped, where 0 = no, 1 = yes. | 1 | integer | +| skipmin | optional | Videos of total duration greater than this number of seconds can be skippable; only applicable if the ad is skippable. | 30 | integer | +| skipafter| optional | Number of seconds a video must play before skipping is enabled; only applicable if the ad is skippable. | 6 | integer| +| minbitrate | optional | Minimum bit rate in Kbps. | 300 | integer | +| maxbitrate | optional | Maximum bit rate in Kbps. | 9600 | integer | +| startdelay | recommended | Indicates the start delay in seconds for pre-roll, mid-roll, or post-roll ad placements.
>0: Mid-Roll (value indicates start delay in second)
0: Pre-Roll
-1: Generic Mid-Roll
-2: Generic Post-Roll | 0 | integer | +| placement | recommended | Placement type for the impression. (see OpenRTB v2.5 section 5.9 for options) | 1 | integer | +| plcmt | recommended | Placement type for the impression. (See [OpenRTB v2.6](https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/develop/AdCOM%20v1.0%20FINAL.md) Plcmt Subtypes - Video) | 1 | integer | +| pos | optional | OpenRTB page position value: 0=unknown, 1=above-the-fold, 3=below-the-fold, 4=header, 5=footer, 6=sidebar, 7=full-screen | 1 | integer | + +**Example video** + +```javascript +var adUnits = [ + { + code: "1", + mediaTypes: { + video: { + context: "instream", + w: 1280, + h: 720, + playerSize: [1280, 720], // recommended + placement: 1, + plcmt: 1, + api: [1, 2], + mimes: ["video/mp4", "application/javascript"], + minduration: 30, + maxduration: 60, + startdelay: 0, + }, + }, + bids: [ + { + bidder: "connatix", + params: { + placementId: "e4984e88-9ff4-45a3-8b9d-33aabcad634e", // required + bidfloor: 2.5, // optional + }, + }, + // Add more bidders and their parameters as needed + ], + }, + // Define more ad units here if necessary +]; +``` + +#### Banner + +The following parameters are available for `mediaTypes.banner`. + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------------|--------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------|-----------| +| sizes| required | All the sizes of the banner this ad unit can accept. | [[300, 250], [300, 600]] | \[number, number\][] | +| pos | optional | OpenRTB page position value: 0=unknown, 1=above-the-fold, 3=below-the-fold, 4=header, 5=footer, 6=sidebar, 7=full-screen | 1 | integer | + +**Example banner** ```js var adUnits = [ { - code: '1', + code: "1", mediaTypes: { banner: { - sizes: [[640, 480], [320, 180]], + sizes: [ + [640, 480], + [320, 180], + ], }, }, bids: [ { - bidder: 'connatix', + bidder: "connatix", params: { - placementId: 'e4984e88-9ff4-45a3-8b9d-33aabcad634e', // required + placementId: "e4984e88-9ff4-45a3-8b9d-33aabcad634e", // required bidfloor: 2.5, // optional + viewabilityPercentage: 0.25, // optional - 25% in view + viewabilityContainerIdentifier: '#containerID', // optional }, }, // Add more bidders and their parameters as needed @@ -60,7 +141,7 @@ var adUnits = [ ### Configuration -To maximize revenue efficiency, please enable ```iframe``` user syncing. +To maximize revenue efficiency, please enable `iframe` user syncing. Connatix strongly recommends enabling user syncing through iFrames. This functionality improves DSP user match rates and increases the bid rate and bid price. Make sure to call `pbjs.setConfig()` only once. This configuration is optional in Prebid, but required by Connatix. @@ -71,10 +152,10 @@ pbjs.setConfig({ userSync: { filterSettings: { iframe: { - bidders: ['connatix'], - filter: 'include' - } - } - } + bidders: ["connatix"], + filter: "include", + }, + }, + }, }); ``` diff --git a/dev-docs/bidders/connektai.md b/dev-docs/bidders/connektai.md new file mode 100644 index 0000000000..9c018e820c --- /dev/null +++ b/dev-docs/bidders/connektai.md @@ -0,0 +1,35 @@ +--- +layout: bidder +title: connekt.ai +description: Prebid connekt.ai Bidder Adaptor +biddercode: connektai +media_types: banner, video +coppa_supported: true +tcfeu_supported: false +usp_supported: true +prebid_member: false +pbjs: false +pbs: true +schain_supported: true +floors_supported: true +multiformat_supported: will-bid-on-any +sidebarType: 1 +dchain_supported: false +deals_supported: true +fpd_supported: false +ortb_blocking_supported: true +safeframes_ok: true +privacy_sandbox: no +--- + +### Note + +The connekt.ai adapter requires setup before beginning. Please contact us at + +### Prebid Server Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|-------------|----------|-----------------------------|------------------------------------|-----------| +| `env` | required | Environment name | `stage` | `string` | +| `pid` | required | Uniq placement ID | `ab230510222b516f0eb9a10e5913d3b5` | `string` | diff --git a/dev-docs/bidders/consumable-server.md b/dev-docs/bidders/consumable-server.md index 5f5119652f..9643324237 100644 --- a/dev-docs/bidders/consumable-server.md +++ b/dev-docs/bidders/consumable-server.md @@ -33,6 +33,7 @@ The Consumable bid adapter may cycle the ad initially shown with a new one at va ### Bid Params {: .table .table-bordered .table-striped } + | Name | Scope | Description | Example | Type | |-------------|----------|--------------------------------|---------|-----------| | `siteId` | required | The site ID from Consumable. | `12345` | `integer` | @@ -41,7 +42,7 @@ The Consumable bid adapter may cycle the ad initially shown with a new one at va | `unitName` | required | The unit name from Consumable. | `cnsmbl-unit` | `string` | | `placementId` | required | the placementid from Consumable. | `0421008445828ceb46f496700a5fa65e` | `string` | -## Table of contents +### Table of contents * [Table of contents](#table-of-contents) * [Introduction](#introduction) @@ -55,7 +56,7 @@ The Consumable bid adapter may cycle the ad initially shown with a new one at va * [App](#app-or-ctv-banner-video-audio) * [Examples](#examples) -## Introduction +### Introduction Publishers can use Prebid Server in any of the following ways with Consumable. Consumable's adapter supports all of the following methods: @@ -63,18 +64,19 @@ Publishers can use Prebid Server in any of the following ways with Consumable. C * In mobile apps, you can use the Prebid Mobile SDK to call Prebid Server and then Prebid Server uses our server-side adapter to call Consumable. For set up instructions, see [Call Consumable from Prebid Mobile SDK](#call-consumable-from-prebid-mobile-sdk) section on this page. * In CTV apps and other long-form video environments, you (or the SSAI vendor) can make a call to Prebid Server using OpenRTB, and then Prebid Server uses our server-side adapter to call Consumable. For set up instructions, see [Call Consumable from CTV/long-form video environment](#call-consumable-from-ctvlong-form-video-environment) section on this page. -## Supported media types +### Supported media types -The following table lists the media types that Consumable supports. For information about the the Time-To-Live (TTL) for each media type, see [How Consumable counts impressions](https://kb.Consumableexchange.com/publishers/billing/how_Consumable_counts_impressions.htm) in our Knowledge Base. +The following table lists the media types that Consumable supports. {: .table .table-bordered .table-striped } + | Type | Prebid Server support | | ----------- | ----------- | | banner | Supported | | video | Supported, including ad pods for OTT | | audio | Supported | -## Setup instructions to call Consumable through Prebid Server +### Setup instructions to call Consumable through Prebid Server **Note:** If you are hosting your own Prebid Server instance, you must contact your Consumable Exchange Representative to get an endpoint and setup instructions. @@ -123,7 +125,7 @@ To call Consumable from a web browser using Prebid Server, you must first config ```javascript pbjs.setConfig({ cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' + url: 'https://prebid.example.com/pbc/v1/cache' } }); ``` @@ -152,14 +154,15 @@ To add Consumable as a bidder: 2. Define the Consumable-specific parameters at the bidder level. For information about these parameters, see the [Bid request parameters](#bid-request-parameters) section below. 3. Include any ad unit level required or optional parameters provided in Prebid's [/openrtb2/video](/prebid-server/endpoints/openrtb2/pbs-endpoint-video.html) documentation. -## Bid request parameters +### Bid request parameters -For a list of the OpenRTB fields that Consumable supports in bid requests, see [List of supported OpenRTB bid request fields for sellers](https://kb.Consumableexchange.com/publishers/openrtb_integration/list_of_supported_openrtb_bid_request_fields_for_sellers.htm#List_of_supported_OpenRTB_bid_request_fields_for_sellers). The following are the required fields for the various supported media types. +For a list of the OpenRTB fields that Consumable supports in bid requests, see [List of supported OpenRTB bid request fields for sellers](https://iabtechlab.com/wp-content/uploads/2022/04/OpenRTB-2-6_FINAL.pdf). The following are the required fields for the various supported media types. ### Site (Banner, Video, Audio) You must include these parameters at the bidder level. {: .table .table-bordered .table-striped } + | Name | Scope | Description | Example | Type | |-------------|----------|--------------------------------|---------|-----------| | `siteId` | required | The site ID from Consumable. | `12345` | `integer` | @@ -172,11 +175,12 @@ You must include these parameters at the bidder level. You must include these parameters at the bidder level. {: .table .table-bordered .table-striped } + | Key | Scope | Type | Description | |---|---|---|---| | `placementId` | Required | String | An Consumable-specific identifier that is associated with this ad unit. It will be associated with the single size, if the size is provided. This is similar to a placement ID or an ad unit ID that some other modules have. For example, `'0421008445828ceb46f496700a5fa65e'`| -## Examples +### Examples **Banner** diff --git a/dev-docs/bidders/consumable.md b/dev-docs/bidders/consumable.md index 52009f80cf..99097d9c80 100644 --- a/dev-docs/bidders/consumable.md +++ b/dev-docs/bidders/consumable.md @@ -33,6 +33,7 @@ The Consumable bid adapter may cycle the ad initially shown with a new one at va ### Bid Params {: .table .table-bordered .table-striped } + | Name | Scope | Description | Example | Type | |-------------|----------|--------------------------------|---------|-----------| | `siteId` | required | The site ID from Consumable. | `12345` | `integer` | @@ -40,7 +41,7 @@ The Consumable bid adapter may cycle the ad initially shown with a new one at va | `unitId` | required | The unit ID from Consumable. | `987654` | `integer` | | `unitName` | required | The unit name from Consumable. | `cnsmbl-unit` | `string` | -## Table of contents +### Table of contents * [Table of contents](#table-of-contents) * [Introduction](#introduction) @@ -56,7 +57,7 @@ The Consumable bid adapter may cycle the ad initially shown with a new one at va * [Video](#video) * [Examples](#examples) -## Introduction +### Introduction Publishers can use Prebid.js to call Consumable Exchange (Consumable) in any of the following ways: @@ -67,6 +68,8 @@ Publishers can use Prebid.js to call Consumable Exchange (Consumable) in any of * **Recommended Global Bidder settings:** For our adapter, Consumable recommends enabling local storage. As of Prebid.js 7.x, local storage access must be explicitly specified. By leveraging local storage, Consumable is able to take advantage of the latest features our exchange has to offer. For instructions on enabling local storage, see Prebid’s [pbjs.bidderSettings](/dev-docs/publisher-api-reference/bidderSettings.html) documentation. +{% include dev-docs/storageAllowed.md %} + ### Example ```javascript @@ -77,7 +80,7 @@ pbjs.bidderSettings = { }; ``` -## Supported media types +### Supported media types The following table lists the media types that Consumable supports. @@ -88,11 +91,11 @@ The following table lists the media types that Consumable supports. | banner | Supported | | video | Supported | -## Set up Prebid.js to call Consumable directly from the browser (client-side adapter) +### Set up Prebid.js to call Consumable directly from the browser (client-side adapter) To call Consumable from a web browser environment using a Prebid Server integration, see the Consumable-specific configuration steps in [Setup instructions to call Consumable through Prebid Server](/dev-docs/bidders/consumable-server.html#setup-instructions-to-call-consumable-through-prebid-server) in our Prebid Server documentation on the Prebid site. -## Set up Prebid.js to call Consumable through Prebid Server (server-side adapter) +### Set up Prebid.js to call Consumable through Prebid Server (server-side adapter) In this configuration, Prebid.js makes a call to Prebid Server and then Prebid Server uses our server-side adapter to call Consumable. Complete the following steps to configure Consumable as a demand source: @@ -122,12 +125,12 @@ In this configuration, Prebid.js makes a call to Prebid Server and then Prebid S ```javascript pbjs.setConfig({ cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' + url: 'https://prebid.example.com/pbc/v1/cache' } }); ``` -## Set up First Party Data (FPD) +### Set up First Party Data (FPD) You can set up the Prebid.js FPD module using Global data, Consumable bidder-specific site data, or ad unit-specific data. Consumable supports deal targeting in all the three FPD types. @@ -183,13 +186,14 @@ ortb2Imp: { } ``` -## Bid request parameters +### Bid request parameters ### Banner You must include these parameters at the bidder level. {: .table .table-bordered .table-striped } + | Name | Scope | Description | Example | Type | |-------------|----------|--------------------------------|---------|-----------| | `siteId` | required | The site ID from Consumable. | `12345` | `integer` | @@ -202,6 +206,7 @@ You must include these parameters at the bidder level. You must include these parameters at the bidder level. {: .table .table-bordered .table-striped } + | Name | Scope | Description | Example | Type | |-------------|----------|--------------------------------|---------|-----------| | `siteId` | required | The site ID from Consumable. | `12345` | `integer` | @@ -209,7 +214,7 @@ You must include these parameters at the bidder level. | `unitId` | required | The unit ID from Consumable. | `987654` | `integer` | | `unitName` | required | The unit name from Consumable. | `cnsmbl-unit` | `string` | -## Examples +### Examples **Banner** diff --git a/dev-docs/bidders/contxtful.md b/dev-docs/bidders/contxtful.md new file mode 100644 index 0000000000..930b1f1d75 --- /dev/null +++ b/dev-docs/bidders/contxtful.md @@ -0,0 +1,125 @@ +--- +layout: bidder +title: Contxtful +description: Prebid Contxtful Bidder Adapter +biddercode: contxtful +tcfeu_supported: false +usp_supported: true +coppa_supported: true +schain_supported: true +userId: all +media_types: banner, video, audio +safeframes_ok: true +floors_supported: true +fpd_supported: true +pbjs: true +pbs: true +pbs_app_supported: false +prebid_member: true +multiformar_supported: will-bid-on-any +ortb_blocking_supported: true +--- + +### Note + +The Contxtful bidder adapter requires some setup. Contact us at [contact@contxtful.com](mailto:contact@contxtful.com) + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|-------------|----------|------------------------------------------------------------|------------------------------|----------------------| +| `placementId` | required | The placement identifier | `'p12345678'` | `string` | +| `customerId` | required | The customer identifier | `'DEMO123456'` | `string` | + +### Configuration + +```javascript +pbjs.setConfig({ + "contxtful":{ + "version":"v1", + "customer":"<>" + }, + "realTimeData":{ + "dataProviders":[ + { + "name":"contxtful", + "waitForIt":true, + "params":{ + "version":"v1", + "customer":"<>", + "bidders":[ + "contxtful" + ], + "adServerTargeting":true + } + } + ] + } +} +); +``` + +### First Party Data + +Publishers should use the `ortb2` method of setting First Party Data. The following fields are supported: + +- `ortb2.site.*` +- `ortb2.user.*` +- `ortb2.device.*` + +AdUnit-specific data is supported using `AdUnit.ortb2Imp.ext.*` + +### AdUnit Format client side + +```javascript + var adUnitList = [ + { + code: 'AD_UNIT_NAME_HERE', + mediaTypes: { /* "<< ENTER_FORMAT_HERE >> */ }, + bids: [{ + bidder: 'contxtful', + params: { + placementId: "<>", + customerId: "<>" + } + }], + ortb2Imp: { + ext: { + data: { + divId: "<>" + } + } + } + } +] +``` + +### User Sync + +Contxtful recommends enabling [User Syncing](https://docs.prebid.org/dev-docs/publisher-api-reference/setConfig#setConfig-Configure-User-Syncing) to optimize match rate and monetization. + +{% include dev-docs/storageAllowed.md %} + +```javascript +// Enable iframe usersync +pbjs.setConfig({ + userSync: { + filterSettings: { + iframe: { + bidders: '*', // '*' means all bidders + filter: 'include' + } + } + } +}); + +// Allow local storage usage +pbjs.bidderSettings = { + contxtful: { + storageAllowed: true + } +} +``` + +Note - the `userSync.filterSettings.all` field is mutually exclusive and cannot be combined with the `userSync.filterSettings.iframe`/`userSync.filterSettings.image` fields in the `userSync` config. If the fields are used together, this will be considered an invalid config and only image pixels will be permitted. diff --git a/dev-docs/bidders/converge.md b/dev-docs/bidders/converge.md index 02c95c05f9..35ff700052 100644 --- a/dev-docs/bidders/converge.md +++ b/dev-docs/bidders/converge.md @@ -3,23 +3,28 @@ layout: bidder title: Converge-Digital description: Converge-Digital Bidder Adaptor biddercode: converge -pbjs: true -pbs: false -media_types: banner, native, video +aliasCode: adkernel tcfeu_supported: true -gpp_supported: true +dsa_supported: false gvl_id: 248 usp_supported: true coppa_supported: true -pbs_app_supported: true +gpp_sids: tcfeu, usp schain_supported: true -userIds: all +dchain_supported: false +userId: all +media_types: banner, video, native +safeframes_ok: true +deals_supported: false +floors_supported: true fpd_supported: true +pbjs: true +pbs: false +pbs_app_supported: false prebid_member: false +multiformat_supported: will-bid-on-any ortb_blocking_supported: true -multiformat_supported: will-bid-on-one -floors_supported: true -aliasCode: adkernel +privacy_sandbox: no sidebarType: 1 --- diff --git a/dev-docs/bidders/copper6ssp.md b/dev-docs/bidders/copper6ssp.md new file mode 100644 index 0000000000..ee0131c1ac --- /dev/null +++ b/dev-docs/bidders/copper6ssp.md @@ -0,0 +1,36 @@ +--- +layout: bidder +title: Copper6SSP +description: Prebid Copper6SSP Bidder Adapter +biddercode: copper6ssp +gpp_sids: usstate_all +gvl_id: 1356 +tcfeu_supported: true +usp_supported: true +coppa_supported: true +schain_supported: true +deals_supported: false +floors_supported: true +fpd_supported: false +ortb_blocking_supported: false +media_types: banner, video, native +multiformat_supported: will-bid-on-one +userIds: all +pbjs: true +pbs: true +pbs_app_supported: true +safeframes_ok: true +sidebarType: 1 +--- + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|--------------|---------------------------------|------------| +| `placementId` | optional | Placement Id | `'0'` | `'string'` | +| `endpointId` | optional | Endpoint Id | `'0'` | `'string'` | + +### Note + +For the prebid server and prebid.js you only need to use one parameter: either placementId or endpointId diff --git a/dev-docs/bidders/cordless.md b/dev-docs/bidders/cordless.md new file mode 100644 index 0000000000..ecf23ae02f --- /dev/null +++ b/dev-docs/bidders/cordless.md @@ -0,0 +1,44 @@ +--- +layout: bidder +title: Cordless.co +description: Cordless.co Bid Adapter +biddercode: cordless +tcfeu_supported: false +usp_supported: true +media_types: video, native +safeframes_ok: true +pbjs: true +pbs: true +pbs_app_supported: true +floors_supported: true +schain_supported: true +fpd_supported: true +ortb_blocking_supported: true +multiformat_supported: will-bid-on-one +userIds: all +sidebarType: 1 +aliasCode: aso +--- +### Note + +The Cordless.co adapter requires approval and setup. Please reach out to or visit us at [cordless.co](https://cordless.co) for more details. + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|------------------|---------------------------------|-----------| +| `server` | required | Server endpoint | `https://srv.cordlessmedia.com` | `String` | +| `zone` | required | Zone ID | `73815` | `Integer` | + +#### Video Caching + +Note that the Cordless.co adapter expects a client-side Prebid Cache to be enabled for video bidding. + +```js +pbjs.setConfig({ + cache: { + url: 'https://prebid.example.com/pbc/v1/cache' + } +}); +``` diff --git a/dev-docs/bidders/cpmstar.md b/dev-docs/bidders/cpmstar.md index 0573d20d60..0c43369a01 100644 --- a/dev-docs/bidders/cpmstar.md +++ b/dev-docs/bidders/cpmstar.md @@ -6,9 +6,11 @@ pbjs: true pbs: true biddercode: cpmstar media_types: banner, video -tcfeu_supported: false +tcfeu_supported: true +gvl_id: 1317 usp_supported: true coppa_supported: true +schain_supported: true sidebarType: 1 --- diff --git a/dev-docs/bidders/craft.md b/dev-docs/bidders/craft.md index 5df97f5875..28279ed507 100644 --- a/dev-docs/bidders/craft.md +++ b/dev-docs/bidders/craft.md @@ -7,8 +7,9 @@ media_types: banner tcfeu_supported: false coppa_supported: false usp_supported: false -schain_supported: false +schain_supported: true pbjs: true +userIds: all sidebarType: 1 --- diff --git a/dev-docs/bidders/criteo.md b/dev-docs/bidders/criteo.md index 58901ad55e..1888c957b2 100644 --- a/dev-docs/bidders/criteo.md +++ b/dev-docs/bidders/criteo.md @@ -27,17 +27,18 @@ gpp_supported: true This bidder adapter automatically includes the Criteo User ID module and performs iFrame syncs. {: .alert.alert-warning :} -Prebid-Server support is on alpha test and is currently a non-finished product. Activation requires setup and approval before beginning. Please reach out to your account manager or for more details. +Prebid-Server activation requires business approval before beginning. Please reach out to your account manager for more details. ### Bid Params {: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | |-------------------|----------|----------------------------------------------------------------------------------------------------------------------|-----------------------------------------------|------------| -| `zoneId` | required | (deprecated) The zone ID from Criteo. Should be replaced by `networkId` when using zone matching. | `234234` | `integer` | +| `zoneId` | optional, deprecated | (deprecated) The zone ID from Criteo. Should be replaced by `networkId` when using zone matching. | `234234` | `integer` | | `networkId` | required | The network ID from Criteo. Please reach out your Criteo representative for more details. | `456456` | `integer` | -| `pubid` | required | publisher id | `'ABC123'` | `string` | -| `nativeCallback` | optional | (Prebid.js only) Callback to perform render in native integrations. Please reach out your Criteo representative for more details. | `function(payload) { console.log(payload); }` | `function` | +| `pubid` | optional | Publisher id of your inventory group provided by your Technical account manager if using inventory groups to map your inventory in Commerce Grid | `'ABC123'` | `string` | +| `uid` | optional | Ad Unit ID | `8888` | `integer` | +| `nativeCallback` | optional | (deprecated) (Prebid.js only) Callback to perform render in native integrations. Please reach out your Criteo representative for more details. | `function(payload) { console.log(payload); }` | `function` | | `integrationMode` | optional | (Prebid.js only) Integration mode to use for ad render (none or 'AMP'). Please reach out your Criteo representative for more details. | `'AMP'` | `string` | | `publisherSubId` | optional | Custom identifier for reporting. Please reach out your Criteo representative for more details. | `'adunit-1'` | `string` | diff --git a/dev-docs/bidders/cwire.md b/dev-docs/bidders/cwire.md index 5447a41314..ed58c8ed99 100644 --- a/dev-docs/bidders/cwire.md +++ b/dev-docs/bidders/cwire.md @@ -19,10 +19,11 @@ sidebarType: 1 ### Bid Params {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|:--------:|:-------------------:|:--------:|:---------:| -| `pageId` | required | C-WIRE page id | `2453` | `integer` | -| `placementId` | required | C-WIRE placement id | `113244` | `integer` | +| Name | Scope | Description | Example | Type | +|---------------|:--------:|:--------------------------------------------:|:--------:|:---------:| +| `pageId` | optional | C-WIRE page id (compatibility purposes) | `2453` | `integer` | +| `placementId` | optional | C-WIRE placement id | `113244` | `integer` | +| `domainId` | required | C-WIRE domain id | `2453` | `integer` | ### URL parameters diff --git a/dev-docs/bidders/dailymotion.md b/dev-docs/bidders/dailymotion.md index 5557b2befb..39d55b417a 100644 --- a/dev-docs/bidders/dailymotion.md +++ b/dev-docs/bidders/dailymotion.md @@ -2,6 +2,7 @@ layout: bidder title: Dailymotion description: Dailymotion Prebid Bidder Adapter +prebid_member: true pbjs: true pbs: false biddercode: dailymotion @@ -20,11 +21,11 @@ ortb_blocking_supported: false ### Registration -To use the adapter with any non-test request, you first need to ask an API key from Dailymotion. Please contact us through . +To use the adapter with any non-test request, you first need to ask an API key from Dailymotion. Please contact us through . This API key will ensure proper identification of your inventory and allow you to get real bids. -# Configuration options +### Configuration options Before calling this adapter, you need to at least set a video adUnit in an instream context and the API key in the bid parameters: @@ -49,7 +50,139 @@ const adUnits = [ `apiKey` is your publisher API key. For testing purpose, you can use "dailymotion-testing". -# Test Parameters +#### User Sync + +To enable user synchronization, add the following code. Dailymotion highly recommends using iframes and/or pixels for user syncing. This feature enhances DSP user match rates, resulting in higher bid rates and bid prices. Ensure that `pbjs.setConfig()` is called only once. + +```javascript +pbjs.setConfig({ + userSync: { + syncEnabled: true, + filterSettings: { + iframe: { + bidders: '*', // Or add dailymotion to your list included bidders + filter: 'include' + }, + image: { + bidders: '*', // Or add dailymotion to your list of included bidders + filter: 'include' + }, + }, + }, +}); +``` + +#### Price floor + +The price floor can be set at the ad unit level, for example : + +```javascript +const adUnits = [{ + floors: { + currency: 'USD', + schema: { + fields: [ 'mediaType', 'size' ] + }, + values: { + 'video|300x250': 2.22, + 'video|*': 1 + } + }, + bids: [{ + bidder: 'dailymotion', + params: { + apiKey: 'dailymotion-testing', + } + }], + code: 'test-ad-unit', + mediaTypes: { + video: { + playerSize: [300, 250], + context: 'instream', + }, + } +}]; + +// Do not forget to set an empty object for "floors" to active the price floor module +pbjs.setConfig({floors: {}}); +``` + +The following request will be sent to Dailymotion Prebid Service : + +```javascript +{ + "pbv": "9.23.0-pre", + "ortb": { + "imp": [ + { + ... + "bidfloor": 2.22, + "bidfloorcur": "USD" + } + ], + } + ... +} +``` + +Or the price floor can be set at the package level, for example : + +```javascript +const adUnits = [ + { + bids: [{ + bidder: 'dailymotion', + params: { + apiKey: 'dailymotion-testing', + } + }], + code: 'test-ad-unit', + mediaTypes: { + video: { + playerSize: [1280,720], + context: 'instream', + }, + } + } +]; + +pbjs.setConfig({ + floors: { + data: { + currency: 'USD', + schema: { + fields: [ 'mediaType', 'size' ] + }, + values: { + 'video|300x250': 2.22, + 'video|*': 1 + } + } + } +}) +``` + +This will send the following bid floor in the request to Daiymotion Prebid Service : + +```javascript +{ + "pbv": "9.23.0-pre", + "ortb": { + "imp": [ + { + ... + "bidfloor": 1, + "bidfloorcur": "USD" + } + ], + ... + } +} +``` + +You can also [set dynamic floors](https://docs.prebid.org/dev-docs/modules/floors.html#bid-adapter-interface). + +### Test Parameters By setting the following bid parameters, you'll get a constant response to any request, to validate your adapter integration: @@ -74,12 +207,12 @@ const adUnits = [ Please note that failing to set these will result in the adapter not bidding at all. -# Sample video AdUnit +### Sample video AdUnit To allow better targeting, you should provide as much context about the video as possible. There are three ways of doing this depending on if you're using Dailymotion player or a third party one. -If you are using the Dailymotion player, you should only provide the video `xid` in your ad unit, example: +If you are using the Dailymotion player, you must provide the video `xid` in the `video.id` field of your ad unit, example: ```javascript const adUnits = [ @@ -89,7 +222,10 @@ const adUnits = [ params: { apiKey: 'dailymotion-testing', video: { - xid: 'x123456' // Dailymotion infrastructure unique video ID + id: 'x123456' // Dailymotion infrastructure unique video ID + autoplay: false, + playerName: 'dailymotion', + playerVolume: 8 }, } }], @@ -108,9 +244,9 @@ const adUnits = [ ``` This will automatically fetch the most up-to-date information about the video. -If you provide any other metadata in addition to the `xid`, they will be ignored. +Please note that if you provide any video metadata not listed above, they will be replaced by the ones fetched from the `video.id`. -If you are using a third party video player, you should not provide any `xid` and instead fill the following members: +If you are using a third party video player, you should fill the following members: ```javascript const adUnits = [ @@ -130,7 +266,13 @@ const adUnits = [ private: false, tags: 'tag_1,tag_2,tag_3', title: 'test video', + url: 'https://test.com/testvideo' topics: 'topic_1, topic_2', + isCreatedForKids: false, + videoViewsInSession: 1, + autoplay: false, + playerName: 'video.js', + playerVolume: 8 } } }], @@ -139,6 +281,12 @@ const adUnits = [ video: { api: [2, 7], context: 'instream', + mimes: ['video/mp4'], + minduration: 5, + maxduration: 30, + playbackmethod: [3], + plcmt: 1, + protocols: [7, 8, 11, 12, 13, 14], startdelay: 0, w: 1280, h: 720, @@ -160,10 +308,18 @@ Each of the following video metadata fields can be added in bids.params.video. * `private` - True if video is not publicly available * `tags` - Tags for the video, comma separated * `title` - Video title +* `url` - URL of the content * `topics` - Main topics for the video, comma separated -* `xid` - Dailymotion video identifier (only applicable if using the Dailymotion player) +* `isCreatedForKids` - [The content is created for children as primary audience](https://faq.dailymotion.com/hc/en-us/articles/360020920159-Content-created-for-kids) + +The following contextual information can also be added in bids.params.video. + +* `autoplay` - Playback was launched without user interaction +* `playerName` - Name of the player used to display the video +* `playerVolume` - Player volume between 0 (muted, 0%) and 10 (100%) +* `videoViewsInSession` - Number of videos viewed within the current user session -If you already specify [First-Party data](https://docs.prebid.org/features/firstPartyData.html) through the `ortb2` object when calling [`pbjs.requestBids(requestObj)`](https://docs.prebid.org/dev-docs/publisher-api-reference/requestBids.html), we will fallback to those values when possible. See the mapping below. +If you already specify [First-Party data](https://docs.prebid.org/features/firstPartyData.html) through the `ortb2` object when calling [`pbjs.requestBids(requestObj)`](https://docs.prebid.org/dev-docs/publisher-api-reference/requestBids.html), we will collect the following values and fallback to bids.params.video values when applicable. See the mapping below. | From ortb2 | Metadata fields | |---------------------------------------------------------------------------------|-----------------| @@ -174,3 +330,5 @@ If you already specify [First-Party data](https://docs.prebid.org/features/first | `ortb2.site.content.livestream` | `livestream` | | `ortb2.site.content.keywords` | `tags` | | `ortb2.site.content.title` | `title` | +| `ortb2.site.content.url` | `url` | +| `ortb2.*` | N/A | diff --git a/dev-docs/bidders/deepintent.md b/dev-docs/bidders/deepintent.md index edb31fd240..b865845d96 100644 --- a/dev-docs/bidders/deepintent.md +++ b/dev-docs/bidders/deepintent.md @@ -6,6 +6,7 @@ pbjs: true pbs: true biddercode: deepintent media_types: banner, video +floors_supported: true tcfeu_supported: true usp_supported: true coppa_supported: true @@ -19,6 +20,7 @@ sidebarType: 1 | Name | Scope | Description | Example | Type | |---------------|----------|--------------------|------------------------------|----------| | `tagId` | mandatory| Ad Tag Id | `'1399'` | `string` | +| `bidfloor` | optional | bid floor price in USD| `1.5` | `number` | | `height` | optional | height of the creative| `350` | `number` | | `width` | optional | width of the creative | `250` | `number` | | `custom` | optional | custom key value params| `'{"position":"right-box"}''`| `object` | @@ -46,36 +48,39 @@ pbjs.setConfig({ ```javascript var adUnits = [ - { - code: 'div-22', - mediaTypes: { - banner: { - sizes: [ - [300, 250], - [300, 600] - ] - } - }, - bids: [{ - bidder: 'deepintent', - params: { - tagId: "1399", - height: 300, - width: 250, - pos: 1, - user: { - gender: "F", - uid: "publisher_uid", - buyeruid: "test_buyeruid", - yob: 2000 - }, - custom: { - "position": "right-box" - } - } - }] - } - ]; + { + code: "div-22", + mediaTypes: { + banner: { + sizes: [ + [300, 250], + [300, 600], + ], + }, + }, + bids: [ + { + bidder: "deepintent", + params: { + tagId: "1399", + bidfloor: 1.5, + height: 300, + width: 250, + pos: 1, + user: { + gender: "F", + uid: "publisher_uid", + buyeruid: "test_buyeruid", + yob: 2000, + }, + custom: { + position: "right-box", + }, + }, + }, + ], + }, +]; ``` ### video parameters @@ -83,6 +88,7 @@ var adUnits = [ Deepintent supports video as of Prebid v1.16.0 {: .table .table-bordered .table-striped } + | Name | Scope | Description | Example | | :----------------------| :------- | :---------------------------------------------------------- | :------ | | `video.mimes` | required | Video MIME types | `['video/mp4','video/x-flv']` | @@ -96,43 +102,47 @@ Deepintent supports video as of Prebid v1.16.0 | `video.battr` | optional | Blocked creative attributes, See [OpenRTB 2.5 specification](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf), List 5.3 for values | `[3, 9]` | | `video.linearity` | optional | Indicates if the impression is linear or nonlinear
Values:
`1`: Linear/In-Stream
`2`: Non-Linear/Overlay. | `1` | | `video.placement` | optional | Video placement type. See [OpenRTB 2.5 specification](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf), List 5.9 for Values | `1` | -| `video.minbitrate` | optional | Minumim bit rate in Kbps. | 50 | +| `video.minbitrate` | optional | Minimum bit rate in Kbps. | 50 | | `video.maxbitrate` | optional | Maximum bit rate in Kbps. | 70 | ### AdUnit Format for Video ```javascript var videoAdUnits = [ -{ - code: 'test-div-video', + { + code: "test-div-video", mediaTypes: { - video: { - playerSize: [640, 480], - context: 'instream' - } + video: { + playerSize: [640, 480], + context: "instream", + }, }, - bids: [{ - bidder: 'deepintent', - params: { - tagId: "1399", // required - publisherId: '32572', // required - adSlot: '38519891@300x250' // required - video: { - mimes: ['video/mp4','video/x-flv'], // required - skip: 1, // optional - minduration: 5, // optional - maxduration: 30, // optional - startdelay: 5, // optional - playbackmethod: [1,3], // optional - api: [ 1, 2 ], // optional - protocols: [ 2, 3 ], // optional - battr: [ 13, 14 ], // optional - linearity: 1, // optional - placement: 2, // optional - minbitrate: 10, // optional - maxbitrate: 10 // optional - } - } - }] -}] + bids: [ + { + bidder: "deepintent", + params: { + tagId: "1399", // required + publisherId: "32572", // required + adSlot: "38519891@300x250", // required + bidfloor: 1.5, // optional + video: { + mimes: ["video/mp4", "video/x-flv"], // required + skip: 1, // optional + minduration: 5, // optional + maxduration: 30, // optional + startdelay: 5, // optional + playbackmethod: [1, 3], // optional + api: [1, 2], // optional + protocols: [2, 3], // optional + battr: [13, 14], // optional + linearity: 1, // optional + placement: 2, // optional + minbitrate: 10, // optional + maxbitrate: 10, // optional + }, + }, + }, + ], + }, +]; ``` diff --git a/dev-docs/bidders/deltaprojects.md b/dev-docs/bidders/deltaprojects.md index 397b461908..6af19c1487 100644 --- a/dev-docs/bidders/deltaprojects.md +++ b/dev-docs/bidders/deltaprojects.md @@ -20,6 +20,7 @@ will always bid and log values in the agreed upon currency, utilizing the curren ### Bid Params {: .table .table-bordered .table-striped } + | Name | Scope | Description | Example | Type | |----------------|----------|--------------------------------------------------------------------------|-----------------|----------| | `publisherId` | required | Publisher ID from Delta Projects. Contact | `'4'` | `string` | @@ -32,7 +33,7 @@ will always bid and log values in the agreed upon currency, utilizing the curren #### Banner -``` +```javascript var adUnits = [ { code: 'adunit-code', diff --git a/dev-docs/bidders/denakop.md b/dev-docs/bidders/denakop.md index 80a075e07f..5cc5db7254 100644 --- a/dev-docs/bidders/denakop.md +++ b/dev-docs/bidders/denakop.md @@ -3,23 +3,28 @@ layout: bidder title: Denakop description: Denakop Bidder Adaptor biddercode: denakop -pbjs: true -pbs: false -media_types: banner, native, video -gvl_id: 14 (adkernel) +aliasCode: adkernel tcfeu_supported: true -gpp_supported: true +dsa_supported: false +gvl_id: 14 (adkernel) usp_supported: true coppa_supported: true -pbs_app_supported: true +gpp_sids: tcfeu, usp schain_supported: true -userIds: all +dchain_supported: false +userId: all +media_types: banner, video, native +safeframes_ok: true +deals_supported: false +floors_supported: true fpd_supported: true +pbjs: true +pbs: false +pbs_app_supported: false prebid_member: false +multiformat_supported: will-bid-on-any ortb_blocking_supported: true -multiformat_supported: will-bid-on-one -floors_supported: true -aliasCode: adkernel +privacy_sandbox: no sidebarType: 1 --- diff --git a/dev-docs/bidders/dexerto.md b/dev-docs/bidders/dexerto.md new file mode 100644 index 0000000000..66e6a697a9 --- /dev/null +++ b/dev-docs/bidders/dexerto.md @@ -0,0 +1,52 @@ +--- +layout: bidder +title: Dexerto +description: Prebid dexerto Bidder Adaptor +pbjs: true +biddercode: dexerto +media_types: banner +tcfeu_supported: false +usp_supported: true +coppa_supported: true +gpp_sids: usstate_all +schain_supported: false +safeframes_ok: false +ortb_blocking_supported: false +dsa_supported: false +deals_supported: true +floors_supported: true +sidebarType: 1 +--- + +### Bid Params + +| Name | Scope | Description | Example | Type | +|---------------|-----------|-----------------------|----------------|----------| +| `placement_id`| mandatory | Placement Id | `110003` | `number` | +| `height` | optional | Height of the creative| `250` | `number` | +| `width` | optional | Width of the creative | `300` | `number` | +| `bid_floor` | optional | Bid Floor Price | `0.5` | `decimal`| + +### AdUnit Format for Banner + +```javascript +var adUnits = [ + { + code: 'display-ad', + mediaTypes: { + banner: { + sizes: [[300, 250]] + } + }, + bids: [{ + bidder: 'dexerto', + params: { + placement_id: 110003, + height: 250, + width: 300, + bid_floor: 0.5 + } + }] + } + ]; +``` diff --git a/dev-docs/bidders/didnadisplay.md b/dev-docs/bidders/didnadisplay.md index fe42c420cd..7b1439b77c 100644 --- a/dev-docs/bidders/didnadisplay.md +++ b/dev-docs/bidders/didnadisplay.md @@ -3,23 +3,28 @@ layout: bidder title: diDNA Display description: diDNA Display Bidder Adaptor biddercode: didnadisplay -pbjs: true -pbs: false -media_types: banner, native, video -gvl_id: 14 (adkernel) +aliasCode: adkernel tcfeu_supported: true -gpp_supported: true +dsa_supported: false +gvl_id: 14 (adkernel) usp_supported: true coppa_supported: true -pbs_app_supported: false +gpp_sids: tcfeu, usp schain_supported: true -userIds: all +dchain_supported: false +userId: all +media_types: banner, video, native +safeframes_ok: true +deals_supported: false +floors_supported: true fpd_supported: true +pbjs: true +pbs: false +pbs_app_supported: false prebid_member: false +multiformat_supported: will-bid-on-any ortb_blocking_supported: true -multiformat_supported: will-bid-on-one -floors_supported: true -aliasCode: adkernel +privacy_sandbox: no sidebarType: 1 --- diff --git a/dev-docs/bidders/digiad.md b/dev-docs/bidders/digiad.md index 83e0f0f629..5fc90fb73a 100644 --- a/dev-docs/bidders/digiad.md +++ b/dev-docs/bidders/digiad.md @@ -3,23 +3,28 @@ layout: bidder title: Digiad DMCC description: Digiad DMCC Adaptor biddercode: digiad -pbjs: true -pbs: false -media_types: banner, native, video -gvl_id: 14 (adkernel) +aliasCode: adkernel tcfeu_supported: true -gpp_supported: true +dsa_supported: false +gvl_id: 14 (adkernel) usp_supported: true coppa_supported: true -pbs_app_supported: false +gpp_sids: tcfeu, usp schain_supported: true -userIds: all +dchain_supported: false +userId: all +media_types: banner, video, native +safeframes_ok: true +deals_supported: false +floors_supported: true fpd_supported: true +pbjs: true +pbs: false +pbs_app_supported: false prebid_member: false +multiformat_supported: will-bid-on-any ortb_blocking_supported: true -multiformat_supported: will-bid-on-one -floors_supported: true -aliasCode: adkernel +privacy_sandbox: no sidebarType: 1 --- diff --git a/dev-docs/bidders/digitalcaramel.md b/dev-docs/bidders/digitalcaramel.md new file mode 100644 index 0000000000..797a1b1d9a --- /dev/null +++ b/dev-docs/bidders/digitalcaramel.md @@ -0,0 +1,27 @@ +--- +layout: bidder +title: Digitalcaramel +description: digitalcaramel bid adapter +pbjs: true +biddercode: digitalcaramel +media_types: banner, video +safeframes_ok: true +tcfeu_supported: false +gvl_id: none +usp_supported: false +coppa_supported: false +deals_supported: false +floors_supported: false +fpd_supported: false +ortb_blocking_supported: false +multiformat_supported: will-bid-on-one +sidebarType: 1 +--- + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|---------------|--------------------------|----------| +| `siteId` | required | Site id | `'d1d83nbdi0fs73874a0g'` | `string` | +| `placementId` | required | Placement id | `'d1d8493di0fs73874a10'` | `string` | diff --git a/dev-docs/bidders/digitalmatter.md b/dev-docs/bidders/digitalmatter.md new file mode 100644 index 0000000000..b2aef8fd69 --- /dev/null +++ b/dev-docs/bidders/digitalmatter.md @@ -0,0 +1,39 @@ +--- +layout: bidder +title: Digital Matter +description: Digital Matter Prebid Bidder Adapter +biddercode: digitalMatter +pbjs: true +pbs: false +media_types: banner +sidebarType: 1 +gvl_id: 1345 +tcfeu_supported: true +usp_supported: false +safeframes_ok: false +prebid_member: false +deals_supported: false +floors_supported: false +multiformat_supported: will-bid-on-one +ortb_blocking_supported: false +userIds: none +fpd_supported: false +schain_supported: false +dchain_supported: false +coppa_supported: false +dsa_supported: false +privacy_sandbox: none +gpp_sids: none +--- + +### Note + +The Digital Matter bid adapter requires setup before beginning. Please contact us at + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|-------------|----------|-----------------------------------------|-----------------|----------| +| `accountId` | required | Account ID, provided by Digital Matter | `'123456'` | `string` | +| `siteId` | required | Site ID, provided by Digital Matter | `'123-456-789'` | `string` | diff --git a/dev-docs/bidders/discovery.md b/dev-docs/bidders/discovery.md index e094aea49c..c56c23fffe 100644 --- a/dev-docs/bidders/discovery.md +++ b/dev-docs/bidders/discovery.md @@ -15,6 +15,7 @@ The DiscoveryDSP Bidding adapter requires setup before beginning. Please contact ### Bid Params {: .table .table-bordered .table-striped } + | Name | Scope | Description | Example | Type | |---------------|----------|-----------------------|-----------|-----------| | `token` | required | publisher token | `'1e100887dd614b7f69fdd1360437'` | `string` | @@ -26,7 +27,7 @@ The DiscoveryDSP Bidding adapter requires setup before beginning. Please contact banner -``` +```javascript var adUnits = [ { code: "test-div-1", @@ -51,7 +52,7 @@ var adUnits = [ native -``` +```javascript var adUnits = [ { code: "test-div-2", diff --git a/dev-docs/bidders/displayio.md b/dev-docs/bidders/displayio.md index 9eb9d291c8..9abe57b05c 100644 --- a/dev-docs/bidders/displayio.md +++ b/dev-docs/bidders/displayio.md @@ -8,17 +8,23 @@ tcfeu_supported: true usp_supported: true safeframes_ok: true pbjs: true -pbs: false +pbs: true prebid_member: false gvl_id: none sidebarType: 1 +coppa_supported: true +schain_supported: true +pbs_app_supported: true +floors_supported: true +ortb_blocking_supported: true +multiformat: will-bid-on-any --- ### Note Before configuring the display.io adapter you must reach out your account manager from display.io team (or send a request to ) for approval and setup steps. -### Bid Params +### Prebid.js params {: .table .table-bordered .table-striped } @@ -37,3 +43,13 @@ Before configuring the display.io adapter you must reach out your account manage | `custom.headerBackgroundColor`| optional | String | Ad container header background color, "black" by default | "#fff" | | `custom.adContainerBackgroundColor`| optional | String | Ad container body background color, "transparent" by default | "#000" | | `custom.fixedHeaderSelector`| optional | String | In case your webpage has a fixed header – the header Id attribute or header class attribute should be defined as a value for parameter fixedHeaderSelector. | ".site-header" | + +### Prebid Server Params + +{: .table .table-bordered .table-striped } + +| Name | Scope | Type | Description | Example | +|----------------| ----- | ---- |----------------------------------------|--------------------------------------------------------------| +| `publisherId` | required | String | Publisher Id on the display.io platform (please ask your Account Manager for your publisher id). | "101" | +| `inventoryId` | required | String | Inventory Id on the display.io platform (please ask your Account Manager for your inventory id). | "1011" | +| `placementId` | required | String | Placement Id on the display.io platform (please ask your Account Manager for your placement id). | "1011" | diff --git a/dev-docs/bidders/displayioads.md b/dev-docs/bidders/displayioads.md index ec81d2d8c5..d172393e92 100644 --- a/dev-docs/bidders/displayioads.md +++ b/dev-docs/bidders/displayioads.md @@ -3,23 +3,28 @@ layout: bidder title: DisplayioAds description: DisplayioAds Bidder Adaptor biddercode: displayioads -pbjs: true -pbs: false -media_types: banner, native, video -gvl_id: 14 (adkernel) +aliasCode: adkernel tcfeu_supported: true -gpp_supported: true +dsa_supported: false +gvl_id: 14 (adkernel) usp_supported: true coppa_supported: true -pbs_app_supported: true +gpp_sids: tcfeu, usp schain_supported: true -userIds: all +dchain_supported: false +userId: all +media_types: banner, video, native +safeframes_ok: true +deals_supported: false +floors_supported: true fpd_supported: true +pbjs: true +pbs: false +pbs_app_supported: false prebid_member: false +multiformat_supported: will-bid-on-any ortb_blocking_supported: true -multiformat_supported: will-bid-on-one -floors_supported: true -aliasCode: adkernel +privacy_sandbox: no sidebarType: 1 --- diff --git a/dev-docs/bidders/distroscale.md b/dev-docs/bidders/distroscale.md index 380916a4d6..dba00b8fb3 100644 --- a/dev-docs/bidders/distroscale.md +++ b/dev-docs/bidders/distroscale.md @@ -19,6 +19,12 @@ gvl_id: 754 sidebarType: 1 --- +### Registration + +To use the DistroScale bidder you will need a pubid (Publisher ID) from an account on DistroScale. + +For further information, please contact . + ### Bid Params {: .table .table-bordered .table-striped } diff --git a/dev-docs/bidders/djax.md b/dev-docs/bidders/djax.md new file mode 100644 index 0000000000..dd02136132 --- /dev/null +++ b/dev-docs/bidders/djax.md @@ -0,0 +1,34 @@ +--- +layout: bidder +title: Djax +description: Djax Bidder Adapter +biddercode: djax +tcfeu_supported: false +dsa_supported: false +gvl_id: none +usp_supported: false +schain_supported: false +dchain_supported: false +media_types: banner, video +safeframes_ok: true/false +deals_supported: false +floors_supported: false +fpd_supported: false +pbjs: true +pbs: false +prebid_member: false +multiformat_supported: will-bid-on-one +ortb_blocking_supported: false +sidebarType: 1 +--- + +### Note + +Please reach out to for more information. + +### Bid params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------------------------|----------------------|--------------------|-----------| +| `publisherId` | required | Publisher ID | `2` | `integer` | diff --git a/dev-docs/bidders/docereeadmanager.md b/dev-docs/bidders/docereeadmanager.md index b70e45499b..4d1dee9725 100644 --- a/dev-docs/bidders/docereeadmanager.md +++ b/dev-docs/bidders/docereeadmanager.md @@ -3,7 +3,7 @@ layout: bidder title: Doceree AdManager description: Doceree AdManager Prebid Bidder Adapter pbjs: true -biddercode: docereeAdManager +biddercode: docereeadmanager media_types: banner gvl_id: 1063 tcfeu_supported: true @@ -15,7 +15,7 @@ deals_supported: true floors_supported: true fpd_supported: false privacy_sandbox: no - +filename: docereeAdManagerBidAdapter --- ### Bid Params diff --git a/dev-docs/bidders/dochase.md b/dev-docs/bidders/dochase.md new file mode 100644 index 0000000000..50137be3e7 --- /dev/null +++ b/dev-docs/bidders/dochase.md @@ -0,0 +1,92 @@ +--- +layout: bidder +title: Dochase +description: Prebid dochase Bidder Adaptor +pbjs: true +biddercode: dochase +media_types: banner, native +tcfeu_supported: false +usp_supported: true +coppa_supported: true +gpp_sids: usstate_all, usnat +schain_supported: false +safeframes_ok: false +ortb_blocking_supported: false +dsa_supported: false +deals_supported: true +floors_supported: true +sidebarType: 1 +--- +### Registration + +For assistance or setup instructions, please contact us at . + +### Banner Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------------|-----------|-----------------------|----------------|----------| +| `placement_id` | mandatory | Placement Id | `5550` | `number` | +| `height` | optional | Height of the creative| `250` | `number` | +| `width` | optional | Width of the creative | `300` | `number` | +| `bid_floor` | optional | Bid Floor Price | `0.5` | `decimal`| + +### AdUnit Format for Banner + +```javascript +var adUnits = [ + { + code: 'banner-ad', + mediaTypes: { + banner: { + sizes: [[300, 250]] + } + }, + bids: [{ + bidder: 'dochase', + params: { + placement_id: 5550, + height: 250, + width: 300, + bid_floor: 0.5 + } + }] + } + ]; +``` + +### Native Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------------|-----------|-----------------------|----------------|----------| +| `placement_id` | mandatory | Placement Id | `5551` | `number` | +| `bid_floor` | optional | Bid Floor Price | `1` | `decimal`| + +### AdUnit Format for Native + +```javascript +var adUnits = [ + { + code: 'native-ad-container', + mediaTypes: { + native: { + title: { required: true, len: 100 }, + image: { required: true, sizes: [300, 250] }, + sponsored: { required: false }, + clickUrl: { required: true }, + desc: { required: true }, + icon: { required: false, sizes: [50, 50] }, + cta: { required: false } + } + }, + bids: [{ + bidder: 'dochase', + params: { + placement_id: 5551, // Required parameter + bid_floor: 1 // Optional parameter + } + }] + } + ]; +``` diff --git a/dev-docs/bidders/dvgroup.md b/dev-docs/bidders/dvgroup.md new file mode 100644 index 0000000000..e94e67efd2 --- /dev/null +++ b/dev-docs/bidders/dvgroup.md @@ -0,0 +1,26 @@ +--- +layout: bidder +title: dvgroup +description: dvgroup bid adapter +biddercode: dvgroup +pbjs: true +gvl_id: none +tcfeu_supported: false +usp_supported: false +media_types: banner, video +coppa_supported: false +safeframes_ok: true +floors_supported: true +deals_supported: false +fpd_supported: false +ortb_blocking_supported: false +multiformat_supported: will-bid-on-one +sidebarType: 1 +--- + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|---------------|--------------|----------| +| `sspId` | required | ssp id | `'prebidssp'`| `string` | diff --git a/dev-docs/bidders/e_volution.md b/dev-docs/bidders/e_volution.md index 5282e7589b..0d061f302c 100644 --- a/dev-docs/bidders/e_volution.md +++ b/dev-docs/bidders/e_volution.md @@ -2,16 +2,24 @@ layout: bidder title: E-volution tech description: Prebid E-volution tech Bidder Adapter -pbjs: true biddercode: e_volution +gpp_sids: usstate_all tcfeu_supported: true +usp_supported: true +coppa_supported: true +schain_supported: true +deals_supported: false +floors_supported: true +fpd_supported: false +ortb_blocking_supported: false media_types: banner, video, native gvl_id: 957 +multiformat_supported: will-bid-on-one +userIds: all +pbjs: true pbs: true pbs_app_supported: true -usp_supported: true -schain_supported: true -userIds: id5Id +safeframes_ok: true sidebarType: 1 --- diff --git a/dev-docs/bidders/easybid.md b/dev-docs/bidders/easybid.md new file mode 100644 index 0000000000..617579c1eb --- /dev/null +++ b/dev-docs/bidders/easybid.md @@ -0,0 +1,105 @@ +--- +layout: bidder +title: Easybid +description: Prebid Easybid Bidder Adapter +pbjs: true +pbs: true +biddercode: easybid +gvl_id: 1068 +usp_supported: true +gpp_sids: tcfeu +schain_supported: true +dchain_supported: false +floors_supported: true +userIds: all +tcfeu_supported: true +media_types: banner, video, native +safeframes_ok: true +deals_supported: true +sidebarType: 1 +fpd_supported: true +multiformat_supported: will-bid-on-any + +--- + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|----------------------------|-------------------------------------- |-----------| +| `tagId` | required | tag ID | `"testeasy"` | `string` | +| `placement` | required*| Placement | `"test.com_header_ad"` | `string` | + +*You*must* only include one ID field - either `tagId` or `placement`, not both. If you have questions on which parameter to use, please reach out to your Account Manager. +The `tagId` and `placement` are **mutually exclusive** but at least one is required. If you pass both, `tagId` takes precedence. + +### First Party Data + +Publishers should use the `ortb2` method of setting [First Party Data](/features/firstPartyData.html). +The following fields are supported: + +* ortb2.site.ext.data.* +* ortb2.site.content.data[] +* ortb2.user.ext.data.* +* ortb2.user.data[] + +### Test Parameters + +```javascript +var adUnits = [ + // Banner adUnit + { + code: 'banner-div', + mediaTypes: { + banner: { + sizes: [[300, 250], [300,600]] + } + }, + bids: [{ + bidder: 'easybid', + params: { + tagId: 'testeasy' + } + }] + }, + // Video adUnit + { + code: 'video1', + mediaTypes: { + video: { + playerSize: [640, 480], + context: 'instream' + } + }, + bids: [{ + bidder: 'easybid', + params: { + tagId: 'testeasy' + } + }] + }, + // Native adUnit + { + code: 'native1', + mediaTypes: + native: { + title: { + required: true + }, + image: { + required: true + }, + sponsoredBy: { + required: true + } + } + }, + bids: [{ + bidder: 'easybid', + params: { + tagId: 'testeasy' + } + }] + } +]; +``` diff --git a/dev-docs/bidders/ebdr.md b/dev-docs/bidders/ebdr.md index 0fc6be4dd5..d1938b3aff 100644 --- a/dev-docs/bidders/ebdr.md +++ b/dev-docs/bidders/ebdr.md @@ -5,6 +5,7 @@ description: Prebid EngageBDR Bidder Adaptor biddercode: ebdr pbjs: true media_types: video +pbjs_version_notes: removed in 9.0 sidebarType: 1 --- diff --git a/dev-docs/bidders/eclick.md b/dev-docs/bidders/eclick.md new file mode 100644 index 0000000000..dc1db776ad --- /dev/null +++ b/dev-docs/bidders/eclick.md @@ -0,0 +1,41 @@ +--- +layout: bidder +title: eClick +description: eClick Bidder Adaptor +biddercode: eclick +media_types: native +sidebarType: 1 +pbjs: true +pbs: false +tcfeu_supported: false +usp_supported: false +coppa_supported: false +schain_supported: false +dchain_supported: false +safeframes_ok: false +deals_supported: false +floors_supported: false +prebid_member: false +ortb_blocking_supported: false +fpd_supported: true +multiformat_supported: will-bid-on-one +pbjs_version_notes: v10.x and later + +--- + +### Note + +The eClick adapter requires setup and approval from the eClick Team. Please contact us via for detail. + +### Bid params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|-------|----------|----------------|-----------|----------| +| `zid` | required | The Zone Id | `'7096'` | `string` | + +### First Party Data + +Publishers should use the `ortb2` method of setting First Party Data. The following fields are supported: + +- ortb2.site.ext.data.* diff --git a/dev-docs/bidders/eclickads.md b/dev-docs/bidders/eclickads.md new file mode 100644 index 0000000000..65b878160f --- /dev/null +++ b/dev-docs/bidders/eclickads.md @@ -0,0 +1,40 @@ +--- +layout: bidder +title: EClickAds +description: EClickAds Bidder Adaptor +biddercode: eclickads +media_types: native +sidebarType: 1 +pbjs: true +pbs: false +tcfeu_supported: false +usp_supported: false +coppa_supported: false +schain_supported: false +dchain_supported: false +safeframes_ok: false +deals_supported: false +floors_supported: false +prebid_member: false +ortb_blocking_supported: false +fpd_supported: true +multiformat_supported: will-bid-on-one +pbjs_version_notes: available in 9.9.0 and later, not in 10.x +--- + +### Note +The EClickAds bidder adapter is going to be renamed to eClick in PBJS 10.x, using a bidder code of `eclick`. Please update your implementation accordingly. This bidder adapter is still available for PBJS versions 9.9.0 and later. +The EClickAds adapter requires setup and approval from the EClick Team. Please contact us via for detail. + +### Bid params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|-------|----------|----------------|-----------|----------| +| `zid` | required | The Zone Id | `'7096'` | `string` | + +### First Party Data + +Publishers should use the `ortb2` method of setting First Party Data. The following fields are supported: + +- ortb2.site.ext.data.* diff --git a/dev-docs/bidders/edge226.md b/dev-docs/bidders/edge226.md index 9eccba455e..257d468fe4 100644 --- a/dev-docs/bidders/edge226.md +++ b/dev-docs/bidders/edge226.md @@ -4,7 +4,7 @@ title: Edge226 description: Prebid Edge226 Bidder Adapter biddercode: edge226 usp_supported: true -tcfeu_supported: false +tcfeu_supported: true coppa_supported: true schain_supported: true floors_supported: true diff --git a/dev-docs/bidders/ehealthcaresolutions.md b/dev-docs/bidders/ehealthcaresolutions.md new file mode 100644 index 0000000000..1b089365fd --- /dev/null +++ b/dev-docs/bidders/ehealthcaresolutions.md @@ -0,0 +1,92 @@ +--- +layout: bidder +title: eHealthcareSolutions +description: Prebid eHealthcareSolutions Bidder Adaptor +pbjs: true +biddercode: ehealthcaresolutions +media_types: banner, native +tcfeu_supported: false +usp_supported: true +coppa_supported: true +gpp_sids: usstate_all +schain_supported: false +safeframes_ok: false +ortb_blocking_supported: false +dsa_supported: false +deals_supported: true +floors_supported: true +sidebarType: 1 +--- +### Registration + +For assistance or setup instructions, please contact us at . + +### Banner Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------------|-----------|-----------------------|----------------|----------| +| `placement_id` | mandatory | Placement Id | `111520` | `number` | +| `height` | optional | Height of the creative| `250` | `number` | +| `width` | optional | Width of the creative | `300` | `number` | +| `bid_floor` | optional | Bid Floor Price | `0.5` | `decimal`| + +### AdUnit Format for Banner + +```javascript +var adUnits = [ + { + code: 'banner-ad', + mediaTypes: { + banner: { + sizes: [[300, 250]] + } + }, + bids: [{ + bidder: 'ehealthcaresolutions', + params: { + placement_id: 111520, + height: 250, + width: 300, + bid_floor: 0.5 + } + }] + } + ]; +``` + +### Native Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------------|-----------|-----------------------|----------------|----------| +| `placement_id` | mandatory | Placement Id | `111519` | `number` | +| `bid_floor` | optional | Bid Floor Price | `1` | `decimal`| + +### AdUnit Format for Native + +```javascript +var adUnits = [ + { + code: 'native-ad-container', + mediaTypes: { + native: { + title: { required: true, len: 100 }, + image: { required: true, sizes: [300, 250] }, + sponsored: { required: false }, + clickUrl: { required: true }, + desc: { required: true }, + icon: { required: false, sizes: [50, 50] }, + cta: { required: false } + } + }, + bids: [{ + bidder: 'ehealthcaresolutions', + params: { + placement_id: 111519, // Required parameter + bid_floor: 1 // Optional parameter + } + }] + } + ]; +``` diff --git a/dev-docs/bidders/eightPod.md b/dev-docs/bidders/eightPod.md index 58dc14f0d3..e9fcf8cf17 100644 --- a/dev-docs/bidders/eightPod.md +++ b/dev-docs/bidders/eightPod.md @@ -11,10 +11,11 @@ gpp_sids: none schain_supported: false dchain_supported: false userId: none -media_types: banner +media_types: banner, video deals_supported: false +userIds: check with bidder floors_supported: false -fpd_supported: false +fpd_supported: true pbjs: true pbs: false prebid_member: false @@ -35,3 +36,16 @@ The EightPod adapter requires setup before beginning. Please contact us at . If you are an existing user, contact your account rep for information. ### Bid Params diff --git a/dev-docs/bidders/epomDspBidAdapter.md b/dev-docs/bidders/epomDspBidAdapter.md new file mode 100644 index 0000000000..3449f30508 --- /dev/null +++ b/dev-docs/bidders/epomDspBidAdapter.md @@ -0,0 +1,169 @@ +--- +layout: bidder +title: Epom DSP +description: Prebid Epom DSP Bid Adapter +biddercode: epom_dsp +tcfeu_supported: true +gvl_id: none +usp_supported: true +coppa_supported: false +gpp_sids: tcfeu, usnat +schain_supported: true +dchain_supported: false +userId: none +media_types: banner +safeframes_ok: true +deals_supported: true +floors_supported: true +fpd_supported: false +pbjs: true +pbs: false +prebid_member: false +multiformat_supported: will-bid-on-one +ortb_blocking_supported: false +privacy_sandbox: no +sidebarType: 1 +--- + +## Overview + +The **Epom DSP Bid Adapter** enables publishers to monetize inventory via the Epom DSP Exchange using the OpenRTB protocol. It supports **banner media types** and enforces required fields to ensure bid validity and proper auction participation. + +--- + +## Bid Parameters + +| Name | Scope | Description | Example | Type | +| ------------- | -------- | --------------------------------------------------------------- | ------------------------------------------------------------------ | -------- | +| `endpoint` | required | Full URL to the Epom DSP bidding endpoint | `'https://bidder.epommarket.com/bidder/v2_5/bid?key=your_api_key'` | `string` | +| `placementId` | optional | Placement identifier provided by Epom | `'12345'` | `string` | +| `bidfloor` | optional | Minimum CPM for bid, in USD (unless FX enabled on tenant level) | `0.50` | `number` | + +--- + +## Example Ad Unit Configuration + +```javascript +var adUnits = [{ + code: 'epom-banner-div', + mediaTypes: { + banner: { + sizes: [[300, 250]] + } + }, + bids: [{ + bidder: 'epom_dsp', + params: { + endpoint: 'https://bidder.epommarket.com/bidder/v2_5/bid?key=d0b9fb9de9dfbba694dfe75294d8e45a' + }, + imp: [{ + id: '2', + banner: { + w: 300, + h: 250, + btype: [4], + pos: 0, + api: [3] + }, + bidfloor: 0.01, + bidfloorcur: 'USD' + }], + site: { + id: 'fc59bd54-36df-4d33-830c-fdsfds', + domain: 'epom.com', + publisher: { + id: 'testid' + }, + content: { + id: '1234567', + title: 'Car Show', + series: 'All About Cars', + season: '2', + cat: ['IAB2-2'] + } + }, + device: { + ua: navigator.userAgent, + ip: '176.112.120.50', + devicetype: 2, + os: 'windows', + js: 1, + language: 'US', + carrier: 'VERIZON', + connectiontype: 5 + }, + user: { + id: 'testiduser' + }, + id: 'NewIdTest', + cur: ['USD'], + bcat: ['IAB25-2', 'IAB25-1'], + badv: [] + }] +}]; +``` + +--- + +## Required Fields for Bid Request Validation + +To be considered **valid**, a bid request must include the following: + +| Field | Location | Description | +| ------------- | ------------- | --------------------------------------------------------------------- | +| `request.id` | root | Unique ID for the request | +| `imp[]` | root | Must contain at least one impression object | +| `imp[i].id` | imp object | Unique impression ID | +| `site.domain` | site object | Must be present (or `app.bundle` if app-based) | +| `device.ip` | device object | Device IP address (required unless IP forwarding feature is disabled) | +| `cur[]` | root | Must be `['USD']` unless currency FX is enabled on tenant level | + +If any of the above is missing or malformed, the bid request will be **rejected** by the adapter during validation (`isBidRequestValid`). + +--- + +## Privacy Compliance + +The Epom DSP adapter supports the following privacy frameworks: + +* **GDPR**: via `bidderRequest.gdprConsent.consentString` +* **US Privacy (CCPA)**: via `bidderRequest.uspConsent` +* **GPP**: Supports `tcfeu` and `usnat` sections + +--- + +## Testing & Debugging + +To test integration, use a configuration similar to this inside a local HTML page with Prebid.js: + +```html + + +``` + +--- + +## Support + +For questions or assistance integrating Epom DSP into your Prebid setup, please contact: +📩 [support@epom.com](mailto:support@epom.com) diff --git a/dev-docs/bidders/epsilon.md b/dev-docs/bidders/epsilon.md index 1c6b3f4645..28f2b72162 100644 --- a/dev-docs/bidders/epsilon.md +++ b/dev-docs/bidders/epsilon.md @@ -5,13 +5,14 @@ description: Epsilon Prebid Bidder Adaptor (formerly Conversant) pbjs: true pbs: true biddercode: conversant -media_types: video +media_types: banner, video, audio, native tcfeu_supported: true userIds: criteo, id5Id, identityLink, liveIntentId, parrableId, pubCommonId, unifiedId, publinkId prebid_member: true schain_supported: true gvl_id: 24 sidebarType: 1 +multiformat_supported: will-not-bid --- @@ -84,11 +85,11 @@ The following values are defined in the [ORTB 2.5 spec](https://www.iab.com/wp-c Publishers should use the `ortb2` method of setting for setting First Party Data. Example first party data configuration that is available to all adUnits -``` +```javascript pbjs.setConfig({ debug: true, cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' + url: 'https://prebid.example.com/pbc/v1/cache' }, ortb2: { site: { @@ -105,7 +106,7 @@ pbjs.setConfig({ Example AdUnit specific data using the `ortb2Imp` object -``` +```javascript var videoAdUnit = { code: 'video1', mediaTypes: { diff --git a/dev-docs/bidders/equativ.md b/dev-docs/bidders/equativ.md new file mode 100644 index 0000000000..09678ae08e --- /dev/null +++ b/dev-docs/bidders/equativ.md @@ -0,0 +1,586 @@ +--- +layout: bidder +title: Equativ +description: Prebid Equativ Bidder Adapter +biddercode: equativ +tcfeu_supported: true +dsa_supported: true +gvl_id: 45 +usp_supported: true +coppa_supported: true +gpp_sids: tcfca, tcfeu, usnat, usstate_all, usp +schain_supported: true +dchain_support: false +userIds: all +media_types: banner, video, native +safeframes_ok: true +deals_supported: false +floors_supported: true +fpd_supported: true +pbjs: true +pbs: false +prebid_member: false +multiformat_supported: will-bid-on-any +ortb_blocking_supported: true +privacy_sandbox: no +sidebarType: 1 +--- + +### Registration + +The Equativ bidder adapter requires setup and approval from the Equativ service team. Please reach out to your account manager for more information to start using it. + +### Bid Params + +#### Fields + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|------|-------|-------------|---------|------| +| `networkId` | required | The network identifier you have been provided with. Normally required, but there are certain conditions under which this may be omitted. _See **Bid Parameter Usage** notes below for more information_. | `1234` | `integer` | +| `siteId` | optional | The placement site ID. _See **Bid Parameter Usage** notes below for more information_. |`1234` | `integer` | +| `pageId` | optional | The placement page ID. _See **Bid Parameter Usage** notes below for more information_. | `1234` | `integer` | +| `formatId` | optional | The placement format ID. _See **Bid Parameter Usage** notes below for more information_. | `1234` | `integer` | + +#### Usage + +Different combinations of parameters are required depending upon which ones you choose to use. + +There are two options for passing Equativ-specific bidder parameters: through bidder params, or through ortb2. + +##### Through bidder params Object + +Publishers can specify required and/or optional parameters through the bidder params object hierarchy like this: + +```javascript +var adUnits = [ + { + /// ... mediaType and other stuff here + bids: [ + { + bidder: 'equativ', + params: { + networkId: 42, // REQUIRED + siteId: 142, // optional + pageId: 242, // optional + formatId: 342, // optional + }, + }, + ], + }, +]; +``` + +##### Through ortb2 + +A second way to specify Equativ-specific bidder parameters is through the `ortb2` object. The example below references a `ortb2.site.publisher.id` hierarchy, but publishers can also use `ortb2.app.publisher.id` or `ortb2.dooh.publisher.id` as their needs dictate. + +```javascript +pbjs.setBidderConfig({ + bidders: ['equativ'], + config: { + ortb2: { + site: { + publisher: { + id: 42, + }, + }, + }, + }, +}); +``` + +### Supported Media Types + +{: .table .table-bordered .table-striped } +| Type | Support | +|---|---| +| `banner` | Supported | +| `video` | Supported | +| `native` | Supported | + +### User Syncing + +To enable cookie syncing, make sure the configuration setup is properly invoked. + +This involves adding an entry for `setConfig()` that allows user syncing for iframes with `'equativ'` included as a bidder: + +```js +pbjs.setConfig({ + userSync: { + filterSettings: { + iframe: { + bidders: ['equativ'], + }, + }, + }, +}); +``` + +And also making sure that storage is enabled for `equativ`. + +{% include dev-docs/storageAllowed.md %} + +```js +pbjs.bidderSettings = { + equativ: { + storageAllowed: true, + }, +}; +``` + +### Ad Unit Setup + +#### Banner + +As mentioned in the **Bid Params > Usage** section, when including `'equativ'` as one of the available bidders in an adunit setup, there are two approaches to how publishers can specify parameters. The below example uses the approach using the `params` object. + +```javascript +var bannerAdUnits = [ + { + code: 'div-123', + mediaTypes: { + banner: { + sizes: [ + [600, 500], + [300, 600], + ], + }, + }, + bids: [ + { + bidder: 'equativ', + params: { + networkId: 42, // REQUIRED + siteId: 142, // optional + pageId: 242, // optional + formatId: 342, // optional + }, + }, + ], + }, +]; + +pbjs.que.push(function () { + pbjs.addAdUnits(bannerAdUnits); +}); +``` + +#### Video + +As mentioned in the **Bid Params > Usage** section, when including `'equativ'` as one of the available bidders in an adunit setup, there are two approaches to how publishers can specify parameters. The below example uses the approach using the `params` object. + +Note that the `optional`, `recommended` and `REQUIRED` comments apply to the property itself, and not necessarily the values used in this example (_i.e._ `skip` _is a recommended property to include, but it is up to publishers to decide what particular value it should have_). + +```javascript +var videoAdUnits = [ + { + code: 'div-123', + mediaTypes: { + video: { + context: 'instream', + mimes: ['video/mp4'], // REQUIRED + linearity: 1, // optional + minduration: 10, // recommended + maxduration: 30, // recommended + placement: 1, // REQUIRED + skip: 1, // recommended + startdelay: 1, // recommended + pos: 1, // optional + playbackmethod: 1, // optional + battr: [10, 11], // optional + api: [1, 2], // optional + playerSize: [640, 480], // recommended + }, + }, + bids: [ + { + bidder: 'equativ', + params: { + networkId: 42, // REQUIRED + siteId: 142, // optional + pageId: 242, // optional + formatId: 342, // optional + }, + }, + ], + }, +]; + +pbjs.que.push(function () { + pbjs.addAdUnits(videoAdUnits); +}); +``` + +#### Outstream Video + +Following the setup described [here](https://docs.prebid.org/dev-docs/show-outstream-video-ads.html), this adapter supports scenarios where the publisher does not provide a custom renderer. In such cases, the configuration shown below will work, and the outstream ad will be rendered using Equativ's default player. + +```javascript +var adUnits = [ + { + code: 'test-div', + mediaTypes: { + banner: { + sizes: [ + [300, 250] + ] + }, + video: { + context: 'outstream', + mimes: ['video/mp4'], + placement: 3, + playerSize: [300, 250] + } + }, + bids: [ + { + bidder: 'equativ', + params: { + networkId: 42 + } + } + ] + } +]; +``` + +#### Native + +As mentioned in the **Bid Params > Usage** section, when including `'equativ'` as one of the available bidders in an adunit setup, there are two approaches to how publishers can specify parameters. The below example uses the approach using the `params` object. + +```javascript +var nativeAdUnits = [ + { + code: 'native-div', + mediaTypes: { + native: { + adTemplate: ``, + ortb: { + context: 1, + plcmttype: 1, + assets: [ + { + id: 1, + required: 1, + title: { + len: 80, // Title (corresponds with id 1 from ad markup) + }, + }, + { + id: 2, + required: 1, + img: { + type: 3, // Main Image (corresponds with id 2 from ad markup) + w: 300, + h: 180, + }, + }, + { + id: 6, + required: 1, + img: { + type: 1, // Additional image (corresponds with id 6 from ad markup) + w: 100, + h: 100, + }, + }, + { + id: 9, + required: 1, + data: { + type: 2, // Additional text (description) (dodatkowy )corresponds with id 9 from ad markup) + }, + }, + ], + eventtrackers: [ + { + event: 1, + methods: [1], + }, + ], + ver: '1.2', + privacy: 1, + }, + }, + }, + bids: [ + { + bidder: 'equativ', + params: { + networkId: 73, + formatId: 142, + pageId: 242, + siteId: 342, + }, + }, + ], + }, +]; + +pbjs.que.push(function () { + pbjs.addAdUnits(nativeAdUnits); +}); +``` + +#### Audio + +It is possible to specify audio inventory through the Equativ adapter. To do so, publishers can define a video-formatted ad unit and specify audio information through the `ortb2Imp` property, like the example shown below. + +Note that the `optional`, `recommended` and `REQUIRED` comments apply to the property itself, and not necessarily the values used in this example (_i.e._ `minduration` _is a recommended property to include, but it is up to publishers to decide what particular value it should have_). + +```javascript +var audioAdUnits = [ + { + code: '/19968336/header-bid-tag-1', + mediaTypes: { + video: { + context: 'instream', + playerSize: [640, 480], + }, + }, + ortb2Imp: { + audio: { + mimes: ['audio/mpeg', 'audio/mp4'], // REQUIRED + api: [7], // optional + delivery: [2, 4], // optional + minbitrate: 128, // optional + maxbitrate: 192, // optional + minduration: 10, // recommended + maxduration: 30, // recommended + maxextended: -1, // optional + protocols: [1, 3, 4, 7], // recommended + startdelay: 5, // recommended + }, + }, + bids: [ + { + bidder: 'equativ', + params: { + networkId: 1234, + }, + }, + ], + }, +]; + +pbjs.que.push(function () { + pbjs.addAdUnits(audioAdUnits); +}); +``` + +{: .alert.alert-warning :} +**Note**: If a demand partner of Equativ is not capable of reading an audio object, the audio object will be converted into a video object with audio mime types. There is, as of this writing, no built-in/default support for serving audio assets in Prebid, so publishers that wish to do so will need to ensure their ad server setups can process whatever hand-offs are necessary. + +#### Multi-formats and multi-sizes examples + +##### Banner, Outstream Video, and Native with different floors + +```javascript +var adUnits = [ + { + code: 'test-div', + mediaTypes: { + banner: { + sizes: [ + [300, 250], + [300, 600] + ] + }, + video: { + context: 'outstream', + mimes: ['video/mp4'], + placement: 3, + playerSize: [300, 250] + }, + native: { + title: { + len: 80, + required: true + }, + image: { + required: true, + sizes: [300, 150] + } + } + }, + floors: { + currency: 'USD', + schema: { + fields: ['mediaType'] + }, + values: { + 'banner': 1.04, + 'video': 1.87, + 'native': 1.35 + } + }, + bids: [ + { + bidder: 'equativ', + params: { + networkId: 42 + } + } + ] + } +]; +``` + +##### Banner, Outstream Video, and Native with one floor + +```javascript +var adUnits = [ + { + code: 'test-div', + mediaTypes: { + banner: { + sizes: [ + [300, 250], + [300, 600] + ] + }, + video: { + context: 'outstream', + mimes: ['video/mp4'], + placement: 3, + playerSize: [300, 250] + }, + native: { + title: { + len: 80, + required: true + }, + image: { + required: true, + sizes: [300, 150] + } + } + }, + floors: { + currency: 'USD', + schema: { + fields: ['mediaType'] + }, + values: { + '*': 1.48 + } + }, + bids: [ + { + bidder: 'equativ', + params: { + networkId: 42 + } + } + ] + } +]; +``` + +##### Multiple Banner sizes with different floors + +```javascript +var adUnits = [ + { + code: 'test-div', + mediaTypes: { + banner: { + sizes: [ + [300, 160], + [300, 250], + [300, 600] + ] + } + }, + floors: { + currency: 'USD', + schema: { + delimiter: '|', + fields: ['mediaType', 'size'] + }, + values: { + 'banner|300x250': 1.37, + 'banner|300x600': 1.52, + 'banner|*': 1.23 + } + }, + bids: [ + { + bidder: 'equativ', + params: { + networkId: 42 + } + } + ] + } +]; +``` + +##### Multiple Banner sizes with one floor + +```javascript +var adUnits = [ + { + code: 'test-div', + mediaTypes: { + banner: { + sizes: [ + [300, 160], + [300, 250], + [300, 600] + ] + } + }, + floors: { + currency: 'USD', + schema: { + delimiter: '|', + fields: ['mediaType', 'size'] + }, + values: { + 'banner|*': 1.19 + } + }, + bids: [ + { + bidder: 'equativ', + params: { + networkId: 42 + } + } + ] + } +]; +``` + +### First Party Data + +Publishers should use the `ortb2` method of setting [First Party Data](https://docs.prebid.org/features/firstPartyData.html). + +#### Keywords + +Keyword targeting capabilities are supported. To pass keywords, the following fields can be used: `ortb2.site.keywords`, `ortb2.app.keywords`, or `ortb2.dooh.keywords`. + +```javascript +pbjs.setConfig({ + ortb2: { + site: { + keywords: 'kw_1,kw_2' + } + } +}); +``` + +### Additional Resources + +Information about how Equativ supports the oRTB specification, along with additional examples, can be found [on our OpenRTB API support site](https://help.equativ.com/open-rtb-api-integration-bid-request-specification-1). diff --git a/dev-docs/bidders/ergadx.md b/dev-docs/bidders/ergadx.md index 02803608c9..2498b553be 100644 --- a/dev-docs/bidders/ergadx.md +++ b/dev-docs/bidders/ergadx.md @@ -3,23 +3,28 @@ layout: bidder title: eRGADX description: eRGADX Bidder Adaptor biddercode: ergadx -pbjs: true -pbs: true -media_types: banner, native, video -gvl_id: 14 (adkernel) +aliasCode: adkernel tcfeu_supported: true -gpp_supported: true +dsa_supported: false +gvl_id: 14 (adkernel) usp_supported: true coppa_supported: true -pbs_app_supported: true +gpp_sids: tcfeu, usp schain_supported: true -userIds: all +dchain_supported: false +userId: all +media_types: banner, video, native +safeframes_ok: true +deals_supported: false +floors_supported: true fpd_supported: true +pbjs: true +pbs: false +pbs_app_supported: false prebid_member: false +multiformat_supported: will-bid-on-any ortb_blocking_supported: true -multiformat_supported: will-bid-on-one -floors_supported: true -aliasCode: adkernel +privacy_sandbox: no sidebarType: 1 --- diff --git a/dev-docs/bidders/escalax.md b/dev-docs/bidders/escalax.md new file mode 100644 index 0000000000..3bede695da --- /dev/null +++ b/dev-docs/bidders/escalax.md @@ -0,0 +1,44 @@ +--- +layout: bidder +title: Escalax +description: Prebid Escalax Bidder Adaptor +biddercode: escalax +usp_supported: true +ccpa_supported: true +coppa_supported: true +schain_supported: true +media_types: banner, video, native +safeframes_ok: true +deals_supported: true +pbjs: true +pbs: true +sidebarType: 1 +floors_supported: true +prebid_member: false +fpd_supported: false +gvl_id: none +multiformat_supported: will-bid-on-one +ortb_blocking_supported: true +userIds: all +--- + +### Note + +The Escalax Bidding adapter requires setup before beginning. Please contact us at + +### Bid Params for Prebid Server + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|-----------------------|-----------|-----------| +| `sourceId` | required | Patner name | `'partner'` | `string` | +| `accountId` | required | Hash | `'0800fc577294'` | `string` | + +### Bid Params for Prebid.js + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|-----------------------|-----------|-----------| +| `sourceId` | required | Unique hash | `'partner'` | `string` | +| `accountId` | required | Unique name | `'0800fc577294'` | `string` | +| `subdomain` | optional | Escalax region | `'bidder_us'` | `string` | diff --git a/dev-docs/bidders/eskimi.md b/dev-docs/bidders/eskimi.md index 9b5e9e9be3..c4e7ce5c61 100644 --- a/dev-docs/bidders/eskimi.md +++ b/dev-docs/bidders/eskimi.md @@ -5,26 +5,36 @@ description: Prebid Eskimi Bidder Adapter pbjs: true pbs: false biddercode: eskimi -deals_supported: false media_types: banner, video -gvl_id: 814 schain_supported: true +tcfeu_supported: true +usp_supported: true +coppa_supported: true +gpp_supported: true +deals_supported: false floors_supported: true safeframes_ok: false multiformat_supported: will-bid-on-any ortb_blocking_supported: true +fpd_supported: true +gvl_id: 814 sidebarType: 1 --- ### Bid Params {: .table .table-bordered .table-striped } + | Name | Scope | Description | Example | Type | |-------------------|----------|---------------------------------|------------------------|-----------| | `placementId` | required | The placement ID from Eskimi. | `612` | `integer` | | `bcat` | optional | ORTB blocked categories | `['IAB-1-1']` | `string[]`| | `badv` | optional | ORTB blocked advertiser domains | `['example.com']` | `string[]`| | `bapp` | optional | ORTB blocked applications | `['com.example.game']` | `string[]`| +| `bidFloor` | optional | Minimum CPM | `0.3` | `number` | +| `bidFloorCur` | optional | Currency of bid floor | `'USD'` | `string` | +| `coppa` | optional | Set to `true` to enable COPPA | `true` | `boolean` | +| `test` | optional | Set to `1` to enable test mode | `1` | `integer` | Additionally `battr` ORTB blocking param may be set on `BANNER` and `VIDEO` media types to specify blocked creative attributes. diff --git a/dev-docs/bidders/exco.md b/dev-docs/bidders/exco.md new file mode 100644 index 0000000000..379f071d10 --- /dev/null +++ b/dev-docs/bidders/exco.md @@ -0,0 +1,73 @@ +--- +layout: bidder +title: EX.CO +description: Prebid EX.CO Bidder Adaptor +biddercode: exco +filename: excoBidAdapter +userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId +tcfeu_supported: true +gvl_id: 444 +usp_supported: true +coppa_supported: false +schain_supported: true +gpp_supported: true +floors_supported: true +media_types: banner, video +prebid_member: true +safeframes_ok: false +deals_supported: false +pbs_app_supported: false +fpd_supported: false +ortb_blocking_supported: false +multiformat_supported: will-bid-on-one +pbjs: true +pbs: true +sidebarType: 1 +--- + +### Bid Params + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|---------------|------------|---------------------------------------------------------------------------------------|------------------------------|----------| +| `accountId` | required | A unique account identifier provided by EX.CO. | `'1234567890'` | `string` | +| `publisherId` | required | Publisher ID provided by EX.CO. | `'1234567890'` | `string` | +| `tagId` | required | A unique Tag ID (supply id) identifier provided by EX.CO. | `'1234567890'` | `string` | + +### Example + + ```javascript +var adUnits = [{ + code: 'banner-div', + mediaTypes: { + banner: { + sizes: [ + [300, 250], + [728, 90] + ] + } + }, + bids: [{ + bidder: 'exco', + params: { + accountId: '1234567890', // Required - PROVIDED DURING SETUP... + publisherId: '1234567890', // Required - PROVIDED DURING SETUP... + tagId: '1234567890' // Required - PROVIDED DURING SETUP... + } + }] + } +]; + +// configure pbjs to enable user syncing +pbjs.setConfig({ + userSync: { + filterSettings: { + iframe: { + bidders: 'exco', + filter: 'include' + } + } + } +}); +``` diff --git a/dev-docs/bidders/feedad.md b/dev-docs/bidders/feedad.md index 64201463b9..b2358abb29 100644 --- a/dev-docs/bidders/feedad.md +++ b/dev-docs/bidders/feedad.md @@ -2,12 +2,16 @@ layout: bidder title: FeedAd description: Prebid FeedAd Bidder Adaptor +gpp_sids: tcfeu, usp pbjs: true +pbs: true biddercode: feedad tcfeu_supported: true media_types: banner gvl_id: 781 sidebarType: 1 +usp_supported: true +prebid_member: true --- ### Bid Params @@ -18,3 +22,4 @@ sidebarType: 1 | `clientToken` | required | Your FeedAd client token. Check your FeedAd admin panel. | `'EiRjZDFiYzI2ZC03OTA2LTQyOTEtOGFmMC0xYzMyZmMwNTFkMDU='` | `string` | | `placementId` | required | A FeedAd placement ID of your choice | `'prebid-test'` | `string` | | `decoration` | optional | A decoration to apply to the ad slot. See our [documentation](https://docs.feedad.com/web/feed_ad/#decorations) | `'sticky bottom height=200px'` | `string` | +| `sdkOptions` | optional | Only required if you are using Prebid.JS in an app environment (aka hybrid App). See our [documentation](https://docs.feedad.com/web/configuration/#hybrid-app-config-parameters) | `{ hybrid_app: true, hybrid_platform: "android", bundle_id: "your.app.bundle", app_name: "Your App", limit_ad_tracking: false, advertising_id: "the user's ad id" }` | `object` | diff --git a/dev-docs/bidders/felixads.md b/dev-docs/bidders/felixads.md index e633e47c44..89b152a1f2 100644 --- a/dev-docs/bidders/felixads.md +++ b/dev-docs/bidders/felixads.md @@ -1,36 +1,39 @@ --- layout: bidder -title: felixads -description: Prebid felixads Bidder Adaptor +title: FelixAds +description: FelixAds Bidder Adapter biddercode: felixads -pbjs: true -pbs: false -media_types: banner, native, video -gvl_id: 14 (adkernel) -tcfeu_supported: true -gpp_supported: true +aliasCode : smarthub usp_supported: true coppa_supported: true -pbs_app_supported: true schain_supported: true -userIds: all -fpd_supported: true -prebid_member: false -ortb_blocking_supported: true -multiformat_supported: will-bid-on-one +dchain_supported: true +media_types: banner, video, native +safeframes_ok: true +deals_supported: true floors_supported: true -aliasCode: adkernel -sidebarType: 1 +fpd_supported: false +pbjs: true +pbs: true +pbs_app_supported: true +multiformat_supported: will-bid-on-any --- -### Note +### Prebid.js Bid Params -The felixads Bidding adaptor requires setup and approval before beginning. Please reach out to for more details +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|---------------------------------|-------------------------------------|-----------| +| `seat` | required | Seat value | `'9Q20EdGxzgWdfPYShScl'` | `string` | +| `token` | required | Token | `'eKmw6alpP3zWQhRCe3flOpz0wpuwRFjW'` | `string` | +| `iabCat` | optional | Array of IAB content categories that describe the content producer | `['IAB1-1', 'IAB3-1', 'IAB4-3']` | `Array(String)` | +| `minBidfloor` | optional | Minimal CPM value | `0.03` | `float` | +| `pos` | optional | The position of the placement on the page, see Open RTB spec v2.5. | `4` | `number` | -### Bid Params +### Prebid Server Bid Params {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|----------|----------|-----------------------|---------------------------|----------| -| `host` | required | felixads's RTB host | `'cpm.felixads.com'` | `string` | -| `zoneId` | required | RTB zone id | `'30164'` | `integer` | +| Name | Scope | Description | Example | Type | +|---------------|----------|---------------------|--------------------------------------|----------| +| `seat` | required | Seat value | `'9Q20EdGxzgWdfPYShScl'` | `string` | +| `token` | required | Token | `'eKmw6alpP3zWQhRCe3flOpz0wpuwRFjW'` | `string` | diff --git a/dev-docs/bidders/filmzie.md b/dev-docs/bidders/filmzie.md new file mode 100644 index 0000000000..a04a6fac71 --- /dev/null +++ b/dev-docs/bidders/filmzie.md @@ -0,0 +1,34 @@ +--- +layout: bidder +title: Filmzie +description: Prebid Filmzie Bidder Adaptor +biddercode: filmzie +pbjs: false +pbs: true +media_types: banner, video, audio, native +userIds: all +fpd_supported: false +tcfeu_supported: false +usp_supported: true +coppa_supported: true +schain_supported: true +prebid_member: false +ortb_blocking_supported: true +multiformat_supported: will-bid-on-one +floors_supported: false +aliasCode: limelightDigital +sidebarType: 1 +--- + +### Note + +The Filmzie Bidding adapter requires setup before beginning. + +### Bid Params + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|:--------------|:---------|:----------------------|:---------------------|:----------| +| `host` | required | Ad network's RTB host | `'ortb.filmzie.com'` | `string` | +| `publisherId` | required | Publisher ID | `12345` | `integer` | diff --git a/dev-docs/bidders/flatads.md b/dev-docs/bidders/flatads.md new file mode 100644 index 0000000000..e14cc4e10d --- /dev/null +++ b/dev-docs/bidders/flatads.md @@ -0,0 +1,37 @@ +--- +layout: bidder +title: flatads +description: Prebid Flatads Bidder Adapter +biddercode: flatads +tcfeu_supported: true +usp_supported: true +coppa_supported: true +gpp_sids: tcfeu, tcfca, usnat, usstate_all, usp +userIds: all +schain_supported: true +dchain_supported: true +media_types: banner, video, native +safeframes_ok: false +deals_supported: true +floors_supported: true +pbjs: false +pbs: true +pbs_app_supported: true +prebid_member: false +multiformat_supported: will-bid-on-any +ortb_blocking_supported: true +sidebarType: 1 +--- + +### Registration + +Flatads header bidding adapter connects with Flatads demand sources to fetch bids for banner publisher ID. Please reach +out to your account manager or for more information. + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|--------------|-----------|----------| +| `publisherId` | required | The publisher ID from Flatads | "1111" | string | +| `token` | required | Token of the publisher | "66668888" | string | diff --git a/dev-docs/bidders/freedomadnetwork.md b/dev-docs/bidders/freedomadnetwork.md new file mode 100644 index 0000000000..f1e82c370d --- /dev/null +++ b/dev-docs/bidders/freedomadnetwork.md @@ -0,0 +1,37 @@ +--- +layout: bidder +title: Freedom Ad Network +description: Freedom Ad Network Bidder Adapter +biddercode: freedomadnetwork +filename: fanAdapter +gvl_id: none +coppa_supported: true +media_types: banner, native +safeframes_ok: false +deals_supported: false +floors_supported: false +fpd_supported: false +pbjs: true +prebid_member: false +sidebarType: 1 +tcfeu_supported: false +dsa_supported: false +usp_supported: false +schain_supported: false +dchain_supported: false +pbs: false +ortb_blocking_supported: false +privacy_sandbox: no +--- + +### Note + +The Freedom Ad Network Adapter requires setup before beginning. Please contact us at [info@freedomadnetwork.com](mailto:info@freedomadnetwork.com). + +### Bid Params + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|---------------|----------|-----------------------|-----------|-----------| +| `placementId` | required | Placement ID | `'e6203f1e-bd6d-4f42-9895-d1a19cdb83c8'` | `string` | diff --git a/dev-docs/bidders/fwssp.md b/dev-docs/bidders/fwssp.md new file mode 100644 index 0000000000..9bace4af4d --- /dev/null +++ b/dev-docs/bidders/fwssp.md @@ -0,0 +1,54 @@ +--- +layout: bidder +title: FWSSP +description: Freewheel Bidder Adaptor +pbjs: true +pbs: true +biddercode: fwssp +gvl_id: 285 +tcfeu_supported: true +usp_supported: true +gpp_supported: true +coppa_supported: true +schain_supported: true +media_types: video +ortb_blocking_supported: partial +--- + +### Bid Params + +The following bid params are for use with the Prebid Server bid adapter: + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------|----------|-------------------------|--------|----------| +| `custom_site_section_id` | required | custom Site Section tag or numeric Site Section ID | "ss_12345" | `string` | +| `network_id` | required | Network ID | "12345" | `string` | +| `profile_id` | required | The value should contain a profile name. and NOT a numeric profile ID. This can either include the network ID prefix or with the profile name alone | "prof_12345" | `string` | + +The following bid params are for use with the Prebid.js bid adapter: + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------|----------|-------------------------|--------|----------| +| `serverUrl` | required | Server Url | "`https://81cec.v.fwmrm.net/ad/g/1`" | `string` | +| `networkId` | required | Network ID | "96749" | `string` | +| `profile` | required | Profile Name - The value should contain a profile name. and NOT a numeric profile ID. This can either include the network ID prefix or with the profile name alone | "96749:global-js" | `string` | +| `siteSectionId` | required | Custom Site Section tag or numeric Site Section ID | "ss_12345" | `string` | +| `videoAssetId` | required | Custom content Video Asset ID | "pause_ad_video" | `string` | +| `bidfloor` | optional | Bid floor price | 13.2118 | `number` | +| `bidfloorcur` | optional | Bid floor currency | "USD" | `string` | +| `flags` | optional | Optional flags to include in the ad request | '+play-uapl' | `string` | +| `mode` | optional | Request mode. Valid values are: “on-demand", "live". Default: "on-demand" | "live" | `string` | +| `adRequestKeyValues` | optional | An object of ad request key-value pairs. | { \_fw_player_width: '1920', \_fw_player_height: '1080' } | `object` | +| `gdpr_consented_providers` | optional | List of Consented Providers. A comma-separated list of ids. | "216,229,80,359,479" | `string` | +| `tpos` | optional | Slot time position in seconds. Default: 0 | 10 | `number` | +| `slid` | optional | Slot custom ID. Any string with valid letters/digits/symbols. Default: "Preroll_1" | "CustomPreroll" | `string` | +| `slau` | optional | Specify custom ad unit names for this slot. Multiple ad unit names can be put into this parameter, separated by "\|". Ad unit group names are also supported but you can only specify one ad unit group; multiple ad unit groups or mixed ad unit group and ad unit names are not supported. Default: "preroll" | "pre1\|pre2" | `string` | +| `listeners` | optional | An object of AdManager event listeners | { onSlotStarted: this.onSlotStarted, adEvent: this.onAdEvent, onSlotEnded: this.onSlotEnded } | `object` | +| `isMuted` | optional | Controls if ad playback should start with volume muted. Default: true | false | `boolean` | +| `showMuteButton` | optional | Controls if a mute button should be shown during ad playback. Default: false | true | `boolean` | +| `playerParams` | optional | An object of AdManager player parameter values | { "renderer.video.startDetectTimeout": 5000 } | `object` | +| `sdkVersion` | optional | The AdManager sdk version to use for playback. This is only valid for "outstream" formats. Default: "7.10.0" | "7.11.0" | `string` | +| `format` | optional | The format to use for displaying the ad. Default: outstream | "inbanner" | `string` | +| `env` | optional | The AdManager build to use for ad playback. Valid values: "prd", "stg". Default: "prd" | "stg" | `string` | diff --git a/dev-docs/bidders/gambid.md b/dev-docs/bidders/gambid.md index 1e2eada831..33ab5e4031 100644 --- a/dev-docs/bidders/gambid.md +++ b/dev-docs/bidders/gambid.md @@ -1,22 +1,153 @@ --- layout: bidder title: Gambid -description: Prebid Gambid Bidder Adaptor - -top_nav_section: dev_docs -nav_section: reference - +description: Prebid Gambid Bidder Adapter +biddercode: gambid pbjs: true +pbs: true media_types: banner, video -biddercode: gambid -aliasCode: gamoshi -userIds: id5Id, unifiedId +userIds: all +gvl_id: 644 +tcfeu_supported: true +schain_supported: true +usp_supported: true +ortb_blocking_supported: true +multiformat_supported: will-bid-on-one sidebarType: 1 +aliasCode: gamoshi --- ### Bid params {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | +| Name | Scope | Description | Example | Type | |-------------------|----------|---------------------------------------------------------------|----------------------|----------| -| `supplyPartnerId` | required | ID of the supply partner | `'12345'` | `string` | +| `supplyPartnerId` or `inventory_id` or `supply_partner_id` | required | ID of the supply partner. This parameter can be either a `string` or `integer` for Prebid.js, however `integer` is preferred | `12345` | `integer` | +| `bidfloor` | optional | Minimum acceptable bid price. Must be a positive number. | `0.5` | `number` | +| `instl` | optional | Interstitial flag (1 for interstitial, 0 for non-interstitial). | `1` | `integer` | +| `pos` | optional | Ad position on the page. | `1` | `integer` | +| `video` | optional | Object containing video targeting parameters. See [Video Object](#video-object) for details. | `video: { playback_method: ['auto_play_sound_off'] }` | `object` | + +This adapter only requires you to provide your Inventory Id (Supply partner id), and optionally your RTB endpoint. + +#### Video Object + +For details on how these video params work with the params set in the adUnit.mediaTypes.video object. + +{: .table .table-bordered .table-striped } +| Name | Description | Type | +|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------| +| `minduration` | Integer that defines the minimum video ad duration in seconds. | `integer` | +| `maxduration` | Integer that defines the maximum video ad duration in seconds. | `integer` | +| `protocols` | Array of integers listing the supported video protocols (VAST versions). | `Array` | +| `mimes` | Array of strings listing the supported MIME types for the video creative. | `Array` | +| `pos` | Ad position on the screen. | `integer` | +| `api` | Array of integers listing the supported API frameworks. | `Array` | +| `skip` | Indicates if the player will allow the video to be skipped (0 = no, 1 = yes). | `integer` | +| `plcmt` | Video placement type. | `integer` | +| `placement` | Placement type for the impression. | `integer` | +| `playbackmethod` | Array of integers listing the playback methods. | `Array` | +| `startdelay` | Indicates the offset of the ad placement from the start of the video content. | `integer` | +| `context` | Content context (e.g., 'instream', 'outstream'). | `string` | + +### Example Ad Unit Configurations + +#### Banner Ad Unit + +```javascript +var adUnits = [ + { + code: 'banner-div', + mediaTypes: { + banner: { + sizes: [[300, 250], [728, 90]] + } + }, + bids: [ + { + bidder: 'gambid', + params: { + supplyPartnerId: 12345, + bidfloor: 0.5, + pos: 1 + } + } + ] + } +]; +``` + +#### Video Ad Unit (Instream) + +```javascript +var adUnits = [ + { + code: 'video-div', + mediaTypes: { + video: { + playerSize: [[640, 480]], + context: 'instream', + mimes: ['video/mp4', 'video/webm'], + protocols: [2, 3, 5, 6], + maxduration: 30, + api: [1, 2] + } + }, + bids: [ + { + bidder: 'gambid', + params: { + supplyPartnerId: 12345, + video: { + minduration: 5, + maxduration: 30, + protocols: [2, 3, 5, 6], + mimes: ['video/mp4', 'video/webm'], + playbackmethod: [2], + skip: 1, + startdelay: 0, + api: [1, 2], + plcmt: 1 + } + } + } + ] + } +]; +``` + +#### Video Ad Unit (Outstream) + +```javascript +var adUnits = [ + { + code: 'outstream-div', + mediaTypes: { + video: { + playerSize: [[640, 480]], + context: 'outstream', + mimes: ['video/mp4', 'video/webm'] + } + }, + bids: [ + { + bidder: 'gambid', + params: { + supplyPartnerId: 12345, + rendererUrl: 'https://example.com/outstream-renderer.js', + video: { + minduration: 5, + maxduration: 30, + protocols: [2, 3, 5, 6], + mimes: ['video/mp4', 'video/webm'], + playbackmethod: [2], + placement: 3, + plcmt: 3, + context: 'outstream' + } + } + } + ] + } +]; +``` diff --git a/dev-docs/bidders/gamoshi.md b/dev-docs/bidders/gamoshi.md index 2b1a874644..354c6e7110 100644 --- a/dev-docs/bidders/gamoshi.md +++ b/dev-docs/bidders/gamoshi.md @@ -6,12 +6,13 @@ biddercode: gamoshi pbjs: true pbs: true media_types: banner, video +userIds: all +gvl_id: 644 tcfeu_supported: true -tcf2_supported: true schain_supported: true usp_supported: true -userIds: id5Id, unifiedId -gvl_id: 644 +ortb_blocking_supported: true +multiformat_supported: will-bid-on-one sidebarType: 1 --- @@ -20,8 +21,134 @@ sidebarType: 1 {: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | |-------------------|----------|---------------------------------------------------------------|----------------------|----------| -| `supplyPartnerId` | required | ID of the supply partner you created in the Gamoshi dashboard. | `'12345'` | `string` | +| `supplyPartnerId` or `inventory_id` or `supply_partner_id` | required | ID of the supply partner you created in the Gamoshi dashboard. This parameter can be either a `string` or `integer` for Prebid.js, however `integer` is preferred | `12345` | `integer` | | `rtbEndpoint` | optional | If you have a whitelabel account on Gamoshi, specify it here. | `'rtb.mybidder.com'` | `string` | +| `bidfloor` | optional | Minimum acceptable bid price. Must be a positive number. | `0.5` | `number` | +| `instl` | optional | Interstitial flag (1 for interstitial, 0 for non-interstitial). | `1` | `integer` | +| `pos` | optional | Ad position on the page. | `1` | `integer` | +| `rendererUrl` | optional | Custom renderer URL for outstream video. | `'https://example.com/renderer.js'` | `string` | +| `video` | optional | Object containing video targeting parameters. See [Video Object](#video-object) for details. | `video: { playback_method: ['auto_play_sound_off'] }` | `object` | + +This adapter only requires you to provide your Inventory Id (Supply partner id), and optionally your RTB endpoint. + +#### Video Object + +For details on how these video params work with the params set in the adUnit.mediaTypes.video object. + +{: .table .table-bordered .table-striped } +| Name | Description | Type | +|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------| +| `minduration` | Integer that defines the minimum video ad duration in seconds. | `integer` | +| `maxduration` | Integer that defines the maximum video ad duration in seconds. | `integer` | +| `protocols` | Array of integers listing the supported video protocols (VAST versions). | `Array` | +| `mimes` | Array of strings listing the supported MIME types for the video creative. | `Array` | +| `pos` | Ad position on the screen. | `integer` | +| `api` | Array of integers listing the supported API frameworks. | `Array` | +| `skip` | Indicates if the player will allow the video to be skipped (0 = no, 1 = yes). | `integer` | +| `plcmt` | Video placement type. | `integer` | +| `placement` | Placement type for the impression. | `integer` | +| `playbackmethod` | Array of integers listing the playback methods. | `Array` | +| `startdelay` | Indicates the offset of the ad placement from the start of the video content. | `integer` | +| `context` | Content context (e.g., 'instream', 'outstream'). | `string` | + +### Example Ad Unit Configurations + +#### Banner Ad Unit + +```javascript +var adUnits = [ + { + code: 'banner-div', + mediaTypes: { + banner: { + sizes: [[300, 250], [728, 90]] + } + }, + bids: [ + { + bidder: 'gamoshi', + params: { + supplyPartnerId: 12345, + bidfloor: 0.5, + pos: 1 + } + } + ] + } +]; +``` + +#### Video Ad Unit (Instream) + +```javascript +var adUnits = [ + { + code: 'video-div', + mediaTypes: { + video: { + playerSize: [[640, 480]], + context: 'instream', + mimes: ['video/mp4', 'video/webm'], + protocols: [2, 3, 5, 6], + maxduration: 30, + api: [1, 2] + } + }, + bids: [ + { + bidder: 'gamoshi', + params: { + supplyPartnerId: 12345, + video: { + minduration: 5, + maxduration: 30, + protocols: [2, 3, 5, 6], + mimes: ['video/mp4', 'video/webm'], + playbackmethod: [2], + skip: 1, + startdelay: 0, + api: [1, 2], + plcmt: 1 + } + } + } + ] + } +]; +``` + +#### Video Ad Unit (Outstream) -This adapter only requires you to provide your supply partner ID, and optionally your RTB endpoint, in order to request -bids from your Gamoshi account. +```javascript +var adUnits = [ + { + code: 'outstream-div', + mediaTypes: { + video: { + playerSize: [[640, 480]], + context: 'outstream', + mimes: ['video/mp4', 'video/webm'] + } + }, + bids: [ + { + bidder: 'gamoshi', + params: { + supplyPartnerId: 12345, + rendererUrl: 'https://example.com/outstream-renderer.js', + video: { + minduration: 5, + maxduration: 30, + protocols: [2, 3, 5, 6], + mimes: ['video/mp4', 'video/webm'], + playbackmethod: [2], + placement: 3, + plcmt: 3, + context: 'outstream' + } + } + } + ] + } +]; +``` diff --git a/dev-docs/bidders/glimpse.md b/dev-docs/bidders/glimpse.md index 867ecbaafc..a4724f9a83 100644 --- a/dev-docs/bidders/glimpse.md +++ b/dev-docs/bidders/glimpse.md @@ -15,7 +15,7 @@ sidebarType: 1 {: .alert.alert-warning :} glimpse is probably a defunct bidder, as the glimpseportal.io domain is no longer active. -## Overview +### Overview ```text Module Name: Glimpse Protocol Bid Adapter @@ -23,19 +23,20 @@ Module Type: Bidder Adapter Maintainer: support@glimpseportal.io ``` -## Description +### Description Glimpse protects consumer privacy while allowing precise targeting. This module connects publishers to Glimpse Protocol's demand sources via Prebid.js. -## Supported Media Types +### Supported Media Types {: .table .table-bordered .table-striped } + | Type | Sizes | | -------- | ----------------------------------------- | | `Banner` | 300x250, 300x600, 320x50, 728x90, 970x250 | -## Setup +### Setup ### Prerequisites @@ -50,13 +51,14 @@ Before you start, you will need to build a `prebid.js` file with the Glimpse mod ``` -## Configuration +### Configuration ### Bid Requests Our adapter expects the following values in the `params` block of each bid request: {: .table .table-bordered .table-striped } + | Name | Scope | Type | Description | Example | | ----- | -------- | ------ | --------------------------------------------------------------------------------------------------- | ---------------------- | | `pid` | Required | string | A unique identifier representing an ad unit. It is provided by Glimpse when registering an ad unit. | 'glimpse-placement-id' | @@ -123,8 +125,8 @@ pbjs.que.push(() => { }) ``` -## FAQs +### FAQs -### Can you provide additional support? +#### Can you provide additional support? Of course! You can check the Glimpse Prebid Adapter documentation or reach out to us at . diff --git a/dev-docs/bidders/global_sun.md b/dev-docs/bidders/global_sun.md new file mode 100644 index 0000000000..d8b30bb237 --- /dev/null +++ b/dev-docs/bidders/global_sun.md @@ -0,0 +1,41 @@ +--- +layout: bidder +title: Global Sun +description: Global Sun Adaptor +biddercode: global_sun +aliasCode: adkernel +tcfeu_supported: true +dsa_supported: false +gvl_id: 14 (adkernel) +usp_supported: true +coppa_supported: true +gpp_sids: tcfeu, usp +schain_supported: true +dchain_supported: false +userId: all +media_types: banner, video, native +safeframes_ok: true +deals_supported: false +floors_supported: true +fpd_supported: true +pbjs: true +pbs: false +pbs_app_supported: false +prebid_member: false +multiformat_supported: will-bid-on-any +ortb_blocking_supported: true +privacy_sandbox: no +sidebarType: 1 +--- + +### Note + +The Global Sun bidding adapter requires setup and approval before implementation. Please reach out to for more details. + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------|----------|-----------------------|---------------------------|----------| +| `host` | required | RTB host | `'cpm.globalsun.io'` | `string` | +| `zoneId` | required | Zone Id | 30164 | `integer` | diff --git a/dev-docs/bidders/glomexbidder.md b/dev-docs/bidders/glomexbidder.md new file mode 100644 index 0000000000..07c6b00523 --- /dev/null +++ b/dev-docs/bidders/glomexbidder.md @@ -0,0 +1,125 @@ +--- +layout: bidder +title: Glomex Bidder +description: Prebid Glomex Bidder Adapter +pbjs: true +pbs: true +biddercode: glomexbidder +gvl_id: 967 +tcfeu_supported: true +usp_supported: true +gpp_supported: true +schain_supported: true +dchain_supported: true +floors_supported: true +userIds: all +tcfeu_supported: true +media_types: banner, video, native +safeframes_ok: true +deals_supported: true +sidebarType: 1 +fpd_supported: true +multiformat_supported: will-bid-on-any + +--- + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|----------------------------|-------------------------------------- |-----------| +| `tagId` | optional | tag ID | `"testnexx"` | `string` | +| `placement` | optional | Placement | `"test"` | `string` | + +For the prebid.js you only need to use one parameter: either tagId or placement + +### First Party Data + +Publishers should use the `ortb2` method of setting [First Party Data](/features/firstPartyData.html). +The following fields are supported: + +* ortb2.site.ext.data.* +* ortb2.site.content.data[] +* ortb2.user.ext.data.* +* ortb2.user.data[] + +### Test Parameters + +```javascript +var adUnits = [ + // Banner adUnit + { + code: 'banner-div', + mediaTypes: { + banner: { + sizes: [[300, 250], [300,600]] + } + }, + bids: [{ + bidder: 'glomexbidder', + params: { + tagId: 'testeasy' + } + }] + }, + // Video adUnit + { + code: 'video1', + mediaTypes: { + video: { + playerSize: [640, 480], + context: 'instream' + } + }, + bids: [{ + bidder: 'glomexbidder', + params: { + tagId: 'testeasy' + } + }] + }, + // Native adUnit + { + code: 'native1', + mediaTypes: + native: { + title: { + required: true + }, + image: { + required: true + }, + sponsoredBy: { + required: true + } + } + }, + bids: [{ + bidder: 'glomexbidder', + params: { + tagId: 'testeasy' + } + }] + }, + // Multiformat Ad + { + code: 'multi1', + mediaTypes: { + video: { + playerSize: [640, 480], + context: 'instream' + }, + banner: { + sizes: [[300, 250], [300,600]] + } + }, + bids: [{ + bidder: 'glomexbidder', + params: { + tagId: 'testeasy', + videoTagId: 'testeasy' + } + }] + }; +]; +``` diff --git a/dev-docs/bidders/goldbach.md b/dev-docs/bidders/goldbach.md index 72ffa4a491..99aa9d3307 100644 --- a/dev-docs/bidders/goldbach.md +++ b/dev-docs/bidders/goldbach.md @@ -1,199 +1,39 @@ --- layout: bidder title: Goldbach -description: Prebid Goldbach Bidder Adaptor +description: Goldbach Bidder Adapter biddercode: goldbach -media_types: banner, video, native -gvl_id: 580 tcfeu_supported: true -prebid_member: true -userIds: criteo, unifiedId, netId, identityLink, uid2 -schain_supported: true -coppa_supported: true -usp_supported: true +dsa_supported: true +gvl_id: 580 +usp_supported: false +coppa_supported: false +gpp_sids: some (check with bidder) +schain_supported: false +dchain_supported: false +userId: goldbach.com, oneid.live +media_types: banner, video, native +safeframes_ok: true +deals_supported: true floors_supported: true +fpd_supported: true pbjs: true pbs: false +prebid_member: false +multiformat_supported: will-bid-on-any +ortb_blocking_supported: false +privacy_sandbox: no sidebarType: 1 --- +### Note -### Table of Contents - -- [Table of Contents](#table-of-contents) - - [Bid Params](#bid-params) - - [Video Object](#video-object) - - [User Object](#user-object) - - [App Object](#app-object) - - [Custom Targeting keys](#custom-targeting-keys) - - [Passing Keys Without Values](#passing-keys-without-values) - - [User Sync in AMP](#user-sync-in-amp) - - [Mobile App Display Manager Version](#mobile-app-display-manager-version) - - [Debug Auction](#debug-auction) - - - -{: .alert.alert-danger :} -All Goldbach (Xandr) placements included in a single call to `requestBids` must belong to the same parent Publisher. If placements from two different publishers are included in the call, the Goldbach bidder will not return any demand for those placements.
-*Note: This requirement does not apply to adapters that are [aliasing](/dev-docs/publisher-api-reference/aliasBidder.html) the Goldbach adapter.* - -#### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------|------------------| -| `placementId` | required | The placement ID from Goldbach. You may identify a placement using the `invCode` and `member` instead of a placement ID. The `placementID` parameter can be either a `string` or `integer` for Prebid.js, however `integer` is preferred. Legacy code can retain the `string` value. **Prebid Server requires an integer value.** | `234234` | `integer` | -| `member` | optional | The member ID from Goldbach. Must be used with `invCode`. | `'12345'` | `string` | -| `invCode` | optional | The inventory code from Goldbach. Must be used with `member`. | `'abc123'` | `string` | -| `publisherId` | optional | The publisher ID from Goldbach. It is used by the Goldbach end point to identify the publisher when `placementId` is not provided and `invCode` goes wrong. The `publisherId` parameter can be either a `string` or `integer` for Prebid.js, however `integer` is preferred. | `12345` | `integer` | -| `frameworks` | optional | Array of integers listing API frameworks for Banner supported by the publisher. | `integer` | -| `user` | optional | Object that specifies information about an external user. See [User Object](#godlbach-user-object) for details. | `user: { age: 25, gender: 0, dnt: true}` | `object` | -| `allowSmallerSizes` | optional | If `true`, ads smaller than the values in your ad unit's `sizes` array will be allowed to serve. Defaults to `false`. | `true` | `boolean` | -| `usePaymentRule` (PBJS) or `use_pmt_rule` (PBS) | optional | If `true`, Xandr will return net price to Prebid.js after publisher payment rules have been applied. | `true` | `boolean` | -| `keywords` | optional | A set of key-value pairs applied to all ad slots on the page. Mapped to [buy-side segment targeting](https://monetize.xandr.com/docs/segment-targeting) (login required). Values can be empty. See [Passing Keys Without Values](#godlbach-no-value) below for examples. Note that to use keyword with the Prebid Server adapter, that feature must be enabled for your account by an Goldbach account manager. | `keywords: { genre: ['rock', 'pop'] }` | `object` | -| `video` | optional | Object containing video targeting parameters. See [Video Object](#godlbach-video-object) for details. | `video: { playback_method: ['auto_play_sound_off'] }` | `object` | -| `app` | optional | Object containing mobile app parameters. See the [App Object](#godlbach-app-object) for details. | `app : { id: 'app-id'}` | `object` | -| `reserve` | optional | Sets a floor price for the bid that is returned. If floors have been configured in the Goldbach Console, those settings will override what is configured here unless 'Reserve Price Override' is checked. See [Xandr docs](https://docs.xandr.com/bundle/monetize_monetize-standard/page/topics/create-a-floor-rule.html) | `0.90` | `float` | -| `position` | optional | Identify the placement as above or below the fold. Allowed values: Unknown: `unknown`; Above the fold: `above`; Below the fold: `below` | `'above'` | `string` | -| `trafficSourceCode` | optional | Specifies the third-party source of this impression. | `'my_traffic_source'` | `string` | -| `supplyType` | optional | Indicates the type of supply for this placement. Possible values are `web`, `mobile_web`, `mobile_app` | `'web'` | `string` | -| `supplyType` | optional | Indicates the type of supply for this placement. Possible values are `web`, `mobile_web`, `mobile_app` | `'web'` | `string` | -| `pubClick` | optional | Specifies a publisher-supplied URL for third-party click tracking. This is just a placeholder into which the publisher can insert their own click tracker. This parameter should be used for an unencoded tracker. This parameter is expected to be the last parameter in the URL. Please note that the click tracker placed in this parameter will only fire if the creative winning the auction is using Goldbach click tracking properly. | `'http://click.adserver.com/'` | `string` | -| `extInvCode` | optional | Specifies predefined value passed on the query string that can be used in reporting. The value must be entered into the system before it is logged. | `'10039'` | `string` | -| `externalImpId` | optional | Specifies the unique identifier of an externally generated auction. | `'bacbab02626452b097f6030b3c89ac05'` | `string` | -| `generate_ad_pod_id`| optional | Signal to Goldbach to split impressions by ad pod and add unique ad pod id to each request. Specific to long form video endpoint only. Supported by Prebid Server, not Prebid JS. | `true` | `boolean` | - - +The Goldbach bidding adapter requires an individualized `'publisherId'` and approval from the Goldbach team. Please reach out to your account manager for more information. -#### Video Object +### Bid Params {: .table .table-bordered .table-striped } -| Name | Description | Type | -|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------| -| `minduration` | Integer that defines the minimum video ad duration in seconds. | `integer` | -| `maxduration` | Integer that defines the maximum video ad duration in seconds. | `integer` | -|`context` | A string that indicates the type of video ad requested. Allowed values: `"pre_roll"`; `"mid_roll"`; `"post_roll"`; `"outstream"`. | `string` | -| `skippable` | Boolean which, if `true`, means the user can click a button to skip the video ad. Defaults to `false`. | `boolean` | -|`skipoffset`| Integer that defines the number of seconds until an ad can be skipped. Assumes `skippable` setting was set to `true`. | `integer` | -| `playback_method` | A string that sets the playback method supported by the publisher. Allowed values: `"auto_play_sound_on"`; `"auto_play_sound_off"`; `"click_to_play"`; `"mouse_over"`; `"auto_play_sound_unknown"`. | `string` | -| `frameworks` | Array of integers listing API frameworks supported by the publisher. Allowed values: None: `0`; VPAID 1.0: `1`; VPAID 2.0: `2`; MRAID 1.0: `3`; MRAID 2.0: `4`; ORMMA: `5`; OMID 1.0 `6`. | `Array` | - - - -#### User Object - -{: .table .table-bordered .table-striped } -| Name | Description | Example | Type | -|-------------------|---------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------|------------------| -| `age` | The age of the user. | `35` | `integer` | -| `externalUid` | Specifies a string that corresponds to an external user ID for this user. | `'1234567890abcdefg'` | `string` | -| `segments` | Specifies the segments to which the user belongs. | `[1, 2]` | `Array` | -| `gender` | Specifies the gender of the user. Allowed values: Unknown: `0`; Male: `1`; Female: `2` | `1` | `integer` | -| `dnt` | Do not track flag. Indicates if tracking cookies should be disabled for this auction | `true` | `boolean` | -| `language` | Two-letter ANSI code for this user's language. | `EN` | `string` | - - - -#### App Object - -Goldbach supports using prebid within a mobile app's webview. If you are interested in using an SDK, please see [Prebid Mobile]({{site.baseurl}}/prebid-mobile/prebid-mobile.html) instead. - -{: .table .table-bordered .table-striped } -| Name | Description | Example | Type | -|-------------------|---------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------|------------------| -| `id` | The App ID. | `'B1O2W3M4AN.com.prebid.webview'` | `string` | -| `device_id` | Object that contains the advertising identifiers of the user (`idfa`, `aaid`, `md5udid`, `sha1udid`, or `windowsadid`). | `{ aaid: "38400000-8cf0-11bd-b23e-10b96e40000d" }` | `object` | -| `geo` | Object that contains the latitude (`lat`) and longitude (`lng`) of the user. | `{ lat: 40.0964439, lng: -75.3009142 }` | `object` | - - - -#### Custom Targeting keys -Goldbach returns custom keys that can be sent to the adserver through bidderSettings: buyerMemberId, dealPriority, and dealCode. The following snippet demonstrates how to add these custom keys as key-value pairs. - -```javascript -pbjs.bidderSettings = { - godlbach: { - adserverTargeting: [ - { - key: "apn_buyer_memberid", // Use key configured in your adserver - val: function(bidResponse) { - return bidResponse.appnexus.buyerMemberId; - } - }, - { - key: "apn_prio", // Use key configured in your adserver - val: function(bidResponse) { - return bidResponse.appnexus.dealPriority; - } - }, { - key: "apn_dealcode", // Use key configured in your adserver - val: function(bidResponse) { - return bidResponse.appnexus.dealCode; - } - } - ] - } -} -``` - - - -#### Passing Keys Without Values - -It's possible to use the `keywords` parameter to define keys that do not have any associated values. Keys with empty values can be created in Prebid.js and can also be sent through Prebid Server to Goldbach. The following are examples of sending keys with empty values: - -```javascript -keywords: { - myKeyword: '', - myOtherKeyword: [''] -} -``` - -The preceding example passes the key `myKeyword` with an empty value. The key `myOtherKeyword` contains an empty value array. - -You can define keys with values and without values in the same `keywords` definition. In this next example, we've defined the key `color` with an array of values: `red`, `blue`, and `green`. We've followed that with the key `otherKeyword` with an empty value array. - -```javascript -keywords: { - color: ['red', 'blue', 'green'], - otherKeyword: [''] -} -``` - - - -#### User Sync in AMP - -If you are syncing user id's with Prebid Server and are using Goldbach's managed service, see [AMP Implementation Guide cookie-sync instructions](/dev-docs/show-prebid-ads-on-amp-pages.html#user-sync) for details. - - - -#### Mobile App Display Manager Version - -The Goldbach endpoint expects `imp.displaymanagerver` to be populated for mobile app sources -requests, however not all SDKs will populate this field. If the `imp.displaymanagerver` field -is not supplied for an `imp`, but `request.app.ext.prebid.source` -and `request.app.ext.prebid.version` are supplied, the adapter will fill in a value for -`diplaymanagerver`. It will concatenate the two `app` fields as `-` fo fill in -the empty `displaymanagerver` before sending the request to Goldbach. - -#### Debug Auction - -{: .alert.alert-danger :} -Enabling the Goldbach Debug Auction feature should only be done for diagnosing the Goldbach auction. Do not enable this feature in a production setting where it may impact users. - -To understand what is happening behind the scenes during an auction, you can enable a debug auction by adding an `apn_prebid_debug` cookie with a JSON string. For example: - -```javascript -{ "enabled": true, "dongle": "QWERTY", "debug_timeout": 1000, "member_id": 958 } -``` - -To view the results of the debug auction, add the `pbjs_debug=true` query string parameter and open your browser's developer console. - -{: .table .table-bordered .table-striped } -| Name | Description | Example | Type | -|-------------------|-----------------------------------------------------------------|-----------------------|------------------| -| `enabled` | Toggle the debug auction to occur | `true` | `boolean` | -| `dongle` | Your account's unique debug password. | `QWERTY` | `string` | -| `member_id` | The ID of the member running the debug auction | `958` | `integer` | -| `debug_timeout` | The timeout for the debug auction results to be returned | `3000` | `integer` | +| Name | Scope | Description | Example | Type | +|---------------|----------|--------------------------|---------------------------|-----------| +| `publisherId` | required | Publisher Environment ID | `example.com_de_ios` | `string` | +| `slotId` | required | Slot Id | `1234/slot/id/news` | `string` | diff --git a/dev-docs/bidders/greenbids.md b/dev-docs/bidders/greenbids.md new file mode 100644 index 0000000000..23ca4bf172 --- /dev/null +++ b/dev-docs/bidders/greenbids.md @@ -0,0 +1,35 @@ +--- +layout: bidder +title: Greenbids +description: Prebid Greenbids Bidder Adapter +biddercode: greenbids +tcfeu_supported: false +dsa_supported: true +gvl_id: none +usp_supported: true +coppa_supported: false +gpp_sids: tcfca, usnat, usstate_all, usp +schain_supported: true +dchain_supported: true +media_types: banner, video +deals_supported: false +floors_supported: true +fpd_supported: true +pbjs: true +pbs: true +prebid_member: false +multiformat_supported: will-not-bid +ortb_blocking_supported: false +sidebarType: 1 +--- + +### Note + +The Greenbids Bidding adapter requires setup before beginning. Please contact us at [sales@greenbids.ai](mailto:sales@greenbids.ai). + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|-----------------------|-----------|-----------| +| `placementId` | required | Placement id | `'11111'` | `string` | diff --git a/dev-docs/bidders/headbidder.md b/dev-docs/bidders/headbidder.md index aa5c3bae00..725982513b 100644 --- a/dev-docs/bidders/headbidder.md +++ b/dev-docs/bidders/headbidder.md @@ -3,23 +3,28 @@ layout: bidder title: Headbidder.net description: Headbidder.net Bidder Adaptor biddercode: headbidder -pbjs: true -pbs: false -media_types: banner, native, video -gvl_id: 14 (adkernel) +aliasCode: adkernel tcfeu_supported: true -gpp_supported: true +dsa_supported: false +gvl_id: 14 (adkernel) usp_supported: true coppa_supported: true -pbs_app_supported: false +gpp_sids: tcfeu, usp schain_supported: true -userIds: all +dchain_supported: false +userId: all +media_types: banner, video, native +safeframes_ok: true +deals_supported: false +floors_supported: true fpd_supported: true +pbjs: true +pbs: false +pbs_app_supported: false prebid_member: false +multiformat_supported: will-bid-on-any ortb_blocking_supported: true -multiformat_supported: will-bid-on-one -floors_supported: true -aliasCode: adkernel +privacy_sandbox: no sidebarType: 1 --- diff --git a/dev-docs/bidders/houseofpubs.md b/dev-docs/bidders/houseofpubs.md index c90ce59021..5944788e2b 100644 --- a/dev-docs/bidders/houseofpubs.md +++ b/dev-docs/bidders/houseofpubs.md @@ -3,23 +3,28 @@ layout: bidder title: HouseOfPubs description: House of Pubs Bid Adapter biddercode: houseofpubs -pbjs: true -pbs: false -media_types: banner, native, video -gvl_id: 14 (adkernel) +aliasCode: adkernel tcfeu_supported: true +dsa_supported: false +gvl_id: 14 (adkernel) usp_supported: true coppa_supported: true -gpp_supported: true -pbs_app_supported: true +gpp_sids: tcfeu, usp schain_supported: true -userIds: all +dchain_supported: false +userId: all +media_types: banner, video, native +safeframes_ok: true +deals_supported: false +floors_supported: true fpd_supported: true +pbjs: true +pbs: false +pbs_app_supported: false prebid_member: false +multiformat_supported: will-bid-on-any ortb_blocking_supported: true -multiformat_supported: will-bid-on-one -floors_supported: true -aliasCode: adkernel +privacy_sandbox: no sidebarType: 1 --- diff --git a/dev-docs/bidders/hyperbrainz.md b/dev-docs/bidders/hyperbrainz.md index c1cc738088..f6434d799f 100644 --- a/dev-docs/bidders/hyperbrainz.md +++ b/dev-docs/bidders/hyperbrainz.md @@ -3,23 +3,28 @@ layout: bidder title: HyperBrainz description: HyperBrainz Adaptor biddercode: hyperbrainz -pbjs: true -pbs: false -media_types: banner, native, video -gvl_id: 14 (adkernel) +aliasCode: adkernel tcfeu_supported: true -gpp_sids: tcfeu, usp +dsa_supported: false +gvl_id: 14 (adkernel) usp_supported: true coppa_supported: true -pbs_app_supported: false +gpp_sids: tcfeu, usp schain_supported: true -userIds: all +dchain_supported: false +userId: all +media_types: banner, video, native +safeframes_ok: true +deals_supported: false +floors_supported: true fpd_supported: true +pbjs: true +pbs: false +pbs_app_supported: false prebid_member: false +multiformat_supported: will-bid-on-any ortb_blocking_supported: true -multiformat_supported: will-bid-on-one -floors_supported: true -aliasCode: adkernel +privacy_sandbox: no sidebarType: 1 --- diff --git a/dev-docs/bidders/iionads.md b/dev-docs/bidders/iionads.md index 7f9b957c60..c2c84a0aa3 100644 --- a/dev-docs/bidders/iionads.md +++ b/dev-docs/bidders/iionads.md @@ -8,7 +8,8 @@ pbs: true media_types: video, banner userIds: all fpd_supported: false -tcfeu_supported: false +tcfeu_supported: true +gvl_id: 1358 usp_supported: true coppa_supported: true schain_supported: true diff --git a/dev-docs/bidders/illumin.md b/dev-docs/bidders/illumin.md index 9d67a10c8a..fc00073828 100644 --- a/dev-docs/bidders/illumin.md +++ b/dev-docs/bidders/illumin.md @@ -19,6 +19,7 @@ pbs_app_supported: false fpd_supported: false ortb_blocking_supported: false multiformat_supported: will-bid-on-one +enable_download: false pbjs: true sidebarType: 1 --- @@ -26,13 +27,14 @@ sidebarType: 1 ### Bid Params {: .table .table-bordered .table-striped } + | Name | Scope | Description | Example | Type | |------------|----------|-------------------------------------------------------------------------------------------|------------------------------|----------| | `cId` | required | The connection ID from Illumin. | `'562524b21b1c1f08117fc7f9'` | `string` | | `pId` | required | The publisher ID from Illumin. | `'59ac17c192832d0011283fe3'` | `string` | | `bidFloor` | optional | The minimum bid value desired. Illumin will not respond with bids lower than this value. | `0.90` | `float` | -## Example +### Example ```javascript var adUnits = [{ diff --git a/dev-docs/bidders/imds.md b/dev-docs/bidders/imds.md index f526d56702..d7af519f32 100644 --- a/dev-docs/bidders/imds.md +++ b/dev-docs/bidders/imds.md @@ -1,10 +1,11 @@ --- layout: bidder title: iMedia Digital Services (iMDS) -description: Prebid iMedia Digital Services Bidder (iMDS) Adapter +description: Prebid iMedia Digital Services Bidder (iMDS) Adapter (replaced by "Advertising.com") pbjs: true pbs: true biddercode: imds +aliasCode: advertising tcfeu_supported: false usp_supported: true userIds: all @@ -23,11 +24,12 @@ multiformat_supported: will-bid-on-any prebid_member: false gvl_id: none sidebarType: 1 +pbjs_version_notes: use advertising after 10.0 --- ### Note -The iMedia Digital Services bidder adapter requires setup and approval from iMedia Digital Services. Please reach out to your account manager for more information and to start using it. +The iMedia Digital Services (iMDS) bidder adapter has been renamed to the [Advertising.com](/dev-docs/bidders/advertising.html) adapter, using a bidder code of `advertising`. Please update your implementation accordingly. This bidder adapter requires setup and approval from Advertising.com. Please reach out to your account manager for more information and to start using it. ### Configuration @@ -51,7 +53,13 @@ pbjs.setConfig({ ### DFP Video Creative To use video, setup a `VAST redirect` creative within Google Ad Manager with the following VAST tag URL: -If using the new `imds` adapter with x8.x or later: +If using the new `advertising` adapter with x9.x or later: + +```text +https://track.technoratimedia.com/openrtb/tags?ID=%%PATTERN:hb_uuid_imds%%&AUCTION_PRICE=%%PATTERN:hb_pb_imds%% +``` + +If using the legacy `imds` adapter with x8.x or later: ```text https://track.technoratimedia.com/openrtb/tags?ID=%%PATTERN:hb_uuid_imds%%&AUCTION_PRICE=%%PATTERN:hb_pb_imds%% diff --git a/dev-docs/bidders/impactify.md b/dev-docs/bidders/impactify.md index 2d93d26fc2..70dcb84f69 100644 --- a/dev-docs/bidders/impactify.md +++ b/dev-docs/bidders/impactify.md @@ -35,6 +35,8 @@ Impactify recommends the UserSync configuration below. Without it, the Impactify Note : Impactify adapter needs storage access to work properly (Do not forget to set storageAllowed to true). +{% include dev-docs/storageAllowed.md %} + For Prebid.js v1.15.0 and later: ```javascript diff --git a/dev-docs/bidders/improvedigital.md b/dev-docs/bidders/improvedigital.md index 0cc21342ff..32fd0497b8 100644 --- a/dev-docs/bidders/improvedigital.md +++ b/dev-docs/bidders/improvedigital.md @@ -16,6 +16,7 @@ gvl_id: 253 pbs_app_supported: true floors_supported: true sidebarType: 1 +endpoint_compression: true --- @@ -31,7 +32,6 @@ sidebarType: 1 | `bidFloor` | optional | Bid floor price | `0.01` | `float` | | `bidFloorCur` | optional | Bid floor price currency. Supported values: USD (default), EUR, GBP, AUD, DKK, SEK, CZK, CHF, NOK | `'USD'` | `string` | | `extend` | optional | See the [Extend mode section](#improvedigital-extend) | `true` | `boolean` | -| `rendererConfig` | optional | Configuration object for JS renderer of the RAZR creatives. Provided by Improve Digital. | `{ key1: value1 }` | `object` | ### Configuration @@ -39,27 +39,11 @@ sidebarType: 1 #### Sizes -By default, the adapter doesn't send Prebid ad unit sizes to Improve Digital's ad server and the sizes defined for each placement in the Polaris platform will be used. If the ad server should only respond with creative sizes as defined in Prebid ad unit configuration, turn on `usePrebidSizes` adapter parameter like this: +By default, the adapter sends Prebid ad unit sizes to Improve Digital's ad server. If the ad server should only respond with creative sizes as defined for each placement in the Origin platform, turn off `usePrebidSizes` adapter parameter like this: ```javascript pbjs.setConfig({ - improvedigital: { usePrebidSizes: true } -}); -``` - - - -#### Renderer Config - -Global configuration for the special creative format renderer. Please use [rendererConfig bid param](#improvedigital-params) for ad slot specific configuration. - -```javascript -pbjs.setConfig({ - improvedigital: { - rendererConfig: { - // Global config object provided by Improve Digital - } - } + improvedigital: { usePrebidSizes: false } }); ``` @@ -81,6 +65,21 @@ pbjs.setConfig({ }); ``` + + +#### MultiBid + +Improve Digital supports Prebid's MultiBid feature. More on enabling MultiBid can be found here: [MultiBid](https://docs.prebid.org/dev-docs/modules/multibid.html). An example of how to enable MultiBid for Improve Digital: + +```javascript +pbjs.setConfig({ + multibid: [{ + bidder: "improvedigital", + maxBids: 3, + }] +}); +``` + ### Examples diff --git a/dev-docs/bidders/incrementx.md b/dev-docs/bidders/incrementx.md index 2182b871ba..d33fcda5a3 100644 --- a/dev-docs/bidders/incrementx.md +++ b/dev-docs/bidders/incrementx.md @@ -4,7 +4,7 @@ title: IncrementX description: Prebid IncrementX Bidder Adaptor pbjs: true biddercode: incrementx -media_types: banner +media_types: banner, video tcfeu_supported: false multiformat_supported: will-bid-on-one filename: incrxBidAdapter diff --git a/dev-docs/bidders/infinety.md b/dev-docs/bidders/infinety.md new file mode 100644 index 0000000000..ecc2ed29fc --- /dev/null +++ b/dev-docs/bidders/infinety.md @@ -0,0 +1,42 @@ +--- +layout: bidder +title: Infinety +description: Infinety Adaptor +biddercode: infinety +aliasCode: adkernel +tcfeu_supported: true +dsa_supported: false +gvl_id: 14 (adkernel) +usp_supported: true +coppa_supported: true +gpp_sids: tcfeu, usp +schain_supported: true +dchain_supported: false +userId: all +media_types: banner, video, native +safeframes_ok: true +deals_supported: false +floors_supported: true +fpd_supported: true +pbjs: true +pbs: false +pbs_app_supported: false +prebid_member: false +multiformat_supported: will-bid-on-any +ortb_blocking_supported: true +privacy_sandbox: no +sidebarType: 1 + +--- + +### Note + +The Infinety bidding adaptor requires setup and approval before beginning. Please reach out to for more details + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------|----------|-----------------------|---------------------------|----------| +| `host` | required | RTB host | `'cpm.infinety.hu'` | `string` | +| `zoneId` | required | RTB zone id | `30164` | `integer` | diff --git a/dev-docs/bidders/inmobi.md b/dev-docs/bidders/inmobi.md index be796ccfc0..76394c5cb3 100644 --- a/dev-docs/bidders/inmobi.md +++ b/dev-docs/bidders/inmobi.md @@ -4,7 +4,7 @@ title: InMobi description: InMobi Bidder Adapter biddercode: inmobi tcfeu_supported: true -usp_supported: false +usp_supported: true gvl_id: 333 coppa_supported: true schain_supported: true @@ -12,6 +12,7 @@ media_types: banner, video, native pbs: true pbs_app_supported: true sidebarType: 1 +pbjs: true --- ### Note @@ -21,13 +22,107 @@ For queries, write to us at ### User Sync Disclosure -InMobi has partnered with a third party, ID5, to use their ID as our primary user identifier for mobile web supply. We will also rely on ID5 IDs to handle compliance flows related to Data Subject Right requests in our systems. Hence, we require the publisher to use ID5’s sync URL for user syncing and passing the corresponding ID5 ID to InMobi in the bid request. For this purpose, we provide ID5’s sync URL in our Prebid adapter for User ID sync. Note that, InMobi has a direct contract with ID5 for consuming ID5 ID and the user sync via Prebid does not require the publisher to get into a contractual relationship with ID5. +Third-party cookie syncing helps publishers leverage their audience data, enhance targeting capabilities, and drive better ad performance. InMobi third party cookie syncing improves monetization for publishers by giving them a competitive positioning in the digital advertising ecosystem. +Ids for third parties can be synced through our pixel: `https://sync.inmobi.com/prebid?gdpr={GDPR}&gdpr_consent={GDPR_CONSENT}&us_privacy={US_PRIVACY}&redirect={RedirectURL}` . +The RedirectURL should contain uuid macro, which is {ID5UID}. -To opt out of InMobi ads on mobile web inventory or for any other requests, the user needs to visit the Opt-out page on InMobi website (). For opting out of ID5 ID entirely, the user needs to visit ID5’s opt out page: . +To opt out of InMobi ads on web inventory the user needs to visit the Opt-out page on InMobi website `https://www.inmobi.com/page/opt-out/`. ### Bid Params {: .table .table-bordered .table-striped } + | Name | Scope | Description | Example | Type | |---------------|----------|-----------------------|-----------|-----------| | `plc` | required | Placement ID | `'1234'` | `string` | +| `bidfloor` | optional | Bid Floor | `1.09` | `float` | + +### First Party Data + +Inmobi supports both `ortb2` and `ortb2Imp` methods to set [First Party Data](https://docs.prebid.org/features/firstPartyData.html). + +The standard Open RTB properties supported from `ortb2` / `ortb2Imp` are described in the following table. + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|-------------------|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------|-----------| +| `ortb2Imp.instl` | optional | Details on interstitial/full-screen, 1 indicates that the ad is interstitial or full-screen, while 0 means it is not. | `1` | `integer` | +| `ortb2Imp.rwdd` | optional | Specifies if the user receives a reward for viewing the ad: 0 for no, and 1 for yes. | `1` | `integer` | +| `ortb2.user` | optional | Information about the advertising device's human user, provided through an OpenRTB User object. | N/A | `object` | +| `ortb2.site` | optional | Information about the publisher's website provided through an OpenRTB Site object. | N/A | `object` | +| `ortb2.device` | optional | Information about the user's device provided through an OpenRTB device object. | N/A | `object` | +| `ortb2.bcat` | optional | Blocked advertiser categories using the IAB content categories. | `[ "IAB25" ]` | `string array` | +| `ortb2.badv` | optional | Block list of advertisers by their domains | `[ "ford.com" ]` | `string array` | +| `ortb2.regs` | optional | Regulatory conditions in effect for all impressions in this bid request. | N/A | `object` | + +Besides these standard properties, `ext` field can be used to send any publisher specific data which may have been discussed with a Inmobi partner manager. + +### Example Ad-Units + +## Banner + +```javascript + var adUnits = [{ + code: 'div-gpt-ad-1460505748561-0', + mediaTypes: { + banner: { + sizes: [[300, 250]], + } + }, + bids: [{ + bidder: 'inmobi', + params: { + plc: '1719108420057' // Mandatory + } + }] + }]; +``` + +## Video + +```javaScript + var adUnits = [{ + code: 'div-gpt-ad-1460505748561-0', + mediaTypes: { + video: { + playerSize : [300,250], + mimes : ["video/x-ms-wmv", "video/mp4"], + minduration : 0, + maxduration: 30, + protocols : [1,2], + api: [1, 2, 4, 6], + protocols: [3, 4, 7, 8, 10], + placement: 1, + plcmt: 1 + } + }, + // Replace this object to test a new Adapter! + bids: [{ + bidder: 'inmobi', + params: { + plc: '1443164204446401' //Mandatory + } + }] + }]; +``` + +## Native + +```javascript + var adUnits = [{ + code: 'div-gpt-ad-1460505748561-0', + mediaTypes: { + native: { + type: 'image' + } + }, + bids: [{ + bidder: 'inmobi', + params: { + plc: '10000033152', + bidfloor: 0.9 + } + }] + }]; +``` diff --git a/dev-docs/bidders/insticator.md b/dev-docs/bidders/insticator.md index 87880a2ba6..1f6e972956 100644 --- a/dev-docs/bidders/insticator.md +++ b/dev-docs/bidders/insticator.md @@ -14,8 +14,10 @@ floors_supported: true media_types: banner, video multiformat_supported: will-bid-on-any pbjs: true +pbs: true gvl_id: 910 sidebarType: 1 +userIds: all --- ### Bid Params @@ -24,6 +26,7 @@ sidebarType: 1 | Name | Scope | Description | Example | Type | |-----------------------------|----------|-----------------------------------------------------------------------------------------|------------------------------------|----------| | `adUnitId` | Required | The ad unit ID provided by Insticator | `'test'` | `string` | +| `publisherId` | optional | The publisher ID provided by Insticator | `'test'` | `string` | | `yob` | optional | Year of Birth | `'1982'` | `string` | | `gender` | optional | Gender | `'M'` | `string` | | `instl` | optional | 1 = the ad is interstitial or full screen, 0 = not interstitial. | `1` | `number` | @@ -58,7 +61,8 @@ var adUnitsBannerOnly = [ { bidder: 'insticator', params: { - adUnitId: 'example_adunit_id', + adUnitId: 'example_adunit_id', + publisherId: 'example_publisher_id', }, }, ], @@ -170,7 +174,8 @@ var adUnits = [ bids: [{ bidder: 'insticator', params: { - adUnitId: 'example_adunit_id' + adUnitId: 'example_adunit_id', + publisherId: 'example_publisher_id', } }], ... diff --git a/dev-docs/bidders/gothamads.md b/dev-docs/bidders/intenze.md similarity index 78% rename from dev-docs/bidders/gothamads.md rename to dev-docs/bidders/intenze.md index a85e21c03c..455a409800 100644 --- a/dev-docs/bidders/gothamads.md +++ b/dev-docs/bidders/intenze.md @@ -1,9 +1,9 @@ --- layout: bidder -title: gothamads -description: Prebid gothamads Bidder Adaptor -biddercode: gothamads -tcfeu_supported: true +title: intenze +description: Prebid Intenze Bidder Adaptor +biddercode: intenze +tcfeu_supported: false usp_supported: true coppa_supported: true ccpa_supported: true @@ -24,8 +24,8 @@ userIds: all --- ### Note -Gothamads will bid only on first impresion in bid request. -The Example Bidding adapter requires setup before beginning. Please contact us at +Intenze will bid only on first impresion in bid request. +The Example Bidding adapter requires setup before beginning. Please contact us at ### Bid Params diff --git a/dev-docs/bidders/invibes.md b/dev-docs/bidders/invibes.md index 2847bf7778..032987367d 100644 --- a/dev-docs/bidders/invibes.md +++ b/dev-docs/bidders/invibes.md @@ -41,5 +41,5 @@ The bidder will NOT set any cookies. The bidder will also try to read from Cooki |-----------------|----------|--------------------------------------|-------------------------------------------------|----------| | `placementId` | required | The Invibes placement ID | `'1234567'` | `string` | | `domainId` | optional | Id of domain | `1001` | `integer`| -| `customEndpoint`| optional | Custom test domain | `https://bid.videostep.com/Bid/VideoAdContent` | `integer`| +| `customEndpoint`| optional | Custom test domain | `https://bid.videostep.com/Bid/VideoAdContent` | `string` | | `debug` | optional | Debug paramentes (only prebid server)| `{ "testBvid": "1234", "testLog": true }` | `object` | diff --git a/dev-docs/bidders/iqm.md b/dev-docs/bidders/iqm.md index 31b546afcb..465cd0cb22 100644 --- a/dev-docs/bidders/iqm.md +++ b/dev-docs/bidders/iqm.md @@ -4,12 +4,14 @@ title: iQM description: Prebid iQM Bidder Adaptor pbjs: true biddercode: iqm +pbjs_version_notes: removed in 9.0 sidebarType: 1 --- -## Parameters +### Bid Params {: .table .table-bordered .table-striped } + | Name | Scope | Description | Example | | :------------ | :------- | :------------------------ | :------------------- | | `publisherId` | required | The Publisher ID from iQM | "df5fd732-c5f3-11e7-abc4-cec278b6b50a" | @@ -17,13 +19,13 @@ sidebarType: 1 | `placementId` | required | The Placement ID from iQM | 23451 | | `bidfloor` | optional | Bid Floor | 0.50 | -## Description +### Description Module that connects to iQM demand sources -## Test Parameters +### Test Parameters -``` +```javascript var adUnits = [{ code: 'div-gpt-ad-1460505748561-0', mediaTypes: { @@ -49,9 +51,9 @@ var adUnits = [{ ``` -## adUnit Video +### adUnit Video -``` +```javascript var videoAdUnit = { code: 'video1', mediaTypes: { diff --git a/dev-docs/bidders/iqzone.md b/dev-docs/bidders/iqzone.md index 8a3278dc03..75a04d32ca 100644 --- a/dev-docs/bidders/iqzone.md +++ b/dev-docs/bidders/iqzone.md @@ -22,7 +22,7 @@ safeframes_ok: true sidebarType: 1 --- -### Prebid.js Bid Params +### Bid Params {: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | diff --git a/dev-docs/bidders/ix-server.md b/dev-docs/bidders/ix-server.md index 94ce0053f5..78f8e8088f 100644 --- a/dev-docs/bidders/ix-server.md +++ b/dev-docs/bidders/ix-server.md @@ -24,9 +24,7 @@ sidebarType: 1 privacy_sandbox: paapi --- - - -## Table of contents +### Table of contents * [Table of contents](#table-of-contents) * [Introduction](#introduction) @@ -37,14 +35,13 @@ privacy_sandbox: paapi * [Call Index from Prebid Mobile SDK](#call-index-from-prebid-mobile-sdk) * [Call Index from CTV/long-form video environment](#call-index-from-ctvlong-form-video-environment) * [Call Index from any other server-to-server OpenRTB environment](#call-index-from-any-other-server-to-server-openrtb-environment) +* [Receive Protected Audience API demand from Index](#paapi) * [Bid request parameters](#bid-request-parameters) * [Banner](#banner) * [Video](#video) * [Examples](#examples) - - -## Introduction +### Introduction Publishers can use Prebid Server in any of the following ways with Index Exchange (Index). Index's adapter supports all of the following methods: @@ -57,11 +54,12 @@ Publishers can use Prebid Server in any of the following ways with Index Exchang -## Supported media types +### Supported media types The following table lists the media types that Index supports. For information about the the Time-To-Live (TTL) for each media type, see [How Index counts impressions](https://kb.indexexchange.com/publishers/billing/how_Index_counts_impressions.htm) in our Knowledge Base. {: .table .table-bordered .table-striped } + | Type | Prebid Server support | | ----------- | ----------- | | banner | Supported | @@ -70,7 +68,7 @@ The following table lists the media types that Index supports. For information a -## Configure the Index adapter in your Prebid Server instance +### Configure the Index adapter in your Prebid Server instance **Before you begin:** Contact your Index Exchange Representative to get an endpoint and setup instructions. @@ -90,7 +88,7 @@ If you are hosting your own Prebid Server instance, depending on whether you are ```javascript userSync: redirect: - url: "https://ssum.casalemedia.com/usermatchredir?s=&gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&cb={{.RedirectURL}}" + url: "https://ssum.casalemedia.com/usermatchredir?s=&gdpr={% raw %}{{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&cb={{.RedirectURL}}{% endraw %}" ``` * Edit the below existing entry and include your publisher ID in the `s` parameter: @@ -98,7 +96,7 @@ If you are hosting your own Prebid Server instance, depending on whether you are ```javascript userSync: redirect: - iframe: "https://ssum.casalemedia.com/usermatch?s=&gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&cb={{.RedirectURL}}" + iframe: "https://ssum.casalemedia.com/usermatch?s=&gdpr={% raw %}{{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&cb={{.RedirectURL}}{% endraw %}" ``` * If you are using [Prebid Server Java](https://github.com/prebid/prebid-server-java) version, edit the `prebid-server-java` entry in the `src/main/resources/bidder-config/ix.yaml` file as follows: @@ -118,7 +116,7 @@ If you are hosting your own Prebid Server instance, depending on whether you are ix: usersync: redirect: - url: "https://ssum.casalemedia.com/usermatchredir?s=&gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&cb={{.RedirectURL}}" + url: "https://ssum.casalemedia.com/usermatchredir?s=&gdpr={% raw %}{{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&cb={{.RedirectURL}}{% endraw %}" ``` * Add the below entry and include your publisher ID in the `s` parameter: @@ -128,12 +126,12 @@ If you are hosting your own Prebid Server instance, depending on whether you are ix: usersync: iframe: - url: "https://ssum.casalemedia.com/usermatch?s=&gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&cb={{.RedirectURL}}" + url: "https://ssum.casalemedia.com/usermatch?s=&gdpr={% raw %}{{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&cb={{.RedirectURL}}{% endraw %}" ``` -## Publisher instructions to call Index through Prebid Server +### Publisher instructions to call Index through Prebid Server If you are using an existing Prebid Server instance that is already configured to call Index, depending on whether you want to call Index from the browser, mobile app, CTV, or long-form video, follow any of the below sections to complete the Index-specific configuration. @@ -180,7 +178,7 @@ To call Index from a web browser using Prebid Server, you must first configure P ```javascript pbjs.setConfig({ cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' + url: 'https://my-pbs.example.com/cache' } }); ``` @@ -238,9 +236,49 @@ To request bids from Index: }], ``` + + +### Receive Protected Audience API demand from Index + +**Info:** Starting in June 2025, Index is pausing support for the Protected Audience API. After this date, you will no longer receive Protected Audience API demand from Index, even if your inventory is configured to be eligible for it. + +Publishers who want to use the Protected Audience API with Prebid Server, must first set up their inventory to be eligible for Protected Audience API in Prebid.js. Prebid Server will automatically pass through the on-device auction signals received from Prebid.js to Index. To receive Protected Audience API auction demand from Index, contact your Index Representative. + +**Before you begin:** Depending on whether you are using the Prebid Server Go or Java code base and the Prebid.js version, you must make sure that you are using the appropriate Prebid Server version: + +* **For Prebid Server Go:** If you are using a Prebid.js version that is between 8.18.0 and 8.51.0, you must be using Prebid Server version 2.1.0 or later. For a Prebid.js version that is 8.52.0 or later, you must be using Prebid Server version 3.3.0 or later. +* **For Prebid Server Java:** If you are using a Prebid.js version that is 8.18.0 or later, you must be using Prebid Server Java version 3.16.0 or later. + +1. Configure Prebid.js to send the `ae` field with a value of `1`. For more information on how to set up the Protected Audience API in Prebid.js, see the [Protected Audience API support](/dev-docs/bidders/ix.html#protected-audience-api-support) section in our Prebid.js documentation on the Prebid site. +2. Prebid Server will now automatically pass through the `ae=1` field received from Prebid.js to Index. No other specific Prebid Server configuration is required. + +**Example:** The following is an example that illustrates how to set up Prebid Server in your Prebid.js configuration: + +```javascript + pbjs.setConfig({ + s2sConfig: [{ + accountId: '1', + bidders: ['ix'], + adapter: 'prebidServer', + enabled: true, + endpoint: 'https://prebid-server.example.com/openrtb2/auction', + syncEndpoint: 'https://prebid-server.example.com/cookie_sync', + timeout: 500, + extPrebid: { + cache: { + vastxml: { returnCreative: false } + }, + targeting: { + pricegranularity: {"ranges": [{"max":40.00,"increment":1.00}]} + } + } + }] +}) +``` + -## Bid request parameters +### Bid request parameters For a list of the OpenRTB fields that Index supports in bid requests, see [List of supported OpenRTB bid request fields for sellers](https://kb.indexexchange.com/publishers/openrtb_integration/list_of_supported_openrtb_bid_request_fields_for_sellers.htm#List_of_supported_OpenRTB_bid_request_fields_for_sellers). The following are the required fields for the various supported media types. @@ -249,6 +287,7 @@ For a list of the OpenRTB fields that Index supports in bid requests, see [List You must include these parameters at the bidder level. {: .table .table-bordered .table-striped } + | Key | Scope | Type | Description | |---|---|---|---| | `siteId` | Required | String | An Index-specific identifier that is associated with this ad unit. This is similar to a placement ID or an ad unit ID that some other modules have. For example, `'9999990'`, `'9999991'`, `'9999992'`| @@ -258,6 +297,7 @@ You must include these parameters at the bidder level. You must include these parameters at the bidder level. {: .table .table-bordered .table-striped } + | Key | Scope | Type | Description | |---|---|---|---| | `siteId` | Required | String | An Index-specific identifier that is associated with this ad unit. It will be associated with the single size, if the size is provided. This is similar to a placement ID or an ad unit ID that some other modules have. For example, `'9999990'`, `'9999991'`, `'9999992'`
**Note:** You can re-use the existing `siteId` within the same flex position or video size, if the video adapts to the containing `
` element.| @@ -265,6 +305,7 @@ You must include these parameters at the bidder level. If you are using Index's outstream ad unit and have placed the video object at the bidder level, you must include the Index required parameters at the bidder level. You can include the optional parameters to specify the outstream ad unit configurations. {: .table .table-bordered .table-striped } + | Key | Scope | Type | Description | |---|---|---|---| | `video.w` | Required | Integer | The width of the video player in pixels that will be passed to demand partners. You must define the size of the video player using the `video.w` and `video.h` parameters. We strongly recommend video sizes to be `256 x 256` or greater, `300 x 250`, or `320 x 180`. | @@ -277,7 +318,7 @@ If you are using Index's outstream ad unit and have placed the video object at t -## Examples +### Examples **Banner** diff --git a/dev-docs/bidders/ix.md b/dev-docs/bidders/ix.md index 9c9190e7ca..e610582968 100644 --- a/dev-docs/bidders/ix.md +++ b/dev-docs/bidders/ix.md @@ -26,7 +26,7 @@ sidebarType: 1 privacy_sandbox: paapi, topics --- -## Table of contents +### Table of contents * [Table of contents](#table-of-contents) * [Introduction](#introduction) @@ -52,7 +52,7 @@ privacy_sandbox: paapi, topics -## Introduction +### Introduction Publishers can use Prebid.js to call Index Exchange (Index) in any of the following ways: @@ -69,6 +69,8 @@ Publishers can use Prebid.js to call Index Exchange (Index) in any of the follow * In the **Network** tab, search for requests sent to `casalemedia.com/cygnus` (from version 6.28.0 and earlier) or `casalemedia.com/openrtb/pbjs` (from version 6.29.0 and later). These are the bid requests sent to Index. * **Recommended Global Bidder settings:** For our adapter, Index recommends enabling local storage. As of Prebid.js 7.x, local storage access must be explicitly specified. By leveraging local storage, Index is able to take advantage of the latest features our exchange has to offer. For instructions on enabling local storage, see Prebid’s [pbjs.bidderSettings](/dev-docs/publisher-api-reference/bidderSettings.html) documentation. +{% include dev-docs/storageAllowed.md %} + ### Example ```javascript @@ -79,9 +81,7 @@ pbjs.bidderSettings = { }; ``` - - -## Supported media types +### Supported media types The following table lists the media types that Index supports. For information about the the Time-To-Live (TTL) for each media type, see [How Index counts impressions](https://kb.indexexchange.com/publishers/billing/how_Index_counts_impressions.htm) in our Knowledge Base. @@ -95,13 +95,13 @@ The following table lists the media types that Index supports. For information a -## Set up Prebid.js to call Index directly from the browser (client-side adapter) +### Set up Prebid.js to call Index directly from the browser (client-side adapter) To call Index from a web browser environment using a Prebid Server integration, see the Index-specific configuration steps in [Setup instructions to call Index through Prebid Server](/dev-docs/bidders/ix-server.html#setup-instructions-to-call-index-through-prebid-server) in our Prebid Server documentation on the Prebid site. -## Set up Prebid.js to call Index through Prebid Server (server-side adapter) +### Set up Prebid.js to call Index through Prebid Server (server-side adapter) In this configuration, Prebid.js makes a call to Prebid Server and then Prebid Server uses our server-side adapter to call Index. Complete the following steps to configure Index as a demand source: @@ -134,7 +134,7 @@ In this configuration, Prebid.js makes a call to Prebid Server and then Prebid S -## Modules to include in your build process +### Modules to include in your build process If you are building the JS binary on your own from source code, follow the instructions in [Prebid.js project README](https://github.com/prebid/Prebid.js/blob/master/README.md#build-optimization). You will need to include the `ixBidAdapter`. If you want to show video ads with Google Ad Manager, also include the `dfpAdServerVideo` module. We highly recommend adding the `gptPreAuction` module as well, which improves a DSP's ability to bid accurately on your supply. The following is an example build command that include these modules:
`gulp build --modules=ixBidAdapter,dfpAdServerVideo,gptPreAuction,fooBidAdapter,bazBidAdapter` @@ -153,7 +153,7 @@ If you are using a JSON file to specify modules, add `ixBidAdapter` and `dfpAdSe -## Set up First Party Data (FPD) +### Set up First Party Data (FPD) You can set up the Prebid.js FPD module using Global data, Index bidder-specific site data, or ad unit-specific data. Index supports deal targeting in all the three FPD types. @@ -215,7 +215,7 @@ ortb2Imp: { } ``` -## Monetize instream video +### Monetize instream video Unlike Outstream Video, instream video does not use the Prebid Universal Creative. Instead, video bids provide VAST that Prebid caches to obtain a cache ID that can be retrieved with a URL. The cache ID is passed as a key value to the ad server. @@ -226,14 +226,14 @@ To monetize instream video, complete the following steps: ```javascript pbjs.setConfig({ cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' + url: 'https://my-pbs.example.com/cache' } }); ``` 2. Set up your line items in Google Ad manger by following the instructions in Prebid's [Setting Up Video In GAM](/adops/setting-up-prebid-video-in-dfp.html) documentation. -## Index's outstream ad unit +### Index's outstream ad unit Publishers who are using Index as a bidding adapter in Prebid.js can show outstream video ads on their site using Index's outstream ad unit. This allows a video ad to be placed anywhere on a publisher’s site, such as in-article, in-feed, and more. To use Index's outstream ad unit, you must be on Prebid.js version 5.13 or higher. However, if you are using your own outstream video player, Index's adapter can accept video signals from version 2.41.0 or higher.
**Note:** When you use the Index ad unit for outstream video, all impressions are considered viewable, which is similar to how Google's ActiveView counts impressions for outstream. This is because Index plays the outstream video as soon as it is in view and concurrently fires any impression pixels in the VAST. @@ -309,7 +309,7 @@ pbjs.addAdUnit({ -## Prebid Native configuration +### Prebid Native configuration Prebid Native is available from Prebid.js version 7.4.0 or higher. We support the three native template rendering options that are provided in [Setting up Prebid Native in Google Ad Manager](/adops/gam-native.html). The following code is an example of a Prebid native setup using Google Ad Manager, but the concept and implementation should be similar for other ad servers.
@@ -372,24 +372,27 @@ pbjs.addAdUnits({ -## Protected Audience API support +### Protected Audience API support + +**Info:** Starting in June 2025, Index is pausing support for the Protected Audience API. After this date, you will no longer receive Protected Audience API demand from Index, even if your inventory is configured to be eligible for it. **Before you begin:** -* You must have Google Ad Manager and the [fledgeForGpt](/dev-docs/modules/fledgeForGpt.html) module. +* You must be using Google Ad Manager as your ad server. * In your Google Ad Manager configuration, make sure that you have not opted out from using the Protected Audience API. For more information about the configuration, see Google's documentation on [Protected Audience API and Ad Manager after Chrome GA](https://support.google.com/admanager/answer/13627134?hl=en&ref_topic=12264880&sjid=10591375417866092080-NA). -Follow these steps to configure your Prebid.js to specify that your ad slots are enabled for [Protected Audience](https://github.com/WICG/turtledove/blob/main/FLEDGE.md) auctions: +Depending on the Prebid.js version that you are using, the steps to configure Prebid.js will differ. Follow the steps provided in the appropriate section for the version of Prebid.js that you are using: -1. Index recommends that you update your Prebid.js version to 8.37.0 or later.
-**Note:** Prebid.js version 8.18.0 or later is supported. However, Prebid's `fledgeForGpt` module has been improved in version 8.37.0, which fixes some issues from the earlier version. -2. Build the `fledgeForGpt` module in your Prebid.js configuration by adding `fledgeForGpt` to the list of modules that you are already using. For more information about the module, see Prebid's [Fledge (Protected Audience) for GPT Module](/dev-docs/modules/fledgeForGpt.html) documentation. -3. If you are using a Prebid.js version that is between 8.18.0 and 8.36.0, you must configure your ad units to make them eligible for Protected Audience API demand. You can do this in the global-level configuration, bidder level, or ad-unit level. For more information about the configurations, see Prebid's [Fledge (Protected Audience) for GPT Module](/dev-docs/modules/fledgeForGpt.html) documentation. Index recommends that you do this in the global-level configuration by using the `defaultForSlots` parameter with a value of `1`. The following code is an example of the configuration done at the global level: +**Configure Protected Audience API for Prebid.js versions 8.18.0 to 8.36.0** + +1. Build the [PAAPI module](/dev-docs/modules/paapi.html) and the Fledge for GPT module in your Prebid.js configuration by adding `paapi` and `fledgeForGpt` to the list of modules that you are already using.
+**Note:** The `fledgeForGpt` module documentation no longer exists on Prebid's site. You can however refer to Prebid's [Protected Audience API (PAAPI) for GPT Module](/dev-docs/modules/paapiForGpt.html) documentation for information on adding module configurations. +2. Configure your ad units to make them eligible for Protected Audience API demand. You can do this in the global-level configuration, bidder level, or ad-unit level. Index recommends that you do this in the global-level configuration by using the `defaultForSlots` parameter with a value of `1`. The following code is an example of the configuration done at the global level: ```javascript pbjs.que.push(function() { pbjs.setConfig({ - fledgeForGpt: { + paapi: { enabled: true, defaultForSlots: 1 } @@ -397,12 +400,12 @@ Follow these steps to configure your Prebid.js to specify that your ad slots are }); ``` - **Note:** If you are using the `fledgeForGpt.bidders[]`, make sure that you include `ix` to the list of bidders as follows: + **Note:** If you are using the `paapiForGpt.bidders[]`, make sure that you include `ix` to the list of bidders as follows: ```javascript pbjs.que.push(function() { pbjs.setConfig({ - fledgeForGpt: { + paapi: { enabled: true, bidders: ['ix', /* any other bidders */], defaultForSlots: 1 @@ -411,23 +414,27 @@ Follow these steps to configure your Prebid.js to specify that your ad slots are }); ``` -4. If you are using Prebid.js version 8.37.0 or later, you must complete the following steps to make your ad units eligible for Protected Audience API demand:
+**Configure Protected Audience API for Prebid.js versions 8.37.0 and up to 9.0.0** + +1. Build the PAAPI module in your Prebid.js configuration by adding `fledgeForGpt` to the list of modules that you are already using. When you add the `fledgeForGpt` module, the `paapi` module automatically gets included as a sub-module. For more information about the module, see Prebid's [PAAPI module](/dev-docs/modules/paapi.html) documentation.
+**Note:** The `fledgeForGpt` module documentation no longer exists on Prebid's site. You can however refer to Prebid's [Protected Audience API (PAAPI) for GPT Module](/dev-docs/modules/paapiForGpt.html) documentation for information on adding module configurations. +2. Complete the following steps to make your ad units eligible for Protected Audience API demand:
**Note:** If you continue to use the `fledgeForGpt` property, you will receive a warning message in the console logs stating that the `fledgeForGpt` configuration options will soon be renamed to `paapi`. Therefore, Index recommends that you use the `paapi` property, which is available in Prebid.js version 8.37.0 or later. * In the `pbjs.setConfig().paapi` field, set the `defaultForSlots` parameter to `1`: ```javascript pbjs.que.push(function() { pbjs.setConfig({ - paapi: { + fledgeForGpt: { enabled: true, - defaultForSlots: 1 + defaultForSlots: 1, bidders: ['ix', /* any other bidders */], }); }); ``` - * In the `paapi.gpt.autoconfig` field, set `autoconfig` to `false`. This step is important because, by default, the `fledgeForGpt` module expects the Google Publisher Tag (GPT) ad units to be loaded before the Protected Audience configuration is added to the ad unit. Setting `autoconfig` to `false` will avoid any race conditions resulting from asynchronous libraries being loaded out of order, which would prevent the ad unit from being properly configured for Protected Audience API.
-**Note:** The `fledgeForGpt.autoconfig` property is also backward compatible and can be used in place of the `paapi.gpt.autoconfig` property. However, Index recommends that you use the `paapi.gpt.autoconfig` property.
+ * In the `paapi.gpt.autoconfig` field, set `autoconfig` to `false`. This step is important because, by default, the `paapiForGpt` module expects the Google Publisher Tag (GPT) ad units to be loaded before the Protected Audience configuration is added to the ad unit. Setting `autoconfig` to `false` will avoid any race conditions resulting from asynchronous libraries being loaded out of order, which would prevent the ad unit from being properly configured for Protected Audience API.
+**Note:** The `paapiForGpt.autoconfig` property is also backward compatible and can be used in place of the `paapi.gpt.autoconfig` property. However, Index recommends that you use the `paapi.gpt.autoconfig` property.
```javascript pbjs.que.push(function() { @@ -459,9 +466,29 @@ Follow these steps to configure your Prebid.js to specify that your ad slots are }) ``` +**Configure Protected Audience API for Prebid.js version 9.0.0 or later** + +1. Build the PAAPI for GPT module in your Prebid.js configuration by adding `paapi` to the list of modules that you are already using. For more information about the module, see Prebid's [Protected Audience API (PAAPI) for GPT Module](/dev-docs/modules/paapiForGpt.html) documentation. +2. In the `pbjs.setConfig().paapi` field, set the `defaultForSlots` parameter to `1`. +3. In the `paapi.gpt.configWithTargeting` field, set `configWithTargeting` to `true`. For more control over configuring GPT slots to use PAAPI, set the `configWithTargeting` to `false` and use the `setPAAPIConfigForGPT` API. For more information about the configurations, see Prebid's [Protected Audience API (PAAPI) for GPT Module](/dev-docs/modules/paapiForGpt.html) documentation.
The following code is an example of the `defaultForSlots` and `configWithTargeting` configuration: + + ```javascript + pbjs.que.push(function() { + pbjs.setConfig({ + paapi: { + enabled: true, + defaultForSlots: 1 + gpt: { + configWithTargeting: true + }, + bidders: ['ix', /* any other bidders */], + }); + }); + ``` + -## Signal inventory using external IDs +### Signal inventory using external IDs 1. In the `pbjs.setBidderConfig` object at the `ix` bidder level, you must configure an `exchangeId` that applies to all your placements as follows. Note that the `exchangeId` is provided by Index. @@ -502,7 +529,7 @@ Follow these steps to configure your Prebid.js to specify that your ad slots are -## Bid request parameters +### Bid request parameters For a list of the OpenRTB fields that Index supports in bid requests, see [List of supported OpenRTB bid request fields for sellers](https://kb.indexexchange.com/publishers/openrtb_integration/list_of_supported_openrtb_bid_request_fields_for_sellers.htm#List_of_supported_OpenRTB_bid_request_fields_for_sellers). The following are the required fields for the various supported media types. @@ -546,7 +573,7 @@ Index supports the same set of native assets that Prebid.js recognizes. For the -## Multi-format ad units +### Multi-format ad units Index supports multi-format ad units, see [Show Multi-Format Ads with Prebid.js](https://docs.prebid.org/dev-docs/show-multi-format-ads.html). For multi-format ad units, you can optionally specify a different siteId for each multi-format type at the bidder level. This is useful if you have deals set up with Index at the siteId level. See multi-format examples [here](#examples). @@ -563,7 +590,7 @@ The following are the parameters that you can specify for each multi-format type -## Examples +### Examples **Banner** diff --git a/dev-docs/bidders/jamojar.md b/dev-docs/bidders/jamojar.md new file mode 100644 index 0000000000..572102a01c --- /dev/null +++ b/dev-docs/bidders/jamojar.md @@ -0,0 +1,39 @@ +--- +layout: bidder +title: Jambojar +description: Jambojar Bidder Adapter +biddercode: jambojar +aliasCode : smarthub +usp_supported: true +coppa_supported: true +schain_supported: true +dchain_supported: true +media_types: banner, video, native +safeframes_ok: true +deals_supported: true +floors_supported: true +fpd_supported: false +pbjs: true +pbs: true +pbs_app_supported: true +multiformat_supported: will-bid-on-any +--- + +### Prebid.js Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|---------------------------------|-------------------------------------|-----------| +| `seat` | required | Seat value | `'9Q20EdGxzgWdfPYShScl'` | `string` | +| `token` | required | Token | `'eKmw6alpP3zWQhRCe3flOpz0wpuwRFjW'` | `string` | +| `iabCat` | optional | Array of IAB content categories that describe the content producer | `['IAB1-1', 'IAB3-1', 'IAB4-3']` | `Array(String)` | +| `minBidfloor` | optional | Minimal CPM value | `0.03` | `float` | +| `pos` | optional | The position of the placement on the page, see Open RTB spec v2.5. | `4` | `number` | + +### Prebid Server Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|---------------------|--------------------------------------|----------| +| `seat` | required | Seat value | `'9Q20EdGxzgWdfPYShScl'` | `string` | +| `token` | required | Token | `'eKmw6alpP3zWQhRCe3flOpz0wpuwRFjW'` | `string` | diff --git a/dev-docs/bidders/jdpmedia.md b/dev-docs/bidders/jdpmedia.md new file mode 100644 index 0000000000..5b2367ed9a --- /dev/null +++ b/dev-docs/bidders/jdpmedia.md @@ -0,0 +1,39 @@ +--- +layout: bidder +title: JDPMedia +description: JDPMedia Bidder Adapter +biddercode: jdpmedia +aliasCode : smarthub +usp_supported: true +coppa_supported: true +schain_supported: true +dchain_supported: true +media_types: banner, video, native +safeframes_ok: true +deals_supported: true +floors_supported: true +fpd_supported: false +pbjs: true +pbs: true +pbs_app_supported: true +multiformat_supported: true +--- + +### Prebid.js Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|---------------------------------|-------------------------------------|-----------| +| `seat` | required | Seat value | `'9Q20EdGxzgWdfPYShScl'` | `string` | +| `token` | required | Token | `'eKmw6alpP3zWQhRCe3flOpz0wpuwRFjW'` | `string` | +| `iabCat` | optional | Array of IAB content categories that describe the content producer | `['IAB1-1', 'IAB3-1', 'IAB4-3']` | `Array(String)` | +| `minBidfloor` | optional | Minimal CPM value | `0.03` | `float` | +| `pos` | optional | The position of the placement on the page, see Open RTB spec v2.5. | `4` | `number` | + +### Prebid Server Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|---------------------|--------------------------------------|----------| +| `seat` | required | Seat value | `'9Q20EdGxzgWdfPYShScl'` | `string` | +| `token` | required | Token | `'eKmw6alpP3zWQhRCe3flOpz0wpuwRFjW'` | `string` | diff --git a/dev-docs/bidders/jwplayer.md b/dev-docs/bidders/jwplayer.md index ca47edf0b2..4e7f6e99ca 100644 --- a/dev-docs/bidders/jwplayer.md +++ b/dev-docs/bidders/jwplayer.md @@ -23,7 +23,7 @@ sidebarType: 1 -## Table of contents +### Table of contents * [Table of contents](#table-of-contents) * [Introduction](#introduction) @@ -36,7 +36,7 @@ sidebarType: 1 -## Introduction +### Introduction The JW Player Bid Adapter allows publishers to tap into JW Player's Video Advertising Demand. Publishers are not required to use JW Player as a video player. @@ -44,11 +44,11 @@ Instream and outstream video ads are supported. -## Modules to include in your build process +### Modules to include in your build process You will need to include the `jwplayerBidAdapter` in your build. If you are building the JS binary on your own from source code, follow the instructions in [Prebid.js project README](https://github.com/prebid/Prebid.js/blob/master/README.md#build-optimization). -We recommend including the [jwplayerVideoProvider](dev-docs/modules/jwplayerVideoProvider.md) to connect Prebid.js to your JW Player instance via the [Prebid Video Module](prebid-video/video-module.md). -If you are not using the JW Player Video Provider, we suggest including the JW Player Real Time Data Provider [jwplayerRtdProvider](dev-docs/modules/jwplayerRtdProvider.md) in order to include JW Player's contextual ad targeting segments in your bid requests. +We recommend including the [jwplayerVideoProvider](/dev-docs/modules/jwplayerVideoProvider.html) to connect Prebid.js to your JW Player instance via the [Prebid Video Module](/dev-docs/modules/video.html). +If you are not using the JW Player Video Provider, we suggest including the JW Player Real Time Data Provider [jwplayerRtdProvider](/dev-docs/modules/jwplayerRtdProvider.html) in order to include JW Player's contextual ad targeting segments in your bid requests. The following is an example build command that include these modules:
`gulp build --modules=jwplayerBidAdapter,jwplayerVideoProvider`
@@ -75,7 +75,7 @@ or -## Bid Params +### Bid Params We support all oRTB params and encourage populating as many as possible. @@ -86,6 +86,7 @@ We support all oRTB params and encourage populating as many as possible. You must include the following parameters at the bidder level, in `adUnit.bids[index].params`. {: .table .table-bordered .table-striped } + | Name | Scope | Type | Description | |---|---|---|------------------------------------------------------| | `siteId` | Required | String | Site-specific id that is provided by JW Player. | @@ -96,9 +97,10 @@ You must include the following parameters at the bidder level, in `adUnit.bids[i ### mediaTypes.video -We recommend populating as many params as possible in `adUnit.mediaTypes.video`. When using the [jwplayerVideoProvider](dev-docs/modules/jwplayerVideoProvider.md), these fields are populated automatically. +We recommend populating as many params as possible in `adUnit.mediaTypes.video`. When using the [jwplayerVideoProvider](/dev-docs/modules/jwplayerVideoProvider.html), these fields are populated automatically. {: .table .table-bordered .table-striped } + | Name | Scope | Type | Description | |--------------------|-------------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `video.w` | Recommended | Integer | Populated automatically when using the `jwplayerVideoProvider`. The width of the video player in pixels that will be passed to demand partners. You must define the size of the video player using the `video.w` and `video.h` parameters. | @@ -109,10 +111,11 @@ We recommend populating as many params as possible in `adUnit.mediaTypes.video`. ### First Party Data (FPD) -In release 4.30 and later, publishers who are not using the [jwplayerVideoProvider](dev-docs/modules/jwplayerVideoProvider.md) or [jwplayerRtdProvider](dev-docs/modules/jwplayerRtdProvider.md) can use the ortb2 method of setting First Party Data. +In release 4.30 and later, publishers who are not using the [jwplayerVideoProvider](/dev-docs/modules/jwplayerVideoProvider.html) or [jwplayerRtdProvider](/dev-docs/modules/jwplayerRtdProvider.html) can use the ortb2 method of setting First Party Data. The following fields are required: {: .table .table-bordered .table-striped } + | Name | Scope | Type | Description | |--------------------|-------------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `site.content.url` | Required | string | Populated automatically when the `jwplayerVideoProvider` or `jwplayerRtdProvider` are included. This is the URL of the media being rendered in the video player, for buy-side contextualization or review. This needs to be accessible (w/o DRM, Geo-blocking etc.) and without parameters (Such as size, quality etc.) | @@ -135,7 +138,7 @@ pbjs.setConfig({ -## Examples +### Examples ### With the JW Player Video Provider diff --git a/dev-docs/bidders/kargo.md b/dev-docs/bidders/kargo.md index 9a3d684579..981522250b 100644 --- a/dev-docs/bidders/kargo.md +++ b/dev-docs/bidders/kargo.md @@ -25,10 +25,6 @@ pbjs_version_notes: if you require schains, avoid versions 7.46 to 7.53 sidebarType: 1 --- -### Disclosure - -This adapter is known to use an HTTP 1 endpoint. Header bidding often generates multiple requests to the same host and bidders are encouraged to change to HTTP 2 or above to help improve publisher page performance via multiplexing. - ### Note Kargo is an invitation-only marketplace. Please reach out to your Kargo account manager to get setup. Also, you *must* test on a mobile device, or emulate a mobile device by manipulating the user agent string sent to the server. @@ -37,6 +33,8 @@ Kargo is an invitation-only marketplace. Please reach out to your Kargo account The Kargo bid adapter uses browser local storage. Since Prebid.js 7.x, the access to it must be explicitly set. +{% include dev-docs/storageAllowed.md %} + ```js // https://docs.prebid.org/dev-docs/publisher-api-reference/bidderSettings.html pbjs.bidderSettings = { diff --git a/dev-docs/bidders/kimberlite.md b/dev-docs/bidders/kimberlite.md index 350f1192a5..1f27f02eb2 100644 --- a/dev-docs/bidders/kimberlite.md +++ b/dev-docs/bidders/kimberlite.md @@ -10,14 +10,14 @@ coppa_supported: false gpp_supported: false schain_supported: false dchain_supported: false -media_types: banner +media_types: banner, video safeframes_ok: false deals_supported: true floors_supported: true pbjs: true pbs: false prebid_member: false -multiformat_supported: will-not-bid +multiformat_supported: will-bid-on-one ortb_blocking_supported: partial sidebarType: 1 --- diff --git a/dev-docs/bidders/kobler.md b/dev-docs/bidders/kobler.md index 626aa435cb..f3336884be 100644 --- a/dev-docs/bidders/kobler.md +++ b/dev-docs/bidders/kobler.md @@ -4,6 +4,7 @@ title: Kobler description: Kobler Bidder Adapter biddercode: kobler pbjs: true +pbs: true media_types: banner floors_supported: true deals_supported: true @@ -15,7 +16,7 @@ sidebarType: 1 The Kobler Bidder Adapter requires setup and approval from Kobler AS. Please reach out to for more information. -### Bid Params +### Prebid.js Bid Params {: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | @@ -24,7 +25,7 @@ Please reach out to for more information. | `floorPrice` | optional | Floor price in CPM and in USD. Can be used as an alternative to the [Floors module](https://docs.prebid.org/dev-docs/modules/floors.html), which is also supported by this adapter. Defaults to 0. | `5.0` | `float` | | `dealIds` | optional | Array of deal IDs. | `['abc328745', 'mxw243253']` | `array of strings` | -### Implicit parameters +### Prebid.js Implicit parameters Kobler identifies the placement using the combination of the page URL and the allowed sizes. As a result, it's important that the correct sizes are provided in `banner.sizes` in order for Kobler to correctly identify the placement. The main, desired format should be the first element of this array. @@ -46,8 +47,8 @@ Kobler identifies the placement using the combination of the page URL and the al In order to see a sample bid from Kobler (without a proper setup), you have to also do the following: -- Set the `test` parameter to `true`. -- Set `config.pageUrl` to `'https://www.tv2.no/mening-og-analyse/14555348/'`. This is necessary because Kobler only bids on recognized articles. Kobler runs its own test campaign to make sure there is always a bid for this specific page URL. +- Prebid.js: Set the `test` parameter of Kobler's adapter to `true`. Prebid-server: Set the `test` parameter of the bid request to `1`. +- Prebid.js: Set `config.pageUrl` to `'https://www.tv2.no/mening-og-analyse/14555348/'`. Prebid-server: Set the `site.page` parameter of the bid request to `'https://www.tv2.no/mening-og-analyse/14555348/'`. This is necessary because Kobler only bids on recognized articles. Kobler runs its own test campaign to make sure there is always a bid for this specific page URL. ### Example With Optional Parameters diff --git a/dev-docs/bidders/kuantyx.md b/dev-docs/bidders/kuantyx.md new file mode 100644 index 0000000000..0ef34cd903 --- /dev/null +++ b/dev-docs/bidders/kuantyx.md @@ -0,0 +1,44 @@ +--- +layout: bidder +title: Kuantyx +description: Kuantyx Bid Adapter +biddercode: kuantyx +tcfeu_supported: false +usp_supported: true +media_types: video, native +safeframes_ok: true +pbjs: true +pbs: true +pbs_app_supported: true +floors_supported: true +schain_supported: true +fpd_supported: true +ortb_blocking_supported: true +multiformat_supported: will-bid-on-one +userIds: all +sidebarType: 1 +aliasCode: aso +--- +### Note + +The Kuantyx adapter requires approval and setup. Please reach out to or visit us at [kuantyx.com](https://kuantyx.com) for more details. + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|------------------|-----------------------------|-----------| +| `server` | required | Server endpoint | `https://srv.kntxy.com` | `String` | +| `zone` | required | Zone ID | `73815` | `Integer` | + +#### Video Caching + +Note that the Kuantyx adapter expects a client-side Prebid Cache to be enabled for video bidding. + +```js +pbjs.setConfig({ + cache: { + url: 'https://prebid.example.com/pbc/v1/cache' + } +}); +``` diff --git a/dev-docs/bidders/kueezrtb.md b/dev-docs/bidders/kueezrtb.md index c8bc315898..273a308753 100644 --- a/dev-docs/bidders/kueezrtb.md +++ b/dev-docs/bidders/kueezrtb.md @@ -21,19 +21,21 @@ ortb_blocking_supported: false multiformat_supported: will-bid-on-one gvl_id: 1165 pbjs: true +pbs: true sidebarType: 1 --- ### Bid Params {: .table .table-bordered .table-striped } + | Name | Scope | Description | Example | Type | |------------|----------|-------------------------------------------------------------------------------------------|------------------------------|----------| | `cId` | required | The connection ID from KueezRTB. | `'562524b21b1c1f08117fc7f9'` | `string` | -| `pId` | required | The publisher ID from KueezRTB. | `'59ac17c192832d0011283fe3'` | `string` | +| `pId` | required | The publisher ID from KueezRTB (pbjs only). | `'59ac17c192832d0011283fe3'` | `string` | | `bidFloor` | optional | The minimum bid value desired. KueezRTB will not respond with bids lower than this value. | `0.90` | `float` | -## Example +### Example ```javascript var adUnits = [{ diff --git a/dev-docs/bidders/lane4.md b/dev-docs/bidders/lane4.md new file mode 100644 index 0000000000..d9c0e0216d --- /dev/null +++ b/dev-docs/bidders/lane4.md @@ -0,0 +1,119 @@ +--- +layout: bidder +title: Lane4 +description: Prebid lane4 Bidder Adaptor +pbjs: true +biddercode: lane4 +media_types: banner, native +tcfeu_supported: false +usp_supported: true +coppa_supported: true +gpp_sids: usstate_all, usnat +schain_supported: false +safeframes_ok: false +ortb_blocking_supported: false +dsa_supported: false +deals_supported: true +floors_supported: true +sidebarType: 1 +--- +### Registration + +For assistance or setup instructions, please contact us at . + +### Banner Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------------|-----------|-----------------------|----------------|----------| +| `placement_id` | mandatory | Placement Id | `110044` | `number` | +| `height` | optional | Height of the creative| `250` | `number` | +| `width` | optional | Width of the creative | `300` | `number` | +| `bid_floor` | optional | Bid Floor Price | `0.5` | `decimal`| + +### AdUnit Format for Banner + +```javascript +var adUnits = [ + { + code: 'banner-ad', + mediaTypes: { + banner: { + sizes: [[300, 250]] + } + }, + bids: [{ + bidder: 'lane4', + params: { + placement_id: 110044, + height: 250, + width: 300, + bid_floor: 0.5 + } + }] + } + ]; +``` + +### Native Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------------|-----------|-----------------------|----------------|----------| +| `placement_id` | mandatory | Placement Id | `110045` | `number` | +| `bid_floor` | optional | Bid Floor Price | `1` | `decimal`| + +### AdUnit Format for Native + +```javascript +var adUnits = [ + { + code: 'native-ad-container', + mediaTypes: { + native: { + title: { required: true, len: 100 }, + image: { required: true, sizes: [300, 250] }, + sponsored: { required: false }, + clickUrl: { required: true }, + desc: { required: true }, + icon: { required: false, sizes: [50, 50] }, + cta: { required: false } + } + }, + bids: [{ + bidder: 'lane4', + params: { + placement_id: 110045, // Required parameter + bid_floor: 1 // Optional parameter + } + }] + } + ]; +``` + +#### First Party Data + +In release 4.30 and later, publishers should use the `ortb2` method of setting [First Party Data](https://docs.prebid.org/features/firstPartyData.html). The following fields are supported: + +* ortb2.user.id +* ortb2.user.buyeruid +* ortb2.user.keywords +* ortb2.user.ext.* + +Example first party data that's available to all bidders and all adunits: + +```javascript +pbjs.setConfig({ + ortb2: { + user: { + id: 123456789, // Unique pseudonymized ID for the user (e.g., NPI). + buyeruid: 987654321, // DSP-assigned user ID for identity resolution. + keywords: "kw1,kw2", // Interest or specialty tags (e.g., oncology, cardiology) + ext: { + key1: "values", // Custom healthcare metadata (e.g., icd10), single or comma seperated. + key2: "values" // Additional campaign context (e.g., ndc), single or comma seperated. + } + } + } +}); +``` diff --git a/dev-docs/bidders/lasso.md b/dev-docs/bidders/lasso.md index 3c296a5d90..57fb1927aa 100644 --- a/dev-docs/bidders/lasso.md +++ b/dev-docs/bidders/lasso.md @@ -16,6 +16,7 @@ floors_supported: false fpd_supported: false multiformat_supported: will-not-bid sidebarType: 1 +gpp_sids: usnat, usstate_all, usp --- ### Note @@ -25,6 +26,8 @@ The Lasso Bidding adapter requires setup before beginning. Please contact us at ### Bid Params {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | +| Name | Scope | Description | Example | Type | |-------------|----------|----------------------------------|--------------------------------------|----------| -| `adUnitId` | required | Unique adUnitId from Lasso | `'12345'` | `string` | +| `adUnitId` | required | Unique adUnitId from Lasso | `'12345'` | `string` | +| `npi` | optional | | | `string` | +| `aimOnly` | optional | | | `boolean` | diff --git a/dev-docs/bidders/lemmadigital.md b/dev-docs/bidders/lemmadigital.md index 9fb79336dc..b70df62d9f 100644 --- a/dev-docs/bidders/lemmadigital.md +++ b/dev-docs/bidders/lemmadigital.md @@ -13,6 +13,7 @@ multiformat_supported: will-bid-on-one safeframes_ok: true ortb_blocking_supported: partial userIds: all +filename: lemmaDigitalBidAdapter sidebarType: 1 --- diff --git a/dev-docs/bidders/lifestreet.md b/dev-docs/bidders/lifestreet.md index 4b2e9109a3..1881c31bfd 100644 --- a/dev-docs/bidders/lifestreet.md +++ b/dev-docs/bidders/lifestreet.md @@ -10,7 +10,7 @@ tcfeu_supported: true usp_supported: true gvl_id: 67 enable_download: false -pbjs_version_notes: not ported to 5.x, added back 7.13 +pbjs_version_notes: sidebarType: 1 --- diff --git a/dev-docs/bidders/logicad.md b/dev-docs/bidders/logicad.md index 1c8dfe434d..f8eb3ec61b 100644 --- a/dev-docs/bidders/logicad.md +++ b/dev-docs/bidders/logicad.md @@ -12,6 +12,7 @@ userIds: all tcfeu_supported: false prebid_member: false sidebarType: 1 +schain_supported: true --- diff --git a/dev-docs/bidders/loglylift.md b/dev-docs/bidders/loglylift.md deleted file mode 100644 index f15ce42f93..0000000000 --- a/dev-docs/bidders/loglylift.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -layout: bidder -title: LOGLY lift -description: Prebid LOGLY lift Bidder Adaptor -biddercode: loglylift -tcfeu_supported: false -usp_supported: false -coppa_supported: false -schain_supported: false -dchain_supported: false -media_types: banner, native -safeframes_ok: false -deals_supported: false -floors_supported: false -fpd_supported: false -pbjs: true -pbs: false -prebid_member: false -sidebarType: 1 ---- - - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|--------|----------|----------------------------------------------------------|----------|-----------| -| `adspotId` | required | adspot id managed by LOGLY lift | `4302078` | `integer` | diff --git a/dev-docs/bidders/loopme.md b/dev-docs/bidders/loopme.md new file mode 100644 index 0000000000..3caa15cc04 --- /dev/null +++ b/dev-docs/bidders/loopme.md @@ -0,0 +1,28 @@ +--- +layout: bidder +title: Loopme +description: Loopme Bidder Adapter +biddercode: loopme +gvl_id: 109 +media_types: banner, video, audio, native +coppa_supported: true +tcfeu_supported: true +usp_supported: true +prebid_member: false +pbjs: true +pbs: true +schain_supported: true +floors_supported: true +multiformat_supported: will-bid-on-any +ortb_blocking_supported: true +sidebarType: 1 +--- + +### Prebid Server Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|---------------------------------------------|----------------|-----------| +| `publisherId` | required | A ID which identifies Loopme partner. | `'45qkf5s9zf'` | `string` | +| `bundleId` | optional | A ID which identifies app/site in Loopme. | `'v5qvf9fx4f'` | `string` | +| `placementId` | optional | A placement ID in Loopme. | `'x6fnvfd7ty'` | `string` | diff --git a/dev-docs/bidders/luponmedia.md b/dev-docs/bidders/luponmedia.md index a9821d6e76..a402e61586 100644 --- a/dev-docs/bidders/luponmedia.md +++ b/dev-docs/bidders/luponmedia.md @@ -20,7 +20,6 @@ The LuponMedia bidder adapter requires setup and approval from the LuponMedia su ### Bid Params {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|--------|----------|--------------------------|---------|-----------| -| `siteId` | required | The publisher's unique site ID | `12345` | `integer` | -| `keyId` | required | The key ID | `4o2c4` | `string` | +| Name | Scope | Description | Example | Type | +|--------|----------|--------------------------|-----------------|-----------| +| `keyId`| required | The key ID | `uid_test_1234` | `string` | diff --git a/dev-docs/bidders/madsense.md b/dev-docs/bidders/madsense.md new file mode 100644 index 0000000000..b171580c92 --- /dev/null +++ b/dev-docs/bidders/madsense.md @@ -0,0 +1,34 @@ +--- +layout: bidder +title: MadSense +description: Prebid MadSense Bidder Adapter +pbjs: true +pbs: true +biddercode: madsense +tcfeu_supported: false +gdpr_supported: true +usp_supported: true +schain_supported: true +media_types: banner, video +safeframes_ok: true +deals_supported: false +floors_supported: true +fpd_supported: false +multiformat_supported: will-not-bid +sidebarType: 1 + +--- + +### Integration + +The MadSense Header Bidding adapter needs approval from the MadSense team. For more details, contact . + +### Bid Params + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|------|----------|--------------------|-------------|-----------| +| `company_id` | required | Company ID | `'1234567'` | `string` | +| `bidfloor` | optional | Bid floor price | `0.5` | `number` | +| `currency` | optional | Bid floor currency | `'USD'` | `string` | diff --git a/dev-docs/bidders/markapp.md b/dev-docs/bidders/markapp.md new file mode 100644 index 0000000000..3e427f8119 --- /dev/null +++ b/dev-docs/bidders/markapp.md @@ -0,0 +1,39 @@ +--- +layout: bidder +title: MarkApp +description: MarkApp Bidder Adapter +biddercode: markapp +aliasCode : smarthub +usp_supported: true +coppa_supported: true +schain_supported: true +dchain_supported: true +media_types: banner, video, native +safeframes_ok: true +deals_supported: true +floors_supported: true +fpd_supported: false +pbjs: true +pbs: true +pbs_app_supported: true +multiformat_supported: will-bid-on-any +--- + +### Prebid.js Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|---------------------------------|-------------------------------------|-----------| +| `seat` | required | Seat value | `'9Q20EdGxzgWdfPYShScl'` | `string` | +| `token` | required | Token | `'eKmw6alpP3zWQhRCe3flOpz0wpuwRFjW'` | `string` | +| `iabCat` | optional | Array of IAB content categories that describe the content producer | `['IAB1-1', 'IAB3-1', 'IAB4-3']` | `Array(String)` | +| `minBidfloor` | optional | Minimal CPM value | `0.03` | `float` | +| `pos` | optional | The position of the placement on the page, see Open RTB spec v2.5. | `4` | `number` | + +### Prebid Server Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|---------------------|--------------------------------------|----------| +| `seat` | required | Seat value | `'9Q20EdGxzgWdfPYShScl'` | `string` | +| `token` | required | Token | `'eKmw6alpP3zWQhRCe3flOpz0wpuwRFjW'` | `string` | diff --git a/dev-docs/bidders/mediaConsortium.md b/dev-docs/bidders/mediaConsortium.md new file mode 100644 index 0000000000..e1642e60c3 --- /dev/null +++ b/dev-docs/bidders/mediaConsortium.md @@ -0,0 +1,76 @@ +--- +layout: bidder +title: Media Consortium +description: Prebid Media Consortium Bidder Adapter +biddercode: mediaConsortium +media_types: banner, video +pbjs: true +userId: all +multiformat_supported: will-bid-on-any +sidebarType: 1 +--- + +MediaConsortium doesn't require inventory parameters - we'll match your inventory using a combination of ad unit code and domain. + +### Prebid JS configuration + +To get access to the full feature set of the adapter you'll need to allow localstorage usage in the `bidderSettings`. + +{% include dev-docs/storageAllowed.md %} + +```javascript + pbjs.bidderSettings = { + mediaConsortium: { + storageAllowed: true + } + } +``` + +MediaConsortium uses the [1plusX](https://www.1plusx.com/) user id (fpid) and profile API to retrieve audience and site specific segments. You can manage 1plusX usage with the settings outlined below. + +#### Managing 1plusX profile API usage and fpid retrieval + +You can use the `setBidderConfig` function to enable or disable 1plusX profile API usage and fpid retrieval. + +If the keys found below are not defined, their values will default to `false`. + +```javascript + pbjs.setBidderConfig({ + bidders: ['mediaConsortium'], + config: { + // Controls the 1plusX profile API usage + useProfileApi: true, + // Controls the 1plusX fpid retrieval + readOnePlusXId: true + } + }); +``` + +#### Required pbjs ad unit video parameters + +| Name | Scope | Description | Example | Type | +|------------|----------|-------------------------------------------|----------------|----------------------| +| playerSize | required | Array of sizes accepted by the player | `[[300, 250]]` | `[number, number][]` | +| context | required | Video context, must always be `outstream` | `outstream` | `string` | + +##### Example ad unit + +```javascript + const adUnits = [ + { + code: 'div-prebid-video', + mediaTypes:{ + video: { + playerSize: [[300, 250]], + context: 'outstream' + } + }, + bids:[ + { + bidder: 'mediaConsortium', + params: {} + } + ] + } + ]; +``` diff --git a/dev-docs/bidders/mediaeyes.md b/dev-docs/bidders/mediaeyes.md new file mode 100644 index 0000000000..db910e83a6 --- /dev/null +++ b/dev-docs/bidders/mediaeyes.md @@ -0,0 +1,55 @@ +--- +layout: bidder +title: MediaEyes +description: MediaEyes Bidder Adapter +pbjs: true +pbs: false +gvl_id: none +biddercode: mediaeyes +media_types: banner +gdpr_supported: false +usp_supported: false +coppa_supported: false +schain_supported: false +safeframes_ok: false +dchain_supported: false +deals_supported: false +floors_supported: true +fpd_supported: false +ortb_blocking_supported: false +multiformat_supported: will-bid-on-one +prebid_member: false +--- + +### Description + +MediaEyes adapter prebid connect to MediaEyes Bidding System. + +### Bid params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|--------------|----------|------------------------------------|-----------------------------|----------| +| `itemId` | required | The item ID from MediaEyes | `'4d27f3cc8bbd5bd153045e'` | `string` | +| `bidFloor` | optional | Lowest value of expected bid price | `0.1` | `float` | + +### Test Parameters + +300x250 banner test + +```javascript +var adUnits = [{ + code: 'zone-ads', + mediaTypes: { + banner: { + sizes: [[300, 250]] + } + }, + bids: [{ + bidder: 'mediaeyes', + params : { + itemId : "4d27f3cc8bbd5bd153045e" + } + }] +}]; +``` diff --git a/dev-docs/bidders/mediaforce.md b/dev-docs/bidders/mediaforce.md index 3d1c154804..dd5cebd85c 100644 --- a/dev-docs/bidders/mediaforce.md +++ b/dev-docs/bidders/mediaforce.md @@ -2,7 +2,7 @@ layout: bidder title: MediaForce description: MediaForce Prebid Bidder Adapter -media_types: banner, native +media_types: banner, native, video biddercode: mediaforce pbjs: true tcfeu_supported: false diff --git a/dev-docs/bidders/mediago.md b/dev-docs/bidders/mediago.md index 4b5f4fcd94..bb59226972 100644 --- a/dev-docs/bidders/mediago.md +++ b/dev-docs/bidders/mediago.md @@ -3,14 +3,17 @@ layout: bidder title: MediaGo description: MediaGo Prebid Bidder Adapter biddercode: mediago -media_types: banner +media_types: banner,native +prebid_member: true +userIds: all (with commercial activation) tcfeu_supported: true coppa_supported: true usp_supported: true pbjs: true +pbs: true floors_supported: true gvl_id: 1020 -pbjs_version_notes: not ported to 5.x, added back 7.13 +pbjs_version_notes: sidebarType: 1 --- ### Modules @@ -24,9 +27,13 @@ The MediaGo Bidding adapter requires setup before beginning. Please contact us a ### Bid Params {: .table .table-bordered .table-striped } + | Name | Scope | Description | Example | Type | |---------------|----------|-----------------------|-----------|-----------| -| `token` | required | publisher token | `'1e100887dd614b7f69fdd1360437'` | `string` | -| `test` | recommend | 0(default): production env mode.
1: dev env mode and no charge.we will bid Higher frequency to make debug easier. | `1/0` | `Number` | -| `bidfloor` | recommend | Sets a floor price for the bid | `0.05` | `float` | +| `token` | required | publisher token, This parameter expects all imps to be the same | `'1e100887dd614b7f69fdd1360437'` | `string` | +| `region` | recommend | Server region for PBS request: US for US Region, EU for EU Region, APAC for APAC Region, default is US. This parameter expects all imps to be the same. This parameter is available for PBS only. | `'US'` | `string` | +| `test` | recommend | 0(default): production env mode.
1: dev env mode and no charge.we will bid Higher frequency to make debug easier. This parameter is available for PBJS only. | `1/0` | `Number` | +| `bidfloor` | recommend | Sets a floor price for the bid. This parameter is available for PBJS only. | `0.05` | `float` | +| `publisher` | required | publisher id | `'abcdefg'` | `string` | | `placementId` | recommend | The AD placement ID | `12341234` | `string` | +| `tagid` | optional | Tag identifier for the impression | `"1"` | `string` | diff --git a/dev-docs/bidders/mediakeys.md b/dev-docs/bidders/mediakeys.md index 45efb078da..39c62ce93e 100644 --- a/dev-docs/bidders/mediakeys.md +++ b/dev-docs/bidders/mediakeys.md @@ -166,11 +166,10 @@ Mediakeys fully supports the following [Prebid.js Modules](https://docs.prebid.o {: .table .table-bordered .table-striped } | Module | Scope | |-------------------------------------------------------------------------------------------------------|-----------------------------| -| [Consent Management - GDPR](https://docs.prebid.org/dev-docs/modules/consentManagement.html) | Required in Europe | +| [Consent Management - GDPR](https://docs.prebid.org/dev-docs/modules/consentManagementTcf.html) | Required in Europe | | [Consent Management - US Privacy](https://docs.prebid.org/dev-docs/modules/consentManagementUsp.html) | Required in US - California | | [Supply Chain Object](https://docs.prebid.org/dev-docs/modules/schain.html) | Required for all traffic | | [Instream Tracking](https://docs.prebid.org/dev-docs/modules/instreamTracking.html) | Required for Instream Video | -| [First Party Data Enrichment](https://docs.prebid.org/dev-docs/modules/enrichmentFpdModule.html) | Recommended for all traffic | Publishers must utilize the required modules in described scope to be able to receive bid responses. diff --git a/dev-docs/bidders/medianet.md b/dev-docs/bidders/medianet.md index 8b402d6818..b51de7b4b6 100644 --- a/dev-docs/bidders/medianet.md +++ b/dev-docs/bidders/medianet.md @@ -7,8 +7,7 @@ tcfeu_supported: true media_types: banner,native,video usp_supported: true coppa_supported: true -gpp_supported: true -userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId +userIds: all prebid_member: true pbjs: true gvl_id: 142 @@ -16,23 +15,35 @@ schain_supported: true floors_supported: true pbs: true sidebarType: 1 +gpp_sids: tcfeu, tcfca, usnat, usstate_all, usp +safeframes_ok: true +pbs_app_supported: true +multiformat_supported: will-bid-on-any +dsa_supported: true +dchain_supported: false +deals_supported: true +fpd_supported: true +privacy_sandbox: paapi, topics +endpoint_compression: false --- ### Bid Params {: .table .table-bordered .table-striped } + | Name | Scope | Description | Example | Type | |------------|----------|----------------------------------------|---------------|----------| | `cid` | required | The customer id provided by Media.net. | `'8CUX0H51C'` | `string` | | `crid` | required | The placement id provided by Media.net | `'1234567'` | `string` | | `bidfloor` | optional | Bidfloor for the impression | `1.0` | `float` | -| `video` | required for video Ad units | Object containing video targeting parameters. See [Video Object](#media.net-video-object) for details.|`video: { maxduration: 60 }` | `object` | +| `video` | optional for video Ad units | Object containing video targeting parameters. See [Video Object](#media.net-video-object) for details.|`video: { maxduration: 60 }` | `object` | #### Video Object {: .table .table-bordered .table-striped } + | Name | Type | Description | Example| |------------|----------|--------------|--------| |mimes|array of strings|(Recommended) Specifies the video content MIME types supported; for example, video/x-ms-wmv and video/x-flv.|["video/x-ms-wmv","video/x-flv"]| @@ -144,17 +155,17 @@ var adUnits = [{ }]; ``` -# Protected Audience API (FLEDGE) +### Protected Audience API (FLEDGE) To enable PAAPI auctions follow the instructions below: -1. Add the `fledgeForGpt` and `paapi` modules to your prebid bundle. +1. Add the `paapiForGpt` and `paapi` modules to your prebid bundle. 2. Add the following configuration for the module ```javascript pbjs.que.push(function() { pbjs.setConfig({ - fledgeForGpt: { + paapi: { enabled: true, bidders: ['medianet'], defaultForSlots: 1 @@ -164,4 +175,4 @@ pbjs.que.push(function() { ``` For a detailed guide to enabling PAAPI auctions follow Prebid's documentation -on [`fledgeForGpt`](https://docs.prebid.org/dev-docs/modules/fledgeForGpt.html) +on [`paapiForGpt`](https://docs.prebid.org/dev-docs/modules/paapiForGpt.html) diff --git a/dev-docs/bidders/mediayo.md b/dev-docs/bidders/mediayo.md new file mode 100644 index 0000000000..7e7c8a5454 --- /dev/null +++ b/dev-docs/bidders/mediayo.md @@ -0,0 +1,36 @@ +--- +layout: bidder +title: MediaYo +description: Prebid MediaYo Bidder Adapter +biddercode: mediayo +gpp_sids: usstate_all +tcfeu_supported: false +usp_supported: true +coppa_supported: true +schain_supported: true +deals_supported: false +floors_supported: true +fpd_supported: false +ortb_blocking_supported: false +media_types: banner, video, native +multiformat_supported: will-bid-on-one +userIds: all +pbjs: false +pbs: true +pbs_app_supported: true +safeframes_ok: true +sidebarType: 1 +--- + +### Bid Params + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|---------------|----------|--------------|---------------------------------|------------| +| `placementId` | optional | Placement Id | `'0'` | `'string'` | +| `endpointId` | optional | Endpoint Id | `'0'` | `'string'` | + +### Note + +For the prebid server you only need to use one parameter: either `placementId` or `endpointId` diff --git a/dev-docs/bidders/melozen.md b/dev-docs/bidders/melozen.md new file mode 100644 index 0000000000..0e0defba15 --- /dev/null +++ b/dev-docs/bidders/melozen.md @@ -0,0 +1,31 @@ +--- +layout: bidder +title: MeloZen +description: Prebid MeloZen Bidder Adaptor +biddercode: melozen +schain_supported: true +dchain_supported: false +media_types: banner, video, native +deals_supported: false +floors_supported: true +fpd_supported: false +pbjs: false +pbs: true +pbs_app_supported: true +prebid_member: false +multiformat_supported: will-bid-on-one +ortb_blocking_supported: false +sidebarType: 1 +--- + +### Note + +The MeloZen Bidding adapter requires setup before beginning. Please contact us at + +### Bid Params + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|---------|----------|-----------------------------------|--------------|----------| +| `pubId` | required | The publisher's ID provided by MeloZen | `'386276e072'` | `string` | diff --git a/dev-docs/bidders/metax.md b/dev-docs/bidders/metax.md new file mode 100644 index 0000000000..8fa65ff8b7 --- /dev/null +++ b/dev-docs/bidders/metax.md @@ -0,0 +1,34 @@ +--- +layout: bidder +title: MetaX +description: MetaX Prebid Bidder Adapter +biddercode: metax +tcfeu_supported: true +gvl_id: 1301 +usp_supported: true +coppa_supported: true +gpp_sids: tcfeu, usp +schain_supported: true +dchain_supported: false +userIds: all +media_types: banner, video, native, audio +floors_supported: false +pbjs: false +pbs: true +prebid_member: false +multiformat_supported: will-bid-on-one +safeframes_ok: false +sidebarType: 1 +--- + +### Note + +The MetaX Bidding adapter requires setup before beginning. Please contact us at + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +| ------------- | -------- | --------------------- | ---------- | --------- | +| `publisherId` | required | MetaX's publisher ID. | `12345678` | `integer` | +| `adunit` | required | MetaX's AdUnit. | `223344` | `integer` | diff --git a/dev-docs/bidders/mgidX.md b/dev-docs/bidders/mgidX.md index 93bbca96db..d3388edb5a 100644 --- a/dev-docs/bidders/mgidX.md +++ b/dev-docs/bidders/mgidX.md @@ -3,14 +3,18 @@ layout: bidder title: MgidX description: Prebid MgidX Bidder Adapter biddercode: mgidX -usp_supported: true -gdpr_supported: true +gpp_sids: usstate_all tcfeu_supported: true +usp_supported: true coppa_supported: true schain_supported: true +deals_supported: false floors_supported: true +fpd_supported: false +ortb_blocking_supported: false media_types: banner, video, native multiformat_supported: will-not-bid +userIds: all pbjs: true pbs: true pbs_app_supported: true diff --git a/dev-docs/bidders/michao.md b/dev-docs/bidders/michao.md new file mode 100644 index 0000000000..dd75f6313f --- /dev/null +++ b/dev-docs/bidders/michao.md @@ -0,0 +1,190 @@ +--- +layout: bidder +title: Michao +description: Prebid Michao SSP Bidder Adapter +biddercode: michao +tcfeu_supported: false +dsa_supported: false +gvl_id: none +usp_supported: false +coppa_supported: false +gpp_sids: none +schain_supported: true +dchain_supported: false +userId: all +media_types: banner, video, native +safeframes_ok: true +floors_supported: true +fpd_supported: true +pbjs: true +pbs: false +prebid_member: false +multiformat_supported: will-bid-on-one +ortb_blocking_supported: true +privacy_sandbox: topics +sidebarType: 1 +--- + +### Note + +The Michao Bidding adapter requires setup before beginning. + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +| ----------- | -------- | ------------ | --------- | --------- | +| `placement` | required | Placement id | `"12345"` | `string` | +| `site` | required | Site id | `6789` | `number` | +| `partner` | optional | Partner id | `6789` | `number` | +| `test` | optional | Test Mode | `true` | `boolean` | + +### First Party Data + +Publishers should use the `ortb2` method of setting [First Party Data](https://docs.prebid.org/features/firstPartyData.html). The following fields are supported: + +- `ortb2.site.*` +- `ortb2.user.*` +- `ortb2.device.*` +- `ortb2.regs.*` + +Example: + +```javascript +pbjs.setBidderConfig({ + bidders: ["michao"], + config: { + ortb2: { + site: { + keywords: "kw1,kw2", + }, + }, + }, +}); +``` + +### ORTB Blocking + +supported: + +- `badv` +- `bcat` +- `bseat` +- `bapp` + +Example: + +```javascript +pbjs.setBidderConfig({ + bidders: ["michao"], + config: { + ortb2: { + badv: ["adomain.com"], + bcat: ["IAB2"], + bapp: ["com.app"], + bseat: ["seat"], + }, + }, +}); +``` + +### Media Types + +#### Video + +The following video parameters are supported here so publishers may fully declare their video inventory. These apply to both instream and outstream. + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +| -------------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | --------------- | +| context | required | instream or outstream | "outstream" | string | +| playerSize | required | width, height of the player in pixels | [640,360] - will be translated to w and h in bid request | array | +| mimes | required | List of content MIME types supported by the player (see openRTB v2.5 for options) | ["video/mp4"] | array | +| protocols | required | Supported video bid response protocol values
1: VAST 1.0
2: VAST 2.0
3: VAST 3.0
4: VAST 1.0 Wrapper
5: VAST 2.0 Wrapper
6: VAST 3.0 Wrapper
7: VAST 4.0
8: VAST 4.0 Wrapper | [2,3,5,6] | array | +| maxduration | recommended | Maximum video ad duration in seconds. | 30 | integer | +| minduration | recommended | Minimum video ad duration in seconds | 6 | integer | +| linearity | recommended | OpenRTB2 linearity. 1: linear (in-stream ad), 2: non-linear (overlay ad) | 1 | integer | +| playbackmethod | recommended | Playback methods that may be in use. Only one method is typically used in practice. (see openRTB v2.5 section 5.10 for options) | [2] | array | +| api | optional | Supported API framework values:
1: VPAID 1.0
2: VPAID 2.0
3: MRAID-1
4: ORMMA
5: MRAID-2 | [2] | array | +| skip | optional | Indicates if the player will allow the video to be skipped, where 0 = no, 1 = yes. | 1 | integer | +| skipafter | optional | Number of seconds a video must play before skipping is enabled; only applicable if the ad is skippable. | 6 | integer | +| minbitrate | optional | Minimum bit rate in Kbps. | 300 | integer | +| maxbitrate | optional | Maximum bit rate in Kbps. | 9600 | integer | +| placement | recommended | Placement type for the impression. (see OpenRTB v2.5 section 5.9 for options) | 1 | integer | +| plcmt | recommended | Placement type for the impression. (See [OpenRTB v2.6](https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/develop/AdCOM%20v1.0%20FINAL.md) Plcmt Subtypes - Video) | 1 | integer | + +Example: + +```javascript +var videoAdUnit = { + code: 'video', + mediaTypes: { + video: { + context: 'instream', + playerSize: [640, 480], + mimes: ['video/mp4'] + protocols: [2, 3, 5, 6], + api: [2], + maxduration: 30, + minduration: 0, + } + }, + bids: [{ + bidder: 'michao', + params: { + site: 123, + placement: "456", + } + }] +}; +``` + +##### Out-stream Video + +Michao adapter supports outstream video renderer in two ways: using your own renderer or using ours on Prebid.org. + +#### Native + +Example: + +```js +var nativeAdUnit = { + code: "myNativeAdUnit", + mediaTypes: { + native: { + ortb: { + assets: [ + { + id: 1, + required: 1, + img: { + type: 3, + w: 150, + h: 50, + }, + }, + { + id: 2, + required: 1, + video: { + minduration: 0, + maxduration: 120, + mimes: ["video/mp4"], + protocols: [8], + }, + }, + ], + }, + }, + }, + bids: [ + { + bidder: "michao", + params: { + site: 123, + placement: "456", + }, + }, + ], +}; +``` diff --git a/dev-docs/bidders/minutemedia.md b/dev-docs/bidders/minutemedia.md index 55c69cf49f..ebc3dbcd90 100644 --- a/dev-docs/bidders/minutemedia.md +++ b/dev-docs/bidders/minutemedia.md @@ -4,7 +4,7 @@ title: MinuteMedia description: Prebid MinuteMedia Bidder Adapter pbjs: true biddercode: minutemedia -media_types: banner, video +media_types: banner, video, native multiformat_supported: will-bid-on-any schain_supported: true tcfeu_supported: true @@ -25,9 +25,10 @@ The MinuteMedia adapter requires setup and approval. Please reach out to = 6.14.0. + +Native >= 9.27.0. + +Multi-format requests >= 9.27.0. diff --git a/dev-docs/bidders/minutemediaplus.md b/dev-docs/bidders/minutemediaplus.md index 68f867d9de..b1d8ef2c0e 100644 --- a/dev-docs/bidders/minutemediaplus.md +++ b/dev-docs/bidders/minutemediaplus.md @@ -21,6 +21,7 @@ ortb_blocking_supported: false multiformat_supported: will-bid-on-one gvl_id: 918 pbjs: true +pbjs_version_notes: removed in 9.0 sidebarType: 1 --- diff --git a/dev-docs/bidders/missena.md b/dev-docs/bidders/missena.md index 480761f0a0..44c17d4a79 100644 --- a/dev-docs/bidders/missena.md +++ b/dev-docs/bidders/missena.md @@ -5,8 +5,11 @@ description: Prebid Missena Bidder Adapter biddercode: missena gvl_id: 867 pbjs: true +pbs: true safeframes_ok: false sidebarType: 1 +pbs_app_supported: true +prebid_member: true --- ### Note @@ -19,3 +22,16 @@ The Missena Bidding adapter requires setup before beginning. Please contact us a | Name | Scope | Description | Example | Type | |------------|----------|----------------------------|-----------------|----------| | `apiKey` | required | Missena's publisher token | `'PA-34745704'` | `string` | +| `placement` | optional | Placement Type, default: 'sticky' | `'sticky'` | `string` | +| `formats` | optional | An array of formats to request (banner, native, or video) | `['banner', 'video']` | `array` | +| `settings` | optional | An object containing extra settings for the Missena adapter | `{ settingName: 'value' }` | `object` | + +#### Available Placement Values + +The `placement` parameter accepts the following values: + +- `sticky` - Default sticky placement +- `header` - Header placement +- `footer` - Static footer placement +- `prestitial` - Full-screen ad before content loads +- `postitial` - Full-screen ad after content loads diff --git a/dev-docs/bidders/mobilefuse.md b/dev-docs/bidders/mobilefuse.md index fb72ad0ade..41e651a6a0 100644 --- a/dev-docs/bidders/mobilefuse.md +++ b/dev-docs/bidders/mobilefuse.md @@ -1,21 +1,28 @@ --- layout: bidder title: MobileFuse -pbs: true -pbjs: false -media_types: banner, video, native -tcfeu_supported: true -gpp_supported: true -schain_supported: true +description: Prebid MobileFuse Bidder Adapter +biddercode: mobilefuse +tcfeu_supported: false +dsa_supported: false +gvl_id: 909 usp_supported: true coppa_supported: true -biddercode: mobilefuse -ccpa_supported: true -prebid_member: true -pbs_app_supported: true +gpp_sids: tcfca, usnat, usstate_all, usp +schain_supported: true +dchain_supported: false +userIds: all +media_types: banner, video +deals_supported: true floors_supported: true -gvl_id: 909 +fpd_supported: false +pbjs: true +pbs: true +pbs_app_supported: true +prebid_member: true +multiformat_supported: will-bid-on-any ortb_blocking_supported: true +privacy_sandbox: no sidebarType: 1 --- @@ -25,4 +32,4 @@ sidebarType: 1 | Name | Scope | Description | Example | Type | | ------------ | -------- | ---------------------------------------------------------- | ------- | ------- | | placement_id | required | An ID which identifies this specific inventory placement | 1111 | integer | -| pub_id | required | An ID which identifies the publisher selling the inventory | 2222 | integer | +| bidfloor | optional | Static floor price (in USD) for the impression, pbjs only | 1.5 | float | diff --git a/dev-docs/bidders/mobkoi.md b/dev-docs/bidders/mobkoi.md new file mode 100644 index 0000000000..40be910862 --- /dev/null +++ b/dev-docs/bidders/mobkoi.md @@ -0,0 +1,121 @@ +--- +layout: bidder +title: Mobkoi +description: Mobkoi Bidder Adapter +biddercode: mobkoi +tcfeu_supported: true +dsa_supported: false +gvl_id: 898 +usp_supported: false +coppa_supported: false +gpp_sids: tcfeu +schain_supported: false +dchain_supported: false +userId: mobkoiId +media_types: banner +safeframes_ok: false +deals_supported: false +floors_supported: false +fpd_supported: true +pbjs: true +pbs: true +prebid_member: false +multiformat_supported: will-bid-on-one +ortb_blocking_supported: partial +privacy_sandbox: no +sidebarType: 1 +--- + +### Note + +The Mobkoi Bidding adapter requires setup and approval before beginning. Please reach out to for +more details. + +### Bid Params + +{: .table .table-bordered .table-striped } +| Path | Scope | Description | Example | Type | +|---------------------------------------------|----------|--------------------------------|---------------------------------------|----------| +| `placementId` | required | Mobkoi Provided Placement ID | `'DF2FFFFF'` | `string` | +| `adServerBaseUrl` | optional | Mobkoi adserver url (PBS only) | `https://adserver.maximus.mobkoi.com` | `string` | + +#### Example Configuration + +```js +const adUnits = [ + { + code: 'banner-ad', + mediaTypes: { + banner: { sizes: [[300, 600]] }, + }, + bids: [ + { + bidder: 'mobkoi', + params: { + placementId: '<-- Placement ID provided by Mobkoi -->', + }, + }, + ], + }, +]; + +pbjs.que.push(function () { + pbjs.addAdUnits(adUnits); +}); +``` + +#### User ID Module Integration + +For optimal targeting and yield, configure the Mobkoi User ID module alongside the bidder adapter. + +**Required modules:** `mobkoiBidAdapter`, `mobkoiIdSystem`, `userId`, `consentManagementTcf`, `tcfControl` + +```js +pbjs.que.push(function () { + // Configuration for enabling the User ID module + pbjs.setConfig({ + userSync: { + userIds: [ + { + name: 'mobkoiId', + storage: { + type: 'cookie', + name: '_mobkoi_id', + expires: 30, // days + }, + }, + ], + }, + }); + + pbjs.addAdUnits(adUnits); +}); +``` + +#### User Sync Configuration (Alternative) + +Alternatively, enable user sync without the User ID module. + +**Required modules:** `mobkoiBidAdapter`, `consentManagementTcf`, `tcfControl` + +```js +pbjs.que.push(function () { + // Configuration for enabling getUserSyncs functionality + pbjs.setConfig({ + userSync: { + filterSettings: { + image: { + bidders: ['mobkoi'], + filter: 'include' + } + } + } + }); + + pbjs.addAdUnits(adUnits); +}); +``` + +#### Additional Resources + +For comprehensive setup guidelines and detailed integration instructions, visit our [complete integration documentation](https://mobkoi.gitbook.io/docs). diff --git a/dev-docs/bidders/monetix.md b/dev-docs/bidders/monetix.md index f03d0e3546..5c8f720fcf 100644 --- a/dev-docs/bidders/monetix.md +++ b/dev-docs/bidders/monetix.md @@ -3,23 +3,28 @@ layout: bidder title: Monetix description: Monetix Adaptor biddercode: monetix -pbjs: true -pbs: false -media_types: banner, native, video -gvl_id: 14 (adkernel) +aliasCode: adkernel tcfeu_supported: true -gpp_sids: tcfeu, usp +dsa_supported: false +gvl_id: 14 (adkernel) usp_supported: true coppa_supported: true -pbs_app_supported: false +gpp_sids: tcfeu, usp schain_supported: true -userIds: all +dchain_supported: false +userId: all +media_types: banner, video, native +safeframes_ok: true +deals_supported: false +floors_supported: true fpd_supported: true +pbjs: true +pbs: false +pbs_app_supported: false prebid_member: false +multiformat_supported: will-bid-on-any ortb_blocking_supported: true -multiformat_supported: will-bid-on-one -floors_supported: true -aliasCode: adkernel +privacy_sandbox: no sidebarType: 1 --- diff --git a/dev-docs/bidders/monetixads.md b/dev-docs/bidders/monetixads.md new file mode 100644 index 0000000000..93512e7449 --- /dev/null +++ b/dev-docs/bidders/monetixads.md @@ -0,0 +1,92 @@ +--- +layout: bidder +title: Monetix Ads +description: Prebid Monetix Bidder Adapter. +pbjs: true +pbs: true +biddercode: monetixads +media_types: banner,video,native +gvl_id: 1281 (admatic) +tcfeu_supported: true +usp_supported: true +coppa_supported: true +gpp_sids: tcfeu, tcfca, usnat, usstate_all, usp +schain_supported: true +dchain_supported: false +userIds: all +safeframes_ok: true +floors_supported: true +aliasCode: admatic +multiformat_supported: will-bid-on-any +sidebarType: 1 +--- + +### Description + +Monetix Ads header bidding adapter connects with Monetix Ads demand sources to fetch bids for network ID. Please reach out to your account manager or for more information. + +### Bid params + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|-------------|----------|-------------------------------------|----------|----------| +| `networkId` | required | The network ID from Monetix Ads | `12345` | `number` | +| `host` | required | RTB Host | `rtb.network.monetixads.com` | `string` | + +### Test Parameters + +300x250 banner test + +```javascript +var adUnits = [{ + code: 'your-slot_1-div', + mediaTypes: { + banner: { sizes: [[300, 250]] }, + }, + bids: [{ + bidder: 'monetixads', + params: { + networkId: 12345, + host: 'rtb.network.monetixads.com' + } + }] +},{ + code: 'your-slot_2-div', + mediaTypes: { + native: { ... }, + }, + bids: [{ + bidder: 'monetixads', + params: { + networkId: 12345, + host: 'rtb.network.monetixads.com' + } + }] +},{ + code: 'your-slot_3-div', + mediaTypes: { + video: { ... }, + }, + bids: [{ + bidder: 'monetixads', + params: { + networkId: 12345, + host: 'rtb.network.monetixads.com' + } + }] +}]; +``` + +### UserSync example + +```javascript +pbjs.setConfig({ + userSync: { + iframeEnabled: true, + syncEnabled: true, + syncDelay: 1, + aliasSyncEnabled: true + } +}); +``` diff --git a/dev-docs/bidders/motionspots.md b/dev-docs/bidders/motionspots.md index 73169217a3..a52359f567 100644 --- a/dev-docs/bidders/motionspots.md +++ b/dev-docs/bidders/motionspots.md @@ -3,23 +3,28 @@ layout: bidder title: Motionspots description: Motionspots Bidder Adaptor biddercode: motionspots -pbjs: true -pbs: false -media_types: banner, native, video -gvl_id: 14 (adkernel) +aliasCode: adkernel tcfeu_supported: true -gpp_supported: true +dsa_supported: false +gvl_id: 14 (adkernel) usp_supported: true coppa_supported: true -pbs_app_supported: true +gpp_sids: tcfeu, usp schain_supported: true -userIds: all +dchain_supported: false +userId: all +media_types: banner, video, native +safeframes_ok: true +deals_supported: false +floors_supported: true fpd_supported: true +pbjs: true +pbs: false +pbs_app_supported: false prebid_member: false +multiformat_supported: will-bid-on-any ortb_blocking_supported: true -multiformat_supported: will-bid-on-one -floors_supported: true -aliasCode: adkernel +privacy_sandbox: no sidebarType: 1 --- diff --git a/dev-docs/bidders/movingup.md b/dev-docs/bidders/movingup.md new file mode 100644 index 0000000000..1b4ddb8e1e --- /dev/null +++ b/dev-docs/bidders/movingup.md @@ -0,0 +1,125 @@ +--- +layout: bidder +title: Moving Up +description: Prebid Moving Up Bidder Adapter +pbjs: true +pbs: true +biddercode: movingup +gvl_id: 1416 +tcfeu_supported: true +usp_supported: true +gpp_supported: true +schain_supported: true +dchain_supported: true +floors_supported: true +userIds: all +tcfeu_supported: true +media_types: banner, video, native +safeframes_ok: true +deals_supported: true +sidebarType: 1 +fpd_supported: true +multiformat_supported: will-bid-on-any + +--- + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|----------------------------|-------------------------------------- |-----------| +| `tagId` | optional | tag ID | `"testnexx"` | `string` | +| `placement` | optional | Placement | `"test"` | `string` | + +For the prebid.js you only need to use one parameter: either tagId or placement + +### First Party Data + +Publishers should use the `ortb2` method of setting [First Party Data](/features/firstPartyData.html). +The following fields are supported: + +* ortb2.site.ext.data.* +* ortb2.site.content.data[] +* ortb2.user.ext.data.* +* ortb2.user.data[] + +### Test Parameters + +```javascript +var adUnits = [ + // Banner adUnit + { + code: 'banner-div', + mediaTypes: { + banner: { + sizes: [[300, 250], [300,600]] + } + }, + bids: [{ + bidder: 'movingup', + params: { + tagId: 'testeasy' + } + }] + }, + // Video adUnit + { + code: 'video1', + mediaTypes: { + video: { + playerSize: [640, 480], + context: 'instream' + } + }, + bids: [{ + bidder: 'movingup', + params: { + tagId: 'testeasy' + } + }] + }, + // Native adUnit + { + code: 'native1', + mediaTypes: + native: { + title: { + required: true + }, + image: { + required: true + }, + sponsoredBy: { + required: true + } + } + }, + bids: [{ + bidder: 'movingup', + params: { + tagId: 'testeasy' + } + }] + }, + // Multiformat Ad + { + code: 'multi1', + mediaTypes: { + video: { + playerSize: [640, 480], + context: 'instream' + }, + banner: { + sizes: [[300, 250], [300,600]] + } + }, + bids: [{ + bidder: 'movingup', + params: { + tagId: 'testeasy', + videoTagId: 'testeasy' + } + }] + }; +]; +``` diff --git a/dev-docs/bidders/msft.md b/dev-docs/bidders/msft.md new file mode 100644 index 0000000000..b79e6ee759 --- /dev/null +++ b/dev-docs/bidders/msft.md @@ -0,0 +1,160 @@ +--- +layout: bidder +title: Microsoft +description: Prebid Microsoft Bidder Adaptor +biddercode: msft +media_types: banner, video, native +tcfeu_supported: true +dsa_supported: true +prebid_member: true +userIds: all (with commercial activation) +schain_supported: true +coppa_supported: true +usp_supported: true +gpp_supported: true +floors_supported: true +fpd_supported: true +pbjs: true +pbjs_version_notes: This adapter is new, and will ultimately replace the AppNexus adapter. We recommend careful monitoring of this replacement, and please communicate any questions or unexpected behavior. +pbs: true +gvl_id: 32 +sidebarType: 1 +--- + +### Table of Contents + +- [Table of Contents](#table-of-contents) + - [Bid Params](#bid-params) + - [Migrating from the AppNexus Bid Adapter & Bid Params](#migration-from-appnexus-bid-params) + - [Migrating from the AppNexus Bid Adapter & Ad Server Targeting](#migration-from-appnexus-adserver-targeting) + - [Migrating from the AppNexus Bid Adapter & Native](#migration-from-appnexus-native) + - [Migrating from the AppNexus Bid Adapter & Auction Level Keywords](#migration-from-appnexus-auction-level-keywords) + - [First Party Data](#first-party-data) + - [Debug Auction](#debug-auction) + +{: .alert.alert-danger :} +This adapter is new, and will ultimately replace the AppNexus adapter. We recommend careful monitoring of this replacement, and please communicate any questions or unexpected behavior. + + + +{: .alert.alert-danger :} +All Microsoft (formerly AppNexus/Xandr) placements included in a single call to `requestBids` must belong to the same parent Publisher. If placements from two different publishers are included in the call, the Microsoft bidder will not return any demand for those placements.
+*Note: This requirement does not apply to adapters that are [aliasing](/dev-docs/publisher-api-reference/aliasBidder.html) the Microsoft adapter.* + +#### Bid Params + +**NOTE** Either `placement_id` OR both `member` and `inv_code` are required. Please don't specify all three together, it may impact delivery. + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|------|-------|-------------|---------|------| +| `placement_id` | required (see note above) | The placement ID from Microsoft Monetize. You may identify a placement using the `inv_code` and `member` instead of a placement ID. | `11223344` | `integer` | +| `member` | required (see note above) | The member ID from Microsoft Monetize. Must be used with `inv_code`. | `1234` | `integer` | +| `inv_code` | required (see note above) | The inventory code from Microsoft Monetize. Must be used with `member`. | `'abc123'` | `string` | +| `allow_smaller_sizes` | optional | If `true`, ads smaller than the values in your ad unit's `sizes` array will be allowed to serve. Defaults to `false`. | `true` | `boolean` | +| `use_pmt_rule` | optional | If `true`, Microsoft Monetize will return net price to Prebid.js after publisher payment rules have been applied. | `true` | `boolean` | +| `keywords` | optional | A comma-delimited string of key-value pairs (or terms) applied to this sepcific ad slot on the page. Mapped to [buy-side segment targeting](https://learn.microsoft.com/en-us/xandr/monetize/segment-targeting) (login required). A maximum of 100 key/value pairs can be defined at the request/page level. Each tag can have up to 100 additional key/value pairs defined. If you want to pass keywords for all adUnits, please use the relevant keywords fields in the First Party Data feature. Note that to use keyword with the Prebid Server adapter, that feature must be enabled for your account by an Microsoft Monetize account manager. | `pet=dog,food,brand=oldroy` | `string` | +| `traffic_source_code` | optional | Specifies the third-party source of this impression. | `'my_traffic_source'` | `string` | +| `pubclick` | optional | Specifies a publisher-supplied URL for third-party click tracking. This is just a placeholder into which the publisher can insert their own click tracker. This parameter should be used for an unencoded tracker. This parameter is expected to be the last parameter in the URL. Please note that the click tracker placed in this parameter will only fire if the creative winning the auction is using Microsoft Monetize click tracking properly. | `'http://click.adserver.com/'` | `string` | +| `ext_inv_code` | optional | Specifies predefined value passed on the query string that can be used in reporting. The value must be entered into the system before it is logged. | `'10039'` | `string` | +| `ext_imp_id` | optional | Specifies the unique identifier of an externally generated auction. | `'bacbab02626452b097f6030b3c89ac05'` | `string` | +| `banner_frameworks` | optional | Array of integers listing API frameworks for Banner supported by the publisher. | `[1,2]` | `array of integers` | + + + +#### Migrating from the AppNexus Bid Adapter & Bid Params + +If you are migrating from the AppNexus bid adapter, a number of the previously available AppNexus bid parameters have been deprecated as available options for the Microsoft bid parameters. These deprecated bid parameters are still available however, they're just read from other standarized locations offered within Prebid.js. This change was implemented to help us align better to the publisher-aligned features (such as First Party Data) to use a single setup for many bidders. + +The following table shows how the bid parameters have changed between the two adapters: + +{: .table .table-bordered .table-striped } + +| AppNexus Parameter | Microsoft Parameter | Description | +|-------------------|-------------------|-------------| +| `params.placementId` | `params.placement_id` | Placement ID (**only** the underscore case is now supported in the name, value **only** accepts integers) | +| `params.member` | `params.member` | Member ID (value **only** accepts integers) | +| `params.inv_code` | `params.inv_code` | Inventory code (unchanged) | +| `params.publisher_id` | Use `ortb2.publisher.id` | Publisher ID (moved to ortb2 config) | +| `params.frameworks` | `params.banner_frameworks` | Banner API frameworks array (small name change to clarify banner only) | +| `params.user` | Use `ortb2.user` | User data (moved to ortb2 config) | +| `params.allow_smaller_sizes` | `params.allow_smaller_sizes` | Allow smaller ad sizes (unchanged) | +| `params.use_pmt_rule` | `params.use_pmt_rule` | Use payment rule (unchanged) | +| `params.keywords` | `params.keywords` | Tag/Imp-level keywords (use ORTB format of comma-delimited string value; eg `'pet=cat,food,brand=fancyfeast'`) | +| `params.video` | Use `mediaTypes.video` | Video parameters (moved to mediaTypes) | +| `params.video.frameworks` | Use `mediaTypes.video.api` | Video API frameworks (moved to mediaTypes) | +| `params.app` | Use `ortb2.app` | App data (moved to ortb2 config) | +| `params.reserve` | Use bidfloor module | Reserve price (use bidfloor module) | +| `params.position` | Use `mediaTypes.banner.pos` | Banner position (moved to mediaTypes) | +| `params.traffic_source_code` | `params.traffic_source_code` | Traffic source code (unchanged) | +| `params.supply_type` | Use `ortb2.site` or `ortb2.app` | Supply type (moved to ortb2 config) | +| `params.pub_click` | `params.pubclick` | Publisher click URL (dropped underscore to align to endpoint) | +| `params.ext_inv_code` | `params.ext_inv_code` | External inventory code (unchanged) | +| `params.external_imp_id` | `params.ext_imp_id` | External impression ID (shortend to ext) | + + + +#### Migrating from the AppNexus Bid Adapter & Ad Server Targeting + +If you are migrating from the AppNexus bid adapter and your Ad Server Line Items (or related entities) relied on bidder specific keyword targeting to the Prebid.js keys (eg hb_bidder=appnexus or hb_pb_appnexus=5.00), you will like need to adjust your setup. Some adjustments could be creating additional line-items, updating the existing targeting, reomving targeting (if it's no longer needed), or some other variation to ensure the targeting includes the `msft` term in either the key-name or key-value. + + + +#### Migrating from the AppNexus Bid Adapter & Native Ads + +If you are migrating from the AppNexus bid adapter, the setup for Native adUnits now require the use of the Prebid.js ORTB Native setup. The Microsoft Bid Adapter **no longer offers support** to the legacy Prebid.js Native adUnit setup. + +Requests using that legacy approach will **NOT** work and will need to be converted to the equivalent values in the adUnit. This change is made to better align with Prebid.js and many other Bid Adapters that support Native in an ORTB context. + +Please refer to the [Prebid.js Native Implementation Guide](https://docs.prebid.org/prebid/native-implementation.html) if you need additional information to implement the Native ORTB setup. + + + +#### Migrating from the AppNexus Bid Adapter & Auction Level Keywords + +If you are migrating from the AppNexus bid adapter, the previously available `setConfig` option named `appnexusAuctionKeywords` is not supported within the Microsoft bid adapter. + +If you need to specify keyword-like data at the auction/request level, please instead specify that data within the appropriate area of the First Party Data section of your setup (eg `ortb2.site.keywords`). If you wish to set bidder-specific First Party Data data, please refer to this [page](https://docs.prebid.org/features/firstPartyData.html#supplying-bidder-specific-data). + + + +#### First Party Data + +Publishers should use the `ortb2` method of setting [First Party Data](https://docs.prebid.org/features/firstPartyData.html). + +PBS/PSP supports all first party data fields: site, user, segments, and imp-level first party data. + + + +#### Debug Auction + +{: .alert.alert-danger :} +Enabling the Microsoft Monetize Debug Auction feature should only be done for diagnosing the Monetize auction. Do **NOT** enable this feature in a production setting where it may impact users. The debug output will take the place of the normal bid response, meaning the ad will **NOT** show even if the auction debug output indicated there was a winning bid. + +To understand what is happening behind the scenes during an auction, you can enable a debug auction by either adding an `apn_prebid_debug` cookie with a JSON string or add certain key-value pairs in the page URL's query string. + +To use the cookie approach, the JSON payload for the cookie could look like: + +```javascript +{ "enabled": true, "dongle": "QWERTY", "debug_timeout": 1000, "member_id": 958 } +``` + +**NOTE** If you use this approach, you may need to grant permission to the msft Bid Adapter in the your Prebid.js config storageAllowed settings, otherwise Prebid.js will block the adapter from attempting to find/read the cookie. + +To use the page URL query string approach, you can append the following set of `apn_debug_...` key-value pairs to the existing page URL's query string: +`html +https://my.site.com/page/stuff.html?normal=data_here&apn_debug_enabled=true&apn_debug_dongle=QWERTY&apn_debug_member_id=958&apn_debug_timeout=1000` + +To view the results of the debug auction, add the `pbjs_debug=true` query string parameter and open your browser's developer console. + +{: .table .table-bordered .table-striped } + +| Name | Description | Example | Type | +|-------------------|-----------------------------------------------------------------|-----------------------|------------------| +| `enabled` | Toggle the debug auction to occur | `true` | `boolean` | +| `dongle` | Your account's unique debug password. | `QWERTY` | `string` | +| `member_id` | The ID of the member running the debug auction | `958` | `integer` | +| `debug_timeout` | The timeout for the debug auction results to be returned | `3000` | `integer` | + + diff --git a/dev-docs/bidders/mytarget.md b/dev-docs/bidders/mytarget.md index a10bf209fe..854ab029d5 100644 --- a/dev-docs/bidders/mytarget.md +++ b/dev-docs/bidders/mytarget.md @@ -4,6 +4,7 @@ title: myTarget description: Prebid myTarget Bidder Adapter pbjs: true biddercode: mytarget +pbjs_version_notes: removed in 9.0 sidebarType: 1 --- diff --git a/dev-docs/bidders/nativery.md b/dev-docs/bidders/nativery.md new file mode 100644 index 0000000000..007a3a0d19 --- /dev/null +++ b/dev-docs/bidders/nativery.md @@ -0,0 +1,37 @@ +--- +layout: bidder +title: Nativery +description: Prebid Nativery Bidder Adapter +biddercode: nativery +tcfeu_supported: true +gvl_id: 1133 +usp_supported: false +coppa_supported: false +gpp_sids: false +schain_supported: true +dchain_supported: false +userId: +media_types: banner, video, native +safeframes_ok: true +deals_supported: false +floors_supported: false +fpd_supported: true +pbjs: true +pbs: true +pbs_app_supported: true +prebid_member: false +multiformat_supported: will-bid-on-any +ortb_blocking_supported: false +privacy_sandbox: no +--- + +### Registration + +The Nativery Bidding adapter requires setup before beginning. Please contact us at + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|--------------|-----------|----------| +| `widgetId` | required | Widget ID | `'680f3e6326ef69d8ad04b6f6'` | `string` | diff --git a/dev-docs/bidders/nativo.md b/dev-docs/bidders/nativo.md index c330ead57a..faf18bf1f2 100644 --- a/dev-docs/bidders/nativo.md +++ b/dev-docs/bidders/nativo.md @@ -4,12 +4,16 @@ title: Nativo description: Prebid Nativo Bidder Adapter pbjs: true pbs: true +media_types: banner, native, video +multiformat_supported: will-bid-on-one +floors_supported: true gvl_id: 263 tcfeu_supported: true usp_supported: true userIds: all biddercode: nativo sidebarType: 1 +privacy_sandbox: topics --- ### Note @@ -18,8 +22,22 @@ The Nativo Bidder adapter requires setup before beginning. Please contact us at ### Bid Params +#### Prebid Server + +Prebid Server primarily relies on the OpenRTB specification for its field definitions, along with widely recognized extensions that have become semi-standard within the industry. + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|------------------------------|-------------------------------------|----------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------|-----------| +| `imp.tagid` | required - preferred | Represents the Ad Slot Tag ID, which is the primary identifier linked to a specific placement ID within the Nativo platform. Read more about [tagid in the oRTB 2.6 docs](https://github.com/InteractiveAdvertisingBureau/openrtb2.x/blob/main/2.6.md#324---object-imp-) | `placement_tagid_example` | `string` | +| `imp.ext.nativo.placementId` | required if no tagID | Refers to the unique Placement ID assigned by the Nativo platform. | `12345678` | `integer` | +| `imp.ext.gpid` | required if no other ID is provided | Represents the Ad Slot GP ID. It is another layer of identification tied to a placement ID within the Nativo platform. Read more about [gpid in the prebid docs](/features/pbAdSlot.html#the-gpid) | `/22888152279/publication/placement/gpid_example` | `string` | + +#### Prebid JS + {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|---------------------------------------------------------------------------------|--------------|-----------| -| `placementId` | optional | Publication placement ID value from the Nativo Platform | `13144370` | `integer` | -| `url` | optional | Publication url value associated with placement ID value in the Nativo Platform | `https://test-sites.internal.nativo.net/testing/prebid_adpater.html` | `string` | + | Name | Scope | Description | Example | Type | + |---------------|----------|---------------------------------------------------------------------------------|--------------|-----------| + | `placementId` | required | Publication placement ID value from the Nativo Platform | `13144370` | `integer` | + | `url` | optional | Publication url value associated with placement ID value in the Nativo Platform | `https://test-sites.internal.nativo.net/testing/prebid_adpater.html` | `string` | + \ No newline at end of file diff --git a/dev-docs/bidders/netaddiction.md b/dev-docs/bidders/netaddiction.md new file mode 100644 index 0000000000..3a1a8e702b --- /dev/null +++ b/dev-docs/bidders/netaddiction.md @@ -0,0 +1,92 @@ +--- +layout: bidder +title: NetAddiction +description: Prebid NetAddiction Bidder Adapter. +pbjs: true +pbs: true +biddercode: netaddiction +media_types: banner,video,native +gvl_id: 1281 (admatic) +tcfeu_supported: true +usp_supported: true +coppa_supported: true +gpp_sids: tcfeu, tcfca, usnat, usstate_all, usp +schain_supported: true +dchain_supported: false +userIds: all +safeframes_ok: true +floors_supported: true +aliasCode: admatic +multiformat_supported: will-bid-on-any +sidebarType: 1 +--- + +### Description + +NetAddiction header bidding adapter connects with NetAddiction demand sources to fetch bids for network ID. Please reach out to your account manager or for more information. + +### Bid params + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|-------------|----------|-------------------------------------|----------|----------| +| `networkId` | required | The network ID from NetAddiction | `12345` | `number` | +| `host` | required | RTB Host | `netaddiction.rtb.netaddiction.tech` | `string` | + +### Test Parameters + +300x250 banner test + +```javascript +var adUnits = [{ + code: 'your-slot_1-div', + mediaTypes: { + banner: { sizes: [[300, 250]] }, + }, + bids: [{ + bidder: 'netaddiction', + params: { + networkId: 12345, + host: 'rtb.network.netaddiction.tech' + } + }] +},{ + code: 'your-slot_2-div', + mediaTypes: { + native: { ... }, + }, + bids: [{ + bidder: 'netaddiction', + params: { + networkId: 12345, + host: 'rtb.network.netaddiction.tech' + } + }] +},{ + code: 'your-slot_3-div', + mediaTypes: { + video: { ... }, + }, + bids: [{ + bidder: 'netaddiction', + params: { + networkId: 12345, + host: 'rtb.network.netaddiction.tech' + } + }] +}]; +``` + +### UserSync example + +```javascript +pbjs.setConfig({ + userSync: { + iframeEnabled: true, + syncEnabled: true, + syncDelay: 1, + aliasSyncEnabled: true + } +}); +``` diff --git a/dev-docs/bidders/newdream.md b/dev-docs/bidders/newdream.md new file mode 100644 index 0000000000..9f21671e65 --- /dev/null +++ b/dev-docs/bidders/newdream.md @@ -0,0 +1,178 @@ +--- +layout: bidder +title: Newdream +description: Prebid Newdream Bidder Adapter +biddercode: newdream +aliasCode : appnexus +media_types: video,banner,native +tcfeu_supported: true +dsa_supported: true +prebid_member: true +userIds: all (with commercial activation) +schain_supported: true +coppa_supported: true +usp_supported: true +floors_supported: true +fpd_supported: false +pbjs: true +pbs: true +gvl_id: 32 +sidebarType: 1 +--- + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|-------------|---------|----------| +| `placementId` | required | | | `string` | +| `randomKey` | optional | | | `string` | +| `invCode` | optional | | | `string` | +| `member` | optional | | | `string` | + +Newdream is an aliased bidder for AppNexus + +### Prebid Server Note + +{% include dev-docs/pbjs-adapter-required-for-pbs.md %} + +#### Prebid Server Test Request + +The following test parameters can be used to verify that Prebid Server is working properly with the server-side Newdream adapter. This example includes an Newdream test placement ID and sizes that would match with the test creative. + +```javascript +var adUnits = [ + // Banner adUnit + { + code: 'banner-div', + mediaTypes: { + banner: { + sizes: [[300, 250], [300,600]] + } + }, + bids: [{ + bidder: 'newdream', + params: { + placementId: 13144370 + } + }] + }, + // Native adUnit + { + code: 'native-div', + sizes: [[1, 1]], + mediaTypes: { + native: { + title: { + required: true + }, + body: { + required: true + }, + image: { + required: true + }, + sponsoredBy: { + required: true + }, + icon: { + required: false + } + } + }, + bids: [{ + bidder: 'newdream', + params: { + placementId: 13232354, + allowSmallerSizes: true + } + }] + }, + // Video instream adUnit + { + code: 'video-instream', + sizes: [[640, 480]], + mediaTypes: { + video: { + playerSize: [[640, 480]], + context: 'instream' + }, + }, + bids: [{ + bidder: 'newdream', + params: { + placementId: 13232361, + video: { + skippable: true, + playback_methods: ['auto_play_sound_off'] + } + } + }] + }, + // Video outstream adUnit + { + code: 'video-outstream', + sizes: [[300, 250]], + mediaTypes: { + video: { + playerSize: [[300, 250]], + context: 'outstream', + // Certain ORTB 2.5 video values can be read from the mediatypes object; below are examples of supported params. + // To note - mediafuse supports additional values for our system that are not part of the ORTB spec. If you want + // to use these values, they will have to be declared in the bids[].params.video object instead using the mediafuse syntax. + // Between the corresponding values of the mediaTypes.video and params.video objects, the properties in params.video will + // take precedence if declared; eg in the example below, the `skippable: true` setting will be used instead of the `skip: 0`. + minduration: 1, + maxduration: 60, + skip: 0, // 1 - true, 0 - false + skipafter: 5, + playbackmethod: [2], // note - we only support options 1-4 at this time + api: [1,2,3] // note - option 6 is not supported at this time + } + }, + bids: [ + { + bidder: 'newdream', + params: { + placementId: 13232385, + video: { + skippable: true, + playback_method: 'auto_play_sound_off' + } + } + } + ] + }, + // Banner adUnit in a App Webview + // Only use this for situations where prebid.js is in a webview of an App + // See Prebid Mobile for displaying ads via an SDK + { + code: 'banner-div', + mediaTypes: { + banner: { + sizes: [[300, 250], [300,600]] + } + } + bids: [{ + bidder: 'newdream', + params: { + placementId: 13144370, + app: { + id: "B1O2W3M4AN.com.prebid.webview", + geo: { + lat: 40.0964439, + lng: -75.3009142 + }, + device_id: { + idfa: "4D12078D-3246-4DA4-AD5E-7610481E7AE", // Apple advertising identifier + aaid: "38400000-8cf0-11bd-b23e-10b96e40000d", // Android advertising identifier + md5udid: "5756ae9022b2ea1e47d84fead75220c8", // MD5 hash of the ANDROID_ID + sha1udid: "4DFAA92388699AC6539885AEF1719293879985BF", // SHA1 hash of the ANDROID_ID + windowsadid: "750c6be243f1c4b5c9912b95a5742fc5" // Windows advertising identifier + } + } + } + }] + } +]; +``` diff --git a/dev-docs/bidders/newspassid.md b/dev-docs/bidders/newspassid.md index 1cddd2f8a3..6678841260 100644 --- a/dev-docs/bidders/newspassid.md +++ b/dev-docs/bidders/newspassid.md @@ -1,22 +1,19 @@ --- -Module Name: NewspassId Bidder Adapter -Module Type: Bidder Adapter -Maintainer: techsupport@newspassid.com layout: bidder -title: Newspass ID -description: LMC Newspass ID Prebid JS Bidder Adapter +title: NewsPassID +description: Local Media Consortium's NewsPassID Prebid JS Bidder Adapter biddercode: newspassid -tcfeu_supported: false -gvl_id: none +media_types: banner, video, native +gvl_id: 1317 +tcfeu_supported: true usp_supported: true -coppa_supported: false +coppa_supported: true +gpp_supported: true schain_supported: true -dchain_supported: false -userIds: criteo, id5Id, tdid, identityLink, liveIntentId, parrableId, pubCommonId, lotamePanoramaId, sharedId, fabrickId -media_types: banner +userIds: all safeframes_ok: true -deals_supported: true -floors_supported: false +deals_supported: false +floors_supported: true fpd_supported: false pbjs: true pbs: false @@ -27,10 +24,9 @@ sidebarType: 1 ### Description -LMC Newspass ID Prebid JS Bidder Adapter that connects to the NewspassId demand source(s). +LMC NewsPassID Prebid JS Bidder Adapter that connects to the NewsPassID demand source(s). Learn more about the NewsPassID initiative [here](https://www.newspassid.com). -The Newspass bid adapter supports Banner mediaTypes ONLY. -This is intended for USA audiences only, and does not support GDPR +This requires setup on the NewsPassID provider's end before beginning. Don't hesitate to reach out at . ### Bid Params @@ -38,37 +34,46 @@ This is intended for USA audiences only, and does not support GDPR | Name | Scope | Description | Example | Type | |-----------|----------|---------------------------|------------|----------| -| `siteId` | required | The site ID. | `"NPID0000001"` | `string` | -| `publisherId` | required | The publisher ID. | `"4204204201"` | `string` | -| `placementId` | required | The placement ID. | `"0420420421"` | `string` | -| `customData` | optional | publisher key-values used for targeting | `[{"settings":{},"targeting":{"key1": "value1", "key2": "value2"}}],` | `array` | +| `publisherId` | required | The publisher ID in the NewsPassID backend. | `"test-publisher"` | `string` | +| `placementId` | required | The placement ID in the NewsPassID backend. | `"test-group1"` | `string` | -### Test Parameters +### Integration -A test ad unit that will consistently return test creatives: +#### Step 1: Configure NewsPassID publisher ID in global pbjs config to enable user syncs (Recommended) ```javascript -//Banner adUnit - -const adUnits = [{ - code: 'id-of-your-banner-div', - mediaTypes: { - banner: { - sizes: [[300, 250], [300,600]] - } - }, - bids: [{ - bidder: 'newspassid', - params: { - publisherId: 'NEWSPASS0001', /* an ID to identify the publisher account - required */ - siteId: '4204204201', /* An ID used to identify a site within a publisher account - required */ - placementId: '8000000015', /* an ID used to identify the piece of inventory - required - for appnexus test use 13144370. */ - customData: [{"settings": {}, "targeting": {"key": "value", "key2": ["value1", "value2"]}}],/* optional array with 'targeting' placeholder for passing publisher specific key-values for targeting. */ - } - }] - }]; +window.pbjs = window.pbjs || { que: [] }; +window.pbjs.que.push(function() { + window.pbjs.setConfig({ + newspassid: { + publisherId: 'test-publisher' + } + }); +}); ``` -### Note +#### Step 2: Add the `newspassid` bidder and params to your ad unit(s) + +```javascript +const adUnits = [ + { + code: 'id-of-your-banner-div', + mediaTypes: { + banner: { + sizes: [[300, 250]] + } + }, + bids: [ + { + bidder: 'newspassid', + params: { + publisherId: 'test-publisher', /* an ID to identify the publisher account - required if you skip step 1 */ + placementId: 'test-group1' /* An ID used to identify the ad placement configuration - required */ + } + } + ] + } +]; +``` -Please contact us at for any assistance testing your implementation before going live into production. +The `publisherId` and `placementId` are the only params needed for all media types we support. These values are setup by the LMC partnership before you begin. diff --git a/dev-docs/bidders/nextMillennium.md b/dev-docs/bidders/nextMillennium.md index afc72fa9c5..d6aba1a174 100644 --- a/dev-docs/bidders/nextMillennium.md +++ b/dev-docs/bidders/nextMillennium.md @@ -5,10 +5,10 @@ description: NextMillennium bid adapter gvl_id: dev-docs/bidders/nextMillennium.md tcfeu_supported: true usp_supported: true -coppa_supported: false -schain_supported: false +coppa_supported: true +schain_supported: true dchain_supported: false -safeframes_ok: false +safeframes_ok: true deals_supported: false floors_supported: false fpd_supported: false @@ -24,10 +24,12 @@ sidebarType: 1 ### Bid Params {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|----------------+-------+-----------------------------------+-----------+---------| -| `placement_id` | required | Placement ID, provided by nextMillennium | `'12345'` | String | -| `group_id` | optional | Group ID, provided by nextMillennium | `'12345'` | String | +| Name | Scope | Description | Example | Type | +|----------------+----------+------------------------------------------+-----------------+-----------------| +| `placement_id` | optional | Placement ID, provided by nextMillennium | `'12345'` | String | +| `group_id` | optional | Group ID, provided by nextMillennium | `'12345'` | String | +| `adSlots` | optional | `adSlots` is a specific location or container on a webpage where an advertisement is displayed. | `["stickytop"]` | Array of String | +| `allowedAds` | optional | `allowedAds` is a list of ad types or formats that are permitted to be shown in a specific ad slot. | `["skin"]` | Array of String | Required one of the two parameters placement_id or group_id. @@ -65,17 +67,60 @@ pbjs.setConfig({ }); ``` -#### OpenRTB 2.5 supported parameters +#### OpenRTB 2.6 supported parameters The adapter for Prebid.js supports the following options: * `site.pagecat` +* `site.keywords` +* `site.name` +* `site.cattax` +* `site.cat` +* `site.sectioncat` +* `site.search` +* `site.mobile` +* `site.privacypolicy` +* `site.kwarray` * `site.content.cat` * `site.content.language` -* `device.sua'` -* `site.keywords'` -* `site.content.keywords'` -* `user.keywords'` +* `site.content.keywords` +* `site.publisher.id` +* `site.publisher.name` +* `site.publisher.cattax` +* `site.publisher.cat` +* `site.publisher.domain` +* `device.sua` +* `device.ip` +* `device.ipv6` +* `device.dnt` +* `device.lmt` +* `device.devicetype` +* `device.make` +* `device.model` +* `device.os` +* `device.osv` +* `device.hwv` +* `device.geo.lat` +* `device.geo.lon` +* `device.geo.type` +* `device.geo.accuracy` +* `device.geo.lastfix` +* `device.geo.ipservice` +* `device.geo.country` +* `device.geo.region` +* `device.geo.regionfips104` +* `device.geo.metro` +* `device.geo.city` +* `device.geo.zip` +* `device.geo.utcoffset` +* `device.language` +* `device.langb` +* `user.keywords` +* `bcat` +* `badv` +* `wlang` +* `wlangb` +* `cattax` You can set these parameters through the Prebid.js configuration setup functions: [pbjs.setConfig](https://docs.prebid.org/dev-docs/publisher-api-reference/setConfig.html) or [pbjs.setBidderConfig](https://docs.prebid.org/dev-docs/publisher-api-reference/setBidderConfig.html). An example of setting openrtb parameters for the entire prebid.js script. @@ -112,3 +157,51 @@ pbjs.setBidderConfig({ } }); ``` + +#### Support for OpenRTB 2.6 parameters at the Ad Units level + +* `displaymanager` +* `displaymanagerver` +* `instl` +* `banner.btype` +* `banner.battr` +* `banner.mimes` +* `banner.topframe` +* `banner.expdir` +* `banner.api` +* `banner.format` +* `video.rqddurs` +* `video.battr` +* `video.maxextended` +* `video.minbitrate` +* `video.maxbitrate` +* `video.boxingallowed` +* `video.api` +* `video.companiontype` + +Example of setting OpenRTB parameters at the Ad Units level: + +```javascript +pbjs.addAdUnits({ + code: 'Some-Ad-Unit', + mediaTypes: { + banner: { + sizes: [[300, 250]], + }, + }, + + ortb2Imp: { + mimes: ['image/jpeg', 'image/png'], + }, + + bids: [ + { + bidder: 'nextMillennium', + params: { + placement_id: 13234567, + }, + }, + ], +}); + +``` diff --git a/dev-docs/bidders/nexverse.md b/dev-docs/bidders/nexverse.md new file mode 100644 index 0000000000..b652987e37 --- /dev/null +++ b/dev-docs/bidders/nexverse.md @@ -0,0 +1,80 @@ +--- +layout: bidder +title: Nexverse +description: Prebid Nexverse Bidder Adapter +biddercode: nexverse +tcfeu_supported: false +dsa_supported: true +gvl_id: none +usp_supported: true +coppa_supported: true +schain_supported: true +dchain_supported: false +userId: all +media_types: banner, video, native +safeframes_ok: true +deals_supported: true +floors_supported: true +fpd_supported: true +pbjs: true +pbs: false +prebid_member: false +multiformat_supported: will-bid-on-one +ortb_blocking_supported: false +privacy_sandbox: no +sidebarType: 1 +--- + + +### Nexverse Adapter + +The Nexverse adapter requires some initial setup. For assistance or setup instructions, please contact us at [support@nexverse.ai](mailto:support@nexverse.ai). + +### Supported Media Types + +The Nexverse adapter supports the following media types: + +- Banner +- Video +- Native + +### Configuration + +To configure the Nexverse adapter, you will need the following parameters: + +| Name | Scope | Description | Example | Type | +|--------|----------|--------------------------|------------|--------| +| uid | required | Publisher's unique ID | "12345" | string | +| pubId | required | Publisher ID | "54321" | string | +| pubEpid | optional | Publisher's unique EPID | "epid123" | string | + +### Test Parameters + +You can test the Nexverse adapter with the following test parameters: + +```javascript +var adUnits = [ + { + code: 'div-ad-1', + mediaTypes: { + banner: { + sizes: [[300, 250], [320, 50]], + }, + }, + bids: [ + { + bidder: 'nexverse', + params: { + uid: '12345', + pubId: '54321', + pubEpid: 'epid123', + }, + }, + ], + }, +]; +``` + +### GDPR, CCPA, COPPA Support + +Nexverse complies with GDPR, CCPA, and COPPA regulations. If you have further questions regarding compliance, feel free to reach out to us. diff --git a/dev-docs/bidders/nexx360.md b/dev-docs/bidders/nexx360.md index 089eeedd47..a1a073992b 100644 --- a/dev-docs/bidders/nexx360.md +++ b/dev-docs/bidders/nexx360.md @@ -3,29 +3,33 @@ layout: bidder title: Nexx360 description: Prebid Nexx360 Bidder Adapter pbjs: true +pbs: true biddercode: nexx360 -tcfeu_supported: true +gvl_id: 965 usp_supported: true +gpp_sids: tcfeu schain_supported: true +dchain_supported: false floors_supported: true userIds: all -tcf2_supported: true +tcfeu_supported: true media_types: banner, video, native -gvl_id: 965 -pbs: false +safeframes_ok: true +deals_supported: true sidebarType: 1 +fpd_supported: true +multiformat_supported: will-bid-on-any --- - ### Bid Params {: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | |---------------|----------|----------------------------|-------------------------------------- |-----------| -| `tagId` | required | Nexx360 tag ID | `"luvxjvgn"` | `string` | -| `videoTagId` | optional | Nexx360 Video tag ID | `"luvxjvgn"` | `string` | -| `nativeTagId` | optional | Nexx360 Native tag ID | `"luvxjvgn"` | `string` | +| `tagId` | required | Nexx360 tag ID | `"testnexx"` | `string` | +| `videoTagId` | optional | Nexx360 Video tag ID | `"testnexx"` | `string` | +| `nativeTagId` | optional | Nexx360 Native tag ID | `"testnexx"` | `string` | | `allBids` | optional | Return all bids | `true` | `boolean` | | `divId` | optional | divId linked to adUnit | `"div-1"` | `string` | | `adUnitName` | optional | A code to identify adUnit | `"header-ad"` | `string` | @@ -35,6 +39,8 @@ sidebarType: 1 You can allow writing in localStorage `pbjs.bidderSettings` for the bidder `nexx360` +{% include dev-docs/storageAllowed.md %} + ```javascript pbjs.bidderSettings = { nexx360: { @@ -62,7 +68,7 @@ var adUnits = [ bids: [{ bidder: 'nexx360', params: { - tagId: 'luvxjvgn' + tagId: 'testnexx' } }] }, @@ -78,7 +84,7 @@ var adUnits = [ bids: [{ bidder: 'nexx360', params: { - tagId: 'luvxjvgn' + tagId: 'testnexx' } }] }, @@ -101,7 +107,7 @@ var adUnits = [ bids: [{ bidder: 'nexx360', params: { - tagId: 'luvxjvgn' + tagId: 'testnexx' } }] }, @@ -123,8 +129,8 @@ var adUnits = [ bids: [{ bidder: 'nexx360', params: { - tagId: 'luvxjvgn', - videoTagId: 'luvxjvgn' + tagId: 'testnexx', + videoTagId: 'testnexx' } }] }; diff --git a/dev-docs/bidders/ogury.md b/dev-docs/bidders/ogury.md index e80db70e7e..c6407a2a4b 100644 --- a/dev-docs/bidders/ogury.md +++ b/dev-docs/bidders/ogury.md @@ -14,32 +14,107 @@ media_types: banner safeframes_ok: false deals_supported: false pbjs: true -pbs: false +pbs: true +pbs_app_supported: true prebid_member: false sidebarType: 1 +gpp_sids: tcfeu, usnat, usstate_all --- ### Registration - Before Ogury's adapter integration, you have to register an account in the Ogury Platform. Please contact if you're interested in a partnership. +Before Ogury's adapter integration, you have to register an account in the Ogury Platform. Please contact if you're interested in a partnership. If you already have an account you'll need to register your websites (= assets) and the placements (= ad units) within the Platform. Alternatively reach out to your POC within Ogury to assist you with the placement creation. A detailed overview about the integration process can be found in [this documentation](https://ogury-ltd.gitbook.io/mobile-web/header-bidding/ogury-prebid.js-adapter-integration). After this registration, you will receive the Asset IDs and Ad Unit IDs to start the integration. -### Mandatory bid Params +### Bid Params -The minimal list of bid params is: +This is the minimal list of params for integrating with Ogury: {: .table .table-bordered .table-striped } + | Name | Scope | Description | Example | Type | |---------------|----------|-----------------------|-----------|-----------| | `assetKey` | required | The asset key provided by Ogury | `'OGY-CA41D116484F'` | `string` | | `adUnitId` | required | Your ad unit id configured with Ogury | `'2c4d61d0-90aa-0139-0cda-0242ac120004'` | `string` | +NOTE: You don't need these params to integrate with Ogury, see [inventory mapping](#inventory-mapping) + +#### First Party Data + +Publishers can use the `ortb2` method of setting [First Party Data](https://docs.prebid.org/features/firstPartyData.html). +The following fields are supported: + +* ortb2.site.publisher.id + +this will be used with the inventory mapping method of integrating with Ogury. + +### Bidder config +There are two ways to integrate with Ogury ad server, via the "bid params" i.e. `assetKey/adUnitId` or via inventory mapping. + +#### With bid params +Use this example configuration for enabling Ogury ad server integration on a specific ad unit: + +```javascript + pbjs.que.push(function () { + pbjs.addAdUnits([ + { + code: 'example-ad-unit-code', + mediaTypes: {banner: {sizes: [[1, 1]]} // example sizes + }, + bids: [ + { + bidder: 'ogury', + params: { + assetKey: '$OGURY_ASSET_KEY', + adUnitId: '$OGURY_AD_UNIT_ID', + }, + } + ] + // rest of bidders + } + // rest of ad units + ]) +}) + +``` + +#### Inventory mapping + +_"Inventory mapping" is only available for request coming from **web**. For **in-app** request use the "bid param" integration method._ + +_Note: If you choose inventory mapping, you can skip specifying assetKey and adUnitId per ad unit._ + +With inventory mapping you don't need to setup `assetKey/adUnitId` for every ad unit that you want to integrate. You use a single `id` and provide Ogury with list of sites and `ad_unit_code`s that you want to integrate and the mapping will be done on our side. +The example configuration for this type of integration looks like this: + +```javascript +pbjs.que.push(function () { + // setup publisherId for ogury + pbjs.setBidderConfig({ + bidders: ['ogury'], + config: { + ortb2: { + site: { + publisher: { + id: '$OGURY_PUBLISHER_ID', + }, + } + } + } + }) +}) +```` + +`$OGURY_PUBLISHER_ID` is a Ogury provided id. + ### Optional bid Params Depending on your advertising format needs, other optional parameters can be used. Supported parameters are detailed [here](https://ogury-ltd.gitbook.io/mobile-web/header-bidding/ogury-prebid.js-adapter-integration#optional-configuration). -## How to contact us +### Contact information -If you have any technical concerns or questions about the adapter, please contact . +* For platform registration and partnership questions: +* For technical or integration issues with the adapter: +* For technical issues with Prebid Server: diff --git a/dev-docs/bidders/omnidex.md b/dev-docs/bidders/omnidex.md new file mode 100644 index 0000000000..6a880c22fc --- /dev/null +++ b/dev-docs/bidders/omnidex.md @@ -0,0 +1,80 @@ +--- +layout: bidder +title: Omnidex +description: Prebid Omnidex Bidder Adaptor +biddercode: omnidex +filename: omnidexBidAdapter +userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId +tcfeu_supported: false +usp_supported: true +coppa_supported: false +schain_supported: true +gpp_supported: true +floors_supported: true +media_types: banner, video +prebid_member: false +safeframes_ok: false +deals_supported: false +pbs_app_supported: false +fpd_supported: false +ortb_blocking_supported: false +multiformat_supported: will-bid-on-one +pbjs: true +pbs: true +sidebarType: 1 +--- + +### Bid Params for Prebid.js + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|------------|----------|------------------------------------------------------------------------------------------|------------------------------|----------| +| `cId` | required | The connection ID from Omnidex. | `'562524b21b1c1f08117fc7f9'` | `string` | +| `pId` | required | The publisher ID from Omnidex (pbjs only). | `'59ac17c192832d0011283fe3'` | `string` | +| `bidFloor` | optional | The minimum bid value desired. omnidex will not respond with bids lower than this value. | `0.90` | `float` | + +#### Bid Params for Prebid Server + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|------------|----------|------------------------------------------------------------------------------------------|------------------------------|----------| +| `cId` | required | The connection ID from Omnidex. | `'562524b21b1c1f08117fc7f9'` | `string` | + +### Example + + ```javascript +var adUnits = [{ + code: 'banner-div', + mediaTypes: { + banner: { + sizes: [ + [300, 250], + [728, 90] + ] + } + }, + bids: [{ + bidder: 'omnidex', + params: { + cId: '562524b21b1c1f08117fc7f9', // Required - PROVIDED DURING SETUP... + pId: '59ac17c192832d0011283fe3', // Required - PROVIDED DURING SETUP... + bidFloor: 1.23 // Optional + } + }] +} +]; + +// configure pbjs to enable user syncing +pbjs.setConfig({ + userSync: { + filterSettings: { + iframe: { + bidders: 'omnidex', + filter: 'include' + } + } + } +}); +``` diff --git a/dev-docs/bidders/oms.md b/dev-docs/bidders/oms.md index 5990e56780..4675724ab5 100644 --- a/dev-docs/bidders/oms.md +++ b/dev-docs/bidders/oms.md @@ -11,7 +11,7 @@ biddercode: oms prebid_member: false floors_supported: true safeframes_ok: true -media_types: banner +media_types: banner, video schain_supported: true userIds: id5Id, identityLink, pubProvidedId pbs_app_supported: true @@ -40,4 +40,5 @@ The bidder requires setup before usage. Please get in touch with our team at
**WARNING:**
Misuse of this parameter can impact revenue | 2.00 | `testMode` | optional | Boolean | This activates the test mode | false -## Example +### Example ```javascript var adUnits = [{ @@ -89,3 +90,13 @@ var adUnits = [{ ### Configuration OpenWeb recommends setting UserSync by iframe for monetization. + +### Versions + +Prebid versions 5.0-5.3 are not supported. + +Banner >= 6.14.0. + +Native >= 9.27.0. + +Multi-format requests >= 9.27.0. diff --git a/dev-docs/bidders/openwebxchange.md b/dev-docs/bidders/openwebxchange.md index eb7da48e83..0dd779e6ee 100644 --- a/dev-docs/bidders/openwebxchange.md +++ b/dev-docs/bidders/openwebxchange.md @@ -5,7 +5,7 @@ description: Prebid OpenWebXChange Bidder Adapter multiformat_supported: will-bid-on-any pbjs: true biddercode: openwebxchange -media_types: banner, video +media_types: banner, video, native schain_supported: true coppa_supported: true pbs: false @@ -23,20 +23,18 @@ The OpenWebXChange adapter requires setup and approval. ### Bid Parameters -#### Banner, Video +#### Banner, Video, Native {: .table .table-bordered .table-striped } + | Name | Scope | Type | Description | Example | ---- | ----- | ---- | ----------- | ------- | `org` | required | String | OpenWebXChange publisher Id | "1234567890abcdef12345678" | `floorPrice` | optional | Number | Minimum price in USD.

**WARNING:**
Misuse of this parameter can impact revenue | 2.00 | `placementId` | optional | String | A unique placement identifier | "12345678" | `testMode` | optional | Boolean | This activates the test mode | false -| `rtbDomain` | optional | String | Sets the seller end point | "www.test.com" -| `is_wrapper` | private | Boolean | Please don't use unless your account manager asked you to | false -| `currency` | optional | String | 3 letters currency | "EUR" -## Example +### Example ```javascript var adUnits = [{ @@ -93,5 +91,10 @@ We recommend setting UserSync by iframe for monetization. ### Versions -Prebid versions 5.0-5.3 are not supported -Banner >= 6.14.0 +Prebid versions 5.0-5.3 are not supported. + +Banner >= 6.14.0. + +Native >= 9.27.0. + +Multi-format requests >= 9.27.0. diff --git a/dev-docs/bidders/openx.md b/dev-docs/bidders/openx.md index db7088974f..694e8e423c 100644 --- a/dev-docs/bidders/openx.md +++ b/dev-docs/bidders/openx.md @@ -5,7 +5,7 @@ description: Prebid OpenX Bidder Adaptor pbjs: true pbs: true biddercode: openx -media_types: banner, video +media_types: banner, video, native schain_supported: true tcfeu_supported: true usp_supported: true @@ -38,6 +38,7 @@ IMPORTANT: only include either openxBidAdapter or openxOrtbBidAdapter in your bu #### Banner {: .table .table-bordered .table-striped } + | Name | Scope | Description | Example | Type | | ---- | ----- | ----------- | ------- | ---- | | `delDomain` ~~or `platform`~~** | required | OpenX delivery domain provided by your OpenX representative. | "PUBLISHER-d.openx.net" | String | @@ -87,6 +88,7 @@ var adUnits = [ #### Video {: .table .table-bordered .table-striped } + | Name | Scope | Description | Example | Type | | ---- | ----- | ----------- | ------- | ---- | | `unit` | required | OpenX ad unit ID provided by your OpenX representative. | "1611023122" | String | @@ -99,6 +101,7 @@ var adUnits = [ The following video parameters are supported here so publishers may fully declare their video inventory: {: .table .table-bordered .table-striped } + | Name | Scope | Description | Example | Type | |----------------|--------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------|-----------| | context | required | instream or outstream |"outstream" | string | @@ -151,7 +154,64 @@ var videoAdUnits = [ }] ``` -## Example +#### Native + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +| ---- | ----- | ----------- | ------- | ---- | +| `delDomain` ~~or `platform`~~** | required | OpenX delivery domain provided by your OpenX representative. | "PUBLISHER-d.openx.net" | String | +| `unit` | required | OpenX ad unit ID provided by your OpenX representative. | "1611023122" | String | +| `customParams` | optional | User-defined targeting key-value pairs. customParams applies to a specific unit. | `{key1: "v1", key2: ["v2","v3"]}` | Object | +| `customFloor` | optional | Minimum price in USD. customFloor applies to a specific unit. For example, use the following value to set a $1.50 floor: 1.50

**WARNING:**
Misuse of this parameter can impact revenue.

Note:
OpenX suggests using the [Price Floor Module](/dev-docs/modules/floors.html) instead of customFloor. The Price Floor Module is prioritized over customFloor if both are present. | 1.50 | Number | +| `doNotTrack` | optional | Prevents advertiser from using data for this user.

**WARNING:**
Impacts all bids in the request. May impact revenue. | true | Boolean | +| `coppa` | optional | Enables Child's Online Privacy Protection Act (COPPA) regulations. **WARNING:**
Impacts all bids in the request. May impact revenue. | true | Boolean | + +** platform is deprecated. Please use delDomain instead. If you have any questions please contact your representative. + +### AdUnit Format for Native + +```javascript +var adUnits = [ + { + code: 'test-div-native', + mediaTypes: { + native: { + ortb: { + assets: [ + { + id: 1, + required: 1, + img: { + type: 3, + w: 150, + h: 50, + } + }, { + id: 2, + required: 1, + title: { + len: 80 + } + } + ] + } + } + }, + bids: [ + { + bidder: 'openx', + params: { + unit: '539439964', + delDomain: 'se-demo-d.openx.net' + } + } + ] + } +]; +``` + +### Example ```javascript var adUnits = [ @@ -199,6 +259,33 @@ var adUnits = [ delDomain: 'PUBLISHER-d.openx.net' } }] + }, + { + code: 'native1', + mediaTypes: { + native: { + ortb: { + assets: [ + { + id: 1, + required: 1, + img: { + type: 3, + w: 150, + h: 50, + } + } + ] + } + } + }, + bids: [{ + bidder: 'openx', + params: { + unit: '539439964', + delDomain: 'se-demo-d.openx.net' + } + }] } ]; ``` @@ -254,7 +341,7 @@ pbjs.setConfig({ }); ``` -## Additional Details +### Additional Details * [Banner Ads](https://docs.openx.com/publishers/prebid-adapter-web/) (Customer login required.) * [Video Ads](https://docs.openx.com/publishers/prebid-adapter-video/) (Customer login required.) diff --git a/dev-docs/bidders/oppamedia.md b/dev-docs/bidders/oppamedia.md new file mode 100644 index 0000000000..10acb3522d --- /dev/null +++ b/dev-docs/bidders/oppamedia.md @@ -0,0 +1,41 @@ +--- +layout: bidder +title: OppaMedia +description: OppaMedia Bidder Adaptor +biddercode: oppamedia +aliasCode: adkernel +tcfeu_supported: true +dsa_supported: false +gvl_id: 14 (adkernel) +usp_supported: true +coppa_supported: true +gpp_sids: tcfeu, usp +schain_supported: true +dchain_supported: false +userId: all +media_types: banner, video, native +safeframes_ok: true +deals_supported: false +floors_supported: true +fpd_supported: true +pbjs: true +pbs: false +pbs_app_supported: false +prebid_member: false +multiformat_supported: will-bid-on-any +ortb_blocking_supported: true +privacy_sandbox: no +sidebarType: 1 +--- + +### Note + +The OppaMedia bidding adapter requires setup and approval before implementation. Please reach out to for more details. + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------|----------|-----------------------|---------------------------|----------| +| `host` | required | Host | `'cpm.oppa.media'` | `string` | +| `zoneId` | required | Zone Id | `30164` | `integer` | diff --git a/dev-docs/bidders/oprx.md b/dev-docs/bidders/oprx.md new file mode 100644 index 0000000000..6181d56634 --- /dev/null +++ b/dev-docs/bidders/oprx.md @@ -0,0 +1,69 @@ +--- +layout: bidder +title: OptimizeRx +description: Prebid OptimizeRx Bidder Adapter +biddercode: oprx +tcfeu_supported: false +usp_supported: false +coppa_supported: false +schain_supported: false +dchain_supported: false +userId: none +media_types: banner +safeframes_ok: true +deals_supported: false +floors_supported: true +fpd_supported: false +pbjs: true +pbs: false +pbs_app_supported: true +prebid_member: false +multiformat_supported: will-not-bid +ortb_blocking_supported: false +privacy_sandbox: no +--- + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|------------------------|------------|-----------| +| `placementId` | required | Placement ID | `11111` | `integer` | +| `key` | required | Key | `'abc123'` | `string` | +| `width` | optional | Banner Width | `123` | `integer` | +| `height` | optional | Banner Height | `456` | `integer` | +| `bid_floor` | optional | Bidding Price Floor | `123.45` | `number` | +| `npi` | optional | NPI | `'22222'` | `string` | +| `ndc` | optional | NDC | `'33333'` | `string` | +| `type` | required | Type of Bid/Impression | `'banner'` | `string` | + +### AdUnit Format + +```javascript +var adUnits = [ + { + code: 'test-div', + mediaTypes: { + banner: { + sizes: [[728, 90]] + } + }, + bids: [ + { + bidder: 'oprx', + params: { + placement_id: 1234567890, // placement ID (required) + key: "123456abcd", // key (required) + width: 728, // width + height: 90, // height + bid_floor: 0.5, // bidding price floor + npi: "1234567890", // NPI + ndc: "12345678901" // NDC + type: "banner", // media type (required) + }, + } + } + ] + } +]; +``` diff --git a/dev-docs/bidders/optidigital.md b/dev-docs/bidders/optidigital.md index f9616fc97f..c1681dff59 100644 --- a/dev-docs/bidders/optidigital.md +++ b/dev-docs/bidders/optidigital.md @@ -3,7 +3,9 @@ layout: bidder title: Optidigital description: Prebid Optidigital Bidder Adapter biddercode: optidigital +prebid_member: true pbjs: true +pbs: true floors_supported: true tcfeu_supported: true tcf2_supported: true diff --git a/dev-docs/bidders/oraki.md b/dev-docs/bidders/oraki.md new file mode 100644 index 0000000000..93aff844ac --- /dev/null +++ b/dev-docs/bidders/oraki.md @@ -0,0 +1,35 @@ +--- +layout: bidder +title: Oraki +description: Prebid Oraki Bidder Adapter +biddercode: oraki +gpp_sids: usstate_all +tcfeu_supported: false +usp_supported: true +coppa_supported: true +schain_supported: true +deals_supported: false +floors_supported: true +fpd_supported: false +ortb_blocking_supported: false +media_types: banner, video, native +multiformat_supported: will-bid-on-one +userIds: all +pbjs: true +pbs: true +pbs_app_supported: true +safeframes_ok: true +sidebarType: 1 +--- + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|--------------|---------------------------------|------------| +| `placementId` | optional | Placement Id | `'0'` | `'string'` | +| `endpointId` | optional | Endpoint Id | `'0'` | `'string'` | + +### Note + +For the prebid server and prebid.js you only need to use one parameter: either placementId or endpointId diff --git a/dev-docs/bidders/orangeclickmedia.md b/dev-docs/bidders/orangeclickmedia.md new file mode 100644 index 0000000000..a85a4cb96e --- /dev/null +++ b/dev-docs/bidders/orangeclickmedia.md @@ -0,0 +1,42 @@ +--- +layout: bidder +title: OCM Media +description: OCM Media bidder adapter +biddercode: orangeclickmedia +pbjs: true +pbs: true +media_types: video, banner +userIds: all +fpd_supported: false +tcfeu_supported: true +gvl_id: 1148 +usp_supported: true +coppa_supported: true +schain_supported: true +prebid_member: false +ortb_blocking_supported: true +multiformat_supported: will-bid-on-one +floors_supported: false +aliasCode: limelightDigital +sidebarType: 1 +--- + +### Bid Params + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|:--------------|:---------|:------------------------------------------------------|:--------------------------------|:----------| +| `host` | required | Ad network's RTB host | `'scotty.orangeclickmedia.com'` | `string` | +| `adUnitId` | required | Ad Unit Id will be generated on OCM Media Platform. | `42` | `integer` | +| `adUnitType` | required | Type of Ad Unit (`'video'`, `'banner'`) | `'banner'` | `string` | +| `publisherId` | required | Publisher ID | `'12345'` | `string` | +| `custom1` | optional | Custom targeting field 1 | `'custom1'` | `string` | +| `custom2` | optional | Custom targeting field 2 | `'custom2'` | `string` | +| `custom3` | optional | Custom targeting field 3 | `'custom3'` | `string` | +| `custom4` | optional | Custom targeting field 4 | `'custom4'` | `string` | +| `custom5` | optional | Custom targeting field 5 | `'custom5'` | `string` | + +OCM Media server-side Prebid Server adapter requires only `publisherId` and `host` parameters. But OCM Media client-side Prebid.js adapter requires only `host`, `adUnitId`, `adUnitType`. + +OCM Media server-side Prebid Server adapter supports only `banner`, `video`, `audio`, `native` media types. But OCM Media client-side Prebid.js adapter supports only `banner` and `video` media types, doesn't support `audio` and `native`. diff --git a/dev-docs/bidders/ownadx.md b/dev-docs/bidders/ownadx.md index 728d1bf543..27547af857 100644 --- a/dev-docs/bidders/ownadx.md +++ b/dev-docs/bidders/ownadx.md @@ -15,7 +15,7 @@ safeframes_ok: false deals_supported: false floors_supported: true fpd_supported: false -pbjs: false +pbjs: true pbs: true pbs_app_supported: true prebid_member: false @@ -23,9 +23,9 @@ multiformat_supported: will-bid-on-one ortb_blocking_supported: false --- -### Note: +### Note -The OwnAdX Bidding adapter requires setup before beginning. Please contact us at support@techbravo.com +The OwnAdX Bidding adapter requires setup before beginning. Please contact us at . ### Bid Params diff --git a/dev-docs/bidders/ozone.md b/dev-docs/bidders/ozone.md index 4f93fc6d09..0f2a50799d 100644 --- a/dev-docs/bidders/ozone.md +++ b/dev-docs/bidders/ozone.md @@ -12,9 +12,13 @@ deals_supported: true schain_supported: true coppa_supported: true usp_supported: true +gpp_supported: true +gpp_sids: tcfeu, usnat, usstate_all, usp floors_supported: true prebid_member: true sidebarType: 1 +fpd_supported: true +privacy_sandbox: paapi, topics --- diff --git a/dev-docs/bidders/pgamssp.md b/dev-docs/bidders/pgamssp.md index e132d8edb1..3db48e851d 100644 --- a/dev-docs/bidders/pgamssp.md +++ b/dev-docs/bidders/pgamssp.md @@ -4,11 +4,12 @@ title: PGAMSSP description: Prebid PGAMSSP Bidder Adapter biddercode: pgamssp usp_supported: true -tcfeu_supported: false +gvl_id: 1353 +tcfeu_supported: true coppa_supported: true schain_supported: true floors_supported: true -gpp_supported: true +gpp_sids: tcfeu, usstate_all, usp media_types: banner, video, native pbjs: true pbs: true @@ -23,4 +24,9 @@ safeframes_ok: true {: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | |---------------|----------|-----------------------|-----------|-----------| -| `placementId` | required | Placement Id | `'0'` | `'string'` | +| `placementId` | optional | Placement Id | `'0'` | `'string'` | +| `endpointId` | optional | Endpoint Id | `'0'` | `'string'` | + +### Note + +For the prebid server and prebid.js you only need to use one parameter: either placementId or endpointId diff --git a/dev-docs/bidders/pinkLion.md b/dev-docs/bidders/pinkLion.md new file mode 100644 index 0000000000..42add05878 --- /dev/null +++ b/dev-docs/bidders/pinkLion.md @@ -0,0 +1,36 @@ +--- +layout: bidder +title: PinkLion +description: Prebid PinkLion Bidder Adapter +biddercode: pinkLion +gpp_sids: usstate_all +gvl_id: none +tcfeu_supported: false +usp_supported: true +coppa_supported: true +schain_supported: true +deals_supported: false +floors_supported: true +fpd_supported: false +ortb_blocking_supported: false +media_types: banner, video, native +multiformat_supported: will-bid-on-one +userIds: +pbjs: true +pbs: true +pbs_app_supported: true +safeframes_ok: true +sidebarType: 1 +--- + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|--------------|---------------------------------|------------| +| `placementId` | optional | Placement Id | `'0'` | `'string'` | +| `endpointId` | optional | Endpoint Id | `'0'` | `'string'` | + +### Note + +For the prebid server and prebid.js you only need to use one parameter: either placementId or endpointId diff --git a/dev-docs/bidders/pixad.md b/dev-docs/bidders/pixad.md index 54296770e1..a0e0a32722 100644 --- a/dev-docs/bidders/pixad.md +++ b/dev-docs/bidders/pixad.md @@ -13,11 +13,14 @@ coppa_supported: true gpp_sids: tcfeu, tcfca, usnat, usstate_all, usp schain_supported: true dchain_supported: false -userIds: criteo, id5Id, sharedId, unifiedId +userIds: all +prebid_member: true +pbs_app_supported: true safeframes_ok: true floors_supported: true aliasCode: admatic multiformat_supported: will-bid-on-any +ortb_blocking_supported: partial sidebarType: 1 --- @@ -28,6 +31,7 @@ Pixad header bidding adapter connects with Pixad demand sources to fetch bids fo ### Bid params {: .table .table-bordered .table-striped } + | Name | Scope | Description | Example | Type | |-------------|----------|-------------------------------------|----------|----------| | `networkId` | required | The network ID from Pixad | `12345` | `number` | @@ -77,7 +81,7 @@ var adUnits = [{ }]; ``` -## UserSync example +### UserSync example ```javascript pbjs.setConfig({ diff --git a/dev-docs/bidders/pixelpluses.md b/dev-docs/bidders/pixelpluses.md new file mode 100644 index 0000000000..3b09f65f09 --- /dev/null +++ b/dev-docs/bidders/pixelpluses.md @@ -0,0 +1,41 @@ +--- +layout: bidder +title: Pixelpluses +description: Pixelpluses Bidder Adaptor +biddercode: pixelpluses +aliasCode: adkernel +tcfeu_supported: true +dsa_supported: false +gvl_id: 1209 +usp_supported: true +coppa_supported: true +gpp_sids: tcfeu, usp +schain_supported: true +dchain_supported: false +userId: all +media_types: banner, video, native +safeframes_ok: true +deals_supported: false +floors_supported: true +fpd_supported: true +pbjs: true +pbs: false +pbs_app_supported: false +prebid_member: false +multiformat_supported: will-bid-on-any +ortb_blocking_supported: true +privacy_sandbox: no +sidebarType: 1 +--- + +### Note + +The Pixelpluses bidding adapter requires setup and approval before implementation. Please reach out to for more details. + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------|----------|-----------------------|---------------------------|----------| +| `host` | required | Host | `'cpm.pixelpluses.com'` | `string` | +| `zoneId` | required | Zone Id | `30164` | `integer` | diff --git a/dev-docs/bidders/pixfuture.md b/dev-docs/bidders/pixfuture.md index 40ccdb338b..fd5a5fd2ea 100644 --- a/dev-docs/bidders/pixfuture.md +++ b/dev-docs/bidders/pixfuture.md @@ -14,8 +14,69 @@ pbs: false pbjs: true sidebarType: 1 --- -#### Bid Params -| Name | Scope | Description | Example | Type | -|---------------------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------|------------------| -| `pix_id` | required | The pix_id is an ID from PixFuture. The `pix_id` parameter should be a `string` | `"Abc123"` | `string` | +### Overview + +The PixFuture Bidder Adapter connects publishers to PixFuture’s demand via Prebid.js, supporting banner media types. To use this adapter, your PixFuture account must be approved for Prebid integration. Contact to request activation or for setup assistance. + +#### Solution + +To download the PixFuture adapter for Prebid.js, visit [https://docs.prebid.org/download.html](https://docs.prebid.org/download.html) and select the `pixfuture` bidder from the list, along with other bidders you wish to include in your build. + +**Important:** The `pixfuture` adapter requires account approval from PixFuture. To enable this integration, email . + +--- + +### Bid Parameters + +| Name | Scope | Description | Example | Type | +|------------|----------|--------------------------------------------------------------------|---------------|----------| +| `pix_id` | required | A unique ID for your site’s ad placement. Corresponds to each ad size. | `"12312345"` | `string` | + +These bid parameters are supported the Prebid.js pixfuture adapter. + +The `pix_id` is a unique identifier provided by PixFuture and must be specified for each ad placement/size combination. + +--- + +### Prebid.js Integration + +#### Basic Prebid.js Example + +Below is an example of configuring ad units for PixFuture in Prebid.js: + +```javascript +var adUnits = [ + { + code: 'test-div-300x250', + mediaTypes: { + banner: { + sizes: [[300, 250]] + } + }, + bids: [ + { + bidder: 'pixfuture', + params: { + pix_id: "11234567890" + } + } + ] + }, + { + code: 'test-div2-728x90', + mediaTypes: { + banner: { + sizes: [[728, 90]] + } + }, + bids: [ + { + bidder: 'pixfuture', + params: { + pix_id: "0987654321" + } + } + ] + } +]; diff --git a/dev-docs/bidders/playdigo.md b/dev-docs/bidders/playdigo.md index 8dbdb1c13d..a5c968f5e6 100644 --- a/dev-docs/bidders/playdigo.md +++ b/dev-docs/bidders/playdigo.md @@ -4,7 +4,8 @@ title: Playdigo description: Prebid Playdigo Bidder Adapter biddercode: playdigo gpp_sids: usstate_all -tcfeu_supported: false +gvl_id: 1302 +tcfeu_supported: true usp_supported: true coppa_supported: true schain_supported: true diff --git a/dev-docs/bidders/preciso.md b/dev-docs/bidders/preciso.md index 52523c39c1..a781727d90 100644 --- a/dev-docs/bidders/preciso.md +++ b/dev-docs/bidders/preciso.md @@ -1,63 +1,97 @@ --- layout: bidder title: Preciso -description: Prebid Preciso Bidder Adapter +description: Prebid Preciso Bid Adapter +gdpr_supported: true gvl_id: 874 -media_types: display, video, native +media_types: display,native gdpr_supported: true usp_supported: true pbjs: true -pbs: true +pbs: false biddercode: preciso prebid_member: true floors_supported: true safeframes_ok: true schain_supported: true -userIds: id5Id, identityLink, pubProvidedId -pbs_app_supported: true +userIds: sharedId +deals_supported: false coppa_supported: true -multiformat_supported: will-bid-on-any -ortb_blocking_supported: partial +multiformat_supported: will-not-bid +ortb_blocking_supported: true sidebarType: 1 --- +### Modules -### Bid Params +SharedID: We need you to include the [SharedID module](/dev-docs/modules/userid-submodules/sharedid.html) in order to bid effectively on your inventory. + +### Registration + +The preciso Bidding adapter requires setup before beginning. Please contact us at [tech@preciso.net] + +#### OpenRTB Parameters +The following table contains currently supported parameters we parse. {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|---------------------|---------------|----------| -| `publisherId` | required | Unique publisher ID | `'ABCDEF'` | `string` | -| `region` | required | Assigned region | `'prebid-eu'` | `string` | -| `bidfloor` | optional | Minimal CPM value | `0.01` | `float` | -| `channel` | optional | Inventory channel identifier, limited to 50 characters | `Partner 1 - News` | `string` | +| Name | Scope | Description | Example | Type | +|--------------------|----------|---------------------------------------------------------------|-------------------|----------------| +| `bcat` | optional | List of blocked advertiser categories (IAB) | `['IAB1-1']` | `string array` | +| `badv` | optional | Blocked Advertiser Domains | `['example.com']` | `string array` | +| `wlang` | optional | Allow List of languages for creatives using ISO-639-1-alpha-2 | `['fr', 'en']` | `string array` | -### ORTB Blocking -Preciso supports blocking advertisers in `badv` and categories in `bcat` parameters. -The blocked advertisers/categories list has no length limitation, but response timeout is more likely to occur as the number of entries grow. -Blocked advertisers list (`badv`) is an array of domains as strings. -Blocked categories list (`bcat`) is an array of IAB categories as strings. +Example configuration: -For example: -#### Globally defined ORTB Blocking: ```javascript + pbjs.setConfig({ - ortb2: { - badv: ["domain1.com", "domain2.com"], - bcat: ["IAB23-1", "IAB23-5", "IAB25-3", "IAB25-2"] - } -)}; -``` -#### ORTB Blocking specific only to preciso bidder: -```javascript -pbjs.setBidderConfig({ - bidders: ['preciso'], - config:{ ortb2: { - badv: ["domain1.com", "domain2.com"], - bcat: ["IAB23-1", "IAB23-5", "IAB25-3", "IAB25-2"] + bcat: ['IAB1-1'], + badv: ['example.com'], + wlang: ['fr', 'en'] } - } }); -``` \ No newline at end of file +``` + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|---------------------|---------------|----------| +| `publisherId` | required | Numeric Publisher ID
(as provided by Preciso) | `'123AB123'` | `string` | +| `region` | optional,recommended | 3 letter country code | `'IND'` | `string` | +| `bidFloor` | optional,recommended | Minimum bid for this impression expressed in CPM (USD). It is used if the Floor Module is not available | `0.01` | `float` | +| `pageType` | optional, recommended | Kind of content present in the page | `'homepage'` | `String` | +| `bcat` | optional | List of blocked advertiser categories (IAB) | `['IAB1-1']` | `string array` | +| `badv` | optional | Blocked Advertiser Domains| `'example.com'` | `string array`| + +Notes: + +- It is best to provide the `bidfloor` in priceFloor module. + +- Preferred to provide the `bcat` and `badv` within the first party data (above). When both methods are provided, first party data values will be prioritized. + +### Example Ad Unit + +``````javascript + var adUnits = [{ + code: 'your-unit-container-id', + mediaTypes: { + banner: { + sizes: [[300, 250], [300,600]] + } + }, + bids: [{ + bidder: 'preciso', + params: { + publisherId: 'your-publisher-id', + region: 'IND', + pageType: 'news',// Optional + bidFloor: 0.25, // Optional - default is 0.0 + bcat: ['IAB1-1'], // Optional - default is [] + badv: ['example.com'] // Optional - default is [] + } + }] +}]; +`````` diff --git a/dev-docs/bidders/prismassp.md b/dev-docs/bidders/prismassp.md new file mode 100644 index 0000000000..91598ea5a2 --- /dev/null +++ b/dev-docs/bidders/prismassp.md @@ -0,0 +1,122 @@ +--- +layout: bidder +title: Prismassp +description: Prebid Prismassp Bidder Adapter +pbjs: true +pbs: true +biddercode: prismassp +gvl_id: 965 +tcfeu_supported: true +usp_supported: true +gpp_supported: true +schain_supported: true +dchain_supported: false +floors_supported: true +userIds: all +tcfeu_supported: true +media_types: banner, video, native +safeframes_ok: true +deals_supported: true +sidebarType: 1 +fpd_supported: true +multiformat_supported: will-bid-on-any + +--- + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|----------------------------|-------------------------------------- |-----------| +| `tagId` | required | tag ID | `"testpris"` | `string` | + +### First Party Data + +Publishers should use the `ortb2` method of setting [First Party Data](/features/firstPartyData.html). +The following fields are supported: + +* ortb2.site.ext.data.* +* ortb2.site.content.data[] +* ortb2.user.ext.data.* +* ortb2.user.data[] + +### Test Parameters + +```javascript +var adUnits = [ + // Banner adUnit + { + code: 'banner-div', + mediaTypes: { + banner: { + sizes: [[300, 250], [300,600]] + } + }, + bids: [{ + bidder: 'prismassp', + params: { + tagId: 'testpris' + } + }] + }, + // Video adUnit + { + code: 'video1', + mediaTypes: { + video: { + playerSize: [640, 480], + context: 'instream' + } + }, + bids: [{ + bidder: 'prismassp', + params: { + tagId: 'testpris' + } + }] + }, + // Native adUnit + { + code: 'native1', + mediaTypes: + native: { + title: { + required: true + }, + image: { + required: true + }, + sponsoredBy: { + required: true + } + } + }, + bids: [{ + bidder: 'prismassp', + params: { + tagId: 'testpris' + } + }] + }, + // Multiformat Ad + { + code: 'multi1', + mediaTypes: { + video: { + playerSize: [640, 480], + context: 'instream' + }, + banner: { + sizes: [[300, 250], [300,600]] + } + }, + bids: [{ + bidder: 'prismassp', + params: { + tagId: 'testpris', + videoTagId: 'testpris' + } + }] + }; +]; +``` diff --git a/dev-docs/bidders/programmaticX.md b/dev-docs/bidders/programmaticX.md new file mode 100644 index 0000000000..8b702d1519 --- /dev/null +++ b/dev-docs/bidders/programmaticX.md @@ -0,0 +1,73 @@ +--- +layout: bidder +title: ProgrammaticX +description: Prebid ProgrammaticX Bidder Adapter +biddercode: ProgrammaticX +filename: programmaticXBidAdapter +userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId +tcfeu_supported: true +usp_supported: true +coppa_supported: false +schain_supported: true +gpp_supported: true +floors_supported: true +media_types: banner, video +prebid_member: false +safeframes_ok: false +deals_supported: false +pbs_app_supported: false +fpd_supported: false +ortb_blocking_supported: false +multiformat_supported: will-bid-on-one +pbjs: true +pbs: false +sidebarType: 1 +gvl_id: 1344 +--- + +### Bid Params + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|------------|----------|-------------------------------------------------------------------------------------------|------------------------------|----------| +| `cId` | required | The connection ID from ProgrammaticX. | `'562524b21b1c1f08117fc7f9'` | `string` | +| `pId` | required | The publisher ID from ProgrammaticX. | `'59ac17c192832d0011283fe3'` | `string` | +| `bidFloor` | optional | The minimum bid value desired. ProgrammaticX will not respond with bids lower than this value. | `0.90` | `float` | + +### Example + + ```javascript +var adUnits = [{ + code: 'banner-div', + mediaTypes: { + banner: { + sizes: [ + [300, 250], + [728, 90] + ] + } + }, + bids: [{ + bidder: 'programmaticX', + params: { + cId: '562524b21b1c1f08117fc7f9', // Required - PROVIDED DURING SETUP... + pId: '59ac17c192832d0011283fe3', // Required - PROVIDED DURING SETUP... + bidFloor: 1.23 // Optional + } + }] + } +]; + +// configure pbjs to enable user syncing +pbjs.setConfig({ + userSync: { + filterSettings: { + iframe: { + bidders: 'programmaticX', + filter: 'include' + } + } + } +}); +``` diff --git a/dev-docs/bidders/pstudio.md b/dev-docs/bidders/pstudio.md index d425ddc8cd..8fb050a2e7 100644 --- a/dev-docs/bidders/pstudio.md +++ b/dev-docs/bidders/pstudio.md @@ -13,7 +13,7 @@ dchain_supported: false userId: UID 2.0 media_types: banner, video safeframes_ok: false -deals_supported: false +deals_supported: check with bidder floors_supported: false fpd_supported: true pbjs: true @@ -30,7 +30,7 @@ sidebarType: 1 | Name | Scope | Description | Example | Type | |---------------|----------|-----------------------|-----------|-----------| | `pubid` | required | UUID of the publisher | `'7ccf149e-06e4-4fdc-80a8-426374010b4a'` | `string (UUID)` | -| `floorPrice` | required | Minimum price for the impression expressed in CPM in USD currency. | `1.15` | `float` | +| `adtagid` | required | UUID of the ad tag | `'aae1aabb-6699-4b5a-9c3f-9ed034b1932c'` | `string (UUID)` | | `bcat` | optional | Blocked advertiser categories using the IAB content categories | `['IAB1-1', 'IAB1-3']` | `Array` | | `bapp` | optional | Block list of applications by their platform-specific exchange-independent application identifiers | `['com.foo.mygame']` | `Array` | | `badv` | optional | Block list of advertisers by their domains | `['ford.com']` | `Array` | diff --git a/dev-docs/bidders/publir.md b/dev-docs/bidders/publir.md index 3ef9f519f3..c3086774bf 100644 --- a/dev-docs/bidders/publir.md +++ b/dev-docs/bidders/publir.md @@ -26,11 +26,12 @@ The Publir adapter requires setup and approval. Please reach out to [info@publir #### Banner, Video {: .table .table-bordered .table-striped } + | Name | Scope | Type | Description | Example | ---- | ----- | ---- | ----------- | ------- | `pubId` | required | String | Publir publisher Id provided by your Publir representative | "1234567890abcdef12345678" -## Example +### Example ```javascript var adUnits = [{ diff --git a/dev-docs/bidders/pubmatic.md b/dev-docs/bidders/pubmatic.md index 26af4168e8..c1ef6b3964 100644 --- a/dev-docs/bidders/pubmatic.md +++ b/dev-docs/bidders/pubmatic.md @@ -14,51 +14,71 @@ floors_supported: true userIds: all prebid_member: true safeframes_ok: true +deals_supported: true pbjs: true pbs: true pbs_app_supported: true fpd_supported: true ortb_blocking_supported: true gvl_id: 76 -multiformat_supported: will-bid-on-one +multiformat_supported: true sidebarType: 1 +endpoint_compression: true --- -### Prebid Server Note +### Table of contents -{% include dev-docs/pbjs-adapter-required-for-pbs.md %} +* [Introduction](#introduction) +* [Bid Params](#bid-params) +* [First Party Data](#first-party-data) +* [UserSync](#usersync) +* [adSlot](#adslot) +* [Banner](#banner) +* [Video](#video) +* [Native](#native) +* [Multi-format](#multi-format) +* [Prebid Server](#prebid-server) +* [Endpoint Compression](#endpoint-compression) + +### Introduction + +Publishers can use Prebid.js to call PubMatic in any of the following ways: + +* **Call through our client-side adapter**: Prebid.js calls PubMatic directly from the browser using our client-side adapter. +* **Call through our server-side adapter**: Prebid.js makes a call to Prebid Server and then Prebid Server uses our server-side adapter to call PubMatic. + +We highly recommend adding the `gptPreAuction` module to populate GPID (Global Placement ID) values. See the [gptPreAuction module documentation](https://docs.prebid.org/dev-docs/modules/gpt-pre-auction.html) for implementation details. ### Bid Params {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|--------------------|------------------------------|----------| -| `publisherId` | required | Publisher ID | `'32572'` | `string` | -| `adSlot` | optional | Ad Slot Name (see below)| `'38519891'` | `string` | -| `pmzoneid` | optional | Zone ID | `'zone1,zone2'` | `string` | -| `lat` | optional | Latitude
(Supported until Prebid version 7.54.4 and starting from Prebid version 8.11.0 we have option to configure this using ortb2.(device OR user)) | `'40.712775'` | `string` | -| `lon` | optional | Longitude
(Supported until Prebid version 7.54.4 and starting from Prebid version 8.11.0 we have option to configure this using ortb2.(device OR user)) | `'-74.005973'` | `string` | -| `yob` | optional | Year of Birth | `'1982'` | `string` | -| `gender` | optional | Gender | `'M'` | `string` | -| `kadpageurl` | optional | Overrides Page URL | `'http://www.yahoo.com/'` | `string` | -| `kadfloor` | optional | Bid Floor | `'1.75'` | `string` | -| `currency` | optional | Bid currency | `'AUD'` (Value configured only in the 1st adunit will be passed on.
Values if present in subsequent adunits, will be ignored.) | `string` | -| `dctr` | optional | Deal Custom Targeting
(Value configured in each adunit will be passed on inside adunit configs i.e. imp.ext), `'key1=123|key2=345'` | `string` | -| `acat` | optional | Allowed categories
(List of allowed categories for a given auction to be sent in either using ortb2 config (request.ext.prebid.bidderparams.pubmatic.acat) or using slot level params. If categories sent using both then priority will be given to ortb2 over slot level params.) | `[ 'IAB1-5', 'IAB1-6', 'IAB1-7' ]` | `array of strings` | -| `bcat` | optional | Blocked IAB Categories
(Values from all slots will be combined and only unique values will be passed. An array of strings only. Each category should be a string of a length of more than 3 characters.) | `[ 'IAB1-5', 'IAB1-6', 'IAB1-7' ]` | `array of strings` | -| `deals` | optional | PMP deals
(Values from each slot will be passed per slot. An array of strings only. Each deal-id should be a string of a length of more than 3 characters.) | `[ 'deal-id-5', 'deal-id-6', 'deal-id-7' ]` | `array of strings` | -| `outstreamAU` | optional | Oustream AdUnit described in Blue BillyWig UI. This field is mandatory if mimeType is described as video and context is outstream (i.e., for outstream videos) | `'renderer_test_pubmatic'` | `string` | - -### Configuration - -PubMatic recommends the UserSync configuration below. Without it, the PubMatic adapter will not able to perform user syncs, which lowers match rate and reduces monetization. +| Name | Scope | Description | Example | Type | +|-----------------|----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------|--------------------| +| `publisherId` | required | PubMatic-specific identifier associated with your account | `'32572'` | `string` | +| `adSlot` | optional | PubMatic-specific identifier associated with this ad unit. Refers to Ad Tags within PubMatic UI. We accept Ad Tag Name or Ad Tag ID, refer to example. | `'38519891'` or `'homepage_banner'` | `string` | +| `dctr` | optional | Deal Custom Targeting
(Value configured in each adunit will be passed inside adunit configs i.e., imp.ext) | `'key1:abc\|key2:123'` | `string` | +| `deals` | optional | PMP deals
(Passed per slot. Each deal-id should be a string with more than 3 characters.) | `['deal-id-5', 'deal-id-6', 'deal-id-7']` | `array of strings` | +| `outstreamAU` | optional | Renderer ID provided by your account representative. Required for outstream video bids unless the ad unit has a [supplied renderer](https://docs.prebid.org/dev-docs/show-outstream-video-ads.html#renderers). | `'renderer_test_pubmatic'` | `string` | + +### First Party Data + +Publishers should use the `ortb2` method of setting [First Party Data](https://docs.prebid.org/features/firstPartyData.html). The following fields are supported: + +* `ortb2.site.*` +* `ortb2.user.*` + +AdUnit-specific data is supported using `AdUnit.ortb2Imp.ext.*` + +### UserSync + +PubMatic recommends the UserSync configuration below. Without it, the PubMatic adapter will not be able to perform user syncs, which lowers match rate and reduces monetization. ```javascript pbjs.setConfig({ userSync: { filterSettings: { iframe: { - bidders: '*', // '*' represents all bidders + bidders: '*', // '*' represents all bidders filter: 'include' } } @@ -66,126 +86,252 @@ pbjs.setConfig({ }); ``` -Note: Combine the above the configuration with any other UserSync configuration. Multiple setConfig() calls overwrite each other and only last call for a given attribute will take effect. +**Note:** *Combine the above configuration with any other UserSync configuration. Multiple setConfig() calls overwrite each other and only the last call for a given attribute will take effect.* -### adSlot Specification and Multi-Size Ad Units +### adSlot -The adSlot parameter supports two different formats: +The adSlot parameter is optional. If you choose to omit it, your PubMatic account must have default site and tag settings enabled. Contact your PubMatic Account Manager to learn more. + +The adSlot parameter accepts either an Ad Tag Name or Ad Tag ID from PubMatic UI. We recommend using only one adSlot value per ad unit. See the [Banner](#banner) section for an example. {: .table .table-bordered .table-striped } + | Format | Example | |----------------|----------------------| -| Without Size | `'38519891'` | -| With Size | `'38519891@300x205'` | +| Ad Tag ID | `'38519891'` | +| Ad Tag Name | `'unique-name-here'` | -adSlot parameter is optional. To omit the adSlot parameter, your publisher account must have default site and tag enabled. Consult your account manager to find out if default site and tag is enabled on your account. If used, both formats are supported. Without Size is the recommended option. Both options will send the ad request with all sizes specified in the Prebid ad unit configuration. +### Banner + +```javascript +var adUnits = [{ + code: 'test-div', + mediaTypes: { + banner: { + sizes: [ + [300, 250], + [300, 600] + ] + } + }, + bids: [{ + bidder: 'pubmatic', + params: { + publisherId: '32572', // required + adSlot: '38519891' // optional - can be ID or name like 'homepage_banner' + } + }] +}]; +``` -### video parameters +### Video -The PubMatic adapter supports video as of Prebid v1.16.0 +The following parameters are available for `mediaTypes.video` configuration: {: .table .table-bordered .table-striped } + | Name | Scope | Description | Example | | :----------------------| :------- | :---------------------------------------------------------- | :------ | -| `video.mimes` | required | Video MIME types | `['video/mp4','video/x-flv']` | -| `video.skippable` | optional | If 'true', user can skip ad | `true` | -| `video.minduration` | optional | Minimum ad duration in seconds | `5` | -| `video.maxduration` | optional | Maximum ad duration in seconds | `30` | -| `video.startdelay` | optional | Start delay in seconds for pre-roll, mid-roll, or post-roll ad placements | `5` | -| `video.playbackmethod` | optional | Defines whether inventory is user-initiated or autoplay sound on/off
Values:
`1`: Auto-play, sound on
`2`: Auto-play, sound off
`3`: Click-to-play
`4`: mouse-over | `1` | -| `video.api` | optional | API frameworks supported
Values:
`1`: VPAID 1.0
`2`: VPAID 2.0
`3`: MRAID-1
`4`: ORMMA
`5`: MRAID-2 | `[1, 2]` | -| `video.protocols` | optional | Supported video bid response protocols
Values
`1`: VAST 1.0
`2`: VAST 2.0
`3`: VAST 3.0
`4`: VAST 1.0 Wrapper
`5`: VAST 2.0 Wrapper
`6`: VAST 3.0 Wrapper | `[5, 6]` | -| `video.battr` | optional | Blocked creative attributes, See [OpenRTB 2.5 specification](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf), List 5.3 for values | `[3, 9]` | -| `video.linearity` | optional | Indicates if the impression is linear or nonlinear
Values:
`1`: Linear/In-Stream
`2`: Non-Linear/Overlay. | `1` | -| `video.placement` | optional | Video placement type. See [OpenRTB 2.5 specification](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf), List 5.9 for Values | `1` | -| `video.minbitrate` | optional | Minumim bit rate in Kbps. | 50 | -| `video.maxbitrate` | optional | Maximum bit rate in Kbps. | 70 | - -### AdUnit Format for Video +| `mimes` | required | List of content MIME types supported by the player. See [OpenRTB 2.5](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf) for options | `['video/mp4']` | +| `minduration` | recommended | Minimum video ad duration in seconds | `5` | +| `maxduration` | recommended | Maximum video ad duration in seconds | `30` | +| `startdelay` | recommended | Indicates the start delay in seconds for pre-roll, mid-roll, or post-roll ad placements
`>0`: Mid-Roll (value indicates start delay in seconds)
`0`: Pre-Roll
`-1`: Generic Mid-Roll
`-2`: Generic Post-Roll | `0` | +| `playbackmethod` | recommended | Playback methods that may be in use. Only one method is typically used in practice. See [OpenRTB 2.5 section 5.10](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf) for options
`1`: Auto-play, sound on
`2`: Auto-play, sound off
`3`: Click-to-play
`4`: Mouse-over | `[2]` | +| `protocols` | recommended | Supported video bid response protocol values
`1`: VAST 1.0
`2`: VAST 2.0
`3`: VAST 3.0
`4`: VAST 1.0 Wrapper
`5`: VAST 2.0 Wrapper
`6`: VAST 3.0 Wrapper
`7`: VAST 4.0
`8`: VAST 4.0 Wrapper | `[2, 3, 5, 6]` | +| `linearity` | recommended | OpenRTB2 linearity
`1`: Linear/In-Stream
`2`: Non-Linear/Overlay | `1` | +| `placement` | recommended | Placement type for the impression. See [OpenRTB 2.5 section 5.9](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf) for options | `1` | +| `plcmt` | recommended | Video placement type. See [OpenRTB 2.6 Plcmt Subtypes - Video](https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/develop/AdCOM%20v1.0%20FINAL.md#list_plcmtsubtypesvideo) | `1` | +| `skippable` | optional | Indicates if the player will allow the video to be skipped, where `true` = skippable | `true` | +| `api` | optional | Supported API framework values
`1`: VPAID 1.0
`2`: VPAID 2.0
`3`: MRAID-1
`4`: ORMMA
`5`: MRAID-2 | `[1, 2]` | +| `battr` | optional | Blocked creative attributes. See [OpenRTB 2.5 specification](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf), List 5.3 for values | `[3, 9]` | +| `minbitrate` | optional | Minimum bit rate in Kbps | `300` | +| `maxbitrate` | optional | Maximum bit rate in Kbps | `1500` | + +#### Instream Video ```javascript -var videoAdUnits = [ -{ +var videoAdUnits = [{ code: 'test-div-video', mediaTypes: { video: { - playerSize: [640, 480], // required - context: 'instream', - mimes: ['video/mp4','video/x-flv'], // required - skip: 1, // optional - minduration: 5, // optional - maxduration: 30, // optional - startdelay: 5, // optional - playbackmethod: [1,3], // optional - api: [ 1, 2 ], // optional - protocols: [ 2, 3 ], // optional - battr: [ 13, 14 ], // optional - linearity: 1, // optional - placement: 2, // optional - minbitrate: 10, // optional - maxbitrate: 10 // optional + playerSize: [640, 480], // required + context: 'instream', // required + mimes: ['video/mp4'], // required + minduration: 5, + maxduration: 30, + startdelay: 0, + playbackmethod: [2], + protocols: [2, 3, 5, 6], + linearity: 1, + placement: 1, + plcmt: 1 } }, bids: [{ - bidder: 'pubmatic', - params: { - publisherId: '32572', // required - adSlot: '38519891@300x250' // required - } + bidder: 'pubmatic', + params: { + publisherId: '32572', // required + adSlot: '38519891' // optional - can be ID or name like 'video_preroll' + } }] -}] +}]; ``` -### AdUnit Format for Native +#### Outstream Video ```javascript -var adUnits = [ -{ - code: 'test-div', +var videoAdUnits = [{ + code: 'test-div-video-outstream', mediaTypes: { - native: { - image: { - required: true, - sizes: [150, 50] - }, - title: { - required: true, - len: 80 - }, - sponsoredBy: { - required: true - }, - body: { - required: true - } + video: { + playerSize: [300, 250], // required + context: 'outstream', // required + mimes: ['video/mp4'], // required + minduration: 5, + maxduration: 30, + startdelay: 0, + playbackmethod: [2], + protocols: [2, 3, 5, 6], + linearity: 1, + placement: 3, + plcmt: 4 } }, bids: [{ - bidder: 'pubmatic', - params: { - publisherId: '156295', // required - adSlot: 'pubmatic_test2@1x1', // required - } + bidder: 'pubmatic', + params: { + publisherId: '32572', // required + adSlot: '38519891', // optional - can be ID or name like 'outstream_article' + outstreamAU: 'renderer_test_pubmatic' // required for outstream video + } }] }]; ``` -### Configuration for video +**Note:** *As an alternative to using the `outstreamAU` parameter, you can supply your own renderer at the ad unit level. This gives you more control over the rendering process. For more information on configuring custom renderers, see the [Prebid.js Outstream Video documentation](https://docs.prebid.org/dev-docs/show-outstream-video-ads.html#renderers).* + +#### Configuration for Video -For Video ads, prebid cache needs to be enabled for PubMatic adapter. +For video ads, Prebid cache needs to be enabled for the PubMatic adapter. ```javascript pbjs.setConfig({ cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' + url: 'https://my-pbs.example.com/cache' } }); ``` -### Prebid Server Test Request +### Native + +We recommend using the ORTB Native spec 1.2. + +```javascript +var adUnits = [{ + code: 'test-div-native', + mediaTypes: { + native: { + ortb: { + assets: [{ + id: 1, + required: 1, + img: { + type: 3, + w: 150, + h: 50 + } + }, + { + id: 2, + required: 1, + title: { + len: 80 + } + }, + { + id: 3, + required: 1, + data: { + type: 1 + } + }, + { + id: 4, + required: 1, + data: { + type: 2 + } + }] + } + } + }, + bids: [{ + bidder: 'pubmatic', + params: { + publisherId: '32572', // required + adSlot: '38519891' // optional - can be ID or name like 'native_sidebar' + } + }] +}]; +``` + +### Multi-format + +PubMatic supports multi-format ad units, allowing a single ad unit to accept multiple media types (banner, video, and native). The adapter will prioritize formats based on the order they are defined in the `mediaTypes` object. + +```javascript +var adUnits = [{ + code: 'test-div-multi', + mediaTypes: { + banner: { + sizes: [ + [300, 250], + [300, 600] + ] + }, + video: { + context: 'outstream', + playerSize: [300, 250], + mimes: ['video/mp4'], + protocols: [2, 3, 5, 6], + minduration: 5, + maxduration: 30 + }, + native: { + ortb: { + assets: [{ + id: 1, + required: 1, + img: { + type: 3, + w: 150, + h: 50 + } + }, + { + id: 2, + required: 1, + title: { + len: 80 + } + }] + } + } + }, + bids: [{ + bidder: 'pubmatic', + params: { + publisherId: '32572', // required + adSlot: '38519891' // optional - can be ID or name like 'multi_format_ad' + } + }] +}]; +``` + +### Prebid Server The following test parameters can be used to verify that Prebid Server is working properly with the -PubMatic adapter. This example includes an `imp` object with an PubMatic test publisher ID, ad slot, +PubMatic adapter. This example includes an `imp` object with a PubMatic test publisher ID, ad slot, and sizes that would match with the test creative. ```json @@ -216,12 +362,23 @@ and sizes that would match with the test creative. } ``` -### First Party Data +### Endpoint Compression -Publishers should use the `ortb2` method of setting [First Party Data](https://docs.prebid.org/features/firstPartyData.html). The following fields are supported: +This adapter utilizes gzip compression support built into Prebid.js core. For more information, see [Compression Support for Outgoing Requests](https://docs.prebid.org/dev-docs/bidder-adaptor.html#compression-support-for-outgoing-requests) -- `ortb2.site.*` -- `ortb2.user.*` +#### Disabling Compression + +You can disable gzip compression at the bidder level using `pbjs.setBidderConfig`. Set the `gzipEnabled` value to false: + +```javascript +pbjs.que.push(function () { + pbjs.setBidderConfig({ + bidders: ['pubmatic'], + config: { + gzipEnabled: false + } + }); +}); +``` -AdUnit-specific data is supported using `AdUnit.ortb2Imp.ext.*` diff --git a/dev-docs/bidders/pubrise.md b/dev-docs/bidders/pubrise.md new file mode 100644 index 0000000000..c17b005b94 --- /dev/null +++ b/dev-docs/bidders/pubrise.md @@ -0,0 +1,35 @@ +--- +layout: bidder +title: Pubrise +description: Prebid Pubrise Bidder Adapter +biddercode: pubrise +gpp_sids: usstate_all +tcfeu_supported: false +usp_supported: true +coppa_supported: true +schain_supported: true +deals_supported: false +floors_supported: true +fpd_supported: false +ortb_blocking_supported: false +media_types: banner, video, native +multiformat_supported: will-bid-on-one +userIds: all +pbjs: true +pbs: true +pbs_app_supported: true +safeframes_ok: true +sidebarType: 1 +--- + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|--------------|---------------------------------|------------| +| `placementId` | optional | Placement Id | `'0'` | `'string'` | +| `endpointId` | optional | Endpoint Id | `'0'` | `'string'` | + +### Note + +For the prebid server and prebid.js you only need to use one parameter: either placementId or endpointId diff --git a/dev-docs/bidders/pubxai.md b/dev-docs/bidders/pubxai.md new file mode 100644 index 0000000000..084e9cbc3e --- /dev/null +++ b/dev-docs/bidders/pubxai.md @@ -0,0 +1,113 @@ +--- +layout: bidder +title: PubxAi +description: Prebid PubxAi Bidder Adapter +pbjs: true +pbs: true +biddercode: pubxai +gvl_id: 1485 +usp_supported: true +gpp_sids: tcfeu +schain_supported: true +dchain_supported: false +floors_supported: true +userIds: all +tcfeu_supported: true +media_types: banner, video, native +safeframes_ok: true +deals_supported: true +sidebarType: 1 +fpd_supported: true +multiformat_supported: will-bid-on-any + +--- + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|----------------------------|-------------------------------------- |-----------| +| `tagId` | required | PubxAi tag ID | `"testnexx"` | `string` | +| `placement` | required*| PubxAi placement | `"test.com_header_ad"` | `string` | + +*You*must* only include one ID field - either `tagId` or `placement`, not both. If you have questions on which parameter to use, please reach out to your Account Manager. +The `tagId` and `placement` are **mutually exclusive** but at least one is required. If you pass both, `tagId` takes precedence. + +### Bidder Config + +You can allow writing in localStorage `pbjs.bidderSettings` for the bidder `pubxai` + +{% include dev-docs/storageAllowed.md %} + +```javascript +pbjs.bidderSettings = { + pubxai: { + storageAllowed : true + } +} +``` + +### First Party Data + +Publishers should use the `ortb2` method of setting [First Party Data](https://docs.prebid.org/features/firstPartyData.html). + +### Test Parameters + +```javascript +var adUnits = [ + // Banner adUnit + { + code: 'banner-div', + mediaTypes: { + banner: { + sizes: [[300, 250], [300,600]] + } + }, + bids: [{ + bidder: 'pubxai', + params: { + tagId: 'testnexx' + } + }] + }, + // Video adUnit + { + code: 'video1', + mediaTypes: { + video: { + playerSize: [640, 480], + context: 'instream' + } + }, + bids: [{ + bidder: 'pubxai', + params: { + tagId: 'testnexx' + } + }] + }, + // Native adUnit + { + code: 'native1', + mediaTypes: + native: { + title: { + required: true + }, + image: { + required: true + }, + sponsoredBy: { + required: true + } + } + }, + bids: [{ + bidder: 'pubxai', + params: { + tagId: 'testnexx' + } + }] + } +]; +``` diff --git a/dev-docs/bidders/pwbid.md b/dev-docs/bidders/pwbid.md index 9919486e76..f60c7519aa 100644 --- a/dev-docs/bidders/pwbid.md +++ b/dev-docs/bidders/pwbid.md @@ -27,6 +27,7 @@ The PubWise bid adapter is now availalbe self service. Visit Values:
`1`: Linear/In-Stream
`2`: Non-Linear/Overlay. | `1` | | `video.placement` | optional | Video placement type. See [OpenRTB 2.5 specification](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf), List 5.9 for Values | `1` | -| `video.minbitrate` | optional | Minumim bit rate in Kbps. | 50 | +| `video.minbitrate` | optional | Minimum bit rate in Kbps. | 50 | | `video.maxbitrate` | optional | Maximum bit rate in Kbps. | 70 | ### Example diff --git a/dev-docs/bidders/qohere.md b/dev-docs/bidders/qohere.md new file mode 100644 index 0000000000..5e2b2094b5 --- /dev/null +++ b/dev-docs/bidders/qohere.md @@ -0,0 +1,42 @@ +--- +layout: bidder +title: Qohere +description: Qohere Adaptor +biddercode: qohere +aliasCode: adkernel +tcfeu_supported: true +dsa_supported: false +gvl_id: 14 (adkernel) +usp_supported: true +coppa_supported: true +gpp_sids: tcfeu, usp +schain_supported: true +dchain_supported: false +userId: all +media_types: banner, video, native +safeframes_ok: true +deals_supported: false +floors_supported: true +fpd_supported: true +pbjs: true +pbs: false +pbs_app_supported: false +prebid_member: false +multiformat_supported: will-bid-on-any +ortb_blocking_supported: true +privacy_sandbox: no +sidebarType: 1 + +--- + +### Note + +The Qohere bidding adaptor requires setup and approval before beginning. Please reach out to for more details + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------|----------|-----------------------|---------------------------|----------| +| `host` | required | RTB host | `'cpm.qohere.in'` | `string` | +| `zoneId` | required | RTB zone id | `30164` | `integer` | diff --git a/dev-docs/bidders/qortex.md b/dev-docs/bidders/qortex.md index 9eafaff1d3..782d8b6155 100644 --- a/dev-docs/bidders/qortex.md +++ b/dev-docs/bidders/qortex.md @@ -3,23 +3,28 @@ layout: bidder title: Qortex description: Qortex Bidder Adaptor biddercode: qortex -pbjs: true -pbs: false -media_types: banner, native, video -gvl_id: 14 (adkernel) +aliasCode: adkernel tcfeu_supported: true -gpp_supported: true +dsa_supported: false +gvl_id: 14 (adkernel) usp_supported: true coppa_supported: true -pbs_app_supported: true +gpp_sids: tcfeu, usp schain_supported: true -userIds: all +dchain_supported: false +userId: all +media_types: banner, video, native +safeframes_ok: true +deals_supported: false +floors_supported: true fpd_supported: true +pbjs: true +pbs: false +pbs_app_supported: false prebid_member: false +multiformat_supported: will-bid-on-any ortb_blocking_supported: true -multiformat_supported: will-bid-on-one -floors_supported: true -aliasCode: adkernel +privacy_sandbox: no sidebarType: 1 --- diff --git a/dev-docs/bidders/qt.md b/dev-docs/bidders/qt.md new file mode 100644 index 0000000000..2ccd991c20 --- /dev/null +++ b/dev-docs/bidders/qt.md @@ -0,0 +1,36 @@ +--- +layout: bidder +title: QT +description: Prebid QT Bidder Adapter +biddercode: qt +gpp_sids: usstate_all +gvl_id: 1331 +tcfeu_supported: true +usp_supported: true +coppa_supported: true +schain_supported: true +deals_supported: false +floors_supported: true +fpd_supported: false +ortb_blocking_supported: false +media_types: banner, video, native +multiformat_supported: will-bid-on-one +userIds: all +pbjs: true +pbs: true +pbs_app_supported: true +safeframes_ok: true +sidebarType: 1 +--- + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|--------------|---------------------------------|------------| +| `placementId` | optional | Placement Id | `'0'` | `'string'` | +| `endpointId` | optional | Endpoint Id | `'0'` | `'string'` | + +### Note + +For the prebid server and prebid.js you only need to use one parameter: either placementId or endpointId diff --git a/dev-docs/bidders/quantumdex.md b/dev-docs/bidders/quantumdex.md index a4eee3de31..b6521742ec 100644 --- a/dev-docs/bidders/quantumdex.md +++ b/dev-docs/bidders/quantumdex.md @@ -16,6 +16,6 @@ pbs_app_supported: true sidebarType: 1 --- -## Description +### Description Quantumdex is an aliased bidder of Apacdex bid adapter. Please refer to [Apacdex documentation](https://docs.prebid.org/dev-docs/bidders/apacdex) for bid parameters and implementation guide. diff --git a/dev-docs/bidders/ras.md b/dev-docs/bidders/ras.md index e8f9ce3837..3c39d03575 100644 --- a/dev-docs/bidders/ras.md +++ b/dev-docs/bidders/ras.md @@ -13,6 +13,7 @@ floors_supported: false fpd_supported: false sidebarType: 1 multiformat_supported: will-bid-on-one +pbjs_version_notes: removed in 9.0 --- diff --git a/dev-docs/bidders/rediads.md b/dev-docs/bidders/rediads.md new file mode 100644 index 0000000000..180b8a9938 --- /dev/null +++ b/dev-docs/bidders/rediads.md @@ -0,0 +1,83 @@ +--- +layout: bidder +title: Rediads +description: Prebid Rediads Bidder Adapter +biddercode: rediads +prebid_member: false +media_types: banner, video, native +pbjs: true +pbs: true +tcfeu_supported: false +usp_supported: true +coppa_supported: false +schain_supported: true +dchain_supported: false +safeframes_ok: false +deals_supported: false +floors_supported: true +fpd_supported: true +ortb_blocking_supported: partial +privacy_sandbox: no +multiformat_supported: will-bid-on-one +sidebarType: 1 +--- + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|--------------|----------|-----------------------------------------------------------------------------|----------------------|----------------| +| account_id | required | Account ID generated on the Rediads Platform. | '123xyz' | string | +| endpoint | optional | Only to be used if RediAds team provides you with one. | 'bidding2' | string | +| slot | optional | Unique identifier for the ad slot generated on the platform. | '54321' | string | + +--- + +### Enabling Test Bids + +To enable test bids for the Rediads Bidder Adapter, append rediads-test-bids to the hash of the page URL. + +For example: + +- *Localhost:* [http://localhost:8000/xyz#rediads-test-bid](http://localhost:8000/xyz#rediads-test-bids) +- *Production URL:* [https://domain.com/page#rediads-test-bid](https://domain.com/page#rediads-test-bids) + +This will activate test bids for debugging and validation purposes. + +--- + +### AdUnit Examples + +#### AdUnit Format for Banner + +```javascript +var adUnits = [ + { + code: 'test-div', + mediaTypes: { + banner: { + sizes: [[300, 250], [300, 600]] + } + }, + bids: [ + { + bidder: 'rediads', + params: { + account_id: '12345', + slot: '54321' + } + } + ] + } +]; +``` + +### First Party Data Support +The following fields are supported for First Party Data (FPD): + +- `ortb2.site.*` +- `ortb2.publisher.*` +- `ortb2.content.*` +- `ortb2.devices.locations parameters` + +For additional implementation or support, contact us at . diff --git a/dev-docs/bidders/relevantdigital.md b/dev-docs/bidders/relevantdigital.md index 25b90a6e48..6d8457b0da 100644 --- a/dev-docs/bidders/relevantdigital.md +++ b/dev-docs/bidders/relevantdigital.md @@ -26,6 +26,7 @@ sidebarType: 1 ### Bid Params {: .table .table-bordered .table-striped } + | Name | Scope | Description | Example | Type | |---------------|----------|---------------------------------------------------------|----------------------------|--------------| | `placementId` | required | The placement id. | `'6204e83a077_620f9e8e4fe'` | `String` | @@ -36,6 +37,7 @@ sidebarType: 1 ### Config Parameters {: .table .table-bordered .table-striped } + | Name | Scope | Description | Example | Type | |---------------|----------|---------------------------------------------------------|----------------------------|--------------| | `pbsHost` | required if not set in bid parameters | Host name of the server. | `'pbs-example.relevant-digital.com'` | `String` | @@ -71,7 +73,7 @@ var adUnits = [ ]; ``` -## Example setup using only bid params +### Example setup using only bid params This method to set the global configuration parameters (like **pbsHost**) in **params** could simplify integration of a provider for some publishers. Setting different global config-parameters on different bids is not supported in general*, as the first settings found will be used and any subsequent global settings will be ignored. diff --git a/dev-docs/bidders/relevatehealth.md b/dev-docs/bidders/relevatehealth.md new file mode 100644 index 0000000000..481f8c76dc --- /dev/null +++ b/dev-docs/bidders/relevatehealth.md @@ -0,0 +1,83 @@ +--- +layout: bidder +title: RelevateHealth +description: Prebid RelevateHealth Bidder Adaptor +pbjs: true +biddercode: relevatehealth +media_types: banner +tcfeu_supported: false +usp_supported: true +coppa_supported: true +gpp_sids: usstate_all +schain_supported: false +safeframes_ok: false +ortb_blocking_supported: false +dsa_supported: false +deals_supported: true +floors_supported: true +sidebarType: 1 +--- + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|-----------|-----------------------|----------------|----------| +| `placement_id`| mandatory | Placement Id | `110011` | `number` | +| `height` | optional | Height of the creative| `600` | `number` | +| `width` | optional | Width of the creative | `160` | `number` | +| `domain` | optional | Domain | `'domain.com'` | `string` | +| `bid_floor` | optional | Bid Floor Price | `0.5` | `decimal`| + +### AdUnit Format for Banner + +```javascript +var adUnits = [ + { + code: 'banner-ad', + mediaTypes: { + banner: { + sizes: [[160, 600]] + } + }, + bids: [{ + bidder: 'relevatehealth', + params: { + placement_id: 110011, + user_id: '', + height: 600, + width: 160, + domain: '', + bid_floor: 0.5 + } + }] + } + ]; +``` + +#### First Party Data + +In release 4.30 and later, publishers should use the `ortb2` method of setting [First Party Data](https://docs.prebid.org/features/firstPartyData.html). The following fields are supported: + +* ortb2.user.id +* ortb2.user.buyeruid +* ortb2.user.keywords +* ortb2.user.ext.* + +Example first party data that's available to all bidders and all adunits: + +```javascript +pbjs.setConfig({ + ortb2: { + user: { + id: 123456789, // Unique pseudonymized ID for the user (e.g., NPI). + buyeruid: 987654321, // DSP-assigned user ID for identity resolution. + keywords: "kw1,kw2", // Interest or specialty tags (e.g., oncology, cardiology) + ext: { + key1: "values", // Custom healthcare metadata (e.g., icd10), single or comma seperated. + key2: "values" // Additional campaign context (e.g., ndc), single or comma seperated. + } + } + } +}); +``` diff --git a/dev-docs/bidders/resetdigital.md b/dev-docs/bidders/resetdigital.md index 3f0b072ec8..7883975c4b 100644 --- a/dev-docs/bidders/resetdigital.md +++ b/dev-docs/bidders/resetdigital.md @@ -20,30 +20,33 @@ media_types: banner, video sidebarType: 1 --- -### bid params +### Note -{: .table .table-bordered .table-striped } +Prebid adapter for Reset Digital requires approval and account setup, please contact us at . Video is supported but requires a publisher supplied renderer at this time. + +### Bid Params | Name | Scope | Description | Example | Type | |----------|----------|-------------|------------------------------------|----------| -| `pubId` | required | Publisher account id | `'123pubId'` | `string` | -| `siteID` | optional | Publisher site id | `'123siteId'` | `string` | +| `pubId` | required | Publisher Account ID provided by ResetDigital | `'123pubId'` | `string` | +| `siteID` | optional | Publisher Site ID | `'123siteId'` | `string` | | `zoneId` | optional | Used for extra fields | `{}` | `object` | +| `zoneId.placementId` | optional | ID used for reporting purposes | `""` | `string` | +| `zoneId.deals` | optional | Deal IDs comma-separated | `"deal123,deal456"` | `string` | +| `zoneId.test` | optional | Flag to force bidder response with a creative | `1` | `integer` | | `forceBid` | optional | Returns test bid | true | `boolean` | -| `position` | optional | Set the page position. Valid values are "atf" and "btf". | `'atf'` | `string` | -| `bidFloor` | optional | Sets the global floor -- no bids will be made under this value. | `0.50` | `float` | -| `latLong` | optional | Sets the latitude and longitude for the visitor | `[40.7608, 111.8910]` | `Array` | -| `inventory` | optional | This parameter allows the definition of an object defining arbitrary key-value pairs concerning the page for use in targeting. The values must be arrays of strings. | `{"rating":["5-star"], "prodtype":["tech","mobile"]}` | `object` | -| `visitor` | optional | This parameter allows the definition of an object defining arbitrary key-value pairs concerning the visitor for use in targeting. The values must be arrays of strings. | `{"ucat":["new"], "search":["iphone"]}` | `object` | -| `keywords` | optional | This can be used to influence reports for client-side display. To get video or server-side reporting, please use First Party data or the inventory/visitor parameters. | `["travel", "tourism"]` | `Array` | +| `position` | optional | Override the Prebid.js page position. Valid values are "atf" and "btf". | `'atf'` | `string` | +| `inventory` | optional | This parameter allows the definition of an object defining arbitrary key-value pairs concerning the page for use in targeting. The values must be arrays of strings. | `{"rating":["5-star"],"prodtype":["tech","mobile"]}` | `object` | +| `visitor` | optional | This parameter allows the definition of an object defining arbitrary key-value pairs concerning the visitor for use in targeting. The values must be arrays of strings. | `{"ucat":["new"], "search":["iphone"]}` | `object` | +| `keywords` | optional | This can be used to influence reports for client-side display. To get video or server-side reporting, please use First Party data or the inventory/visitor parameters. | `["travel", "tourism"]` | `Array` | +| `bidFloor` | optional | Override the Prebid.js bid floor -- no bids will be made under this value. | `0.50` | `float` | +| `latLong` | optional | Override the Prebid.js latitude and longitude for the visitor. | `[40.7608, 111.8910]` | `Array` | #### mediaTypes.video The following video parameters are supported here so publishers may fully declare their video inventory: -{: .table .table-bordered .table-striped } - -| Name | Scope | Description | Example | Type | +| Name | Scope | Description | Example | Type | |----------------|--------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------|-----------| | context | required | instream or outstream |"outstream" | string | | playerSize| required | width, height of the player in pixels | [640,360] - will be translated to w and h in bid request | array | @@ -60,3 +63,70 @@ The following video parameters are supported here so publishers may fully declar | maxbitrate | optional | Maximum bit rate in Kbps. | 9600 | integer | | startdelay | recommended | Indicates the start delay in seconds for pre-roll, mid-roll, or post-roll ad placements.
>0: Mid-Roll (value indicates start delay in second)
0: Pre-Roll
-1: Generic Mid-Roll
-2: Generic Post-Roll | 0 | integer | | placement | recommended | Placement type for the impression. (see openRTB v2.5 section 5.9 for options) | 1 | integer | + +### Code Examples + +#### Banner Ad Unit + +Define the ad units for banner ads: + +```javascript +var adUnits = [ + { + code: 'your-div', // Replace with the actual ad unit code`` + mediaTypes: { + banner: { + sizes: [[300, 250]] // Define the sizes for banner ads + } + }, + bids: [ + { + bidder: "resetdigital", + params: { + pubId: "your-pub-id", // Replace with your publisher ID + siteID: "your-site-id", // Replace with your site ID + endpoint: 'https://ads.resetsrv.com', // Optional: Endpoint URL for the ad server + forceBid: true, // Optional parameter to force the bid + zoneId: { + placementId: "abc123", // Optional ID used for reports + deals: "deal123,deal456", // Optional string of deal IDs, comma-separated + test: 1 // Set to 1 to force the bidder to respond with a creative + } + } + } + ] + } +]; +``` + +#### Video Ad Unit + +Define the ad units for video ads + +```javascript +var videoAdUnits = [ + { + code: 'your-div', // Replace with the actual video ad unit code + mediaTypes: { + video: { + playerSize: [640, 480] // Define the player size for video ads + } + }, + bids: [ + { + bidder: "resetdigital", + params: { + pubId: "your-pub-id", // (required) Replace with your publisher ID + site_id: "your-site-id", // Replace with your site ID + forceBid: true, // Optional parameter to force the bid + zoneId: { // (optional) Zone ID parameters + placementId: "", // Optional ID used for reports + deals: "", // Optional string of deal IDs, comma-separated + test: 1 // Set to 1 to force the bidder to respond with a creative + } + } + } + ] + } +]; +``` diff --git a/dev-docs/bidders/responsiveads.md b/dev-docs/bidders/responsiveads.md new file mode 100644 index 0000000000..56639c6cbe --- /dev/null +++ b/dev-docs/bidders/responsiveads.md @@ -0,0 +1,33 @@ +--- +layout: bidder +title: ResponsiveAds +description: ResponsiveAds Prebid Adapter +biddercode: responsiveads +media_types: banner +pbjs: true +pbs: false +enable_download: true +gvl_id: 1189 +sidebarType: 1 +safeframes_ok: false +multiformat_supported: will-bid-on-one +deals_supported: false +floors_supported: false +fpd_supported: false +ortb_blocking_supported: false +privacy_sandbox: no +prebid_member: false +schain_supported: false +dchain_supported: false +--- + +### Note + +If you're using Google Ad Manager (GAM), ensure that the "Serve in Safeframe" option in the creative settings is disabled. + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|-------------|----------|--------------------------------|---------|-----------| +| `placementId` | optional | Placement Id | 'f93kf9knds8n3' | string | diff --git a/dev-docs/bidders/revbid.md b/dev-docs/bidders/revbid.md new file mode 100644 index 0000000000..76e3d5103d --- /dev/null +++ b/dev-docs/bidders/revbid.md @@ -0,0 +1,41 @@ +--- +layout: bidder +title: RevBid +description: RevBid Adaptor +biddercode: revbid +aliasCode: adkernel +tcfeu_supported: true +dsa_supported: false +gvl_id: 14 (adkernel) +usp_supported: true +coppa_supported: true +gpp_sids: tcfeu, usp +schain_supported: true +dchain_supported: false +userId: all +media_types: banner, video, native +safeframes_ok: true +deals_supported: false +floors_supported: true +fpd_supported: true +pbjs: true +pbs: false +pbs_app_supported: false +prebid_member: false +multiformat_supported: will-bid-on-any +ortb_blocking_supported: true +privacy_sandbox: no +sidebarType: 1 +--- + +### Note + +The RevBid bidding adapter requires setup and approval before implementation. Please reach out to for more details. + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------|----------|-----------------------|---------------------------|----------| +| `host` | required | RTB host | `'cpm.revbid.net'` | `string` | +| `zoneId` | required | Zone Id | 30164 | `integer` | diff --git a/dev-docs/bidders/revnew.md b/dev-docs/bidders/revnew.md new file mode 100644 index 0000000000..c0c32f61ef --- /dev/null +++ b/dev-docs/bidders/revnew.md @@ -0,0 +1,114 @@ +--- +layout: bidder +title: Revnew +description: Prebid Revnew Bidder Adapter +pbjs: true +pbs: true +biddercode: revnew +gvl_id: 1468 +tcfeu_supported: true +usp_supported: true +gpp_sids: tcfeu +schain_supported: true +dchain_supported: false +floors_supported: true +userIds: all +tcfeu_supported: true +media_types: banner, video, native +safeframes_ok: true +deals_supported: true +sidebarType: 1 +fpd_supported: true +multiformat_supported: will-bid-on-any + +--- + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|----------------------------|-------------------------------------- |-----------| +| `tagId` | required*| Revnew tag ID | `"testnexx"` | `string` | +| `placement` | required*| Revnew placement | `"test.com_header_ad"` | `string` | + +*You*must* only include one ID field - either `tagId` or `placement`, not both. If you have questions on which parameter to use, please reach out to your Account Manager. +The `tagId` and `placement` are **mutually exclusive** but at least one is required. If you pass both, `tagId` takes precedence. + +### Bidder Config + +You can allow writing in localStorage `pbjs.bidderSettings` for the bidder `revnew` + +{% include dev-docs/storageAllowed.md %} + +```javascript +pbjs.bidderSettings = { + revnew: { + storageAllowed : true + } +} +``` + +### First Party Data + +Publishers should use the `ortb2` method of setting [First Party Data](https://docs.prebid.org/features/firstPartyData.html). + +### Test Parameters + +```javascript +var adUnits = [ + // Banner adUnit + { + code: 'banner-div', + mediaTypes: { + banner: { + sizes: [[300, 250], [300,600]] + } + }, + bids: [{ + bidder: 'revnew', + params: { + tagId: 'testnexx' + } + }] + }, + // Video adUnit + { + code: 'video1', + mediaTypes: { + video: { + playerSize: [640, 480], + context: 'instream' + } + }, + bids: [{ + bidder: 'revnew', + params: { + tagId: 'testnexx' + } + }] + }, + // Native adUnit + { + code: 'native1', + mediaTypes: + native: { + title: { + required: true + }, + image: { + required: true + }, + sponsoredBy: { + required: true + } + } + }, + bids: [{ + bidder: 'revnew', + params: { + tagId: 'testnexx' + } + }] + } +]; +``` diff --git a/dev-docs/bidders/richaudience.md b/dev-docs/bidders/richaudience.md index f452b0d9a6..0429d123c0 100644 --- a/dev-docs/bidders/richaudience.md +++ b/dev-docs/bidders/richaudience.md @@ -7,6 +7,7 @@ userIds: criteo, id5Id, identityLink, liveIntentId, pubCommonId, unifiedId media_types: banner, video tcfeu_supported: true gvl_id: 108 +gpp_supported: true safeframes_ok: false prebid_member: true pbjs: true @@ -24,17 +25,4 @@ sidebarType: 1 | `pid` | required | The placement ID from Rich Audience. | `'ADb1f40rmi'` | `string` | | `supplyType`| required | Define if site or app. | `'site / app'` | `string` | | `ifa` | optional | Identifier For Advertisers | `'AAAAAAAAA-BBBB-CCCC-1111-222222220000234234234234234'` | `string` | -| `bidfloor` | optional | Bid Floor | `0.80` | `float` | | `keywords` | optional | A key-value applied only to the configured bid. This value is optional. Strings separated by semicolon. | `car=mercedes;car=audi;` | `string` | -| `player` | optional | Object containing video targeting parameters. See [Video Object](#ra-video-object) for details. | `player: {init: 'open', end: 'close', skin: 'dark'}` | `object` | - - - -### Video Object - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|-------------|----------|----------------------------------------|-------------------------------|-----------| -| `init` | optional | Start mode of the player open or close | `'open / close'` | `string` | -| `end` | optional | End mode of the player open or close | `'open / close'` | `string` | -| `skin` | optional | Choose the background color | `'dark / light'` | `string` | diff --git a/dev-docs/bidders/ringieraxelspringer.md b/dev-docs/bidders/ringieraxelspringer.md new file mode 100644 index 0000000000..abb1af0f09 --- /dev/null +++ b/dev-docs/bidders/ringieraxelspringer.md @@ -0,0 +1,44 @@ +--- +layout: bidder +title: RingierAxelSpringer +description: Prebid RingierAxelSpringer Bidder Adapter +biddercode: ringieraxelspringer +media_types: banner, native +pbjs: true +pbs: false +prebid_member: false +gvl_id: 1021 +tcfeu_supported: true +safeframes_ok: false +deals_supported: false +floors_supported: false +fpd_supported: false +sidebarType: 1 +multiformat_supported: will-bid-on-one +dsa_supported: true +privacy_sandbox: paapi +ortb_blocking_supported: false +schain_supported: false +dchain_supported: false +gpp_sids: None +coppa_supported: false +usp_supported: false +--- + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|------------------|----------|------------------------------------------------------------------------------------------------------|---------------------------------------------|----------| +| `network` | required | Specific identifier provided by RAS | `'4178463'` | `string` | +| `site` | required | Specific identifier name (case-insensitive) that is associated with this ad unit and provided by RAS | `'example_com'` | `string` | +| `area` | required | Ad unit category name; only case-insensitive alphanumeric with underscores and hyphens are allowed | `'sport'` | `string` | +| `slot` | required | Ad unit placement name (case-insensitive) provided by RAS | `'slot'` | `string` | +| `pageContext` | optional | Web page context data | `{}` | `object` | +| `pageContext.dr` | optional | Document referrer URL address | `'https://example.com/'` | `string` | +| `pageContext.du` | optional | Document URL address | `'https://example.com/sport/football/article.html?id=932016a5-02fc-4d5c-b643-fafc2f270f06'` | `string` | +| `pageContext.dv` | optional | Document virtual address as slash-separated path that may consist of any number of parts (case-insensitive alphanumeric with underscores and hyphens); first part should be the same as `site` value and second as `area` value; next parts may reflect website navigation | `'example_com/sport/football'` | `string` | +| `pageContext.keyWords` | optional | List of keywords associated with this ad unit; only case-insensitive alphanumeric with underscores and hyphens are allowed | `['euro', 'lewandowski']` | `string[]` | +| `pageContext.keyValues` | optional | Key-values associated with this ad unit (case-insensitive); following characters are not allowed in the values: `" ' = ! + # * ~ ; ^ ( ) < > ] [ & @` | `{}` | `object` | +| `pageContext.keyValues.ci` | optional | Content unique identifier | `'932016a5-02fc-4d5c-b643-fafc2f270f06'` | `object` | +| `pageContext.keyValues.adunit` | optional | Ad unit name | `'example_com/sport'` | `string` | diff --git a/dev-docs/bidders/rise.md b/dev-docs/bidders/rise.md index c873396d55..f20e6598fd 100644 --- a/dev-docs/bidders/rise.md +++ b/dev-docs/bidders/rise.md @@ -5,7 +5,7 @@ description: Prebid Rise Bidder Adapter multiformat_supported: will-bid-on-any pbjs: true biddercode: rise -media_types: banner, video +media_types: banner, video, native schain_supported: true coppa_supported: true pbs: true @@ -26,19 +26,18 @@ The Rise adapter requires setup and approval. Please reach out to [prebid-rise-e ### Bid Parameters -#### Banner, Video +#### Banner, Video, Native {: .table .table-bordered .table-striped } + | Name | Scope | Type | Description | Example | ---- | ----- | ---- | ----------- | ------- | `org` | required | String | Rise publisher Id provided by your Rise representative | "1234567890abcdef12345678" | `floorPrice` | optional | Number | Minimum price in USD.

**WARNING:**
Misuse of this parameter can impact revenue | 2.00 | `placementId` | optional | String | A unique placement identifier | "12345678" | `testMode` | optional | Boolean | This activates the test mode | false -| `rtbDomain` | optional | String | Sets the seller end point | "www.test.com" -| `is_wrapper` | private | Boolean | Please don't use unless your account manager asked you to | false -## Example +### Example ```javascript var adUnits = [{ @@ -95,5 +94,10 @@ Rise recommends setting UserSync by iframe for monetization. ### Versions -Prebid versions 5.0-5.3 are not supported -Banner >= 6.14.0 +Prebid versions 5.0-5.3 are not supported. + +Banner >= 6.14.0. + +Native >= 9.27.0. + +Multi-format requests >= 9.27.0. diff --git a/dev-docs/bidders/risemediatech.md b/dev-docs/bidders/risemediatech.md new file mode 100644 index 0000000000..02c31de8d0 --- /dev/null +++ b/dev-docs/bidders/risemediatech.md @@ -0,0 +1,28 @@ +--- +layout: bidder +title: RiseMediaTech +description: Prebid.js bidder adapter for RiseMediaTech +biddercode: risemediatech +media_types: + - banner + - video +gdpr_supported: true +usp_supported: true +gpp_supported: true +user_sync: false +schain_supported: true +pbjs: true +pbs: true +--- + +# Overview + +RiseMediaTech is a digital advertising platform that supports banner and video ads through its Prebid.js adapter. The adapter uses OpenRTB standards for request and response formatting. + +# Bid Params + +| Name | Scope | Type | Description | Example | +|--------------|--------------------|------------------|--------------------------------------------|-------------------------| +| `bidFloor` | optional | string | Bid Floor | `'0.01'`| +| `testMode` | optional | string | Parameter to indicate prebid test mode | `'1'`| + diff --git a/dev-docs/bidders/risexchange.md b/dev-docs/bidders/risexchange.md index 1d1de616f5..f0e40882b3 100644 --- a/dev-docs/bidders/risexchange.md +++ b/dev-docs/bidders/risexchange.md @@ -5,7 +5,7 @@ description: Prebid RiseXChange Bidder Adapter multiformat_supported: will-bid-on-any pbjs: true biddercode: risexchange -media_types: banner, video +media_types: banner, video, native schain_supported: true coppa_supported: true pbs: false @@ -25,9 +25,10 @@ The RiseXChange adapter requires setup and approval. Please reach out to [prebid ### Bid Parameters -#### Banner, Video +#### Banner, Video, Native {: .table .table-bordered .table-striped } + | Name | Scope | Type | Description | Example | ---- | ----- | ---- | ----------- | ------- | `org` | required | String | RiseXChange publisher Id | "1234567890abcdef12345678" @@ -35,9 +36,8 @@ The RiseXChange adapter requires setup and approval. Please reach out to [prebid | `placementId` | optional | String | A unique placement identifier | "12345678" | `testMode` | optional | Boolean | This activates the test mode | false | `rtbDomain` | optional | String | Sets the seller end point | "www.test.com" -| `is_wrapper` | private | Boolean | Please don't use unless your account manager asked you to | false -## Example +### Example ```javascript var adUnits = [{ @@ -94,5 +94,10 @@ We recommend setting UserSync by iframe for monetization. ### Versions -Prebid versions 5.0-5.3 are not supported -Banner >= 6.14.0 +Prebid versions 5.0-5.3 are not supported. + +Banner >= 6.14.0. + +Native >= 9.27.0. + +Multi-format requests >= 9.27.0. diff --git a/dev-docs/bidders/robustApps.md b/dev-docs/bidders/robustApps.md new file mode 100644 index 0000000000..f690f1d481 --- /dev/null +++ b/dev-docs/bidders/robustApps.md @@ -0,0 +1,40 @@ +--- +layout: bidder +title: RobustApps +description: RobustApps Bidder Adapter +biddercode: robustApps +media_types: banner, video +coppa_supported: true +tcfeu_supported: false +usp_supported: true +prebid_member: false +pbjs: true +pbs: true +schain_supported: true +floors_supported: true +multiformat_supported: will-bid-on-any +sidebarType: 1 +safeframes_ok: true +dchain_supported: false +deals_supported: true +fpd_supported: false +ortb_blocking_supported: true +privacy_sandbox: no +--- + +### Prebid.js Bid params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|-------------|----------|-----------------------------|------------------------------------|-----------| +| `pid` | required | Placement ID | `aa8217e20131c095fe9dba67981040b0` | `string` | +| `env` | optional | Environment name | `robustApps` | `string` | +| `ext` | optional | Specific integration config | `{}` | `object` | + +### Prebid Server Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|-------------|----------|-----------------------------|------------------------------------|-----------| +| `pid` | required | Placement ID | `aa8217e20131c095fe9dba67981040b0` | `string` | +| `env` | required | Environment name | `robustApps` | `string` | diff --git a/dev-docs/bidders/robusta.md b/dev-docs/bidders/robusta.md new file mode 100644 index 0000000000..775cf68757 --- /dev/null +++ b/dev-docs/bidders/robusta.md @@ -0,0 +1,42 @@ +--- +layout: bidder +title: Robusta +description: Robusta Bidder Adaptor +biddercode: robusta +media_types: banner, video +tcfeu_supported: false +gpp_supported: false +usp_supported: false +pbjs: true +pbs: true +sidebarType: 1 +--- + +# Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|------------|----------|------------------|---------|----------| +| lineItemId | Required | The Line Item ID | `'123'` | `string` | + + +# Example Ad Unit Config + +```javascript +var adUnits = [ + { + code: 'banner-div', + mediaTypes: { + banner: { + sizes: [[300, 250], [728, 90]] + } + }, + bids: [{ + bidder: 'robusta', + params: { + lineItemId: '323bfac4-a3cb-40e8-a3ae-e9832b35f969' + } + }] + } +]; +``` \ No newline at end of file diff --git a/dev-docs/bidders/rocketlab.md b/dev-docs/bidders/rocketlab.md new file mode 100644 index 0000000000..1c5e47cb7f --- /dev/null +++ b/dev-docs/bidders/rocketlab.md @@ -0,0 +1,40 @@ +--- +layout: bidder +title: RocketLab +description: Prebid RocketLab Bidder Adapter +biddercode: rocketlab +gpp_sids: usstate_all +tcfeu_supported: false +usp_supported: true +coppa_supported: true +schain_supported: true +deals_supported: false +floors_supported: true +fpd_supported: false +ortb_blocking_supported: false +media_types: banner, video, native +multiformat_supported: will-bid-on-one +userIds: all +pbjs: true +pbs: true +pbs_app_supported: false +safeframes_ok: true +sidebarType: 1 +--- + +### Note + +The RocketLab Bidding adapter requires setup before beginning. Please contact us at + +### Bid Params + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +| ------------- | -------- | ------------ | ------- | ---------- | +| `placementId` | optional | Placement Id | `'0'` | `'string'` | +| `endpointId` | optional | Endpoint Id | `'0'` | `'string'` | + +### Note + +For prebid.js you only need to use one parameter: either `placementId` or `endpointId` diff --git a/dev-docs/bidders/roundel.md b/dev-docs/bidders/roundel.md index 02e846086d..464325d579 100644 --- a/dev-docs/bidders/roundel.md +++ b/dev-docs/bidders/roundel.md @@ -18,10 +18,10 @@ prebid_member: yes sidebarType: 1 --- -## Overview +### Overview Roundel is an aliased bidder for Index Exchange and must be configured alongside the [IdentityLink](/dev-docs/modules/userId.html#identitylink) user ID module. -## Bid Params +### Bid Params Bidder params for roundel follow the same structure as the Index Exchange bidder. Please reference configuration examples [here](/dev-docs/bidders/ix). diff --git a/dev-docs/bidders/rtbanalytica.md b/dev-docs/bidders/rtbanalytica.md index f1b6ffb85f..b2838e4a75 100644 --- a/dev-docs/bidders/rtbanalytica.md +++ b/dev-docs/bidders/rtbanalytica.md @@ -3,23 +3,28 @@ layout: bidder title: RtbAnalytica description: RtbAnalytica Bidder Adaptor biddercode: rtbanalytica -pbjs: true -pbs: false -media_types: banner, native, video -gvl_id: 14 (adkernel) +aliasCode: adkernel tcfeu_supported: true -gpp_supported: true +dsa_supported: false +gvl_id: 14 (adkernel) usp_supported: true coppa_supported: true -pbs_app_supported: true +gpp_sids: tcfeu, usp schain_supported: true -userIds: all +dchain_supported: false +userId: all +media_types: banner, video, native +safeframes_ok: true +deals_supported: false +floors_supported: true fpd_supported: true +pbjs: true +pbs: false +pbs_app_supported: false prebid_member: false +multiformat_supported: will-bid-on-any ortb_blocking_supported: true -multiformat_supported: will-bid-on-one -floors_supported: true -aliasCode: adkernel +privacy_sandbox: no sidebarType: 1 --- diff --git a/dev-docs/bidders/rtbdemand.md b/dev-docs/bidders/rtbdemand.md new file mode 100644 index 0000000000..e49f4fc50f --- /dev/null +++ b/dev-docs/bidders/rtbdemand.md @@ -0,0 +1,37 @@ +--- +layout: bidder +title: Rtb Demand +description: Prebid Rtb Demand Bidder Adaptor +biddercode: rtbdemand +pbjs: true +pbs: false +media_types: video, banner +userIds: all +fpd_supported: false +tcfeu_supported: false +usp_supported: true +coppa_supported: true +schain_supported: true +prebid_member: false +ortb_blocking_supported: true +multiformat_supported: will-bid-on-one +floors_supported: false +aliasCode: limelightDigital +sidebarType: 1 +--- + +### Bid Params + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|:--------------|:---------|:-------------------------------------------------------|:------------------------|:----------| +| `host` | required | Ad network's RTB host | `'ads-rtbdemand.com'` | `string` | +| `adUnitId` | required | Ad Unit Id will be generated on Rtb Demand Platform. | `42` | `integer` | +| `adUnitType` | required | Type of Ad Unit (`'video'`, `'banner'`) | `'banner'` | `string` | +| `publisherId` | required | Publisher ID | `'12345'` | `string` | +| `custom1` | optional | Custom targeting field 1 | `'custom1'` | `string` | +| `custom2` | optional | Custom targeting field 2 | `'custom2'` | `string` | +| `custom3` | optional | Custom targeting field 3 | `'custom3'` | `string` | +| `custom4` | optional | Custom targeting field 4 | `'custom4'` | `string` | +| `custom5` | optional | Custom targeting field 5 | `'custom5'` | `string` | diff --git a/dev-docs/bidders/rtbdemand_com.md b/dev-docs/bidders/rtbdemand_com.md index 9974bb7bf5..d66fb19792 100644 --- a/dev-docs/bidders/rtbdemand_com.md +++ b/dev-docs/bidders/rtbdemand_com.md @@ -3,23 +3,28 @@ layout: bidder title: RtbDemand.com description: Prebid RtbDemand.com Bidder Adaptor biddercode: rtbdemand_com -pbjs: true -pbs: false -media_types: banner, native, video -gvl_id: 14 (adkernel) +aliasCode: adkernel tcfeu_supported: true -gpp_supported: true +dsa_supported: false +gvl_id: 14 (adkernel) usp_supported: true coppa_supported: true -pbs_app_supported: true +gpp_sids: tcfeu, usp schain_supported: true -userIds: all +dchain_supported: false +userId: all +media_types: banner, video, native +safeframes_ok: true +deals_supported: false +floors_supported: true fpd_supported: true +pbjs: true +pbs: false +pbs_app_supported: false prebid_member: false +multiformat_supported: will-bid-on-any ortb_blocking_supported: true -multiformat_supported: will-bid-on-one -floors_supported: true -aliasCode: adkernel +privacy_sandbox: no sidebarType: 1 --- diff --git a/dev-docs/bidders/rtbhouse.md b/dev-docs/bidders/rtbhouse.md index 9b819d39b5..28ff641a45 100644 --- a/dev-docs/bidders/rtbhouse.md +++ b/dev-docs/bidders/rtbhouse.md @@ -4,18 +4,24 @@ title: RTBHouse description: Prebid RTB House Bidder Adapter gvl_id: 16 tcfeu_supported: true +usp_supported: false +coppa_supported: false +gpp_supported: true dsa_supported: true pbjs: true pbs: true biddercode: rtbhouse prebid_member: true floors_supported: true +fpd_supported: true safeframes_ok: true media_types: banner, native schain_supported: true userIds: id5Id, identityLink, pubProvidedId pbs_app_supported: true ortb_blocking_supported: partial +multiformat_supported: will-bid-on-any +privacy_sandbox: topics sidebarType: 1 --- @@ -73,50 +79,3 @@ pbjs.setBidderConfig({ ### Setting up the Prebid Server Adapter If you’re a Prebid Server host company looking to enable the RTB House server-side adapter, you'll need to contact . They will guide you through the process. Do not use the default bidder config file as it will require custom partner code to be entered. It will be provided by RTB House. - -### Protected Audience API (FLEDGE) support - -There’s an option to receive demand for Protected Audience API (FLEDGE/PAAPI) -ads using RTB House bid adapter. -Prebid’s [fledgeForGpt](https://docs.prebid.org/dev-docs/modules/fledgeForGpt.html) -module and Google Ad Manager is currently required. - -The following steps should be taken to setup Protected Audience for RTB House: - -1. Reach out to your RTB House representative for setup coordination. - -2. Build and enable FLEDGE module as described in -[fledgeForGpt](https://docs.prebid.org/dev-docs/modules/fledgeForGpt.html) -module documentation. - - a. Make sure to enable RTB House bidder to participate in FLEDGE. If there are any other bidders to be allowed for that, add them to the **bidders** array: - - ```javascript - pbjs.setBidderConfig({ - bidders: ["rtbhouse"], - config: { - fledgeEnabled: true - } - }); - ``` - - b. If you as a publisher have your own [decisionLogicUrl](https://github.com/WICG/turtledove/blob/main/FLEDGE.md#21-initiating-an-on-device-auction) - you may utilize it by setting up a dedicated `fledgeConfig` object: - - ```javascript - pbjs.setBidderConfig({ - bidders: ["rtbhouse"], - config: { - fledgeEnabled: true, - fledgeConfig: { - seller: 'https://seller.domain', - decisionLogicUrl: 'https://seller.domain/decisionLogicFile.js', - sellerTimeout: 100 - } - } - }); - ``` - - The `decisionLogicUrl` must be in the same domain as `seller` and has to respond with `X-Allow-FLEDGE: true` http header. - - `sellerTimeout` is optional, defaults to 50 as per spec, will be clamped to 500 if greater. diff --git a/dev-docs/bidders/admixerwl.md b/dev-docs/bidders/rtbstack.md similarity index 54% rename from dev-docs/bidders/admixerwl.md rename to dev-docs/bidders/rtbstack.md index 8232989500..f5b30d9950 100644 --- a/dev-docs/bidders/admixerwl.md +++ b/dev-docs/bidders/rtbstack.md @@ -1,9 +1,9 @@ --- layout: bidder -title: AdmixerWL +title: RTB Stack description: Prebid AdMixer Bidder Adaptor pbjs: true -biddercode: admixerwl +biddercode: rtbstack aliasCode: admixer media_types: banner, video, native tcfeu_supported: true @@ -18,11 +18,37 @@ multiformat_supported: will-bid-on-any safeframes_ok: true --- +#### Bidder Configuration + +RTB Stack bidder requires bidderURL to be set. Please note that rtbstack bids will not be requested without this config. It must be set before auction starts. + +```js +pbjs.setBidderConfig({ + bidders: ['rtbstack'], + config: { + bidderURL: 'https://us-adx-example.rtb-stack.com/prebid?client=44e2d241-5051-4b58-8ac6-f17e13732339&ssp=3&endpoint=777' + } +}); +``` + ### Bid Params {: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | |---------------------|----------|--------------------------------------------------------------------------------------------|------------------------------|----------| -| `endpointId` | required | Unique Entity ID. Could be obtained from your account manager. | 51772 | `int` | -| `clientId` | required | Unique Entity ID. Could be obtained from your account manager. | 312 | `int` | +| `tagId` | required |The unique identifier of the ad placement. Will be used for comparison of statistics. | 51772 | `int` | | `kvTargeting` | optional | Key/Value - a pair of the unique values that will be used for the custom targeting option. | {key1: value2, key2: value2} | `object` | + +#### Bid Example + +```js +{ + bidder: 'rtbstack', + params: { + tagId: '12345', + kvTargeting: { + example: 'test' + } + } +} +``` diff --git a/dev-docs/bidders/rubicon.md b/dev-docs/bidders/rubicon.md index c701ed3427..7256b383dc 100644 --- a/dev-docs/bidders/rubicon.md +++ b/dev-docs/bidders/rubicon.md @@ -270,7 +270,6 @@ var nativeAdUnit = { code: 'myNativeAdUnit', mediaTypes: { native: { - sendTargetingKeys: false, ortb: { ver:"1.2", context: 2, // required for 1.2 diff --git a/dev-docs/bidders/rumble.md b/dev-docs/bidders/rumble.md new file mode 100644 index 0000000000..8290d0ed9e --- /dev/null +++ b/dev-docs/bidders/rumble.md @@ -0,0 +1,41 @@ +--- +layout: bidder +title: Rumble Advertising Center +description: Prebid Rumble Bidder Adapter +biddercode: rumble +tcfeu_supported: false +dsa_supported: false +gvl_id: none +usp_supported: true +coppa_supported: false +gpp_sids: none +schain_supported: false +dchain_supported: false +media_types: video +safeframes_ok: true +floors_supported: true +fpd_supported: false +pbjs: true +pbs: false +prebid_member: false +multiformat_supported: will-bid-on-one +ortb_blocking_supported: false +privacy_sandbox: no +sidebarType: 1 +--- + +### Note + +To use the Rumble Advertising Center bidder, you need to have an existing Rumble Advertising Center account. To create a +new account, see . For additional help, contact support or your account representative. + +### Bid Params + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|-------------|----------|---------------------------------------------------------|----------|------------| +| publisherId | required | Account publishing ID | `1234` | `number` | +| siteId | required | The site ID you want to send requests | `123` | `number` | +| zoneId | optional | An optional zone ID that you want to force requests to | `12` | `number` | +| test | optional | An optional boolean flag for sending test requests | `true` | `boolean` | diff --git a/dev-docs/bidders/rxnetwork.md b/dev-docs/bidders/rxnetwork.md new file mode 100644 index 0000000000..d2382b1a4a --- /dev/null +++ b/dev-docs/bidders/rxnetwork.md @@ -0,0 +1,40 @@ +--- +layout: bidder +title: RxNetwork +description: Prebid RxNetwork Bidder Adaptor +aliasCode: adkernel +tcfeu_supported: true +dsa_supported: false +gvl_id: 14 (adkernel) +usp_supported: true +coppa_supported: true +gpp_sids: tcfeu, usp +schain_supported: true +dchain_supported: false +userId: all +media_types: banner, video, native +safeframes_ok: true +deals_supported: false +floors_supported: true +fpd_supported: true +pbjs: true +pbs: true +pbs_app_supported: true +prebid_member: false +multiformat_supported: will-bid-on-any +ortb_blocking_supported: true +privacy_sandbox: no +sidebarType: 1 +--- + +### Note + +The RxNetwork Bidding adaptor requires setup and approval before beginning. Please reach out to for more details + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------|----------|-----------------------|---------------------------|----------| +| `host` | required | Ad network's RTB host | `'cpm.rxnetwork.net'` | `string` | +| `zoneId` | required | RTB zone id | `30164` | `integer` | diff --git a/dev-docs/bidders/screencore.md b/dev-docs/bidders/screencore.md index 2aef78ac89..0a978cf530 100644 --- a/dev-docs/bidders/screencore.md +++ b/dev-docs/bidders/screencore.md @@ -10,6 +10,7 @@ schain_supported: true media_types: banner, video, native safeframes_ok: true deals_supported: true +pbjs: true pbs: true sidebarType: 1 floors_supported: true diff --git a/dev-docs/bidders/seedtag.md b/dev-docs/bidders/seedtag.md index 768fae2ecd..33b8b0d37b 100644 --- a/dev-docs/bidders/seedtag.md +++ b/dev-docs/bidders/seedtag.md @@ -14,6 +14,9 @@ coppa_supported: true ortb_blocking_supported: partial sidebarType: 1 gpp_supported: true +pbs: true +pbs_app_supported: false +floors_supported: true --- ### Note @@ -21,15 +24,24 @@ gpp_supported: true Please reach out to your seedtag account team before using this plugin. The publisher id 0000-0000-01 returns demo responses. -### Bid Params +### Bid Params (pbjs) {: .table .table-bordered .table-striped } + | Name | Scope | Description | Example | Type | |-------------------|---------------------|--------------------------------------------------------------------------------|-----------------------|----------| | `publisherId` | required | The publisher id. | 0000-0000-01 | `string` | | `adUnitId` | required | The adunit id. | 00000 | `string` | | `placement` | required | Adunit placement, posibles values: inScreen, inArticle | inScreen | `string` | +### Bid Params (pbs) + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|-------------------|---------------------|--------------------------------------------------------------------------------|-----------------------|----------| +| `adUnitId` | required | The adunit id. | 00000 | `string` | + ### InScreen example The integration for Seedtag uses banner mediaTypes for all types of creatives (display/video) @@ -84,7 +96,7 @@ const adUnits = [ ] ``` -## InBanner example +### InBanner example ```js const adUnits = [ @@ -109,7 +121,7 @@ const adUnits = [ ] ``` -## inStream example +### inStream example ```js var adUnits = [{ diff --git a/dev-docs/bidders/setupad.md b/dev-docs/bidders/setupad.md index a6ce0dad27..f48d280776 100644 --- a/dev-docs/bidders/setupad.md +++ b/dev-docs/bidders/setupad.md @@ -27,7 +27,7 @@ sidebarType: 1 | Name | Scope | Description | Example | Type | |----------------+-------+-----------------------------------+-----------+---------| | `placement_id` | required | Placement ID, provided by setupad | `'12345'` | String | -| `account_id` | optional | Account ID, provided by setupad | `'12345'` | String | +| `account_id` | required | Account ID, provided by setupad | `'12345'` | String | ### Additional options diff --git a/dev-docs/bidders/sevio.md b/dev-docs/bidders/sevio.md new file mode 100644 index 0000000000..1436e08047 --- /dev/null +++ b/dev-docs/bidders/sevio.md @@ -0,0 +1,27 @@ +--- +layout: bidder +title: Sevio +description: Prebid Sevio Bidder Adaptor +pbjs: true +pbs: false +biddercode: sevio +sidebarType: 1 +tcfeu_supported: true +usp_supported: true +gvl_id: 1393 +media_types: native +safeframes_ok: false +deals_supported: false +fpd_supported: false +prebid_member: false +ortb_blocking_supported: false +--- + + +### Bid Params + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|---------------|----------|------------------|---------|----------| +| `zone` | required | Zone Id | | `string` | diff --git a/dev-docs/bidders/sharethrough.md b/dev-docs/bidders/sharethrough.md index f3673a5291..637817d201 100644 --- a/dev-docs/bidders/sharethrough.md +++ b/dev-docs/bidders/sharethrough.md @@ -21,21 +21,61 @@ ortb_blocking_supported: partial sidebarType: 1 --- -### Note +### Before You Begin The Sharethrough bidder adapter requires additional setup and approval from the Sharethrough Integrations team. Please reach out to your account manager for more information to start using it. ### Bid Params {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|-------------|----------|------------------------------------------------------------|------------------------------|----------------------| -| `pkey` | required | The placement key | `'DfFKxpkRGPMS7A9f71CquBgZ'` | `string` | -| `bcat` | optional | (deprecated) Array of blocked IAB Categories | `['IAB1-2', 'IAB1-3']` | `string[]` | -| `badv` | optional | (deprecated) Array of blocked Advertisers by their domains | `['ford.com', 'pepsi.com']` | `string[]` | +| Name | Scope | Description | Example | Type | +|-----------------|----------|-------------------------------------------------------------------------------|------------------------------|----------------------| +| `pkey` | required | The placement key | `'DfFKxpkRGPMS7A9f71CquBgZ'` | `string` | +| `bcat` | optional | (deprecated) Array of blocked IAB Categories | `['IAB1-2', 'IAB1-3']` | `string[]` | +| `badv` | optional | (deprecated) Array of blocked Advertisers by their domains | `['ford.com', 'pepsi.com']` | `string[]` | +| `eqtvNetworkId` | optional | Optional parameter to have bid requests directed to the Equativ exchange | `4004` | `integer` | -Note: Providing `bcat` and `badv` via Bid Params is deprecated, the First Party Data method should be preferred (see below). -When both methods are provided, first party data values will be used and bid param values will be ignored. +**Note**: Providing `bcat` and `badv` via Bid Params is deprecated, the First Party Data method should be preferred (see below). +When both methods are provided (i.e. when `badv` and `bcat` are specified both as bid params and through the first party ortb2 method), first party data values will be used and bid param values will be ignored. + +#### Configuration + +Sample banner setup: + +```js + +``` #### First Party Data @@ -86,3 +126,31 @@ pbjs.setConfig({ } }); ``` + +### Additional Notes + +#### Request and Response Attributes + +- TTL is 360 for display and native, 3600 for video (in milliseconds). +- Safeframes are supported. +- Advertiser domains are available in bid responses at `meta.advertiserDomains` +- Bids are returned in **net** - that is, the bids returned reflect the bid amount with revenue sharing already taken into account. No adjustment is necessary. +- Sharethrough is GDPR and COPPA compliant. + +#### Supported Media Types + +- Banner +- Native +- Video (instream and outstream) + +#### Default Ad Server Key Value + +- `sharethrough` + +### Prebid Module Support + +For publishers using PBJS version 5 and above, current module support includes: + +- Price Floors +- Supply Chain Object +- User ID diff --git a/dev-docs/bidders/shinez.md b/dev-docs/bidders/shinez.md index 8340d8e589..eb6ae23063 100644 --- a/dev-docs/bidders/shinez.md +++ b/dev-docs/bidders/shinez.md @@ -5,7 +5,7 @@ description: Prebid Shinez Bidder Adapter multiformat_supported: will-bid-on-any pbjs: true biddercode: shinez -media_types: banner, video +media_types: banner, video, native schain_supported: true usp_supported: true floors_supported: true @@ -21,9 +21,10 @@ The Shinez adapter requires setup and approval. Please reach out to = 6.14.0. + +Native >= 9.27.0. + +Multi-format requests >= 9.27.0. diff --git a/dev-docs/bidders/shinezRtb.md b/dev-docs/bidders/shinezRtb.md index cccc377eb5..08119040a7 100644 --- a/dev-docs/bidders/shinezRtb.md +++ b/dev-docs/bidders/shinezRtb.md @@ -26,13 +26,14 @@ sidebarType: 1 ### Bid Params {: .table .table-bordered .table-striped } + | Name | Scope | Description | Example | Type | |------------|----------|-------------------------------------------------------------------------------------------|------------------------------|----------| | `cId` | required | The connection ID from shinezRtb. | `'562524b21b1c1f08117fc7f9'` | `string` | | `pId` | required | The publisher ID from shinezRtb. | `'59ac17c192832d0011283fe3'` | `string` | | `bidFloor` | optional | The minimum bid value desired. shinezRtb will not respond with bids lower than this value. | `0.90` | `float` | -## Example +### Example ```javascript var adUnits = [{ diff --git a/dev-docs/bidders/showheroes-bs.md b/dev-docs/bidders/showheroes-bs.md index a4e3fba3a4..d8c298a88a 100644 --- a/dev-docs/bidders/showheroes-bs.md +++ b/dev-docs/bidders/showheroes-bs.md @@ -9,7 +9,12 @@ gvl_id: 111 tcfeu_supported: true usp_supported: true schain_supported: true +userId: all +floors_supported: true +fpd_supported: true +multiformat_supported: will-bid-on-one sidebarType: 1 +pbs: true --- @@ -19,6 +24,174 @@ sidebarType: 1 {: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | |-------------|----------------------------------|-------------------------------------|------------------------------------------|-----------| -| `playerId` | required (if not send unitId) | VideoLibrary player ID | `'0151f985-fb1a-4f37-bb26-cfc62e43ec05'` | `string` | -| `unitId` | required (if not send playerId) | Monetize unit ID | `'AACBTwsZVANd9NlB'` | `string` | -| `vpaidMode` | optional | Vpaid wrapper; default: `false`. | `true` | `boolean` | +| `unitId` | required | ShowHeroes MAX unit ID | `'1234abcd-5678efgh'` | `string` | + +All other parameters should be sent inside openRTB request. + +### openRTB2 support + +{: .alert.alert-danger :} +Starting with Prebid.js version 9.18 ShowHeores bidder adapter is requesting bids via openRTB protocol. +Publishers can use the `ortb2` method of setting [First Party Data](https://docs.prebid.org/features/firstPartyData.html). Bidder supports all first-party data fields: site, user, segments, and imp-level first-party data. + +### testing + +While developing or testing locally, you can request a test request by marking the openRTB as a test. +To do that specifically for `showheroes-Bs` you can do: + +```javascript +pbjs.setBidderConfig({ + bidders: ['showheroesBs'], + config: { + ortb2: { + test:1 + } + } +}) +``` + +Or, more easily you can mark the whole request as a test request by doing: + +```javascript +pbjs.setConfig({ortb2: {test: 1}}) +``` + +#### Prebid Server Test Request + +To verify that the Prebid Server is working properly with the server-side `Showheroes` adapter a `test` property can be utilized. + +```json +{ + "imp": [{ + "video": {}, + "ext": { + "params": { + "unitId": "1234abcd-5678efgh" + } + } + }], + "site": { + "page": "{PAGE_URL}" + }, + "test": 1 +} +``` + +#### Outstream + +Example of adunit configuration for the outstream unit: + +```javascript + +var pbjs = pbjs || {}; +pbjs.que = pbjs.que || []; +var adUnits = [ + { + // Video adUnit + code: 'video-div-1', + mediaTypes: { + video: { + context: 'outstream', + playerSize: [640, 480], + mimes: ['video/mp4'], + playbackmethod: [2, 4, 6], + api: [1, 2, 4, 6], + protocols: [3, 4, 7, 8, 10], + placement: 1, + minduration: 0, + maxduration: 60, + startdelay: 0, + skip: 1 + }, + }, + bids: [{ + bidder: "showheroes-bs", + params: { + unitId: "1234abcd-5678efgh", + } + }], + } +]; +pbjs.que.push(function () { + pbjs.setConfig({...}); + pbjs.addAdUnits(adUnits); + pbjs.requestBids({ bidsBackHandler: sendAdServerRequest }); +}); +``` + +You could use this example and place it in .html example pages inside the Prebid.js repository. + +#### instream + +Example of adunit configuration for the instream unit: + +```javascript + +var pbjs = pbjs || {}; +pbjs.que = pbjs.que || []; +var videoAdUnit = { + code: 'video1', + sizes: [640,480], + mediaTypes: { + video: {context: 'instream', playerSize: [640, 480]} + }, + bids: [ + { + bidder: 'showheroesBs', + params: { + unitId: "1234abcd-5678efgh", + } + } + ] +}; +pbjs.que.push(function(){ + pbjs.addAdUnits(videoAdUnit); + pbjs.setConfig({ + cache: { + url: 'https://prebid.example.com/pbc/v1/cache' + }, + ..., + }); + pbjs.requestBids({ + timeout: 10000, + bidsBackHandler : function(bids) { + var vastUrl = bids["video1"].bids[0].vastUrl + invokeVideoPlayer(vastUrl); + } + }); +}); +``` + +You could use this example and place it in the `test/pages/instream.html` example page inside the Prebid.js repository. + +#### banner + +Example of adunit configuration for banner ads: + +```javascript +var pbjs = pbjs || {}; +pbjs.que = pbjs.que || []; +var adUnits = [ + { + code: 'div-gpt-ad-1460505748561-0', + mediaTypes: { + banner: { + sizes: [[300, 250]], + } + }, + bids: [{ + bidder: "showheroes-bs", + params: { + unitId: "1234abcd-5678efgh", + } + }], + } +]; +pbjs.que.push(function () { + pbjs.setConfig({...}); + pbjs.addAdUnits(adUnits); + pbjs.requestBids({ bidsBackHandler: sendAdServerRequest }); +}) +``` + +You can use this example and place in the `hello_world` gpt integration test page diff --git a/dev-docs/bidders/silverpush.md b/dev-docs/bidders/silverpush.md index b750390d4d..b3d14117ed 100644 --- a/dev-docs/bidders/silverpush.md +++ b/dev-docs/bidders/silverpush.md @@ -27,6 +27,7 @@ The Silverpush Bidding adapter requires setup before beginning. Please contact u #### Banner {: .table .table-bordered .table-striped } + | Name | Scope | Description | Example | Type | | -------------- | ----------- | ------------------------------------------ | ------------- | ------------ | | `publisherId` | required | Publisher id provided by silverpush | "123456" | String | @@ -37,6 +38,7 @@ The Silverpush Bidding adapter requires setup before beginning. Please contact u The following banner parameters are supported here so publishers may fully declare their banner inventory: {: .table .table-bordered .table-striped } + | Name | Scope | Description | Example | Type | | --------- | ------------| ----------------------------------------------------------------- | --------- | --------- | | sizes | required | Avalaible sizes supported for banner ad unit | [ [300, 250], [300, 600] ] | [[Integer, Integer], [Integer, Integer]] | @@ -64,6 +66,7 @@ const adUnits = [{ #### Video {: .table .table-bordered .table-striped } + | Name | Scope | Description | Example | Type | | ---- | ----- | ----------- | ------- | ---- | | `publisherId` | required | Publisher id provided by silverpush | "123456" | String | @@ -74,6 +77,7 @@ const adUnits = [{ The following video parameters are supported here so publishers may fully declare their video inventory: {: .table .table-bordered .table-striped } + | Name | Scope | Description | Example | Type | | --------- | ------------| ----------------------------------------------------------------- | --------- | --------- | | context | required | instream or outstream |"outstream" | string | @@ -128,7 +132,7 @@ Publishers should use the `ortb2` method of setting First Party Data. The follow - ortb2.user.ext.data -## Prebid Server +### Prebid Server ```javascript pbjs.setConfig({ @@ -157,5 +161,5 @@ pbjs.setConfig({ }); ``` -## Additional Details +### Additional Details For any queries, reach us at . diff --git a/dev-docs/bidders/smaato.md b/dev-docs/bidders/smaato.md index f298759132..56227993bf 100644 --- a/dev-docs/bidders/smaato.md +++ b/dev-docs/bidders/smaato.md @@ -8,6 +8,7 @@ gvl_id: 82 usp_supported: true coppa_supported: true gpp_supported: true +dsa_supported: true media_types: banner, video, native userIds: all pbjs: true @@ -59,7 +60,7 @@ The Smaato adapter will convert bidfloors to 'USD' currency as needed. | `adbreakId` | required | Your Smaato adbreak id. Required for adpod (long-form video) requests | `'41002234'` | `string` | | `app` | optional | Object containing mobile app parameters. See the [App Object](#smaato-app-object) for details.| `app : { ifa: '56700000-9cf0-22bd-b23e-46b96e40003a'}` | `object` | -##### Note +#### Note In case of AdPods, the Smaato adapter will only read the first `imp[].skadn` entry for each AdPod, such that there should only be one `skadn` occurrence per AdPod. @@ -274,7 +275,7 @@ Following example includes sample `imp` object with publisherId and adSlot which }, "ext":{ "smaato":{ - "publisherId":"100042525", + "publisherId":"1100042525", "adspaceId":"130563103" } } diff --git a/dev-docs/bidders/smartadserver.md b/dev-docs/bidders/smartadserver.md index d30a06f619..dc5c8a8967 100644 --- a/dev-docs/bidders/smartadserver.md +++ b/dev-docs/bidders/smartadserver.md @@ -3,16 +3,29 @@ layout: bidder title: Smart AdServer description: Prebid Smart AdServer Bidder Adapter biddercode: smartadserver -media_types: display, video, native +media_types: display, video, native, audio +tcfeu_supported: true gvl_id: 45 tcfeu_supported: true +multiformat_supported: will-bid-on-any +coppa_supported: true gpp_supported: true +gpp_sids: tcfca, tcfeu, usnat, usstate_all, usp schain_supported: true +dchain_supported: false usp_supported: true +fpd_supported: true +dsa_supported: true +deals_supported: true +safeframes_ok: true userIds: all pbjs: true pbs: true +pbs_app_supported: true +prebid_member: false floors_supported: true +ortb_blocking_supported: true +privacy_sandbox: no sidebarType: 1 --- @@ -23,32 +36,32 @@ The Smart AdServer bidder adapter requires setup and approval from the Equativ ( ### Bid params {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|------------|----------|----------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------|-----------| -| `networkId` | required for Prebid Server | The network identifier you have been provided with. | `1234` | `integer` | -| `siteId` | required for Prebid.js | The placement site ID | `1234` | `integer` | -| `pageId` | required | The placement page ID | `1234` | `integer` | -| `formatId` | required | The placement format ID | `1234` | `integer` | -| `domain` | optional | The network domain (default see example) | `'http://prg.smartadserver.com', 'https://prg.smartadserver.com'` | `string` | -| `target` | optional | The keyword targeting | `'sport=tennis'` | `string` | -| `bidfloor` | optional | Bid floor for this placement in USD or in the currency specified by the `currency` parameter. (Default: `0.0`) | `0.42` | `float` | -| `appName` | optional | Mobile application name | `'Smart AdServer Preview'` | `string` | -| `buId` | optional | Mobile application bundle ID | `'com.smartadserver.android.dashboard'` | `string` | -| `ckId` | optional | Unique Smart AdServer user ID | `1234567890123456789` | `integer` | -| `video` | optional | Parameter object for instream video. See [video Object](#smartadserver-video-object) | `{}` | `object` | -| `schain` | optional | Supply Chain | `'1.0,1!exchange1.com,1234,1,bid-request-1,publisher,publisher.com'` | `string` | - -**Note:** The site, page and format identifiers have to all be provided or all empty. +| Name | Scope | Description | Example | Type | +|------|-------|-------------|---------|------| +| `networkId` | required for Prebid Server | The network identifier you have been provided with | `1234` | `integer` | +| `siteId` | required for Prebid.js | The placement site ID |`1234` | `integer` | +| `pageId` | required for Prebid.js | The placement page ID | `1234` | `integer` | +| `formatId` | required for Prebid.js | The placement format ID | `1234` | `integer` | +| `domain` | optional | The network domain (default see example) | `'http://prg.smartadserver.com', 'https://prg.smartadserver.com'` | `string` | +| `target` | optional | The keyword targeting | `'sport=tennis'` | `string` | +| `bidfloor` | optional | Bid floor for this placement in USD or in the currency specified by the `currency` parameter. (Default: `0.0`) | `0.42` | `float` | +| `appName` | optional | Mobile application name | `'Smart AdServer Preview'` | `string` | +| `buId` | optional | Mobile application bundle ID | `'com.smartadserver.android.dashboard'` | `string` | +| `ckId` | optional | Unique Smart AdServer user ID | `1234567890123456789` | `integer` | +| `video` | optional | Parameter object for instream video. See [video Object](#smartadserver-video-object) | `{}` | `object` | +| `schain` | optional | Supply Chain | `'1.0,1!exchange1.com,1234,1,bid-request-1,publisher,publisher.com'` | `string` | + +**Note:** The site, page and format identifiers have to all be provided (for Prebid.js) or all empty (for Prebid Server). #### Video Object {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|--------------|----------|-------------------------------------------------------------------------------------------------------------------------|------------------------|-----------| -| `protocol` | optional | Maximum open RTB video protocol supported | `8` (VAST 4.0 wrapper) | `integer` | -| `startDelay` | optional | Allowed values: 1 (generic pre-roll, default), 2 (generic mid-roll), 3 (generic post-roll) | `1` | `integer` | +| Name | Scope | Description | Example | Type | +|------|-------|-------------|---------|------| +| `protocol` | optional | Maximum open RTB video protocol supported | `8` (VAST 4.0 wrapper) | `integer` | +| `startDelay` | optional | Allowed values: 1 (generic pre-roll, default), 2 (generic mid-roll), 3 (generic post-roll) | `1` | `integer` | ### Supported Media Types (Prebid.js) @@ -57,6 +70,7 @@ The Smart AdServer bidder adapter requires setup and approval from the Equativ ( |---|---| | `banner` | Supported | | `video` | Supported | +| `audio` | Supported | | `native` | Not currently supported | ### Supported Media Types (Prebid Server) @@ -66,11 +80,15 @@ The Smart AdServer bidder adapter requires setup and approval from the Equativ ( |------|-------| | `banner` | Supported | | `video` | Supported | +| `audio` | Supported | | `native` | Supported | +### Coppa support +Coppa is supported by our prebid server adapter but not by our prebid.js adapter. + ### Examples -Without site/page/format : +Without site/page/format: ```json "imp": [{ @@ -92,7 +110,7 @@ Without site/page/format : }] ``` -With site/page/format : +With site/page/format: ```json "imp": [{ @@ -108,10 +126,10 @@ With site/page/format : }, "ext": { "smartadserver": { - "networkId": 73 - "siteId": 1, - "pageId": 2, - "formatId": 3 + "networkId": 73, + "siteId": 1, + "pageId": 2, + "formatId": 3 } } }] diff --git a/dev-docs/bidders/smarthub.md b/dev-docs/bidders/smarthub.md index c1853bd9c4..66ce57ba44 100644 --- a/dev-docs/bidders/smarthub.md +++ b/dev-docs/bidders/smarthub.md @@ -1,7 +1,7 @@ --- layout: bidder -title: SmartHub -description: SmartHub Bidder Adapter +title: Attekmi +description: Attekmi Bidder Adapter biddercode: smarthub usp_supported: true schain_supported: true @@ -13,6 +13,10 @@ pbs_app_supported: true sidebarType: 1 --- +### Note + +Please note that SmartHub has been renamed to Attekmi. + ### Prebid.js Bid Params {: .table .table-bordered .table-striped } diff --git a/dev-docs/bidders/smartx.md b/dev-docs/bidders/smartx.md index fc028e4483..0ea90f90c4 100644 --- a/dev-docs/bidders/smartx.md +++ b/dev-docs/bidders/smartx.md @@ -65,6 +65,6 @@ This adapter requires setup and approval from the smartclip team. Please contact | `title` | optional | The player can show a freely definable text, a macro `[remainingTime]` in this string will be replaced with the remaining play time of the ad in seconds. | `'Advertisement [remainingTime]s'` | `string` | | `skipOffset` | optional | In order to enable skipping from the start set the delay to `0`, to show the skip button after 5 seconds set it to `5`. Setting a general skipOffset is discouraged. Note that linear creatives carrying a skipsoffet attribute will override the general player setting. By default the player does not set a general skipoffset, so a skip button will only be shown, if an ad has a specific skipoffset attached. | `0` | `integer` | | `startOpen` | optional | Per default the player will start fully expanded, if a valid ad can be played. Setting this option to `false` will trigger an expand animation instead once the player comes into view. Default is `true`. | `'false'` | `string` | -| `endingScreen` | optional | By default the player will not close, but show the ending screen when an advertisement is complete (last frame of the ad and a replay button, if an advertisment comes with an endcard that will be shown). If set to `false` the player will collapse. Some VPAID creatives can cause issues with ending screen or replay behaviour. Default is `true`. | `'true'` | `string` | +| `endingScreen` | optional | By default the player will not close, but show the ending screen when an advertisement is complete (last frame of the ad and a replay button, if an advertisement comes with an endcard that will be shown). If set to `false` the player will collapse. Some VPAID creatives can cause issues with ending screen or replay behaviour. Default is `true`. | `'true'` | `string` | | `desiredBitrate`| optional | You can specify a target bitrate for the creative, higher values will increase video quality but will cost bandwidth. Value is given in kpbs. Default is `700`. | `800` | `integer` | -| `visibilityThreshold`| optional | Defines the percentage of the player which has to be in the visible area to play and pause the advertisment. The default is `50`. | `50` | `integer` | +| `visibilityThreshold`| optional | Defines the percentage of the player which has to be in the visible area to play and pause the advertisement. The default is `50`. | `50` | `integer` | diff --git a/dev-docs/bidders/smartyads.md b/dev-docs/bidders/smartyads.md index 5629f1890a..8a07ac614e 100644 --- a/dev-docs/bidders/smartyads.md +++ b/dev-docs/bidders/smartyads.md @@ -6,6 +6,7 @@ biddercode: smartyads gvl_id: 534 tcfeu_supported: true usp_supported: true +gpp_sids: usnat, usstate_all, usp coppa_supported: true schain_supported: true media_types: banner, video, native diff --git a/dev-docs/bidders/smartyexchange.md b/dev-docs/bidders/smartyexchange.md new file mode 100644 index 0000000000..6ea3f86430 --- /dev/null +++ b/dev-docs/bidders/smartyexchange.md @@ -0,0 +1,41 @@ +--- +layout: bidder +title: SmartyExchange +description: SmartyExchange Adaptor +aliasCode: adkernel +tcfeu_supported: true +dsa_supported: false +gvl_id: 14 (adkernel) +usp_supported: true +coppa_supported: true +gpp_sids: tcfeu, usp +schain_supported: true +dchain_supported: false +userId: all +media_types: banner, video, native +safeframes_ok: true +deals_supported: false +floors_supported: true +fpd_supported: true +pbjs: true +pbs: false +pbs_app_supported: false +prebid_member: false +multiformat_supported: will-bid-on-any +ortb_blocking_supported: true +privacy_sandbox: no +sidebarType: 1 + +--- + +### Note + +The SmartyExchange bidding adaptor requires setup and approval before beginning. Please reach out to for more details + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------|----------|-----------------------|---------------------------|----------| +| `host` | required | RTB host | `'cpm.arteabee.com'` | `string` | +| `zoneId` | required | RTB zone id | `30164` | `integer` | diff --git a/dev-docs/bidders/smartytech.md b/dev-docs/bidders/smartytech.md index 012851cbe4..8c66f616be 100644 --- a/dev-docs/bidders/smartytech.md +++ b/dev-docs/bidders/smartytech.md @@ -6,19 +6,23 @@ pbjs: true biddercode: smartytech media_types: banner, video multiformat_supported: will-bid-on-one +usp_supported: true +coppa_supported: true +userIds: all sidebarType: 1 --- ### Bid Params {: .table .table-bordered .table-striped } + | Name | Scope | Description | Example | Type | |--------------|----------|--------------|---------|-----------| | `endpointId` | required | Endpoint ID. | `14` | `integer` | ### Sample Banner Ad Unit Example -``` +```javascript var adUnits = [{ code: '/123123123/prebidjs-banner', mediaTypes: { @@ -40,7 +44,7 @@ var adUnits = [{ ### Sample Video Ad Unit Example -``` +```javascript var videoAdUnit = { code: '/123123123/video-vast-banner', mediaTypes: { @@ -58,3 +62,21 @@ var videoAdUnit = { }] }; ``` + +### User ID Support + +SmartyTech adapter supports all Prebid.js User ID modules. User IDs are automatically included in bid requests when available. + +### Additional Configuration + +It is possible to configure requests to be split into chunks so as to have fewer bid requests in a single http request (default value is 10). + +```javascript +pbjs.setBidderConfig({ + config: { + smartytech: { + chunkSize: 5 // makes 1 http request per 5 ad units configured + } + } +}); +``` diff --git a/dev-docs/bidders/smilewanted.md b/dev-docs/bidders/smilewanted.md index 42429175b0..0bac421c76 100644 --- a/dev-docs/bidders/smilewanted.md +++ b/dev-docs/bidders/smilewanted.md @@ -2,14 +2,22 @@ layout: bidder title: Smile Wanted description: SmileWanted Bidder Adapter -media_types: banner, video -pbjs: true -pbs: true biddercode: smilewanted -tcfeu_supported: false +tcfeu_supported: true +gvl_id: 639 usp_supported: true +coppa_supported: true +schain_supported: true userIds: all -gvl_id: 639 +media_types: banner, video, native +safeframes_ok: true +deals_supported: true +floors_supported: true +pbjs: true +pbs: true +prebid_member: false +multiformat_supported: will-bid-on-one +privacy_sandbox: no sidebarType: 1 --- @@ -37,7 +45,7 @@ You can add `#sw_test_campaign` to the end of any URL. This will have the effect Add the following code to enable user sync. Smile Wanted strongly recommends enabling user syncing through iFrames. This functionality improves partners' user match rates and increases the Smile Wanted bid rate and bid price. Be sure to call `pbjs.setConfig()` only once. -``` +```javascript pbjs.setConfig({ userSync: { iframeEnabled: true, diff --git a/dev-docs/bidders/smoot.md b/dev-docs/bidders/smoot.md new file mode 100644 index 0000000000..61cbde4c2f --- /dev/null +++ b/dev-docs/bidders/smoot.md @@ -0,0 +1,40 @@ +--- +layout: bidder +title: Smoot +description: Prebid Smoot Bidder Adapter +biddercode: smoot +gpp_sids: usstate_all +tcfeu_supported: false +usp_supported: true +coppa_supported: true +schain_supported: true +deals_supported: false +floors_supported: true +fpd_supported: false +ortb_blocking_supported: false +media_types: banner, video, native +multiformat_supported: will-bid-on-one +userIds: all +pbjs: true +pbs: true +pbs_app_supported: false +safeframes_ok: true +sidebarType: 1 +--- + +### Note + +The Smoot Bidding adapter requires setup before beginning. Please contact us at + +### Bid Params + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|---------------|----------|--------------|---------------------------------|------------| +| `placementId` | optional | Placement Id | `'0'` | `'string'` | +| `endpointId` | optional | Endpoint Id | `'0'` | `'string'` | + +### Note + +For prebid.js you only need to use one parameter: either placementId or endpointId diff --git a/dev-docs/bidders/smootai.md b/dev-docs/bidders/smootai.md new file mode 100644 index 0000000000..e16a60e4d9 --- /dev/null +++ b/dev-docs/bidders/smootai.md @@ -0,0 +1,37 @@ +--- +layout: bidder +title: SmootAI +description: SmootAI Bidder Adaptor +biddercode: smootai +pbjs: true +pbs: false +media_types: video, banner +userIds: all +fpd_supported: false +tcfeu_supported: false +usp_supported: true +coppa_supported: true +schain_supported: true +prebid_member: false +ortb_blocking_supported: true +multiformat_supported: will-bid-on-one +floors_supported: false +aliasCode: limelightDigital +sidebarType: 1 +--- + +### Bid Params + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|:--------------|:---------|:--------------------------------------------------------------|:--------------------|:----------| +| `host` | required | Ad network's RTB host | `'ads-smoot.com'` | `string` | +| `adUnitId` | required | Ad Unit Id will be generated on Platform. | `42` | `integer` | +| `adUnitType` | required | Type of Ad Unit (`'video'`, `'banner'`) | `'banner'` | `string` | +| `publisherId` | required | Publisher ID | `'12345'` | `string` | +| `custom1` | optional | Custom targeting field 1 | `'custom1'` | `string` | +| `custom2` | optional | Custom targeting field 2 | `'custom2'` | `string` | +| `custom3` | optional | Custom targeting field 3 | `'custom3'` | `string` | +| `custom4` | optional | Custom targeting field 4 | `'custom4'` | `string` | +| `custom5` | optional | Custom targeting field 5 | `'custom5'` | `string` | diff --git a/dev-docs/bidders/sonic_twist.md b/dev-docs/bidders/sonic_twist.md index 85abfb58dc..4f25d45d85 100644 --- a/dev-docs/bidders/sonic_twist.md +++ b/dev-docs/bidders/sonic_twist.md @@ -3,23 +3,28 @@ layout: bidder title: Sonic Twist Media description: Sonic Twist Media biddercode: sonic_twist -pbjs: true -pbs: false -media_types: banner, native, video -gvl_id: 14 (adkernel) +aliasCode: adkernel tcfeu_supported: true -gpp_supported: true +dsa_supported: false +gvl_id: 14 (adkernel) usp_supported: true coppa_supported: true -pbs_app_supported: true +gpp_sids: tcfeu, usp schain_supported: true -userIds: all +dchain_supported: false +userId: all +media_types: banner, video, native +safeframes_ok: true +deals_supported: false +floors_supported: true fpd_supported: true +pbjs: true +pbs: false +pbs_app_supported: false prebid_member: false +multiformat_supported: will-bid-on-any ortb_blocking_supported: true -multiformat_supported: will-bid-on-one -floors_supported: true -aliasCode: adkernel +privacy_sandbox: no sidebarType: 1 --- diff --git a/dev-docs/bidders/sovrn.md b/dev-docs/bidders/sovrn.md index 10518d325d..98f5ceae36 100644 --- a/dev-docs/bidders/sovrn.md +++ b/dev-docs/bidders/sovrn.md @@ -7,6 +7,7 @@ pbs: true biddercode: sovrn tcfeu_supported: true usp_supported: true +gpp_supported: true userIds: all prebid_member: true schain_supported: true diff --git a/dev-docs/bidders/sparteo.md b/dev-docs/bidders/sparteo.md index 7a5d574333..c5de22b6ed 100644 --- a/dev-docs/bidders/sparteo.md +++ b/dev-docs/bidders/sparteo.md @@ -3,17 +3,17 @@ layout: bidder title: Sparteo description: Prebid Sparteo Bidder Adaptor pbjs: true -pbs: false +pbs: true biddercode: sparteo -media_types: banner, video +media_types: banner, video, native tcfeu_supported: true gvl_id: 1028 usp_supported: true prebid_member: false -schain_supported: false +schain_supported: true safeframes_ok: true deals_supported: false -floors_supported: false +floors_supported: true fpd_supported: false ortb_blocking_supported: false multiformat_supported: will-bid-on-any @@ -27,12 +27,14 @@ Sparteo Header Bidding adapter requires setup and approval. Please reach out to ### Bid params {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|-----------------------------------------------------------------------------------------|------------|-----------| -| `publisherId` | required | Your publisher ID. This information will be given to you by the Sparteo team. | `1234` | `integer` | -| `networkId` | required | Your network ID. This information will be given to you by the Sparteo team. | `1234` | `integer` | - -Only the `publisherId` OR `networkId` is required. +| Name | Scope | Description | Example | Type | +|---------------|----------|-------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------|-----------| +| `networkId` | required | Your network ID. This information will be given to you by the Sparteo team. | `'9061ab7e-f01e-43a5-b801-c1a56156f105'` | `String` | +| `custom1` | optional | To be used in reporting. Alphanumeric strings ; case sensitive ; max 40 characters ; only allowed symbols are hyphen and underscore.| `'Test-datapoint_42'` | `String` | +| `custom2` | optional | To be used in reporting. Alphanumeric strings ; case sensitive ; max 40 characters ; only allowed symbols are hyphen and underscore.| `'Test-datapoint_42'` | `String` | +| `custom3` | optional | To be used in reporting. Alphanumeric strings ; case sensitive ; max 40 characters ; only allowed symbols are hyphen and underscore.| `'Test-datapoint_42'` | `String` | +| `custom4` | optional | To be used in reporting. Alphanumeric strings ; case sensitive ; max 40 characters ; only allowed symbols are hyphen and underscore.| `'Test-datapoint_42'` | `String` | +| `custom5` | optional | To be used in reporting. Alphanumeric strings ; case sensitive ; max 40 characters ; only allowed symbols are hyphen and underscore.| `'Test-datapoint_42'` | `String` | ### Banner Object @@ -47,12 +49,12 @@ Only the `publisherId` OR `networkId` is required. {: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | |------------------|----------|--------------------------------------------------------------------------|----------------|------------------| -| `context` | required | The video context, either 'instream', 'outstream'. | `'instream'` | `String` | +| `context` | required | The video context, either 'instream', 'outstream'. | `'instream'` | `String` | | `playerSize` | required | The size (width, height) of the video player on the page, in pixels. | `[640, 480]` | `Array` | | `playbackmethod` | optional | Defines how the video inventory is initiated following the OpenRTB spec. | `[4, 5]` | `Array` | | `protocols` | optional | Defines the video protocols allowed. | `[1, 2]` | `Array` | | `api` | optional | Defines the video api allowed. | `[1, 2]` | `Array` | -| `mimes` | optional | Defines the video mimes allowed. | `['video/mp4']` | `Array` | +| `mimes` | optional | Defines the video mimes allowed. | `['video/mp4']`| `Array` | | `skip` | optional | Defines if skip is allowed. | `1` | `integer` | | `startdelay` | optional | Defines the startDelay. | `0` | `integer` | | `placement` | optional | Defines the placement. | `1` | `integer` | diff --git a/dev-docs/bidders/spinx.md b/dev-docs/bidders/spinx.md new file mode 100644 index 0000000000..4d1beef101 --- /dev/null +++ b/dev-docs/bidders/spinx.md @@ -0,0 +1,41 @@ +--- +layout: bidder +title: SpinX +description: SpinX Adaptor +biddercode: spinx +aliasCode: adkernel +tcfeu_supported: true +dsa_supported: false +gvl_id: 1308 +usp_supported: true +coppa_supported: true +gpp_sids: tcfeu, usp +schain_supported: true +dchain_supported: false +userId: all +media_types: banner, video, native +safeframes_ok: true +deals_supported: false +floors_supported: true +fpd_supported: true +pbjs: true +pbs: false +pbs_app_supported: false +prebid_member: false +multiformat_supported: will-bid-on-any +ortb_blocking_supported: true +privacy_sandbox: no +sidebarType: 1 +--- + +### Note + +The SpinX bidding adapter requires setup and approval before implementation. Please reach out to for more details. + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------|----------|-----------------------|---------------------------|----------| +| `host` | required | RTB host | `'cpm.rtads.bid'` | `string` | +| `zoneId` | required | Zone Id | 30164 | `integer` | diff --git a/dev-docs/bidders/spotx.md b/dev-docs/bidders/spotx.md index 0c4fa8ce6b..9f9a9b91d9 100644 --- a/dev-docs/bidders/spotx.md +++ b/dev-docs/bidders/spotx.md @@ -13,6 +13,7 @@ safeframes_ok: false pbjs: true gvl_id: 165 floors_supported: true +pbjs_version_notes: removed in 9.0 sidebarType: 1 --- diff --git a/dev-docs/bidders/ssp_geniee.md b/dev-docs/bidders/ssp_geniee.md new file mode 100644 index 0000000000..0e13b3c5aa --- /dev/null +++ b/dev-docs/bidders/ssp_geniee.md @@ -0,0 +1,43 @@ +--- +layout: bidder +title: Geniee SSP +description: Geniee SSP Bidder Adapter +biddercode: ssp_geniee +userId: imuId +media_types: banner +safeframes_ok: false +sidebarType: 1 +pbjs: true +tcfeu_supported: false +dsa_supported: false +gvl_id: none +usp_supported: false +coppa_supported: false +gpp_sids: none +schain_supported: false +dchain_supported: false +deals_supported: false +floors_supported: false +fpd_supported: false +pbs: false +prebid_member: false +multiformat_supported: will-bid-on-one +ortb_blocking_supported: partial +privacy_sandbox: no +--- +### Note + +This is [Geniee](https://geniee.co.jp) Bidder Adapter for Prebid.js. + +{: .alert.alert-info :} +This is Geniee *SSP* Bidder Adapter. The another adapter named "Geniee Bid Adapter" is Geniee *DSP* Bidder Adapter. + +Please contact us before using the adapter. + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|--------------|----------|-------------------------------------------------|-----------|-----------| +| `zoneId` | required | Zone ID | `1573195` | `integer` | +| `currency` | Optional | Currency setting (`'JPY'`(Default) or `'USD'`) | `'JPY'` | `string` | diff --git a/dev-docs/bidders/stackadapt.md b/dev-docs/bidders/stackadapt.md new file mode 100644 index 0000000000..08c57e01fa --- /dev/null +++ b/dev-docs/bidders/stackadapt.md @@ -0,0 +1,157 @@ +--- +layout: bidder +title: StackAdapt +description: StackAdapt Prebid Bidder Adapter +biddercode: stackadapt +pbjs: true +pbs: false +gvl_id: 238 +tcfeu_supported: true +usp_supported: true +userId: all +media_types: banner, video +coppa_supported: true +gpp_sids: tcfeu, tcfca, usnat, usstate_all, usp +gpp_supported: true +schain_supported: true +dchain_supported: false +deals_supported: true +floors_supported: true +fpd_supported: true +ortb_blocking_supported: true +multiformat_supported: will-bid-on-any +privacy_sandbox: no +prebid_member: false +sidebarType: 1 +--- + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|-----------------------------|--------------------|----------| +| `publisherId` | required | StackAdapt provided id | `'4cd53a92ra91'` | `string` | +| `placementId` | optional | StackAdapt provided id | `'e95365f397a7'` | `string` | +| `banner` | optional | banner supporting expdir | `{expdir: [1, 3]}` | `object` | +| `bidfloor` | optional | bid floor price | `1.01` | `float` | + +The following banner parameters are supported: + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------|----------|-----------------------------------|----------|------------------| +| `expdir` | optional | Directions the banner may expand. | `[1, 3]` | `Array[integer]` | + +### Banner + +#### `mediaTypes.banner` Parameters + +The StackAdapt bid adapter requires `sizes` to be defined in valid format. +See [mediaTypes.banner](https://docs.prebid.org/dev-docs/adunit-reference.html#adUnit.mediaTypes.banner) for defining mediaTypes parameters. + +Below are banner ad unit examples with required and optional parameters: + +```js + var adUnits = [ + // Banner adUnit - required parameters + { + code: 'div-test-ad-1', + mediaTypes: { + banner: { + sizes: [[300, 250]] + } + }, + bids: [{ + bidder: 'stackadapt', + params: { + publisherId: '4cd53a92ra91', + } + }] + }, + // Banner adUnit - including optional parameters + { + code: 'div-test-ad-2', + mediaTypes: { + banner: { + sizes: [[300, 250]], + pos: 1 + } + }, + bids: [{ + bidder: 'stackadapt', + params: { + publisherId: '4cd53a92ra91', + placementId: 'e95365f397a7', + bidfloor: 1.01, + banner: { + expdir: [1, 3] + } + } + }] + } + ]; +``` + +### Video + +#### `mediaTypes.video` Parameters + +The StackAdapt bid adapter requires `mimes`, `protocols`, `maxduration`, `api`, and `plcmt` to be defined in valid format. +See [mediaTypes.video](https://docs.prebid.org/dev-docs/adunit-reference.html#adUnit.mediaTypes.video) for defining mediaTypes parameters. + +Below are video ad unit examples with required and optional parameters: + +```js + var adUnits = [ + // Video adUnit - required parameters + { + code: 'div-test-ad-3', + mediaTypes: { + video: { + mimes: ['video/mp4'], + protocols: [2, 3, 5, 6], + maxduration: 60, + api: [1, 2], + plcmt: 1 + } + }, + bids: [{ + bidder: 'stackadapt', + params: { + publisherId: '4cd53a92ra91', + } + }] + }, + // Video adUnit - including optional parameters + { + code: 'div-test-ad-4', + mediaTypes: { + video: { + playerSize: [640, 360], + mimes: ['video/mp4'], + protocols: [2, 3, 5, 6], + minduration: 1, + maxduration: 60, + api: [1, 2], + playback_method: [1], + plcmt: 1, + startdelay: 1, + pos: 1, + minbitrate: 300, + maxbitrate: 1500, + skip: 1, + skipmin: 5, + skipafter: 15 + } + }, + bids: [{ + bidder: 'stackadapt', + params: { + publisherId: '4cd53a92ra91', + placementId: 'e95365f397a7', + bidfloor: 1.01, + } + }] + } + ]; +``` diff --git a/dev-docs/bidders/stailamedia.md b/dev-docs/bidders/stailamedia.md new file mode 100644 index 0000000000..4b09273bbf --- /dev/null +++ b/dev-docs/bidders/stailamedia.md @@ -0,0 +1,31 @@ +--- +layout: bidder +title: stailamedia +description: stailamedia Bidder Adapter +biddercode: stailamedia +aliasCode: appnexus +tcfeu_supported: true +gvl_id: 32 +schain_supported: true +userId: all +media_types: banner, video, native +safeframes_ok: true +deals_supported: true +pbjs: true +pbs: true +prebid_member: false +multiformat_supported: will-bid-on-any +sidebarType: 1 +--- +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|-----------------------|-----------|-----------| +| `placement_id` (PBS+PBJS) or `placementId` (PBJS) | required | Placement id | `'33037108'` | `string` | + +stailamedia is an aliased bidder for AppNexus. + +### Note + +For setup with stailamedia, please reach out to [prebid@stailamedia.com](mailto:prebid@stailamedia.com) diff --git a/dev-docs/bidders/startio.md b/dev-docs/bidders/startio.md new file mode 100644 index 0000000000..a74aeb448b --- /dev/null +++ b/dev-docs/bidders/startio.md @@ -0,0 +1,69 @@ +--- +layout: bidder +title: Start.io +biddercode: startio +description: Prebid Start.io Adapter +tcfeu_supported: true +coppa_supported: true +gpp_supported: false +floors_supported: true +media_types: banner, video, native +multiformat_supported: will-bid-on-any +safeframes_ok: false +schain_supported: false +gvl_id: 1216 +usp_supported: true +pbjs: true +pbs: true +prebid_member: false +fpd_supported: false +privacy_sandbox: no +ortb_blocking_supported: true +sidebarType: 1 +--- + +### Before You Begin + +The Start.io bidder adapter requires additional setup and approval from the Start.io team. For additional information, please reach out to . + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|-----------------------------------|------------------------|--------------| +| `publisherId` | required | Publisher ID | `'publisher-1234'` | `string` | + +#### Configuration + +Sample banner setup: + +```js +var adUnits = [ + { + code: "div-gpt-ad-12345-0", + mediaTypes: { + banner: { + sizes: [[300, 250]] + } + }, + bids: [ + { + bidder: "startio", + params: { + publisherId: "publisher-12345" + } + } + ] + } +] + +pbjs.que.push(function() { + pbjs.addAdUnits(adUnits); +}); +``` + +### Additional Notes + +#### Request and Response Attributes + +- Bids are returned in **net** - that is, the bids returned reflect the bid amount with revenue sharing already taken into account. No adjustment is necessary. diff --git a/dev-docs/bidders/stellorMediaRtb.md b/dev-docs/bidders/stellorMediaRtb.md new file mode 100644 index 0000000000..608c087082 --- /dev/null +++ b/dev-docs/bidders/stellorMediaRtb.md @@ -0,0 +1,37 @@ +--- +layout: bidder +title: Stellor Media Rtb +description: Prebid Stellor Media Rtb Adaptor +biddercode: stellorMediaRtb +pbjs: true +pbs: false +media_types: video, banner +userIds: all +fpd_supported: false +tcfeu_supported: false +usp_supported: true +coppa_supported: true +schain_supported: true +prebid_member: false +ortb_blocking_supported: true +multiformat_supported: will-bid-on-one +floors_supported: false +aliasCode: limelightDigital +sidebarType: 1 +--- + +### Bid Params + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|:--------------|:---------|:-------------------------------------------------------------|:-------------------------|:----------| +| `host` | required | Ad network's RTB host | `'rtb-stellormedia.com'` | `string` | +| `adUnitId` | required | Ad Unit Id will be generated on Stellor Media Rtb Platform. | `42` | `integer` | +| `adUnitType` | required | Type of Ad Unit (`'video'`, `'banner'`) | `'banner'` | `string` | +| `publisherId` | required | Publisher ID | `'12345'` | `string` | +| `custom1` | optional | Custom targeting field 1 | `'custom1'` | `string` | +| `custom2` | optional | Custom targeting field 2 | `'custom2'` | `string` | +| `custom3` | optional | Custom targeting field 3 | `'custom3'` | `string` | +| `custom4` | optional | Custom targeting field 4 | `'custom4'` | `string` | +| `custom5` | optional | Custom targeting field 5 | `'custom5'` | `string` | diff --git a/dev-docs/bidders/copper6.md b/dev-docs/bidders/stellormedia.md similarity index 59% rename from dev-docs/bidders/copper6.md rename to dev-docs/bidders/stellormedia.md index c51e695ae7..2e50478b57 100644 --- a/dev-docs/bidders/copper6.md +++ b/dev-docs/bidders/stellormedia.md @@ -1,21 +1,20 @@ --- layout: bidder -title: SSP Copper6 -description: SSP Copper6 Bidder Adapter -biddercode: copper6 +title: StellorMedia +description: Stellor Media Bidder Adapter +biddercode: stellormedia aliasCode: adtelligent media_types: video,banner -gvl_id: 410 (adtelligent) -tcfeu_supported: true -gpp_supported: true -userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId +tcfeu_supported: false +gpp_sids: usp +userId: all (with commercial activation) schain_supported: true coppa_supported: true usp_supported: true safeframes_ok: true prebid_member: false pbjs: true -pbs: true +pbs: false deals_supported: false sidebarType: 1 --- @@ -23,18 +22,18 @@ sidebarType: 1 ### Bid params {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | +| Name | Scope | Description | Example | Type | |-------|----------|---------------------------------|----------|-----------| -| `aid` | required | The source ID from Copper6 Media. | `12412` | `integer` | +| `aid` | required | The source ID from Stellor Media. | `12412` | `integer` | ### Description -Copper6 Media header bidding adapter connects with Copper6 Media demand sources in order to fetch bids. +Stellor Media header bidding adapter connects with Indicue Media demand sources in order to fetch bids. This adapter provides a solution for accessing Video demand and display demand. ### Test Parameters -``` javascript +```javascript var adUnits = [ // Video instream adUnit @@ -47,7 +46,7 @@ This adapter provides a solution for accessing Video demand and display demand. } }, bids: [{ - bidder: 'copper6', + bidder: 'stellormedia', params: { aid: 472386 } @@ -64,25 +63,7 @@ This adapter provides a solution for accessing Video demand and display demand. } }, bids: [{ - bidder: 'copper6', - params: { - aid: 472386 - } - }] - }, - - // Video ADPOD adUnit - { - code: 'test-div', - sizes: [[640, 480]], - mediaTypes: { - video: { - context: 'adpod', - playerSize: [640, 480] - } - }, - bids: [{ - bidder: 'copper6', + bidder: 'stellormedia', params: { aid: 472386 } @@ -98,7 +79,7 @@ This adapter provides a solution for accessing Video demand and display demand. } } bids: [{ - bidder: 'copper6', + bidder: 'stellormedia', params: { aid: 529814 } diff --git a/dev-docs/bidders/stn.md b/dev-docs/bidders/stn.md index 3373e93b07..8e57a3b8a1 100644 --- a/dev-docs/bidders/stn.md +++ b/dev-docs/bidders/stn.md @@ -4,7 +4,7 @@ title: STN description: Prebid STN Bidder Adapter pbjs: true biddercode: stn -media_types: banner, video +media_types: banner, video, native multiformat_supported: will-bid-on-any schain_supported: true tcfeu_supported: false @@ -24,9 +24,10 @@ The STN adapter requires setup and approval. Please reach out to = 6.14.0. + +Native >= 9.27.0. + +Multi-format requests >= 9.27.0. diff --git a/dev-docs/bidders/streamlyn.md b/dev-docs/bidders/streamlyn.md new file mode 100644 index 0000000000..e4f012dbd9 --- /dev/null +++ b/dev-docs/bidders/streamlyn.md @@ -0,0 +1,39 @@ +--- +layout: bidder +title: Streamlyn +description: Streamlyn Bidder Adaptor +biddercode: streamlyn +pbjs: false +pbs: true +media_types: video, banner, audio, native +userIds: all +fpd_supported: false +tcfeu_supported: false +usp_supported: true +coppa_supported: true +schain_supported: true +prebid_member: false +ortb_blocking_supported: true +multiformat_supported: will-bid-on-one +floors_supported: false +aliasCode: limelightDigital +sidebarType: 1 +--- + +### Bid Params + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|:--------------|:---------|:-------------------------|:-------------------------|:---------| +| `host` | required | Ad network's RTB host | `'rtba.bidsxchange.com'` | `string` | +| `publisherId` | required | Publisher ID | `'12345'` | `string` | +| `custom1` | optional | Custom targeting field 1 | `'custom1'` | `string` | +| `custom2` | optional | Custom targeting field 2 | `'custom2'` | `string` | +| `custom3` | optional | Custom targeting field 3 | `'custom3'` | `string` | +| `custom4` | optional | Custom targeting field 4 | `'custom4'` | `string` | +| `custom5` | optional | Custom targeting field 5 | `'custom5'` | `string` | + +Streamlyn server-side Prebid Server adapter requires only `publisherId` and `host` parameters. + +Streamlyn server-side Prebid Server adapter supports only `banner`, `video`, `audio`, `native` media types. diff --git a/dev-docs/bidders/streamvision.md b/dev-docs/bidders/streamvision.md new file mode 100644 index 0000000000..e937244adf --- /dev/null +++ b/dev-docs/bidders/streamvision.md @@ -0,0 +1,41 @@ +--- +layout: bidder +title: Streamvision +description: Streamvision bidder adapter +biddercode: streamvision +pbjs: true +pbs: true +media_types: video, banner +userIds: all +fpd_supported: false +tcfeu_supported: false +usp_supported: true +coppa_supported: true +schain_supported: true +prebid_member: false +ortb_blocking_supported: true +multiformat_supported: will-bid-on-one +floors_supported: false +aliasCode: limelightDigital +sidebarType: 1 +--- + +### Bid Params + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|:--------------|:---------|:---------------------------------------------------------|:--------------------------------|:----------| +| `host` | required | Ad network's RTB host | `'adops.streamvisionmedia.com'` | `string` | +| `adUnitId` | required | Ad Unit Id will be generated on Streamvision Platform. | `42` | `integer` | +| `adUnitType` | required | Type of Ad Unit (`'video'`, `'banner'`) | `'banner'` | `string` | +| `publisherId` | required | Publisher ID | `'12345'` | `string` | +| `custom1` | optional | Custom targeting field 1 | `'custom1'` | `string` | +| `custom2` | optional | Custom targeting field 2 | `'custom2'` | `string` | +| `custom3` | optional | Custom targeting field 3 | `'custom3'` | `string` | +| `custom4` | optional | Custom targeting field 4 | `'custom4'` | `string` | +| `custom5` | optional | Custom targeting field 5 | `'custom5'` | `string` | + +Streamvision server-side Prebid Server adapter requires only `publisherId` and `host` parameters. But Streamvision client-side Prebid.js adapter requires only `host`, `adUnitId`, `adUnitType`. + +Streamvision server-side Prebid Server adapter supports only `banner`, `video`, `audio`, `native` media types. But Streamvision client-side Prebid.js adapter supports only `banner` and `video` media types, doesn't support `audio` and `native`. diff --git a/dev-docs/bidders/stroeerCore.md b/dev-docs/bidders/stroeerCore.md index 4a8875fbe1..f0865f811e 100644 --- a/dev-docs/bidders/stroeerCore.md +++ b/dev-docs/bidders/stroeerCore.md @@ -26,9 +26,10 @@ sidebarType: 1 ### Bid Params {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|--------------------|-----------------------------------------|----------| -| `sid` | required | Slot ID | `'06b782cc-091b-4f53-9cd2-0291679aa1ac'`| `string` | +| Name | Scope | Description | Example | Type | +|-------|----------|------------------------------------------------------------------------------------------------------------------|------------------------------------------|----------| +| `sid` | required | Slot ID | `'06b782cc-091b-4f53-9cd2-0291679aa1ac'` | `string` | +| `sfp` | optional | Params for rendering special ad formats like Dynamic Sitebar. Contact your Account Manager for more information. | `{}` | `object` | ### Ad Unit Configuration diff --git a/dev-docs/bidders/suim.md b/dev-docs/bidders/suim.md new file mode 100644 index 0000000000..9eef80f66f --- /dev/null +++ b/dev-docs/bidders/suim.md @@ -0,0 +1,20 @@ +--- +layout: bidder +title: Suim +description: Prebid Suim Bidder Adapter +pbjs: true +biddercode: suim +media_types: banner +sidebarType: 1 +--- + +Note: +The Suim Bidding adapter requires setup before beginning. +For more information, visit [Suim website](https://suim.co.jp/). + +### Bid parameters + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|------------------------------|---------------------------------|----------| +| `ad_space_id` | required | Ad space ID provided by Suim | `'101hw085aphx9qdttwgdnm5q5b8'` | `string` | diff --git a/dev-docs/bidders/synacormedia.md b/dev-docs/bidders/synacormedia.md index e271f11c7b..bd4a7e7b1b 100644 --- a/dev-docs/bidders/synacormedia.md +++ b/dev-docs/bidders/synacormedia.md @@ -1,10 +1,11 @@ --- layout: bidder title: Synacor Media -description: Prebid Synacor Media Bidder Adapter (replaced by "imds") +description: Prebid Synacor Media Bidder Adapter (replaced by "Advertising.com") pbjs: true pbs: true biddercode: synacormedia +aliasCode: advertising tcfeu_supported: false usp_supported: true userIds: all @@ -22,9 +23,9 @@ multiformat_supported: will-bid-on-any prebid_member: false gvl_id: none sidebarType: 1 -pbjs_version_notes: use imds after 8.0 +pbjs_version_notes: use imds after 8.0 and advertising after 10.0 --- -# Note +### Note -The Synacor Media bidder adapter has been renamed to the [iMedia Digital Services (iMDS)](/dev-docs/bidders/imds.html) adapter, using an bidder code of `imds`. Please update your implementation accordingly. +The Synacor Media bidder adapter has been renamed to the [Advertising.com](/dev-docs/bidders/advertising.html) adapter, using an bidder code of `advertising`. Please update your implementation accordingly. diff --git a/dev-docs/bidders/taboola.md b/dev-docs/bidders/taboola.md index ed1ced43f7..cf763dc00f 100644 --- a/dev-docs/bidders/taboola.md +++ b/dev-docs/bidders/taboola.md @@ -19,21 +19,40 @@ safeframes_ok: true fpd_supported: true ortb_blocking_supported: partial deals_supported: false -pbs_app_supported: false +userIds: taboolaId +pbs_app_supported: true multiformat_supported: will-not-bid sidebarType: 1 --- ### Note -- Supports `display` format. -- Supports `native` format only in the Prebid Sever. +- Prebid.js Supports `display` format only. +- Prebid Server Supports `native+display` formats. - Uses `OpenRTB` standard. +### Bidder Config +We recommend allowing us access to localStorage. +You can allow writing in localStorage `pbjs.bidderSettings` for the bidder `taboola` + +{% include dev-docs/storageAllowed.md %} + +```javascript +pbjs.bidderSettings = { + taboola: { + storageAllowed : true + } +} +``` + ### Registration The Taboola Adapter requires setup before beginning. Please contact us at . +### Prebid Server + +Please provide to your relevant Taboola contact person the prebid server host domain, so we enable it before the integration starts. + ### First Party Data Publishers can use the `ortb2` configuration parameter to provide First Party Data. @@ -113,7 +132,3 @@ Notes: }] }]; ``` - -### Native - Prebid Server Adapter - -Currently, supporting native and multi-format (banner and native mixed) requests in the prebid server adapter only. diff --git a/dev-docs/bidders/tadvertising.md b/dev-docs/bidders/tadvertising.md new file mode 100644 index 0000000000..6fa8098985 --- /dev/null +++ b/dev-docs/bidders/tadvertising.md @@ -0,0 +1,106 @@ +--- +layout: bidder +title: T-Advertising Solutions +description: T-Advertising Solutions Prebid Bidder Adapter +biddercode: tadvertising +tcfeu_supported: true +gvl_id: 213 +usp_supported: false +coppa_supported: false +gpp_supported: false +schain_supported: true +dchain_supported: false +userIds: unifiedId +media_types: banner, video +floors_supported: true +pbjs: true +pbs: false +prebid_member: no +sidebarType: 1 +pbs_app_supported: false +deals_supported: false +multiformat_supported: will-not-bid +ortb_blocking_supported: true +gpp_sids: false +fpd_supported: false +--- + +### Disclosure + +{: .alert.alert-danger :} +Note: The T-Advertising Solutions Bidding adapter requires setup and approval from the T-Advertising Solutions service team. Please reach out to your account manager for more information to start using it. + +### Bid Params + +{: .table .table-bordered .table-striped } + +Name | Scope | Description | Example | Type +--- | --- | --- | --- | ---- +`publisherId` | required | The publisher ID | `'1427ab10f2e448057ed3b422'` | `String` +`placementId` | required | the GPID value should be passed in this field. | `'5e9f2c8b7d31a45620fa8d3c'` | `String` +`bidfloor` | optional | Sets a bid floor price | `0.95` | `Float` + +### Banner Ad Unit Example + +The T-Advertising Solutions adapter for banner uses certain parameters in the AdUnit's +[mediaTypes.banner](https://docs.prebid.org/dev-docs/adunit-reference.html#adUnit.mediaTypes.banner) definition. + +Here's a banner ad unit example: + +```javascript +var bannerAdUnit = { + code: 'myBannerAdUnit', + mediaTypes: { + banner: { + sizes: [400, 600], + } + }, + bids: [ + { + bidder: 'tadvertising', + params: { + publisherId: '1427ab10f2e448057ed3b422', + placementId: 'sidebar_1', + bidfloor: 0.95 // Optional - default is 0 + } + } + ] +} +``` + +### Video Ad Unit Example + +The T-Advertising Solutions adapter for video requires certain parameters in the AdUnit's +[mediaTypes.video](/dev-docs/adunit-reference.html#adUnit.mediaTypes.video) definition. + +Here's a video ad unit example: + +```javascript +var videoAdUnit = { + code: 'myVideoAdUnit', + mediaTypes: { + video: { + mimes: ['video/mp4'], + minduration: 1, + maxduration: 60, + api: [1, 3], + placement: 3, + protocols: [2,3,5,6] + } + }, + bids: [ + { + bidder: "tadvertising", + params: { + publisherId: '1427ab10f2e448057ed3b422', + placementId: 'sidebar_1', + bidfloor: 0.95 // Optional - default is 0 + } + } + ] +} +``` + +### First Party Data + +Publishers should use the `ortb2` method of setting [First Party Data](/features/firstPartyData.html). diff --git a/dev-docs/bidders/tagoras.md b/dev-docs/bidders/tagoras.md index 6c231f97ad..27276ad288 100644 --- a/dev-docs/bidders/tagoras.md +++ b/dev-docs/bidders/tagoras.md @@ -20,19 +20,21 @@ fpd_supported: false ortb_blocking_supported: false multiformat_supported: will-bid-on-one pbjs: true +pbs: true sidebarType: 1 --- ### Bid Params {: .table .table-bordered .table-striped } + | Name | Scope | Description | Example | Type | |------------|----------|-------------------------------------------------------------------------------------------|------------------------------|----------| | `cId` | required | The connection ID from Tagoras. | `'562524b21b1c1f08117fc7f9'` | `string` | | `pId` | required | The publisher ID from Tagoras. | `'59ac17c192832d0011283fe3'` | `string` | | `bidFloor` | optional | The minimum bid value desired. Tagoras will not respond with bids lower than this value. | `0.90` | `float` | -## Example +### Example ```javascript var adUnits = [{ diff --git a/dev-docs/bidders/tapnative.md b/dev-docs/bidders/tapnative.md new file mode 100644 index 0000000000..c7dc68d99e --- /dev/null +++ b/dev-docs/bidders/tapnative.md @@ -0,0 +1,92 @@ +--- +layout: bidder +title: Tapnative +description: Prebid Tapnative Bidder Adaptor +pbjs: true +biddercode: tapnative +media_types: banner, native +tcfeu_supported: false +usp_supported: true +coppa_supported: true +gpp_sids: usstate_all +schain_supported: false +safeframes_ok: false +ortb_blocking_supported: false +dsa_supported: false +deals_supported: true +floors_supported: true +sidebarType: 1 +--- +### Registration + +For assistance or setup instructions, please contact us at . + +### Banner Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------------|-----------|-----------------------|----------------|----------| +| `placement_id` | mandatory | Placement Id | `111520` | `number` | +| `height` | optional | Height of the creative| `250` | `number` | +| `width` | optional | Width of the creative | `300` | `number` | +| `bid_floor` | optional | Bid Floor Price | `0.5` | `decimal`| + +### AdUnit Format for Banner + +```javascript +var adUnits = [ + { + code: 'banner-ad', + mediaTypes: { + banner: { + sizes: [[300, 250]] + } + }, + bids: [{ + bidder: 'tapnative', + params: { + placement_id: 111520, + height: 250, + width: 300, + bid_floor: 0.5 + } + }] + } + ]; +``` + +### Native Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------------|-----------|-----------------------|----------------|----------| +| `placement_id` | mandatory | Placement Id | `111519` | `number` | +| `bid_floor` | optional | Bid Floor Price | `1` | `decimal`| + +### AdUnit Format for Native + +```javascript +var adUnits = [ + { + code: 'native-ad-container', + mediaTypes: { + native: { + title: { required: true, len: 100 }, + image: { required: true, sizes: [300, 250] }, + sponsored: { required: false }, + clickUrl: { required: true }, + desc: { required: true }, + icon: { required: false, sizes: [50, 50] }, + cta: { required: false } + } + }, + bids: [{ + bidder: 'tapnative', + params: { + placement_id: 111519, // Required parameter + bid_floor: 1 // Optional parameter + } + }] + } + ]; +``` diff --git a/dev-docs/bidders/targetvideo.md b/dev-docs/bidders/targetvideo.md index 20658bb2c8..61a73ace1c 100644 --- a/dev-docs/bidders/targetvideo.md +++ b/dev-docs/bidders/targetvideo.md @@ -3,7 +3,7 @@ layout: bidder title: TargetVideo description: Prebid TargetVideo Bidder Adaptor biddercode: targetVideo -media_types: banner +media_types: banner, video gvl_id: 786 tcfeu_supported: true schain_supported: true @@ -16,4 +16,4 @@ sidebarType: 1 {: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | |---------------------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------|------------------| -| `placementId` | required | The placement ID from TargetVideo. You may identify a placement using the `invCode` and `member` instead of a placement ID. The `placementID` parameter can be either a `string` or `integer` for Prebid.js, however `integer` is preferred. Legacy code can retain the `string` value. **Prebid Server requires an integer value.** | `234234` | `integer` | +| `placementId` | required | The placement ID from TargetVideo. You will get this value from your TargetVideo account manager. The placementID parameter should be a `string`. | `234234` | `string` | diff --git a/dev-docs/bidders/teads.md b/dev-docs/bidders/teads.md index 3847370dc7..dac0e35448 100644 --- a/dev-docs/bidders/teads.md +++ b/dev-docs/bidders/teads.md @@ -20,14 +20,19 @@ multiformat_supported: will-not-bid ortb_blocking_supported: true floors_supported: true coppa_supported: true -gpp_sids: tcfeu, usp +gpp_sids: tcfeu, tcfca, usnat, usstate_all, usp fpd_supported: false sidebarType: 1 --- -### Note +### Disclosure -The Teads Bidding adapter requires setup before beginning. Please contact us on +{% include dev-docs/fingerprinting.md %} + +### Notes + +1. The Teads Bidding adapter requires setup before beginning. Please contact us on +2. When this adapter is enabled and Prebid.js is used in an iOS WebView, the WebView should allow videos to play inline. This is required because the Teads adapter delivers video ads and starts by detecting the autoplay capability of the device. ### Bid Params diff --git a/dev-docs/bidders/teal.md b/dev-docs/bidders/teal.md new file mode 100644 index 0000000000..0b15c7ca95 --- /dev/null +++ b/dev-docs/bidders/teal.md @@ -0,0 +1,78 @@ +--- +layout: bidder +title: Teal +description: Teal Bid Adapter +biddercode: teal +prebid_member: true +gvl_id: 1378 +schain_supported: true +dchain_supported: true +tcfeu_supported: true +dsa_supported: true +deals_supported: true +floors_supported: true +usp_supported: true +coppa_supported: true +fpd_supported: true +gpp_supported: true +gpp_sids: tcfeu, tcfca, usnat, usstate_all, usp +userIds: all +safeframes_ok: true +media_types: banner +pbjs: true +pbs: false +multiformat_supported: will-bid-on-any +ortb_blocking_supported: true +privacy_sandbox: no +sidebarType: 1 +--- + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|-------------|----------|-----------------------------------------------------------------|---------------------------------|----------| +| `account` | required | Account name provided by your account manager - set to `test-account` for test mode | `myaccount` | `string` | +| `placement` | optional | Placement name provided by your account manager - set to `test-placement300x250` for test mode | `mysite300x250` | `string`| +| `testMode` | optional | Activate test mode - 100% test bids - placement needs be set to `test-placement300x250` for this option to work | `true` | `boolean` | +| `useSourceBidderCode` | optional | Use seat bidder code as hb_bidder, instead of teal (or configured alias) | `true` | `boolean` | +| `subAccount` | optional | subAccount name, if provided by your account manager | `my-sub-account` | `string` | + +### Notes + +- Specific ads.txt entries are required for the Teal bid adapter - please contact your account manager or for more details. +- For full functionality in GDPR territories, please ensure Teal Digital Group Ltd is configured in your CMP. + +### Bidder Settings + +The Teal bid adapter uses an iframe for user sync. This can be enabled like this: + +```js +// https://docs.prebid.org/dev-docs/publisher-api-reference/setConfig.html#setConfig-ConfigureUserSyncing-UserSyncExamples +pbjs.setConfig({ + userSync: { + filterSettings: { + iframe: { + bidders: 'teal', + filter: 'include' + } + } + } +}); +``` + +### Test Parameters + +To enable 100% fill test ads, you can use the following `params`: + +```javascript +{ + account: 'test-account', + placement: 'test-placement300x250', + testMode: true +} +``` + +This will produce a bid at $0.20 with a test creative. + +Note that the parameters are case-sensitive. Please do not use these test parameters in production environments. diff --git a/dev-docs/bidders/tgm.md b/dev-docs/bidders/tgm.md new file mode 100644 index 0000000000..44ccfa797c --- /dev/null +++ b/dev-docs/bidders/tgm.md @@ -0,0 +1,41 @@ +--- +layout: bidder +title: TGM +description: TGM Bidder Adaptor +biddercode: tgm +pbjs: true +pbs: true +media_types: video, banner +userIds: all +fpd_supported: false +tcfeu_supported: false +usp_supported: true +coppa_supported: true +schain_supported: true +prebid_member: false +ortb_blocking_supported: true +multiformat_supported: will-bid-on-one +floors_supported: false +aliasCode: limelightDigital +sidebarType: 1 +--- + +### Bid Params + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|:--------------|:---------|:----------------------------------------------|:---------------------|:----------| +| `host` | required | Ad network's RTB host | `'ads-gmd.ortb.net'` | `string` | +| `adUnitId` | required | Ad Unit Id will be generated on TGM Platform. | `42` | `integer` | +| `adUnitType` | required | Type of Ad Unit (`'video'`, `'banner'`) | `'banner'` | `string` | +| `publisherId` | required | Publisher ID | `'12345'` | `string` | +| `custom1` | optional | Custom targeting field 1 | `'custom1'` | `string` | +| `custom2` | optional | Custom targeting field 2 | `'custom2'` | `string` | +| `custom3` | optional | Custom targeting field 3 | `'custom3'` | `string` | +| `custom4` | optional | Custom targeting field 4 | `'custom4'` | `string` | +| `custom5` | optional | Custom targeting field 5 | `'custom5'` | `string` | + +TGM server-side Prebid Server adapter requires only `publisherId` and `host` parameters. But TGM client-side Prebid.js adapter requires only `host`, `adUnitId`, `adUnitType`. + +TGM server-side Prebid Server adapter supports only `banner`, `video`, `audio`, `native` media types. But TGM client-side Prebid.js adapter supports only `banner` and `video` media types, doesn't support `audio` and `native`. diff --git a/dev-docs/bidders/theAdx.md b/dev-docs/bidders/theAdx.md index 261206bc27..4dda7bf1d1 100644 --- a/dev-docs/bidders/theAdx.md +++ b/dev-docs/bidders/theAdx.md @@ -1,11 +1,12 @@ --- layout: bidder -title: theadx +title: TheAdx description: Prebid TheAdx Bidder Adapter pbs: true pbs_app_supported: true pbjs: true biddercode: theadx +filename: theAdxBidAdapter tcfeu_supported: true usp_supported: true schain_supported: true diff --git a/dev-docs/bidders/theads.md b/dev-docs/bidders/theads.md new file mode 100644 index 0000000000..8f4bbc76f5 --- /dev/null +++ b/dev-docs/bidders/theads.md @@ -0,0 +1,52 @@ +--- +layout: bidder +title: The Ads +description: Prebid AdMixer Bidder Adaptor +pbjs: true +biddercode: theads +aliasCode: admixer +media_types: banner, video, native +usp_supported: true +schain_supported: true +prebid_member: true +floors_supported: true +sidebarType: 1 +multiformat_supported: will-bid-on-any +safeframes_ok: true +--- + +#### Bidder Configuration + +The Ads bidder requires bidderURL to be set. Please note that theads bids will not be requested without this config. It must be set before auction starts. + +```js +pbjs.setBidderConfig({ + bidders: ['theads'], + config: { + bidderURL: 'https://us-adx-example.rtb-stack.com/prebid?client=44e2d241-5051-4b58-8ac6-f17e13732339&ssp=3&endpoint=777' + } +}); +``` + +### Bid Params + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|---------------------|----------|--------------------------------------------------------------------------------------------|------------------------------|----------| +| `tagId` | required |The unique identifier of the ad placement. Will be used for comparison of statistics. | 51772 | `int` | +| `kvTargeting` | optional | Key/Value - a pair of the unique values that will be used for the custom targeting option. | {key1: value2, key2: value2} | `object` | + +#### Bid Example + +```js +{ + bidder: 'theads', + params: { + tagId: '12345', + kvTargeting: { + example: 'test' + } + } +} +``` diff --git a/dev-docs/bidders/tradplus.md b/dev-docs/bidders/tradplus.md new file mode 100644 index 0000000000..6004395b95 --- /dev/null +++ b/dev-docs/bidders/tradplus.md @@ -0,0 +1,36 @@ +--- +layout: bidder +title: TradPlus +description: Prebid TradPlus Bidder Adapter +biddercode: tradplus +tcfeu_supported: false +usp_supported: true +gpp_supported: false +coppa_supported: true +schain_supported: true +dchain_supported: false +media_types: banner, video, native +safeframes_ok: false +pbjs: false +pbs: true +pbs_app_supported: true +deals_supported: true +floors_supported: true +fpd_supported: false +multiformat_supported: will-bid-on-any +ortb_blocking_supported: partial +prebid_member: false +sidebarType: 1 +--- + +### Note + +The TradPlus Bidding adapter requires setup before beginning. Please contact us at . + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------------|----------|----------------|-------------|----------| +| `accountId` | required | Account ID | `'aaaa1'` | `string` | +| `zoneId` | optional | Zone ID | `'51230'` | `string` | diff --git a/dev-docs/bidders/tredio.md b/dev-docs/bidders/tredio.md new file mode 100644 index 0000000000..0b820465a0 --- /dev/null +++ b/dev-docs/bidders/tredio.md @@ -0,0 +1,39 @@ +--- +layout: bidder +title: Tredio +description: Tredio Bidder Adapter +biddercode: tredio +aliasCode : smarthub +usp_supported: true +coppa_supported: true +schain_supported: true +dchain_supported: true +media_types: banner, video, native +safeframes_ok: true +deals_supported: true +floors_supported: true +fpd_supported: false +pbjs: true +pbs: true +pbs_app_supported: true +multiformat_supported: true +--- + +### Prebid.js Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|---------------------------------|-------------------------------------|-----------| +| `seat` | required | Seat value | `'9Q20EdGxzgWdfPYShScl'` | `string` | +| `token` | required | Token | `'eKmw6alpP3zWQhRCe3flOpz0wpuwRFjW'` | `string` | +| `iabCat` | optional | Array of IAB content categories that describe the content producer | `['IAB1-1', 'IAB3-1', 'IAB4-3']` | `Array(String)` | +| `minBidfloor` | optional | Minimal CPM value | `0.03` | `float` | +| `pos` | optional | The position of the placement on the page, see Open RTB spec v2.5. | `4` | `number` | + +### Prebid Server Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|---------------------|--------------------------------------|----------| +| `seat` | required | Seat value | `'9Q20EdGxzgWdfPYShScl'` | `string` | +| `token` | required | Token | `'eKmw6alpP3zWQhRCe3flOpz0wpuwRFjW'` | `string` | diff --git a/dev-docs/bidders/triplelift.md b/dev-docs/bidders/triplelift.md index 5cc60ff435..5c65857a3e 100644 --- a/dev-docs/bidders/triplelift.md +++ b/dev-docs/bidders/triplelift.md @@ -164,13 +164,15 @@ Triplelift provides audience and contextual targeting via the integration of a P - Prebid v7.1.0 or later - In Prebid's `bidderSettings`, the `storageAllowed` parameter must be set to **true**. In Prebid v7.0 and later, `storageAllowed` defaults to false, so you will need to explicitly set this value to true. - ```javascript +{% include dev-docs/storageAllowed.md %} + +```javascript pbjs.bidderSettings = { triplelift: { storageAllowed: true } } - ``` +``` - The Programmatic DMP **tag** must be included at the top of every webpage in order to collect audience and contextual information on the respective page. - The Programmatic DMP **tag** should be as high up in `` as possible. diff --git a/dev-docs/bidders/ttd.md b/dev-docs/bidders/ttd.md index c982c42ee5..5226d955a5 100644 --- a/dev-docs/bidders/ttd.md +++ b/dev-docs/bidders/ttd.md @@ -10,13 +10,20 @@ coppa_supported: true gpp_supported: true schain_supported: true dchain_supported: false -userIds: unifiedId, uid2 +userIds: unifiedId, uid2, liveramp media_types: banner, video floors_supported: true pbjs: true -pbs: false +pbs: true prebid_member: true sidebarType: 1 +pbs_app_supported: true +userIds: all +deals_supported: true +multiformat_supported: will-not-bid +ortb_blocking_supported: true +gpp_sids: false +fpd_supported: false --- ### Disclosure @@ -36,6 +43,8 @@ Name | Scope | Description | Example | Type `placementId` | optional | This field is optional if GPID is passed through the GPT module . If that module isn't used, the GPID value should be passed in this field. | `'/1111/home#header'` | `String` `banner` | optional | Display banner targeting parameters. See the banner section below. | `{}` | `object` `bidfloor` | optional | Sets a bid floor price | `0.95` | `Float` +`customBidderEndpoint` | optional | Only set if TTD has provided a custom endpoint. If set the custom endpoint will take precedent over the hard-coded endpoints | `https://customBidderEndpoint/bid/bidder/` | `String` +`useHttp2` | optional | When true, the adapter will use an endpoint that supports HTTP2. | `true` | `boolean` ### Banner Object @@ -85,7 +94,7 @@ var bannerAdUnit = { #### `mediaTypes.video` Parameters The TTD adapter for video requires certain parameters in the AdUnit's -[mediaTypes.video](https://docs.prebid.org/dev-docs/adunit-reference.html#adUnit.mediaTypes.video) definition. Specifically, `maxduration`, `api`, `mimes`, `placement`, and `protocols` are all required for video ad units. `playerSize`, `startdelay`, `playbackmethod`, and `pos` are recommended. `minduration`, `minbitrate`, `maxbitrate`, `skip`, `skipmin`, and `skipafter` are optional. +[mediaTypes.video](https://docs.prebid.org/dev-docs/adunit-reference.html#adUnit.mediaTypes.video) definition. Specifically, `maxduration`, `api`, `mimes`, `plcmt`, and `protocols` are all required for video ad units. `playerSize`, `startdelay`, `playbackmethod`, and `pos` are recommended. `minduration`, `minbitrate`, `maxbitrate`, `skip`, `skipmin`, and `skipafter` are optional. Note: TTD does not currently support `adpod` video contexts. @@ -101,7 +110,7 @@ var videoAdUnit = { playerSize: [640, 480], api: [1, 3], mimes: ['video/mp4'], - placement: 3, + plcmt: 3, protocols: [2, 3, 5, 6], startdelay: -1, playbackmethod: [1], diff --git a/dev-docs/bidders/turktelekom.md b/dev-docs/bidders/turktelekom.md index c8d73022f8..5653634930 100644 --- a/dev-docs/bidders/turktelekom.md +++ b/dev-docs/bidders/turktelekom.md @@ -3,24 +3,28 @@ layout: bidder title: Türk Telekom description: Türk Telekom Bidder Adaptor biddercode: turktelekom -pbjs: true -pbs: false -media_types: banner, native, video -gvl_id: 673 +aliasCode: adkernel tcfeu_supported: true -gpp_supported: true +dsa_supported: false +gvl_id: 673 usp_supported: true coppa_supported: true -pbs_app_supported: true +gpp_sids: tcfeu, usp schain_supported: true -userIds: all +dchain_supported: false +userId: all +media_types: banner, video, native +safeframes_ok: true +deals_supported: false +floors_supported: true fpd_supported: true +pbjs: true +pbs: false +pbs_app_supported: false prebid_member: false +multiformat_supported: will-bid-on-any ortb_blocking_supported: true -multiformat_supported: will-bid-on-one -floors_supported: true -aliasCode: adkernel -safeframes_ok: true +privacy_sandbox: no sidebarType: 1 --- diff --git a/dev-docs/bidders/unibots.md b/dev-docs/bidders/unibots.md index f086697bf0..29fdcee42a 100644 --- a/dev-docs/bidders/unibots.md +++ b/dev-docs/bidders/unibots.md @@ -3,23 +3,28 @@ layout: bidder title: Unibots description: Unibots Bidder Adaptor biddercode: unibots -pbjs: true -pbs: false -media_types: banner, native, video -gvl_id: 14 (adkernel) +aliasCode: adkernel tcfeu_supported: true -gpp_supported: true +dsa_supported: false +gvl_id: 14 (adkernel) usp_supported: true coppa_supported: true -pbs_app_supported: true +gpp_sids: tcfeu, usp schain_supported: true -userIds: all +dchain_supported: false +userId: all +media_types: banner, video, native +safeframes_ok: true +deals_supported: false +floors_supported: true fpd_supported: true +pbjs: true +pbs: false +pbs_app_supported: false prebid_member: false +multiformat_supported: will-bid-on-any ortb_blocking_supported: true -multiformat_supported: will-bid-on-one -floors_supported: true -aliasCode: adkernel +privacy_sandbox: no sidebarType: 1 --- diff --git a/dev-docs/bidders/uniquest.md b/dev-docs/bidders/uniquest.md new file mode 100644 index 0000000000..c82f8a45b2 --- /dev/null +++ b/dev-docs/bidders/uniquest.md @@ -0,0 +1,36 @@ +--- +layout: bidder +title: UNIQUEST +description: Prebid UNIQUEST Bidder Adapter +biddercode: uniquest +pbjs: true +media_types: banner +sidebarType: 1 +safeframes_ok: false +pbs: false +deals_supported: false +tcfeu_supported: false +usp_supported: false +prebid_member: false +coppa_supported: false +schain_supported: false +dchain_supported: false +floors_supported: false +ortb_blocking_supported: false +gpp_sids: none +gvl_id: none +dsa_supported: false +fpd_supported: false +multiformat_supported: none +privacy_sandbox: none +--- + +### Registration +To use this bidder you will need with UNIQUEST. For further information, Please contact us at . + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|-------|----------|---------------------------|----------|----------| +| `sid` | required | The AdUnit ID from UNIQUEST | `'SID00001'` | `string` | diff --git a/dev-docs/bidders/uniquestWidget.md b/dev-docs/bidders/uniquestWidget.md new file mode 100644 index 0000000000..bdfd798484 --- /dev/null +++ b/dev-docs/bidders/uniquestWidget.md @@ -0,0 +1,36 @@ +--- +layout: bidder +title: UNIQUEST Widget +description: Prebid UNIQUEST Widget Bidder Adapter +biddercode : uniquest_widget +pbjs: true +media_types: banner +sidebarType: 1 +safeframes_ok: false +pbs: false +deals_supported: false +tcfeu_supported: false +usp_supported: false +prebid_member: false +coppa_supported: false +schain_supported: false +dchain_supported: false +floors_supported: false +ortb_blocking_supported: false +gpp_sids: none +gvl_id: none +dsa_supported: false +fpd_supported: false +multiformat_supported: none +privacy_sandbox: none +--- + +### Registration +To use this bidder you will need with UNIQUEST Widget. For further information, Please contact us at . + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|-------|----------|---------------------------|----------|----------| +| `wid` | required | The Ad ID from UNIQUEST Widget | `'WID00001'` | `string` | diff --git a/dev-docs/bidders/unruly.md b/dev-docs/bidders/unruly.md index 7a0824c838..644f9ea86b 100644 --- a/dev-docs/bidders/unruly.md +++ b/dev-docs/bidders/unruly.md @@ -30,30 +30,30 @@ sidebarType: 1 | `siteid` | deprecated | The site ID from Unruly. This will be provided to you by your Unruly account manager, this is backward compability. | `123456` | `integer` | | `featureOverrides` | optional | This param is a generic object for configuring Unruly outstream demand. To run UNmissable, set ‘canRunUnmissable’ to true. | `"featureOverrides": {"canRunUnmissable": true}` | `object` | -### Protected Audience API (FLEDGE) support +### Protected Audience API (PAAPI) support There’s an option to receive demand for Protected Audience API (FLEDGE/PAAPI) ads using Unruly's (Nexxen) bid adapter. -Prebid’s [fledgeForGpt](https://docs.prebid.org/dev-docs/modules/fledgeForGpt.html) +Prebid’s [paapiForGpt](https://docs.prebid.org/dev-docs/modules/paapiForGpt.html) module and Google Ad Manager is currently required. The following steps should be taken to setup Protected Audience for Unruly(Nexxen): 1. Reach out to your account manager to coordinate set up: -2. Build and enable FLEDGE module as described in -[fledgeForGpt](https://docs.prebid.org/dev-docs/modules/fledgeForGpt.html) +2. Build and enable PAAPI module as described in +[paapiForGpt](https://docs.prebid.org/dev-docs/modules/paapiForGpt.html) module documentation. - Make sure to enable Unruly bidder to participate in FLEDGE. If there are any other bidders to be allowed for that, add them to the **bidders** array: + Make sure to enable Unruly bidder to participate in PAAPI. If there are any other bidders to be allowed for that, add them to the **bidders** array: ```javascript - pbjs.setBidderConfig({ - bidders: ["unruly"], - config: { - fledgeEnabled: true - } - }); + pbjs.setConfig({ + paapi: { + bidders: ["unruly"], + enabled: true + } + }) ``` ### First Party Data diff --git a/dev-docs/bidders/urekamedia.md b/dev-docs/bidders/urekamedia.md new file mode 100644 index 0000000000..fa6d92d6d9 --- /dev/null +++ b/dev-docs/bidders/urekamedia.md @@ -0,0 +1,41 @@ +--- +layout: bidder +title: UrekaMedia +description: UrekaMedia Bidder Adaptor +biddercode: urekamedia +aliasCode: adkernel +tcfeu_supported: true +dsa_supported: false +gvl_id: 14 (adkernel) +usp_supported: true +coppa_supported: true +gpp_sids: tcfeu, usp +schain_supported: true +dchain_supported: false +userId: all +media_types: banner, video, native +safeframes_ok: true +deals_supported: false +floors_supported: true +fpd_supported: true +pbjs: true +pbs: false +pbs_app_supported: false +prebid_member: false +multiformat_supported: will-bid-on-any +ortb_blocking_supported: true +privacy_sandbox: no +sidebarType: 1 +--- + +### Note + +The UrekaMedia bidding adapter requires setup and approval before implementation. Please reach out to for more details. + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------|----------|-----------------------|---------------------------|----------| +| `host` | required | Host | `'cpm.upremium.asia'` | `string` | +| `zoneId` | required | Zone Id | `30164` | `integer` | diff --git a/dev-docs/bidders/vaayaMedia.md b/dev-docs/bidders/vaayaMedia.md new file mode 100644 index 0000000000..ceb9e42c18 --- /dev/null +++ b/dev-docs/bidders/vaayaMedia.md @@ -0,0 +1,37 @@ +--- +layout: bidder +title: Vaaya Media +description: Prebid Vaaya Media Bidder Adaptor +biddercode: vaayaMedia +pbjs: true +pbs: false +media_types: video, banner +userIds: all +fpd_supported: false +tcfeu_supported: false +usp_supported: true +coppa_supported: true +schain_supported: true +prebid_member: false +ortb_blocking_supported: true +multiformat_supported: will-bid-on-one +floors_supported: false +aliasCode: limelightDigital +sidebarType: 1 +--- + +### Bid Params + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|:--------------|:---------|:--------------------------------------------------------|:------------------------|:----------| +| `host` | required | Ad network's RTB host | `'ads-tinyorbit.com'` | `string` | +| `adUnitId` | required | Ad Unit Id will be generated on Vaaya Media Platform. | `42` | `integer` | +| `adUnitType` | required | Type of Ad Unit (`'video'`, `'banner'`) | `'banner'` | `string` | +| `publisherId` | required | Publisher ID | `'12345'` | `string` | +| `custom1` | optional | Custom targeting field 1 | `'custom1'` | `string` | +| `custom2` | optional | Custom targeting field 2 | `'custom2'` | `string` | +| `custom3` | optional | Custom targeting field 3 | `'custom3'` | `string` | +| `custom4` | optional | Custom targeting field 4 | `'custom4'` | `string` | +| `custom5` | optional | Custom targeting field 5 | `'custom5'` | `string` | diff --git a/dev-docs/bidders/valuad.md b/dev-docs/bidders/valuad.md new file mode 100644 index 0000000000..1512170680 --- /dev/null +++ b/dev-docs/bidders/valuad.md @@ -0,0 +1,35 @@ +--- +layout: bidder +title: Valuad +description: Prebid Valuad Bidder Adapter +biddercode: valuad +pbjs: true +pbs: false +prebid_member: false +userId: none +gpp_sids: usstate_all +tcfeu_supported: true +gvl_id: 1478 +usp_supported: true +coppa_supported: true +schain_supported: true +deals_supported: true +floors_supported: true +dchain_supported: false +ortb_blocking_supported: false +media_types: banner +safeframes_ok: true +ortb_blocking_supported: false +sidebarType: 1 +--- + +### Note + +The Valuad Header Bidding adapter requires setup and approval from Valuad. +Please reach out to your account manager or for more information + +### Bid Params + +| Name | Scope | Description | Example | Type | +|---------------|----------|--------------------------------|------------|-----------| +| `placementId` | required | Placement ID provided by Valuad | `'10000'` | `string` | diff --git a/dev-docs/bidders/valueimpression.md b/dev-docs/bidders/valueimpression.md index 6d2c93234b..ea382be2b5 100644 --- a/dev-docs/bidders/valueimpression.md +++ b/dev-docs/bidders/valueimpression.md @@ -16,6 +16,6 @@ pbs_app_supported: true sidebarType: 1 --- -## Description +### Description Valueimpression is an aliased bidder of Apacdex bid adapter. Please refer to [Apacdex documentation](https://docs.prebid.org/dev-docs/bidders/apacdex) for bid parameters and implementation guide. diff --git a/dev-docs/bidders/vdoai.md b/dev-docs/bidders/vdoai.md index d4d9649ae5..7a43e2c39e 100644 --- a/dev-docs/bidders/vdoai.md +++ b/dev-docs/bidders/vdoai.md @@ -2,16 +2,37 @@ layout: bidder title: VDO.AI description: Prebid vdo.ai Bidder Adaptor -pbjs: true biddercode: vdoai -media_types: banner, video +pbjs: true +media_types: video, banner +userIds: all +fpd_supported: false +tcfeu_supported: false +usp_supported: true +coppa_supported: true +schain_supported: true +prebid_member: false +ortb_blocking_supported: true +multiformat_supported: will-bid-on-one +floors_supported: false sidebarType: 1 --- - ### Bid Params {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|------------------|---------|----------| -| `placementId` | required | The placement ID | | `string` | + +| Name | Scope | Description | Example | Type | +|:--------------|:---------|:------------------------------------------------------------|:----------------------|:----------| +| `host` | required | Ad network's RTB host | `'exchange.ortb.net'` | `string` | +| `adUnitId` | required | Ad Unit Id will be generated on VDO.AI Platform. | `42` | `integer` | +| `adUnitType` | required | Type of Ad Unit (`'video'`, `'banner'`) | `'banner'` | `string` | +| `custom1` | optional | Custom targeting field 1 | `'custom1'` | `string` | +| `custom2` | optional | Custom targeting field 2 | `'custom2'` | `string` | +| `custom3` | optional | Custom targeting field 3 | `'custom3'` | `string` | +| `custom4` | optional | Custom targeting field 4 | `'custom4'` | `string` | +| `custom5` | optional | Custom targeting field 5 | `'custom5'` | `string` | + +VDO.AI client-side Prebid.js adapter requires only `host`, `adUnitId`, `adUnitType`. + +VDO.AI client-side Prebid.js adapter supports only `banner` and `video` media types, doesn't support `audio` and `native`. diff --git a/dev-docs/bidders/velonium.md b/dev-docs/bidders/velonium.md new file mode 100644 index 0000000000..924efbbb77 --- /dev/null +++ b/dev-docs/bidders/velonium.md @@ -0,0 +1,41 @@ +--- +layout: bidder +title: Velonium +description: Velonium Bidder adapter +biddercode: velonium +pbjs: true +pbs: true +media_types: video, banner +userIds: all +fpd_supported: false +tcfeu_supported: false +usp_supported: true +coppa_supported: true +schain_supported: true +prebid_member: false +ortb_blocking_supported: true +multiformat_supported: will-bid-on-one +floors_supported: false +aliasCode: limelightDigital +sidebarType: 1 +--- + +### Bid Params + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|:--------------|:---------|:-----------------------------------------------------|:----------------|:----------| +| `host` | required | Ad network's RTB host | `'adxvel.com'` | `string` | +| `adUnitId` | required | Ad Unit Id will be generated on Velonium Platform. | `42` | `integer` | +| `adUnitType` | required | Type of Ad Unit (`'video'`, `'banner'`) | `'banner'` | `string` | +| `publisherId` | required | Publisher ID | `'12345'` | `string` | +| `custom1` | optional | Custom targeting field 1 | `'custom1'` | `string` | +| `custom2` | optional | Custom targeting field 2 | `'custom2'` | `string` | +| `custom3` | optional | Custom targeting field 3 | `'custom3'` | `string` | +| `custom4` | optional | Custom targeting field 4 | `'custom4'` | `string` | +| `custom5` | optional | Custom targeting field 5 | `'custom5'` | `string` | + +Velonium server-side Prebid Server adapter requires only `publisherId` and `host` parameters. But Velonium client-side Prebid.js adapter requires only `host`, `adUnitId`, `adUnitType`. + +Velonium server-side Prebid Server adapter supports only `banner`, `video`, `audio`, `native` media types. But Velonium client-side Prebid.js adapter supports only `banner` and `video` media types, doesn't support `audio` and `native`. diff --git a/dev-docs/bidders/vidazoo.md b/dev-docs/bidders/vidazoo.md index a058e6d9af..84cca015f8 100644 --- a/dev-docs/bidders/vidazoo.md +++ b/dev-docs/bidders/vidazoo.md @@ -10,6 +10,7 @@ tcfeu_supported: true gpp_supported: true usp_supported: true pbjs: true +pbs: true sidebarType: 1 --- @@ -19,6 +20,6 @@ sidebarType: 1 | Name | Scope | Description | Example | Type | |------------|----------|------------------------------------------------------------------------------------------|------------------------------|----------| | `cId` | required | The connection ID from Vidazoo. | `'562524b21b1c1f08117fc7f9'` | `string` | -| `pId` | required | The publisher ID from Vidazoo. | `'59ac17c192832d0011283fe3'` | `string` | +| `pId` | required | The publisher ID from Vidazoo (pbjs only). | `'59ac17c192832d0011283fe3'` | `string` | | `bidFloor` | optional | The minimum bid value desired. Vidazoo will not respond with bids lower than this value. | `0.90` | `float` | | `subDomain`| optional | Sets the server subdomain, default: 'prebid'. | `'prebid'` | `string` | diff --git a/dev-docs/bidders/vidcrunch.md b/dev-docs/bidders/vidcrunch.md index 6b485ca8d8..0560558e38 100644 --- a/dev-docs/bidders/vidcrunch.md +++ b/dev-docs/bidders/vidcrunch.md @@ -6,12 +6,17 @@ pbjs: true biddercode: vidcrunch aliasCode: aniview media_types: banner, video -gvl_id: 780 (aniview) +gpp_sids: tcfeu, tcfca, usnat, usstate_all, usp +ortb_blocking_supported: true +multiformat_supported: will-bid-on-any tcfeu_supported: true +floors_supported: true usp_supported: true schain_supported: true safeframes_ok: true +gvl_id: 780 (aniview) sidebarType: 1 +userIds: all --- ### Note @@ -21,29 +26,131 @@ For more information about [VidCrunch](https://vidcrunch.com/), please contact < ### Bid Params {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|------------------|----------|------------------|------------------------------|----------| -| `AV_PUBLISHERID` | required | Publisher/Netid | `'55b88d4a181f465b3e8b4567'` | `string` | -| `AV_CHANNELID` | required | Channel id | `'5a5f17a728a06102d14c2718'` | `string` | +| Name | Scope | Description | Example | Type | +|------------------|----------|-----------------------|----------------------|----------| +| `AV_PUBLISHERID` | required | Publisher/Network ID | `'Get from VidCrunch'` | `string` | +| `AV_CHANNELID` | required | Channel ID | `'Get from VidCrunch'` | `string` | + +### Setup for Video + +```javascript +const adUnit = [{ + code: 'videoAdUnit', + mediaTypes: { + video: { + // Required + playerSize: [[640, 480]], + context: 'outstream', + mimes: ['video/mp4', 'video/mpeg', 'application/javascript'], + + // Optional + playbackmethod: [1, 2], + protocols: [1, 2, 3, 5, 6, 7, 8], + api: [1, 2], + maxduration: 60, + plcmt: 4, + }, + }, + bids: [{ + bidder: 'vidcrunch', + params: { + // Required + AV_PUBLISHERID: 'Get from VidCrunch', + AV_CHANNELID: 'Get from VidCrunch', + }, + }], +}]; +``` + +### Setup for Banner + +```javascript +const adUnit = [{ + code: 'bannerAdUnit', + mediaTypes: { + banner: { + // Required + sizes: [[300, 250], [300, 600]], + }, + }, + bids: [{ + bidder: 'vidcrunch', + params: { + // Required + AV_PUBLISHERID: 'Get from VidCrunch', + AV_CHANNELID: 'Get from VidCrunch', + }, + }], +}]; +``` -### Test Parameters +### Setup for Multi-format (Banner & Video) ```javascript -const videoAdUnit = [ -{ - code: 'video1', +const adUnit = [{ + code: 'multiformatAdUnit', mediaTypes: { + banner: { + // Required + sizes: [[300, 250], [300, 600]], + }, video: { + // Required playerSize: [[640, 480]], - context: 'outstream' + context: 'outstream', + mimes: ['video/mp4', 'video/mpeg', 'application/javascript'], }, }, bids: [{ bidder: 'vidcrunch', params: { - AV_PUBLISHERID: '55b78633181f4603178b4568', - AV_CHANNELID: '5d19dfca4b6236688c0a2fc4' - } - }] + // Required + AV_PUBLISHERID: 'Get from VidCrunch', + AV_CHANNELID: 'Get from VidCrunch', + }, + }], }]; ``` + +### Bidder specific configs + +```javascript +pbjs.setBidderConfig({ + bidders: ['vidcrunch'], + config: { + ortb2: { + ext: { + vidcrunch: { + // Additional data to send to the Ad Server + }, + }, + }, + }, +}, true); +``` + +### User Sync example + +```javascript +pbjs.setConfig({ + userSync: { + filterSettings: { + // Iframe and Image + all: { + bidders: ['vidcrunch'], + filter: 'include', + }, + + // Or you can specify which type should be enabled/disabled: + iframe: { + bidders: ['vidcrunch'], + filter: 'include', + }, + image: { + bidders: '*', // '*' represents all bidders + filter: 'include', // or 'exclude' + }, + }, + }, +}); +``` diff --git a/dev-docs/bidders/vimayx.md b/dev-docs/bidders/vimayx.md new file mode 100644 index 0000000000..41de6725f8 --- /dev/null +++ b/dev-docs/bidders/vimayx.md @@ -0,0 +1,39 @@ +--- +layout: bidder +title: VimayX +description: VimayX Bidder Adapter +biddercode: vimayX +aliasCode : smarthub +usp_supported: true +coppa_supported: true +schain_supported: true +dchain_supported: true +media_types: banner, video, native +safeframes_ok: true +deals_supported: true +floors_supported: true +fpd_supported: false +pbjs: true +pbs: true +pbs_app_supported: true +multiformat_supported: will-bid-on-any +--- + +### Prebid.js Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|---------------------------------|-------------------------------------|-----------| +| `seat` | required | Seat value | `'9Q20EdGxzgWdfPYShScl'` | `string` | +| `token` | required | Token | `'eKmw6alpP3zWQhRCe3flOpz0wpuwRFjW'` | `string` | +| `iabCat` | optional | Array of IAB content categories that describe the content producer | `['IAB1-1', 'IAB3-1', 'IAB4-3']` | `Array(String)` | +| `minBidfloor` | optional | Minimal CPM value | `0.03` | `float` | +| `pos` | optional | The position of the placement on the page, see Open RTB spec v2.5. | `4` | `number` | + +### Prebid Server Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|---------------------|--------------------------------------|----------| +| `seat` | required | Seat value | `'9Q20EdGxzgWdfPYShScl'` | `string` | +| `token` | required | Token | `'eKmw6alpP3zWQhRCe3flOpz0wpuwRFjW'` | `string` | diff --git a/dev-docs/bidders/vistars.md b/dev-docs/bidders/vistars.md new file mode 100644 index 0000000000..e40789c8e8 --- /dev/null +++ b/dev-docs/bidders/vistars.md @@ -0,0 +1,26 @@ +--- +layout: bidder +title: Vistars +description: vistars bid adapter +pbjs: true +biddercode: vistars +media_types: banner, video +safeframes_ok: true +tcfeu_supported: false +gvl_id: none +usp_supported: false +coppa_supported: false +deals_supported: false +floors_supported: true +fpd_supported: false +ortb_blocking_supported: false +multiformat_supported: will-bid-on-one +sidebarType: 1 +--- + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|---------------|-------------|----------| +| `source` | required | Source id | `'ssp1'` | `string` | diff --git a/dev-docs/bidders/visx.md b/dev-docs/bidders/visx.md index fc83ae526e..27f1fe2189 100644 --- a/dev-docs/bidders/visx.md +++ b/dev-docs/bidders/visx.md @@ -39,14 +39,14 @@ Please reach out to your account manager to enable Prebid.js for your account. ### Configuration The YOC VIS.X adapter has the ability to work in different currencies. Currently, this adapter supports `EUR`, `USD`, -`GBP`, `PLN`. Defaults to `EUR`. If your Ad Server uses `EUR`, you don't need any additional currency settings. +`GBP`, `PLN`, `CHF`, `SEK`. Defaults to `EUR`. If your Ad Server uses `EUR`, you don't need any additional currency settings. If you would like to trade with VIS.X in a currency different from `EUR`, you should implement some additional settings. -1. Download and configure the Prebid.js Currency module. +1. Download and configure the Prebid.js Currency module `http://prebid.org/dev-docs/modules/currency.html` -2. Setup the currency in Currency config. +1. Setup the currency in Currency config a) If your Ad Server uses the currency from the list of VIS.X supported currencies (e.g. `GBP`), use the following settings: @@ -87,22 +87,24 @@ The YOC VIS.X Prebid.js adapter responds with VAST XML (in the `vastXml` field) ```javascript pbjs.setConfig({ cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' + url: 'https://prebid.example.com/pbc/v1/cache' } }); ``` -### Requirements: +### Requirements - In Prebid's `bidderSettings`, the `storageAllowed` parameter must be set to **true**. In Prebid v7.0 and later, `storageAllowed` defaults to false, so you will need to explicitly set this value to true. - ```javascript +{% include dev-docs/storageAllowed.md %} + +```javascript pbjs.bidderSettings = { visx: { storageAllowed: true } } - ``` +``` ### Bid params diff --git a/dev-docs/bidders/voisetech.md b/dev-docs/bidders/voisetech.md new file mode 100644 index 0000000000..3717ec3b75 --- /dev/null +++ b/dev-docs/bidders/voisetech.md @@ -0,0 +1,41 @@ +--- +layout: bidder +title: Voise Tech +description: Voise Tech Adaptor +biddercode: voisetech +aliasCode: adkernel +tcfeu_supported: true +dsa_supported: false +gvl_id: 14 (adkernel) +usp_supported: true +coppa_supported: true +gpp_sids: tcfeu, usp +schain_supported: true +dchain_supported: false +userId: all +media_types: banner, video, native +safeframes_ok: true +deals_supported: false +floors_supported: true +fpd_supported: true +pbjs: true +pbs: false +pbs_app_supported: false +prebid_member: false +multiformat_supported: will-bid-on-any +ortb_blocking_supported: true +privacy_sandbox: no +sidebarType: 1 +--- + +### Note + +The Voise Tech bidding adapter requires setup and approval before implementation. Please reach out to for more details. + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------|----------|-----------------------|---------------------------|----------| +| `host` | required | RTB host | `'cpm.voisetech.com'` | `string` | +| `zoneId` | required | Zone Id | 30164 | `integer` | diff --git a/dev-docs/bidders/vox.md b/dev-docs/bidders/vox.md index b531bb3079..2d3e9904b3 100644 --- a/dev-docs/bidders/vox.md +++ b/dev-docs/bidders/vox.md @@ -6,6 +6,7 @@ schain_supported: true floors_supported: true userIds: all pbjs: true +pbs: true media_types: banner, video biddercode: vox tcfeu_supported: true @@ -26,6 +27,7 @@ Please reach out to your partners account team before using this plugin to get p | `placementId` | required | The place id. | '5af45ad34d506ee7acad0c26' | `string` | | `placement` | required | Adunit placement, possible values: banner, video, inImage | 'banner' | `string` | | `imageUrl` | required for inImage | URL of the image on which the banner will be displayed | `'https://example.com/images/image.jpg'` | `string` | +| `displaySizes` | optional, only supported by inImage format | An array of strings. Each string should be in `x` format (currently, this parameter is supported only by PrebidServer vox adapter) | `["123x90", "720x100"]` | `string[]` | ### Sample Banner Ad Unit @@ -54,7 +56,7 @@ var adUnits = [{ code: 'video_ad_unit', mediaTypes: { video: { - context: 'outstream', // required, possible values: instream, outstream + context: 'outstream', // required, possible values: instream, outstream playerSize: [[640, 480]] // required } }, diff --git a/dev-docs/bidders/liftoff.md b/dev-docs/bidders/vungle.md similarity index 83% rename from dev-docs/bidders/liftoff.md rename to dev-docs/bidders/vungle.md index c55d6febc9..b66c0d254b 100644 --- a/dev-docs/bidders/liftoff.md +++ b/dev-docs/bidders/vungle.md @@ -1,8 +1,8 @@ --- layout: bidder -title: liftoff -description: Prebid liftoff Bidder Adapter -biddercode: liftoff +title: vungle +description: Prebid vungle Bidder Adapter +biddercode: vungle tcfeu_supported: false usp_supported: true gpp_supported: false @@ -25,7 +25,7 @@ sidebarType: 1 ### Note -The Liftoff Bidding adapter requires setup before beginning. Please contact us at . +The Vungle Bidding adapter requires setup before beginning. Please contact us at . ### Bid Params diff --git a/dev-docs/bidders/waardex_ak.md b/dev-docs/bidders/waardex_ak.md index 4d49887891..52fb5df578 100644 --- a/dev-docs/bidders/waardex_ak.md +++ b/dev-docs/bidders/waardex_ak.md @@ -3,23 +3,28 @@ layout: bidder title: WaardeX description: Prebid WaardeX Bidder Adaptor biddercode: waardex_ak -pbjs: true -pbs: false -media_types: banner, native, video -gvl_id: 14 (adkernel) +aliasCode: adkernel tcfeu_supported: true +dsa_supported: false +gvl_id: 14 (adkernel) usp_supported: true coppa_supported: true -gpp_supported: true -pbs_app_supported: true +gpp_sids: tcfeu, usp schain_supported: true -userIds: all +dchain_supported: false +userId: all +media_types: banner, video, native +safeframes_ok: true +deals_supported: false +floors_supported: true fpd_supported: true +pbjs: true +pbs: false +pbs_app_supported: false prebid_member: false +multiformat_supported: will-bid-on-any ortb_blocking_supported: true -multiformat_supported: will-bid-on-one -floors_supported: true -aliasCode: adkernel +privacy_sandbox: no sidebarType: 1 --- diff --git a/dev-docs/bidders/welect.md b/dev-docs/bidders/welect.md index 40879ba494..fecc3b5bad 100644 --- a/dev-docs/bidders/welect.md +++ b/dev-docs/bidders/welect.md @@ -24,15 +24,16 @@ sidebarType: 1 --- ### Note + The Welect bidder adapter requires setup and approval from the Welect team. Please reach out to [dev@welect.de](mailto:dev@welect.de) for more information. ### Bid params {: .table .table-bordered .table-striped } + | Name | Description | Example | Type | |---|---|---|---| | `placementId` | an identifier for your placement, provided by Welect | `'exampleID'` | `string` | -| `domain` | The domain of your placement | `'www.example.com'` | `string` | ### Example Ad Unit Setup @@ -41,13 +42,12 @@ var adUnits = [ { bidder: 'welect', params: { - placementId: 'exampleId', - domain: 'www.welect.de' + placementId: 'exampleId' }, - sizes: [[640, 360]], mediaTypes: { video: { - context: 'instream' + context: 'instream', + playerSize: [640, 360] } }, }; diff --git a/dev-docs/bidders/xapads.md b/dev-docs/bidders/xapads.md new file mode 100644 index 0000000000..aeae9c9719 --- /dev/null +++ b/dev-docs/bidders/xapads.md @@ -0,0 +1,40 @@ +--- +layout: bidder +title: Xapads +description: Prebid Xapads Bidder Adaptor +aliasCode: adkernel +tcfeu_supported: true +dsa_supported: false +gvl_id: 1320 +usp_supported: true +coppa_supported: true +gpp_sids: tcfeu, usp +schain_supported: true +dchain_supported: false +userId: all +media_types: banner, video, native +safeframes_ok: true +deals_supported: false +floors_supported: true +fpd_supported: true +pbjs: false +pbs: true +pbs_app_supported: true +prebid_member: false +multiformat_supported: will-bid-on-any +ortb_blocking_supported: true +privacy_sandbox: no +sidebarType: 1 + +--- + +### Note + +The Xapads Bidding adaptor requires setup and approval before beginning. Please reach out to for more details + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------|----------|-----------------------|---------------------------|----------| +| `zoneId` | required | RTB zone id | `30164` | `integer` | diff --git a/dev-docs/bidders/xe.md b/dev-docs/bidders/xe.md index 44a50d2d88..ef515d7d98 100644 --- a/dev-docs/bidders/xe.md +++ b/dev-docs/bidders/xe.md @@ -5,15 +5,16 @@ description: Prebid Xe.works Bidder Adaptor biddercode: xe media_types: banner, video coppa_supported: true -tcfeu_supported: false +tcfeu_supported: true usp_supported: true -prebid_member: false +prebid_member: true pbjs: true pbs: true schain_supported: true floors_supported: true multiformat_supported: will-bid-on-any sidebarType: 1 +gvl_id: 1383 --- ### Note diff --git a/dev-docs/bidders/yahooAdvertising.md b/dev-docs/bidders/yahooAdvertising.md index 219a7a4347..b5543dd165 100644 --- a/dev-docs/bidders/yahooAdvertising.md +++ b/dev-docs/bidders/yahooAdvertising.md @@ -5,7 +5,7 @@ description: Yahoo Advertising Bid Adapter pbs: true pbjs: true media_types: banner, video -filename: yahoosspBidAdapter +filename: yahooAdsBidAdapter biddercode: yahooAds prebid_member: true tcfeu_supported: true @@ -63,7 +63,7 @@ For new partners/publishers joining Yahoo Advertising and legacy "oneVideo" part ### Prebid.js Adapter Supported Features -For further setup details & examples please see +For further setup details & examples please see * Media Types: Banner & Video * Outstream renderer @@ -76,4 +76,3 @@ For further setup details & examples please see -Please reach out to your account team or for more information. +Please reach out to your account team or for more information. ### Bid Params diff --git a/dev-docs/bidders/yobee.md b/dev-docs/bidders/yobee.md new file mode 100644 index 0000000000..210787347e --- /dev/null +++ b/dev-docs/bidders/yobee.md @@ -0,0 +1,92 @@ +--- +layout: bidder +title: Yobee +description: Prebid Yobee Bidder Adapter. +pbjs: true +pbs: true +biddercode: yobee +media_types: banner,video,native +gvl_id: 1281 (admatic) +tcfeu_supported: true +usp_supported: true +coppa_supported: true +gpp_sids: tcfeu, tcfca, usnat, usstate_all, usp +schain_supported: true +dchain_supported: false +userIds: all +safeframes_ok: true +floors_supported: true +aliasCode: admatic +multiformat_supported: will-bid-on-any +sidebarType: 1 +--- + +### Description + +Yobee header bidding adapter connects with Yobee demand sources to fetch bids for network ID. Please reach out to your account manager or for more information. + +### Bid params + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|-------------|----------|-------------------------------------|----------|----------| +| `networkId` | required | The network ID from Yobee | `12345` | `number` | +| `host` | required | RTB Host | `*.rtb.yobee.it` | `string` | + +### Test Parameters + +300x250 banner test + +```javascript +var adUnits = [{ + code: 'your-slot_1-div', + mediaTypes: { + banner: { sizes: [[300, 250]] }, + }, + bids: [{ + bidder: 'yobee', + params: { + networkId: 12345, + host: '*.rtb.yobee.it' + } + }] +},{ + code: 'your-slot_2-div', + mediaTypes: { + native: { ... }, + }, + bids: [{ + bidder: 'yobee', + params: { + networkId: 12345, + host: '*.rtb.yobee.it' + } + }] +},{ + code: 'your-slot_3-div', + mediaTypes: { + video: { ... }, + }, + bids: [{ + bidder: 'yobee', + params: { + networkId: 12345, + host: '*.rtb.yobee.it' + } + }] +}]; +``` + +### UserSync example + +```javascript +pbjs.setConfig({ + userSync: { + iframeEnabled: true, + syncEnabled: true, + syncDelay: 1, + aliasSyncEnabled: true + } +}); +``` diff --git a/dev-docs/bidders/zentotem.md b/dev-docs/bidders/zentotem.md new file mode 100644 index 0000000000..3d9d76c045 --- /dev/null +++ b/dev-docs/bidders/zentotem.md @@ -0,0 +1,33 @@ +--- +layout: bidder +title: Zentotem +description: Prebid Zentotem Bidder Adapter +pbjs: true +pbs: true +biddercode: zentotem +tcfeu_supported: false +dsa_supported: false +schain_supported: false +dchain_supported: false +multiformat_supported: will-bid-on-one +ortb_blocking_supported: false +prebid_member: false +privacy_sandbox: none +gpp_sids: none +deals_supported: true +floors_supported: true +gvl_id: none +media_types: banner, video, native + +sidebarType: 1 +--- + +### Registration +For assistance or setup instructions, please contact us at . + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|------------|----------|------------------------|---------|----------| +| (none) | optional | no params required | `''` | n/a | diff --git a/dev-docs/bidders/zeta_global.md b/dev-docs/bidders/zeta_global.md index d573119dd8..ef3c43d55f 100644 --- a/dev-docs/bidders/zeta_global.md +++ b/dev-docs/bidders/zeta_global.md @@ -3,7 +3,7 @@ layout: bidder title: Zeta Global description: Zeta Global Prebid Bidder Adapter pbjs: true -biddercode: zeta_global +biddercode: zeta deals_supported: false media_types: banner tcfeu_supported: true diff --git a/dev-docs/bidders/zeta_global_ssp.md b/dev-docs/bidders/zeta_global_ssp.md index b6d580dcae..afd21cab0a 100644 --- a/dev-docs/bidders/zeta_global_ssp.md +++ b/dev-docs/bidders/zeta_global_ssp.md @@ -6,10 +6,14 @@ pbjs: true pbs: true biddercode: zeta_global_ssp deals_supported: false -media_types: banner, video +media_types: banner, video, audio tcfeu_supported: true +floors_supported: true +schain_supported: true +fpd_supported: true usp_supported: true coppa_supported: true +gpp_supported: true userIds: all prebid_member: true gvl_id: 469 @@ -39,5 +43,7 @@ The Zeta Global SSP adapter requires setup and approval from the Zeta Global SSP #### Prebid Server Bid Params -Prebid Server Adapter does not support any parameters. -You must get `sid` value from Zeta Global and use it instead of the placeholder in the URL. +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------------------|----------|---------------------------------------------------------------------------------------------------------------------|--------------|-----------| +| `sid` | optional | Seller ID. The identifier associated with the seller or reseller account within the advertising system | `123` | `integer` | diff --git a/dev-docs/bidmatic.md b/dev-docs/bidmatic.md new file mode 100644 index 0000000000..a999757c99 --- /dev/null +++ b/dev-docs/bidmatic.md @@ -0,0 +1,62 @@ +--- +layout: bidder +title: Bidmatic +description: Prebid example Bidder Adapter +biddercode: bidmatic +tcfeu_supported: true +dsa_supported: true +gvl_id: 1134 +usp_supported: true +coppa_supported: true +gpp_sids: tcfeu, usp +schain_supported: true +dchain_supported: false +userId: all (with commercial activation) +media_types: banner, video +userIds: all +safeframes_ok: true +deals_supported: false +floors_supported: true +fpd_supported: true +pbjs: true +pbs: true +pbs_app_supported: true +prebid_member: false +multiformat_supported: will-bid-on-one +ortb_blocking_supported: true +sidebarType: 1 +--- + +### Note + +Unleash the power of fast client-oRTB connection. +Contact us at [advertising@bidmatic.io](mailto:advertising@bidmatic.io). + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|-----------------------|-----------|-----------| +| `source` | required | Traffic source origin id | `11111` | `int` | + +### Test Parameters + +``` javascript + var adUnits = [ + // Banner adUnit + { + code: 'elemtId', + mediaTypes:{ + banner:{ + sizes: [[300, 250]] + } + } + bids: [{ + bidder: 'bidmatic', + params: { + source: 886409 + } + }] + } + ]; +``` diff --git a/dev-docs/cmp-best-practices.md b/dev-docs/cmp-best-practices.md index f431b75ea8..1201631c3f 100644 --- a/dev-docs/cmp-best-practices.md +++ b/dev-docs/cmp-best-practices.md @@ -23,7 +23,7 @@ flavored CMPs for that. Instead, here are some general guidelines: -- You can't just automatically turn on the GDPR Enforcement Module when not in GDPR scope. +- You can't just automatically turn on the TCF Control Module when not in GDPR scope. - You need to understand how your CMP works, how you want to handle the "first page" scenario where the user hasn't yet had time to answer CMP questions, and how your site is laid out geographically. - We recommend that the page first load a CMP stub synchronously, then asynchronously load the CMP code and the Prebid code @@ -31,7 +31,7 @@ Instead, here are some general guidelines: ### CMP/TCF gdprApplies -The indicates the determination of whether GDPR applies in this context. The CMP, in most cases, is responsible for this. The publisher provides this value when supplying [static](/dev-docs/modules/consentManagement.html) consent data. +The indicates the determination of whether GDPR applies in this context. The CMP, in most cases, is responsible for this. The publisher provides this value when supplying [static](/dev-docs/modules/consentManagementTcf.html) consent data. ### Prebid gdpr.defaultGdprScope @@ -52,7 +52,7 @@ Here are some approaches where PBJS config can be the same across all geos: In these approaches, the publisher has to be aware of the geo and tell Prebid.js what to do: -- When in the EEA, the page sets `consentManagement` config, but when not in the EEA, the page avoids setting the `consentManagement` config, turning off GDPR enforcement. +- When in the EEA, the page sets `consentManagement` config, but when not in the EEA, the page avoids setting the `consentManagement` config, turning off TCF controls. - When not in the EEA, the page sets `consentManagement` config with defaultGdprScope=false so that if the CMP is slow to respond then enforcement is off. ## CMP Best Practices @@ -76,4 +76,4 @@ Please follow the guidelines in the [Sirdata documentation](https://cmp.docs.sir ## Further Reading - [IAB TCF Implementation Guidelines](https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework/blob/master/TCFv2/TCF-Implementation-Guidelines.md) -- [GDPR Enforcement Module](/dev-docs/modules/gdprEnforcement.html) +- [TCF Control Module](/dev-docs/modules/tcfControl.html) diff --git a/dev-docs/conditional-ad-units.md b/dev-docs/conditional-ad-units.md index c9069fc25e..ab20a32401 100644 --- a/dev-docs/conditional-ad-units.md +++ b/dev-docs/conditional-ad-units.md @@ -14,7 +14,7 @@ sidebarType: 1 {:.no_toc} -The [global sizeConfig](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Configure-Responsive-Ads) and [Advanced Size Mapping](/dev-docs/modules/sizeMappingV2.html) features are useful for standard responsive ad designs, but a number of other scenarios are supported as well. +The [Size Mapping](/dev-docs/modules/sizeMapping.html) and [Advanced Size Mapping](/dev-docs/modules/sizeMappingV2.html) features are useful for standard responsive ad designs, but a number of other scenarios are supported as well. * TOC {:toc} @@ -31,7 +31,7 @@ See the [Publisher API reference](/dev-docs/publisher-api-reference/setConfig.ht ## Some Bidders Should Be Skipped for Some Devices {: .alert.alert-info :} -See the [Advanced Size Mapping module](/dev-docs/modules/sizeMappingV2.html) for another way to handle this scenario. Note that you must use Advanced Size Mapping for mediaTypes other than banner. +The following example uses [Size Mapping](/dev-docs/modules/sizeMapping.html). See the [Advanced Size Mapping module](/dev-docs/modules/sizeMappingV2.html) for another way to handle this scenario. Note that you must use Advanced Size Mapping for mediaTypes other than banner. Say a particular bidder is focused on mobile phone demand, so it's really not worthwhile to send them requests from display or tablets. @@ -108,7 +108,7 @@ For instance, say that a given bidder wants to define different placements for d | Display | 1111 | | Phones and tablets | 2222 | -### Using the Global sizeConfig Approach (Banner only) +### Using the Size Mapping Approach (Banner only) Assuming the same `sizeConfig` as in the first use case above, the AdUnit would contain bids for both placements, but the conditional `labelAny` is added to them both. This will cause the bid to be fired only if one @@ -191,7 +191,7 @@ var AdUnits = [{ ## Some Ad Unit Auctions Should Be Skipped Entirely for Some Devices Say there's a responsive page where one of the ad units only supports larger sizes, so it doesn't make sense -on phones. To suppress the ad unit for mobile users, we can apply conditional logic to the entire ad unit. Here's an example using the global sizeConfig approach (banner only): +on phones. To suppress the ad unit for mobile users, we can apply conditional logic to the entire ad unit. Here's an example using the size mapping approach (banner only): ```javascript @@ -218,11 +218,10 @@ var AdUnits = [{ } ] }] +``` See the [Advanced Size Mapping module](/dev-docs/modules/sizeMappingV2.html) if you need to do something like this for video. -``` - ## Some Bid Requests Apply Only to Users Originating from Certain Countries Labels aren't constrained to describing device size -- they can be used for many types of conditions the page maywant to define. Besides being defined as part of `sizeConfig`, labels can also be passed into the [`requestBids()`](/dev-docs/publisher-api-reference/requestBids.html) function as an argument. @@ -271,6 +270,6 @@ labels: ## Further Reading -* [Responsive ad designs](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Configure-Responsive-Ads) +* [Size Mapping Module](/dev-docs/modules/sizeMapping.html) * [Advanced Size Mapping Module](/dev-docs/modules/sizeMappingV2.html) * [Using Media Queries](https://developer.mozilla.org/en-US/docs/Web/CSS/Media_Queries/Using_media_queries) diff --git a/dev-docs/examples/adunit-refresh.md b/dev-docs/examples/adunit-refresh.md index 4948da6ff5..e79b28718c 100644 --- a/dev-docs/examples/adunit-refresh.md +++ b/dev-docs/examples/adunit-refresh.md @@ -9,9 +9,74 @@ about: - Demonstrates the ability to refresh individual ad units. This is useful for infinite scrolling ad slots. - Keep in mind that when auto-refreshing is done incorrectly, it could cause the same bids to be rendered repeatedly. For instance, when googletag.pubads.refresh() is called directly without removing the PBJS targeting, the same hb_ variables get re-sent to GAM, re-chosen, and re-rendered over and over without ever asking PBJS for updated targeting variables. See Auction Options for more info. -jsfiddle_link: jsfiddle.net/Prebid_Examples/cu7tpexf/embedded/html,result - -code_height: 1540 pid: 20 --- + +## Individual Ad Unit Refresh / Infinite Scroll + +{% capture htmlCodePrebid %}
Div-1
+ +
+ +
+{% endcapture %} + +{% capture jsCode %}var sizes = [ + [300, 250] +]; +var PREBID_TIMEOUT = 1000; + +var googletag = googletag || {}; +googletag.cmd = googletag.cmd || []; + +var pbjs = pbjs || {}; +pbjs.que = pbjs.que || []; + +var adUnits = [{ + code: '/19968336/header-bid-tag-0', + mediaTypes: { + banner: { + sizes: sizes + } + }, + bids: [{ + bidder: 'appnexus', + params: { + placementId: 13144370 + } + }] +}]; + +pbjs.que.push(function() { + pbjs.addAdUnits(adUnits); +}); + +var slot1; +googletag.cmd.push(function() { + slot1 = googletag.defineSlot('/19968336/header-bid-tag-0', [[300, 250]], 'div-1') + .addService(googletag.pubads()); + googletag.pubads().disableInitialLoad(); + googletag.pubads().enableSingleRequest(); + googletag.enableServices(); +}); + +function refreshBid() { + pbjs.que.push(function() { + pbjs.requestBids({ + timeout: PREBID_TIMEOUT, + adUnitCodes: ['/19968336/header-bid-tag-0'], + bidsBackHandler: function() { + pbjs.setTargetingForGPTAsync(['/19968336/header-bid-tag-0']); + googletag.pubads().refresh([slot1]); + } + }); + }); +} +{% endcapture %} + +{% include code/web-example.html id="basic-prebid-example" html=htmlCodePrebid js=jsCode %} diff --git a/dev-docs/examples/basic-example.md b/dev-docs/examples/basic-example.md index c0690ec44e..e4f2519984 100644 --- a/dev-docs/examples/basic-example.md +++ b/dev-docs/examples/basic-example.md @@ -11,9 +11,89 @@ about: - Default keyword targeting setup (reference) - Default price granularity -jsfiddle_link: jsfiddle.net/Prebid_Examples/94jt62b8/embedded/html,result - -code_height: 2300 - pid: 10 --- + +## Basic Prebid.js Example + +{% capture htmlCodePrebid %} + + + + +
Div-1
+
+ +
+{% endcapture %} + +{% capture jsCode %} +var sizes = [ + [300, 250] +]; +var PREBID_TIMEOUT = 700; + +var adUnits = [{ + code: '/19968336/header-bid-tag-1', + mediaTypes: { + banner: { + sizes: sizes + } + }, + bids: [{ + bidder: 'appnexus', + params: { + placementId: 'XXXXXXX' //not used in prod + } + }] +}]; + +// ======== DO NOT EDIT BELOW THIS LINE =========== // +var googletag = googletag || {}; +googletag.cmd = googletag.cmd || []; +googletag.cmd.push(function() { + googletag.pubads().disableInitialLoad(); +}); + +var pbjs = pbjs || {}; +pbjs.que = pbjs.que || []; + +pbjs.que.push(function() { + pbjs.addAdUnits(adUnits); + pbjs.requestBids({ + bidsBackHandler: initAdserver + }); +}); + +function initAdserver() { + if (pbjs.initAdserverSet) return; + pbjs.initAdserverSet = true; + googletag.cmd.push(function() { + if (pbjs.libLoaded) { + pbjs.que.push(function() { + pbjs.setTargetingForGPTAsync(); + googletag.pubads().refresh(); + }); + } else { + googletag.pubads().refresh(); + } + }); +} + +setTimeout(function() { + initAdserver(); +}, PREBID_TIMEOUT); + +googletag.cmd.push(function() { + googletag.defineSlot('/19968336/header-bid-tag-1', sizes, 'div-1') + .addService(googletag.pubads()); + googletag.pubads().enableSingleRequest(); + googletag.enableServices(); +}); +{% endcapture %} + +{% include code/web-example.html id="basic-prebid-example" html=htmlCodePrebid js=jsCode scripts="pbjs,gpt" %} diff --git a/dev-docs/examples/custom-price-buckets.md b/dev-docs/examples/custom-price-buckets.md index 99bb9da56b..b8bc178adc 100644 --- a/dev-docs/examples/custom-price-buckets.md +++ b/dev-docs/examples/custom-price-buckets.md @@ -9,8 +9,115 @@ about: - This example shows custom price granularity buckets using pbjs.setConfig(). - See the API reference for more detail. -jsfiddle_link: jsfiddle.net/Prebid_Examples/vq05dhnj/embedded/html,result +--- -code_height: 2152 +## Custom Price Granularity Buckets ---- +{% capture htmlCodePrebid %}
Div-1
+
+ +
+{% endcapture %} + +{% capture jsCode %}var sizes = [ + [300, 250] +]; +var PREBID_TIMEOUT = 1000; +var FAILSAFE_TIMEOUT = 3000; + +var adUnits = [{ + code: '/19968336/header-bid-tag-1', + mediaTypes: { + banner: { + sizes: sizes + } + }, + bids: [{ + bidder: 'appnexus', + params: { + placementId: 13144370 + } + }] +}]; + +const customConfigObject = { + "buckets": [ + { + "precision": 2, //default is 2 if omitted - means 2.1234 rounded to 2 decimal places = 2.12 + "min": 0, + "max": 5, + "increment": 0.01 + }, + { + "precision": 2, + "min": 5, + "max": 8, + "increment": 0.05 + }, + { + "precision": 2, + "min": 8, + "max": 20, + "increment": 0.5 + }, + { + "precision": 2, + "min": 21, + "max": 99, + "increment": 1.00 + } + ] +}; + +var googletag = googletag || {}; +googletag.cmd = googletag.cmd || []; +googletag.cmd.push(function() { + googletag.pubads().disableInitialLoad(); +}); + +var pbjs = pbjs || {}; +pbjs.que = pbjs.que || []; + +pbjs.que.push(function() { + pbjs.addAdUnits(adUnits); + pbjs.setConfig({ + priceGranularity: customConfigObject + }); + pbjs.requestBids({ + bidsBackHandler: initAdserver, + timeout: PREBID_TIMEOUT + }); +}); + +function initAdserver() { + if (pbjs.initAdserverSet) return; + pbjs.initAdserverSet = true; + googletag.cmd.push(function() { + if (pbjs.libLoaded) { + pbjs.que.push(function() { + pbjs.setTargetingForGPTAsync(); + googletag.pubads().refresh(); + }); + } else { + googletag.pubads().refresh(); + } + }); +} + +// in case PBJS doesn't load +setTimeout(function() { + initAdserver(); +}, FAILSAFE_TIMEOUT); + +googletag.cmd.push(function() { + googletag.defineSlot('/19968336/header-bid-tag-1', sizes, 'div-1').addService(googletag.pubads()); + googletag.pubads().enableSingleRequest(); + googletag.enableServices(); +}); +{% endcapture %} + +{% include code/web-example.html id="basic-prebid-example" html=htmlCodePrebid js=jsCode %} diff --git a/dev-docs/examples/in-renderer-integration.md b/dev-docs/examples/in-renderer-integration.md new file mode 100644 index 0000000000..4810f8633a --- /dev/null +++ b/dev-docs/examples/in-renderer-integration.md @@ -0,0 +1,67 @@ +--- +layout: example +title: in-renderer Integration Example +description: in-renderer Integration (formerly known as “outstream”) Example + +sidebarType: 1 + +about: + - in-renderer Integration is one of the integration methods for Prebid Video + - In this example, to keep it simple, ad rendering is performed using `pbjs.renderAd` + - InRenderer.js, an open-source renderer optimized for in-renderer integration, is used as the renderer for in-renderer integration. For more information, see InRenderer.js documentation +--- + +## Example + +{% capture htmlCodePrebid %} +

in-renderer Integration Example

+ +
+{% endcapture %} + +{% capture jsCode %}var pbjs = pbjs || {}; +pbjs.que = pbjs.que || []; + +var adUnit = { + code: "ad-unit-1", + mediaTypes: { + video: { + context: "outstream", + playerSize: [640, 360], + mimes: ["video/mp4", "video/webm", "video/ogg"], + protocols: [2, 3, 5, 6, 7, 8], + api: [2], + } + }, + bids: [ + { + bidder: "michao", + params: { + placement: "inbanner", + site: 1, + test: true + }, + }, + ], + renderer: { + url: `https://cdn.jsdelivr.net/npm/in-renderer-js@1/dist/in-renderer.umd.min.js`, + render: (bid) => { + var inRenderer = new window.InRenderer(); + inRenderer.render("ad-unit-1", bid); + }, + }, +}; + +pbjs.que.push(function() { + pbjs.addAdUnits(adUnit); + pbjs.requestBids({ + timeout: 5000, + bidsBackHandler: function () { + const highestCpmBids = pbjs.getHighestCpmBids("ad-unit-1"); + pbjs.renderAd('ad-unit-1', highestCpmBids[0].adId); + }, + }); +}) +{% endcapture %} + +{% include code/web-example.html id="basic-prebid-example" html=htmlCodePrebid js=jsCode %} diff --git a/dev-docs/examples/instream-banner-mix.md b/dev-docs/examples/instream-banner-mix.md index 0394bafa15..a099bc3f42 100644 --- a/dev-docs/examples/instream-banner-mix.md +++ b/dev-docs/examples/instream-banner-mix.md @@ -8,8 +8,216 @@ sidebarType: 1 about: - This example shows how to display instream video and banner ads within the same configuration. -jsfiddle_link: jsfiddle.net/Prebid_Examples/nowfejh7/embedded/html,result/ +--- + +## Instream Video and Banner Ad Mixed Page -code_height: 3050 +{% capture htmlCodePrebid %}

Prebid Video - JW Platform

+
+ + + + + + + +

Basic Prebid.js Example

+
Div-1
+
+ +
+ +
Div-2
+
+ +
+{% endcapture %} + +{% capture jsCode %}var div_1_sizes = [ + [300, 250], + [300, 600] +]; +var div_2_sizes = [ + [728, 90], + [970, 250] +]; +var PREBID_TIMEOUT = 1000; +var FAILSAFE_TIMEOUT = 3000; + +var adUnits = [ + { + code: '/19968336/header-bid-tag-0', + mediaTypes: { + banner: { + sizes: div_1_sizes + } + }, + bids: [{ + bidder: 'appnexus', + params: { + placementId: 13144370 + } + }] + }, + { + code: '/19968336/header-bid-tag-1', + mediaTypes: { + banner: { + sizes: div_2_sizes + } + }, + bids: [{ + bidder: 'appnexus', + params: { + placementId: 13144370 + } + }] + } +]; + +var videoAdUnit = { + code: 'video1', + mediaTypes: { + video: { + playerSize: [640, 480], + context: 'instream', + plcmt: 2, + } + }, + bids: [{ + bidder: 'appnexus', + params: { + placementId: 13232361, // Add your own placement id here + video: { + skipppable: true, + playback_method: ['auto_play_sound_off'] + } + } + }] +}; + +var googletag = googletag || {}; +googletag.cmd = googletag.cmd || []; +googletag.cmd.push(function() { + googletag.pubads().disableInitialLoad(); +}); + +// Init Prebid.js +var pbjs = pbjs || {}; +pbjs.que = pbjs.que || []; + +// define invokeVideoPlayer in advance in case we get the bids back from prebid before the entire page loads +var tempTag = false; +var invokeVideoPlayer = function(url) { + tempTag = url; +}; + +pbjs.que.push(function() { + pbjs.addAdUnits(adUnits); + pbjs.addAdUnits(videoAdUnit); + pbjs.setConfig({ + debug: true, + cache: { + url: '' + } + }); + pbjs.requestBids({ + bidsBackHandler: initAdserver, + timeout: PREBID_TIMEOUT, + auctionId: 'auction_1' + }) +}); + +function initAdserver(bids) { + + if (pbjs.initAdserverSet) return; + pbjs.initAdserverSet = true; + + // Get all of the adUnit codes for the display adUnits + var displayAdUnitCodes = []; + adUnits.forEach(function(adUnit) { + displayAdUnitCodes.push(adUnit.code); + }); + + // Set targeting for each display slot + googletag.cmd.push(function() { + if (pbjs.libLoaded) { + pbjs.que.push(function() { + pbjs.setTargetingForGPTAsync(displayAdUnitCodes); + googletag.pubads().refresh(); + }); + } else { + googletag.pubads().refresh(); + } + }); + + // Build DFP URL with targeting for videoAdUnit + var videoUrl = pbjs.adServers.dfp.buildVideoUrl({ + adUnit: videoAdUnit, + params: { + iu: '/19968336/prebid_cache_video_adunit', + cust_params: { + section: 'blog', + anotherKey: 'anotherValue' + }, + output: 'vast' + } + }); + + // Pass URL to Video player to make final DFP call + invokeVideoPlayer(videoUrl); +} +// in case PBJS doesn't load +setTimeout(function() { + initAdserver(); +}, FAILSAFE_TIMEOUT); + +googletag.cmd.push(function() { + googletag.defineSlot('/19968336/header-bid-tag-0', div_1_sizes, 'div-1').addService(googletag.pubads()); + googletag.pubads().enableSingleRequest(); + googletag.enableServices(); +}); +googletag.cmd.push(function() { + googletag.defineSlot('/19968336/header-bid-tag-1', div_2_sizes, 'div-2').addService(googletag.pubads()); + googletag.pubads().enableSingleRequest(); + googletag.enableServices(); +}); +{% endcapture %} + +{% include code/web-example.html id="basic-prebid-example" html=htmlCodePrebid js=jsCode %} diff --git a/dev-docs/examples/intercept-banner-not-for-prod.js b/dev-docs/examples/intercept-banner-not-for-prod.js new file mode 100644 index 0000000000..a881714fc0 --- /dev/null +++ b/dev-docs/examples/intercept-banner-not-for-prod.js @@ -0,0 +1,16 @@ +window.pbjs = window.pbjs || { que: [] }; +pbjs.que.push(() => { + pbjs.setConfig({ + debugging: { + enabled: true, + intercept: [{ + when: { + bidder: 'appnexus', + }, + then: { + ad: '' + } + }] + } + }) + }) \ No newline at end of file diff --git a/dev-docs/examples/legacy-browser-example.md b/dev-docs/examples/legacy-browser-example.md deleted file mode 100644 index cae6e4c6c0..0000000000 --- a/dev-docs/examples/legacy-browser-example.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -layout: example -title: Legacy Browser Support -description: Legacy Browser Support - -sidebarType: 1 - -about: -- In Prebid 6.0, support for legacy browsers is no longer assured. -- Publishers may conditionally deploy the 5.x branch and add polyfills -- One strategy to do this is simply the module/nomodule approach discussed here https://philipwalton.com/articles/deploying-es2015-code-in-production-today/ -- Another strategy is to detect the user agent or the 'currentScript' mechanism as described here https://stackoverflow.com/questions/29987969/how-to-load-a-script-only-in-ie -- Another strategy is to conditionally serve one file or another based on instructions to your cdn - -jsfiddle_link: jsfiddle.net/Prebid_Examples/kqe8L2jf/embedded/html,result - -code_height: 3050 - ---- diff --git a/dev-docs/examples/meta-bid-filtering.md b/dev-docs/examples/meta-bid-filtering.md index f31e6bcd0c..7ff0d28077 100644 --- a/dev-docs/examples/meta-bid-filtering.md +++ b/dev-docs/examples/meta-bid-filtering.md @@ -8,8 +8,106 @@ sidebarType: 1 about: - This is an example that filters bid responses based on the metadata object. - Bidders can supply metadata about the bid such as advertiser domain. See the "meta" fields in the bid response for the full list of metadata. +- Please note that we recommend a dedicated module for this case. See Bid Response Filter -jsfiddle_link: jsfiddle.net/Prebid_Examples/0s4eug1d/embedded/html,result - -code_height: 2300 --- + +## Meta Bid Filtering + +{% capture htmlCodePrebid %}
Div-1
+
+ +
+{% endcapture %} + +{% capture jsCode %}var sizes = [ + [300, 250] +]; +var PREBID_TIMEOUT = 1000; +var FAILSAFE_TIMEOUT = 3000; + +var adUnits = [{ + code: '/19968336/header-bid-tag-1', + mediaTypes: { + banner: { + sizes: sizes + } + }, + bids: [{ + bidder: 'appnexus', + params: { + placementId: 13144370 + }, + + }] +}]; + +// ======== DO NOT EDIT BELOW THIS LINE =========== // +var googletag = googletag || {}; +googletag.cmd = googletag.cmd || []; +googletag.cmd.push(function() { + googletag.pubads().disableInitialLoad(); +}); + +var pbjs = pbjs || {}; +pbjs.que = pbjs.que || []; + +pbjs.que.push(function() { + pbjs.addAdUnits(adUnits); + pbjs.requestBids({ + bidsBackHandler: (bids) => { + // loop through ad units + Object.entries(bids).forEach(([adUnit, bids]) => { + // invalidate blocked ads + bids.forEach(bid => { + if (isBlockedAd(bid.meta)) { + pbjs.markWinningBidAsUsed({ adId: bid.adId }); + } + }) + }) + initAdserver() + }, + timeout: PREBID_TIMEOUT + }); +}); + +function initAdserver() { + if (pbjs.initAdserverSet) return; + pbjs.initAdserverSet = true; + googletag.cmd.push(function() { + if (pbjs.libLoaded) { + pbjs.que.push(function() { + pbjs.setTargetingForGPTAsync(); + googletag.pubads().refresh(); + }); + } else { + googletag.pubads().refresh(); + } + }); +} + +// function for filtering logic or checking if bid.meta has a specific property +function isBlockedAd(metaObject){ + // example that checks if advertiserDomain exists + // metaObject.hasOwnProperty("advertiserDomain") + +} + +// in case PBJS doesn't load +setTimeout(function() { + initAdserver(); +}, FAILSAFE_TIMEOUT); + +googletag.cmd.push(function() { + googletag.defineSlot('/19968336/header-bid-tag-1', sizes, 'div-1') + .addService(googletag.pubads()); + googletag.pubads().enableSingleRequest(); + googletag.enableServices(); +}); +{% endcapture %} + +{% include code/web-example.html id="basic-prebid-example" html=htmlCodePrebid js=jsCode %} diff --git a/dev-docs/examples/multi-format-example.md b/dev-docs/examples/multi-format-example.md index 781c7bf5c9..87b9381b87 100644 --- a/dev-docs/examples/multi-format-example.md +++ b/dev-docs/examples/multi-format-example.md @@ -7,12 +7,84 @@ sidebarType: 1 about: - A multi-format ad unit allows you to receive any combination of banner, video, or native demand +- A multi-format ad unit has two methods - a simple setup with in-renderer integration that does not require complex configuration on the ad server side, and format switching on the ad server side - Any bidder that supports at least one of the listed media types can participate in the auction for that ad unit - For engineering setup instructions, see Show Multi-Format Ads -- For ad ops setup instructions, see Google Ad Manager with Prebid Step by Step +- In this example, to keep it simple, ad rendering is performed using `pbjs.renderAd` +- InRenderer.js, an open-source renderer optimized for in-renderer integration, is used as the renderer for in-renderer integration. For more information, see InRenderer.js documentation on Github -jsfiddle_link: jsfiddle.net/Prebid_Examples/yxsgcj71/embedded/html,result +--- -code_height: 3050 +## Example ---- +{% capture htmlCodePrebid %} +

Multi-format Example

+ +
+{% endcapture %} + +{% capture jsCode %}var pbjs = pbjs || {}; +pbjs.que = pbjs.que || []; + +var adUnit = { + code: "ad-unit-1", + mediaTypes: { + banner: { + sizes: [[300, 250]] + }, + video: { + context: "outstream", + playerSize: [320, 180], + mimes: ["video/mp4", "video/webm", "video/ogg"], + protocols: [2, 3, 5, 6, 7, 8], + api: [2], + }, + native: { + adTemplate: `
`, + ortb: { + assets: [ + { + id: 1, + required: 1, + img: { + type: 3, + w: 300, + h: 250, + }, + }, + ], + }, + }, + }, + bids: [ + { + bidder: "michao", + params: { + placement: "inbanner", + site: 1, + test: true + }, + }, + ], + renderer: { + url: `https://cdn.jsdelivr.net/npm/in-renderer-js@1/dist/in-renderer.umd.min.js`, + render: (bid) => { + var inRenderer = new window.InRenderer(); + inRenderer.render("ad-unit-1", bid); + }, + }, +}; + +pbjs.que.push(function() { + pbjs.addAdUnits(adUnit); + pbjs.requestBids({ + timeout: 5000, + bidsBackHandler: function () { + const highestCpmBids = pbjs.getHighestCpmBids("ad-unit-1"); + pbjs.renderAd('ad-unit-1', highestCpmBids[0].adId); + }, + }); +}) +{% endcapture %} + +{% include code/web-example.html id="basic-prebid-example" html=htmlCodePrebid js=jsCode %} diff --git a/dev-docs/examples/native-ad-example.md b/dev-docs/examples/native-ad-example.md index 63eca29a7d..4d87c6fe72 100644 --- a/dev-docs/examples/native-ad-example.md +++ b/dev-docs/examples/native-ad-example.md @@ -10,8 +10,149 @@ about: - For engineering setup instructions, see Show Native Ads - For ad ops setup instructions, see GAM Step by Step - Native Creatives -jsfiddle_link: jsfiddle.net/Prebid_Examples/s5L7p3yd/embedded/html,result/ +--- -code_height: 3050 +## Native Ad Unit ---- +{% capture htmlCodePrebid %}
+

No response

+ +
+ +
+

No response

+ +
+{% endcapture %} + +{% capture jsCode %} var googletag = googletag || {}; +googletag.cmd = googletag.cmd || []; + +var pbjs = pbjs || {}; +pbjs.que = pbjs.que || []; +var PREBID_TIMEOUT = 3000; + +var date = new Date().getTime(); + +function initAdserver() { + if (pbjs.initAdserverSet) return; + + googletag.cmd.push(function() { + if (pbjs.libLoaded) { + pbjs.que.push(function() { + pbjs.setTargetingForGPTAsync(); + googletag.pubads().refresh(); + }); + } else { + googletag.pubads().refresh(); + } + }); + + pbjs.initAdserverSet = true; +} + +// Load GPT when timeout is reached. +setTimeout(initAdserver, PREBID_TIMEOUT); + +pbjs.que.push(function() { + + pbjs.setConfig({ + debug: true + }); + + var allSlotsBidWon = function allSlotsBidWon() { + console.log('allSlotsBidWon called'); + }; + + pbjs.onEvent('bidWon', allSlotsBidWon); + + var adUnits = [{ + code: '/19968336/prebid_native_example_1', + sizes: [ + [360, 360] + ], + mediaTypes: { + native: { + title: { + required: true + }, + image: { + required: true + }, + sponsoredBy: { + required: true + } + } + }, + bids: [{ + bidder: 'appnexus', + params: { + placementId: 13232354, + allowSmallerSizes: true + } + }] + }, + { + code: '/19968336/prebid_native_example_2', + sizes: [ + [1, 1] + ], + mediaTypes: { + native: { + title: { + required: true + }, + body: { + required: true + }, + image: { + required: true + }, + sponsoredBy: { + required: true + }, + icon: { + required: false + }, + } + }, + bids: [{ + bidder: 'appnexus', + params: { + placementId: 13232354, + allowSmallerSizes: true + } + }] + } + ]; + + pbjs.addAdUnits(adUnits); + pbjs.requestBids({ + bidsBackHandler: function(bidResponses) { + initAdserver(); + } + }); +}); + +// GPT setup +googletag.cmd.push(function() { + var slot1 = googletag.defineSlot('/19968336/prebid_native_example_1', [[360, 360]], 'div-1').addService(googletag.pubads()); + var slot2 = googletag.defineSlot('/19968336/prebid_native_example_2', 'fluid', 'div-2').addService(googletag.pubads()); + googletag.pubads().disableInitialLoad(); + googletag.pubads().enableSingleRequest(); + googletag.enableServices(); +}); + +{% endcapture %} + +{% include code/web-example.html id="basic-prebid-example" html=htmlCodePrebid js=jsCode %} diff --git a/dev-docs/examples/no-adserver.md b/dev-docs/examples/no-adserver.md index 70fb772aac..c1b2dee071 100644 --- a/dev-docs/examples/no-adserver.md +++ b/dev-docs/examples/no-adserver.md @@ -1,16 +1,124 @@ --- layout: example -title: No Adserver Example +title: Prebid as Adserver Example left_nav_override: Examples -description: Running Prebid.js without an ad server +description: Running Prebid.js as an ad server sidebarType: 1 about: -- This example demonstrates running an auction and rendering without an ad server. +- This example demonstrates running an auction and rendering; using Prebid.js as an ad server. jsfiddle_link: jsfiddle.net/Prebid_Examples/svumodbe/embedded/html,result -code_height: 2300 - -pid: 10 --- + +## Basic Prebid.js Example + +{% capture htmlCodePrebid %}
test-div
+
+
test-div2
+
+{% endcapture %} + +{% capture jsCode %}var adUnits = [ + { + code: 'test-div', + mediaTypes: { + banner: { + sizes: [[300,250]] + } + }, + bids: [ + { + bidder: 'appnexus', + params: { + placementId: 13144370 + } + } + ] + }, + { + code: 'test-div2', + mediaTypes: { + banner: { + sizes: [[728,90]] + } + }, + bids: [ + { + bidder: 'appnexus', + params: { + placementId: 13144370 + } + } + ] + } +]; + +var pbjs = pbjs || {}; +pbjs.que = pbjs.que || []; + +pbjs.que.push(function() { + pbjs.addAdUnits(adUnits); +}); + +// you could instead pass an array of adUnits +// to getHighestCpmBids() if desired +function renderAllAdUnits() { + var winners=pbjs.getHighestCpmBids(); + for (var i = 0; i < winners.length; i++) { + renderOne(winners[i]); + } +} + +function renderOne(winningBid) { +if (winningBid && winningBid.adId) { + var div = document.getElementById(winningBid.adUnitCode); + if (div) { + const iframe = document.createElement('iframe'); + iframe.scrolling = 'no'; + iframe.frameBorder = '0'; + iframe.marginHeight = '0'; + iframe.marginHeight = '0'; + iframe.name = `prebid_ads_iframe_${winningBid.adUnitCode}`; + iframe.title = '3rd party ad content'; + iframe.sandbox.add( + 'allow-forms', + 'allow-popups', + 'allow-popups-to-escape-sandbox', + 'allow-same-origin', + 'allow-scripts', + 'allow-top-navigation-by-user-activation' + ); + iframe.setAttribute('aria-label', 'Advertisment'); + iframe.style.setProperty('border', '0'); + iframe.style.setProperty('margin', '0'); + iframe.style.setProperty('overflow', 'hidden'); + div.appendChild(iframe); + const iframeDoc = iframe.contentWindow.document; + pbjs.renderAd(iframeDoc, winningBid.adId); + + // most browsers have a default margin of 8px . We add those after prebid has written to the iframe. + // internally prebid uses document.write or inserts an element. Either way, this is safe to do here. + // document.write is sync. + // see https://github.com/prebid/Prebid.js/blob/92daa81f277598cbed486cf8be01ce796aa80c8f/src/prebid.js#L555-L588 + + // you may also use "all: unset". + // @see https://www.youtube.com/shorts/z47iLmBeRXY + + const normalizeCss = `/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */button,hr,input{overflow:visible}progress,sub,sup{vertical-align:baseline}[type=checkbox],[type=radio],legend{box-sizing:border-box;padding:0}html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}details,main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:ButtonText dotted 1px}fieldset{padding:.35em .75em .625em}legend{color:inherit;display:table;max-width:100%;white-space:normal}textarea{overflow:auto}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}[hidden],template{display:none}`; + const iframeStyle = iframeDoc.createElement('style'); + iframeStyle.appendChild(iframeDoc.createTextNode(normalizeCss)); + iframeDoc.head.appendChild(iframeStyle); + } + } +} +pbjs.que.push(function() { + pbjs.requestBids({ + timeout: 2000, + bidsBackHandler: renderAllAdUnits + }); +}); +{% endcapture %} + +{% include code/web-example.html id="basic-prebid-example" html=htmlCodePrebid js=jsCode scripts="pbjs" %} diff --git a/dev-docs/examples/postbid.md b/dev-docs/examples/postbid.md index 2a64381aa2..b4e0579047 100644 --- a/dev-docs/examples/postbid.md +++ b/dev-docs/examples/postbid.md @@ -14,7 +14,71 @@ about: - There is no need to create line items for each price bucket as the postbid creative is served after the ad server has chosen the line item. - This postbid creative supports passback. See how this works below. -jsfiddle_link: jsfiddle.net/Prebid_Examples/mtuq7kz0/embedded/html,result - -code_height: 1450 --- + +## Postbid Example + +{% capture htmlCodePrebid %}
postbid iframe
+ +{% endcapture %} + +{% capture jsCode %}var sizes = [ + [300, 250] +]; +var PREBID_TIMEOUT = 1000; +var adUnits = [{ + code: 'postbid_iframe', + mediaTypes: { + banner: { + sizes: sizes + } + }, + bids: [{ + bidder: 'appnexus', + params: { + placementId: 13144370 + } + }] +}]; + +var pbjs = pbjs || {}; +pbjs.que = pbjs.que || []; + +pbjs.que.push(function() { + pbjs.addAdUnits(adUnits); + pbjs.requestBids({ + timeout: PREBID_TIMEOUT, + bidsBackHandler: function() { + var iframe = document.getElementById('postbid_iframe'); + var iframeDoc = iframe.contentWindow.document; + var adServerTargeting = pbjs.getAdserverTargetingForAdUnitCode('postbid_iframe'); + + // If any bidders return any creatives + if (adServerTargeting && adServerTargeting['hb_adid']) { + pbjs.renderAd(iframeDoc, adServerTargeting['hb_adid']); + } else { + iframe.width = sizes[0][0]; + iframe.height = sizes[0][1]; + iframeDoc.write('' + passbackTagHtml + ''); + iframeDoc.close(); + } + } + }); +}); + +// Define the passback HTML tag here. +// Note that this tag is usually in either Script tag form or iFrame form. +var passbackTagHtml = 'TO ADD'; +{% endcapture %} + +{% include code/web-example.html id="basic-prebid-example" html=htmlCodePrebid js=jsCode %} diff --git a/dev-docs/examples/size-mapping.md b/dev-docs/examples/size-mapping.md index eb87f20109..4ad3401392 100644 --- a/dev-docs/examples/size-mapping.md +++ b/dev-docs/examples/size-mapping.md @@ -4,14 +4,128 @@ title: Filter Sizes Dynamically with Labels description: Filter Sizes Dynamically with Labels sidebarType: 1 - - about: - This example demonstrates dynamic filtering on ad unit sizes - Ad unit labels applied based on CSS media queries -jsfiddle_link: jsfiddle.net/Prebid_Examples/qourvse1/embedded/html,result +--- -code_height: 2400 +## Filter Sizes Dynamically with Labels ---- +{% capture htmlCodePrebid %}
Div-1
+
+ +
+{% endcapture %} + +{% capture jsCode %}var desktopSizes = [ + [970, 250], + [300, 600], + [300, 250] +]; +var tabletSizes = [ + [728, 90], + [160, 600], + [300, 250] +]; +var phoneSizes = [ + [320, 100], + [320, 50], + [300, 250] +]; +var allSizes = [ + [970, 250], + [728,90], + [320, 100], + [320, 50], + [300, 600], + [300, 250], + [160,600] +]; +var PREBID_TIMEOUT = 1000; +var FAILSAFE_TIMEOUT = 3000; + +var adUnits = [ + { + code: '/19968336/header-bid-tag-0', + mediaTypes: { + banner: { + sizes: allSizes + } + }, + bids: [ + { + bidder: 'appnexus', + params: { + placementId: 13144370 + } + } + ] + } +]; + +var pbjs = pbjs || {}; +pbjs.que = pbjs.que || []; + +var googletag = googletag || {}; +googletag.cmd = googletag.cmd || []; +googletag.cmd.push(function() { + googletag.pubads().disableInitialLoad(); +}); + +pbjs.que.push(function() { + pbjs.addAdUnits(adUnits); + pbjs.setConfig({ + sizeConfig: [{ + 'mediaQuery': '(min-width: 1025px)', + 'sizesSupported': desktopSizes, + 'labels': ['desktop'] + }, { + 'mediaQuery': '(min-width: 768px) and (max-width: 1024px)', + 'sizesSupported': tabletSizes, + 'labels': ['tablet'] + }, { + 'mediaQuery': '(min-width: 320px) and (max-width: 812px)', + 'sizesSupported': phoneSizes, + 'labels': ['phone'] + }] + }); + pbjs.requestBids({ + bidsBackHandler: sendAdserverRequest, + timeout: PREBID_TIMEOUT + }); +}); + +function sendAdserverRequest() { + if (pbjs.adserverRequestSent) return; + pbjs.adserverRequestSent = true; + googletag.cmd.push(function() { + if (pbjs.libLoaded) { + pbjs.que.push(function() { + pbjs.setTargetingForGPTAsync(); + googletag.pubads().refresh(); + }); + } else { + googletag.pubads().refresh(); + } + }); +} + +// in case PBJS doesn't load +setTimeout(function() { + sendAdserverRequest(); +}, FAILSAFE_TIMEOUT); + +googletag.cmd.push(function() { + googletag.defineSlot('/19968336/header-bid-tag-0', allSizes, 'div-1') + .addService(googletag.pubads()); + googletag.pubads().enableSingleRequest(); + googletag.enableServices(); +}); +{% endcapture %} + +{% include code/web-example.html id="size-mapping-example" html=htmlCodePrebid js=jsCode %} diff --git a/dev-docs/examples/sync-tid.md b/dev-docs/examples/sync-tid.md index acba990c8d..0922e41ffd 100644 --- a/dev-docs/examples/sync-tid.md +++ b/dev-docs/examples/sync-tid.md @@ -4,14 +4,120 @@ title: Sync Transaction Ids With Another Library description: Synchronize Transaction Ids With Another Library sidebarType: 1 - - about: - imp.ext.tid sync - This example demonstrates sending the same impression transaction identifier (imp.ext.tid) to two on page libraries. -jsfiddle_link: jsfiddle.net/50aqtrck/1/embedded/html,result +--- -code_height: 2400 +## Sync Transaction Ids With Another Library ---- +```javascript +const AUCTION_TIMEOUT = 1500; +const FAILSAFE_TIMEOUT = 3000; + +const requestManager = { + adserverRequestSent: false, + otherLibrary: false, + prebid: false, +}; + +const slots = [ + { + id: 'div-gpt-ad-123-0', + tid: crypto.randomUUID(), + sizes: [ + [300, 250] + ] + } +] + +anotherLibraryTag.fetchBids({ + slots: slots.map((slot) => ({ + // Please confirm precise syntax for this next line with other library documentation + slotID: slot.id, + sizes: slot.sizes, + timeout: AUCTION_TIMEOUT + })), + function() { + googletag.cmd.push(function() { + anotherLibraryTag.setDisplayBids(); + requestManager.otherLibrary = true; + sendBidsToAdServer(); + }); + } +}); + +pbjs.que.push(function() { + pbjs.setConfig({ + debug: true, + }); + pbjs.requestBids({ + bidsBackHandler: prebidBidsBack, + timeout: AUCTION_TIMEOUT, + adUnits: slots.map((slot) => ({ + code: slot.id, + mediaTypes: { + banner: { + sizes: slot.sizes, + }, + }, + ortb2Imp: { + ext: { + tid: slot.tid + } + }, + bids: [ + { + bidder: 'appnexus', + params: { + placementId: 13144370, + }, + }, + ], + })) + }); +}); + +// prebid bids returned +function prebidBidsBack() { + pbjs.initAdserverSet = true; + googletag.cmd.push(function() { + if (pbjs.libLoaded) { + pbjs.que.push(function() { + pbjs.setTargetingForGPTAsync(); + requestManager.prebid = true; + sendBidsToAdServer(); + }); + } else { + googletag.pubads().refresh(); + requestManager.adserverRequestSent = true; + } + }); +} + +// send all bids to GAM +function sendBidsToAdServer(failsafeTimoutReached) { + if (requestManager.adserverRequestSent === true) return; + + if (failsafeTimoutReached) { + console.warn("AUCTION FAILSAFE TIMEOUT REACHED"); + googletag.cmd.push(function() { + googletag.pubads().refresh(); + }); + requestManager.adserverRequestSent = true; + return; + } + + if (requestManager.otherLibrary && requestManager.prebid) { + googletag.cmd.push(function() { + googletag.pubads().refresh(); + }); + requestManager.adserverRequestSent = true; + } +} + +setTimeout(function() { + sendBidsToAdServer(true); +}, FAILSAFE_TIMEOUT); +``` diff --git a/dev-docs/examples/use-prebid-with-appnexus-ad-server.md b/dev-docs/examples/use-prebid-with-appnexus-ad-server.md index a5d3980f5f..45dbb89fad 100644 --- a/dev-docs/examples/use-prebid-with-appnexus-ad-server.md +++ b/dev-docs/examples/use-prebid-with-appnexus-ad-server.md @@ -10,6 +10,120 @@ about: - See the Seller Tag (AST) documentation for more information. - To configure the Seller Tag to use SafeFrames, refer to the SafeFrame API Reference. -jsfiddle_link: jsfiddle.net/Prebid_Examples/tr1djf9e/embedded/html,result -code_height: 2404 ---- \ No newline at end of file +--- + +## Using Prebid.js with Microsoft Monetize Ad Server + +{% capture htmlCodePrebid %}
Div-1
+
+ +
+ +
+ +
Div-2
+
+ +
+{% endcapture %} + +{% capture jsCode %}var div_1_sizes = [ + [300, 250], + [300, 600] +]; +var div_2_sizes = [ + [728, 90], + [970, 250] +]; +var PREBID_TIMEOUT = 1000; + +var pbjs = pbjs || {}; +pbjs.que = pbjs.que || []; + +var adUnits = [ + { + code: 'div-1', + mediaTypes: { + banner: { + sizes: div_1_sizes + } + }, + bids: [{ + bidder: 'appnexus', + params: { + placementId: 13144370 + } + }] + }, + { + code: 'div-2', + mediaTypes: { + banner: { + sizes: div_2_sizes + } + }, + bids: [{ + bidder: 'appnexus', + params: { + placementId: 13144370 + } + }] + } +]; + +pbjs.que.push(function() { + pbjs.addAdUnits(adUnits); + pbjs.requestBids({ + bidsBackHandler: function(bidResponses) { + initAdserver(); + }, + timeout: PREBID_TIMEOUT + }); + +}); + +// Prebid Config Section END + +var apntag = apntag || {}; +apntag.anq = apntag.anq || []; +apntag.anq.push(function() { + apntag.setPageOpts({ + member: 1543 + }); + apntag.defineTag({ + tagId: 10885450, + sizes: div_1_sizes, + targetId: 'div-1' + }); + apntag.defineTag({ + tagId: 10885450, + sizes: div_2_sizes, + targetId: 'div-2' + }); +}); + +//start loading tags +function initAdserver() { + if (pbjs.requestSent) { + return; + } + pbjs.requestSent = true; + pbjs.que.push(function() { + apntag.anq.push(function() { + pbjs.setTargetingForAst(); + apntag.loadTags(); + }); + }); +} +{% endcapture %} + +{% include code/web-example.html id="basic-prebid-example" html=htmlCodePrebid js=jsCode scripts="pbjs,astjs" %} diff --git a/dev-docs/faq.md b/dev-docs/faq.md index cfca608b86..41d2426188 100644 --- a/dev-docs/faq.md +++ b/dev-docs/faq.md @@ -10,7 +10,7 @@ sidebarType: 1 This page has answers to some frequently asked questions about Prebid.js. If you don't find what you're looking for here, there are other ways to [get help](/support/index.html). -* TOC +- TOC {:toc} ## General @@ -19,8 +19,8 @@ This page has answers to some frequently asked questions about Prebid.js. If yo Nope. The only approval process is a code review. There are separate instructions for: -* [adding a bidder in Prebid.js](/dev-docs/bidder-adaptor.html) -* [adding an analytics adapter in Prebid.js](/dev-docs/integrate-with-the-prebid-analytics-api.html) +- [adding a bidder in Prebid.js](/dev-docs/bidder-adaptor.html) +- [adding an analytics adapter in Prebid.js](/dev-docs/integrate-with-the-prebid-analytics-api.html) As for [membership](https://prebid.org/membership/) in Prebid.org, that's entirely optional -- we'd be happy to have you join and participate in the various committees, but it's not necessary for contributing code as a community member. @@ -37,8 +37,8 @@ Prebid.org does not support any version of Prebid.js prior to the previous versi We would love for Amazon to contribute a TAM adapter, but so far that's not happened. Publishers that want to sync IDs across multiple header bidding wrappers should be aware of these resources: -* You can generate the auctionId parameter outside of Prebid and pass it when calling [pbjs.requestBids()](/dev-docs/publisher-api-reference/requestBids.html) -* [Example of Synchronizing Transaction IDs with Another Library](/dev-docs/examples/sync-tid.html) +- You can generate the auctionId parameter outside of Prebid and pass it when calling [pbjs.requestBids()](/dev-docs/publisher-api-reference/requestBids.html) +- [Example of Synchronizing Transaction IDs with Another Library](/dev-docs/examples/sync-tid.html) ### Should Prebid bidders be in ads.txt? @@ -55,36 +55,49 @@ To get started, first talk to your lawyers to determine your legal obligations. After you’ve determined your legal obligations, consider the tools Prebid makes available to publishers so that their pages can determine what actions are needed based on their interpretation of the user’s actions and the company’s policies: -* Consider utilizing an [Activity Control](/dev-docs/activity-controls.html). These are available with Prebid.js 7.48 and may help cover a number of common privacy concerns. -* Turn off Prebid.js usersync: - * [for client-side adapters](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Configure-User-Syncing) - either completely or for certain bidders. - * [for server-side adapters](/dev-docs/modules/prebidServer.html) - override the s2sConfig.syncEndpoint -* [Disable User ID modules](/dev-docs/modules/userId.html) - there are controls for different ID modules and which bidders can get which IDs. -* [Disable device access](/dev-docs/publisher-api-reference/setConfig.html#setConfig-deviceAccess) - no adapter or module will be able to create a cookie or HTML5 localstorage object. -* For GDPR: - * Consider the [GDPR](/dev-docs/modules/consentManagement.html) and [GDPR Enforcement](/dev-docs/modules/gdprEnforcement.html) modules, which flexibly support various actions like cancelling usersyncs, auctions, and analytics. Using these modules, bid adapters can receive the IAB TCF string from the CMP. - * Note that TCF 2.2 is functionally the same as TCF 2.0 from the Prebid.js perspective. The code has always relied on event listeners to get the TCF string, so when `getTCData` was deprecated in 2.2 the modules were unaffected. There are still references in the code only because it is still accepted as a place for statically-supplied data. - * Alternatively, the page can just avoid turning on certain bidders or modules. -* For CCPA / CPRA / US-Privacy: - * Consider the [US-Privacy](/dev-docs/modules/consentManagementUsp.html) module, which passes the IAB USP string through to bid adapters and supports data deletion events for User ID modules and other interested adapters and modules. - * Also consider implementing an [Activity Control](/dev-docs/activity-controls.html) to suppress activities upon opt-out or in environments without legal notice. An example implementation is available on the activity control documentation page. - * Also consider implementing the [GPP control module - usnat section](/dev-docs/modules/gppControl_usnat.html) to implement reasonable default expressions of activity controls when a usnat string is available as section 7 of a GPP string. -* Set the [COPPA flag](/dev-docs/publisher-api-reference/setConfig.html#setConfig-coppa), which passes this value through to modules and bid adapters. - * Also consider implementing an [Activity Control](/dev-docs/activity-controls.html) to suppress activities when COPPA applies. The implementation is very similar to the example CCPA implementation available on the activity control documentation page. -* The IAB is still refining the definition of [GPP](https://iabtechlab.com/gpp/). Prebid has built a GPP module that supports GPP 1.0, with 1.1 support coming soon after the specification is finalized and merged. Many bid adapters support both statically setting GPP strings, e.g. `pbjs.setConfig({ortb2: {regs: {gpp: "blah", gpp_sid: [1,2]}}});` and module-read consent. -* Avoid adding certain bidders or modules to the AdUnit. -* Turn off header bidding altogether. +- Consider utilizing an [Activity Control](/dev-docs/activity-controls.html). These are available with Prebid.js 7.48 and may help cover a number of common privacy concerns. +- Turn off Prebid.js usersync: + - [for client-side adapters](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Configure-User-Syncing) - either completely or for certain bidders. + - [for server-side adapters](/dev-docs/modules/prebidServer.html) - override the s2sConfig.syncEndpoint +- [Disable User ID modules](/dev-docs/modules/userId.html) - there are controls for different ID modules and which bidders can get which IDs. +- [Disable device access](/dev-docs/publisher-api-reference/setConfig.html#setConfig-deviceAccess) - no adapter or module will be able to create a cookie or HTML5 localstorage object. +- For GDPR: + - Consider the [TCF](/dev-docs/modules/consentManagementTcf.html) and [TCF Control](/dev-docs/modules/tcfControl.html) modules, which flexibly support various actions like cancelling usersyncs, auctions, and analytics. Using these modules, bid adapters can receive the IAB TCF string from the CMP. + - Note that TCF 2.2 is functionally the same as TCF 2.0 from the Prebid.js perspective. The code has always relied on event listeners to get the TCF string, so when `getTCData` was deprecated in 2.2 the modules were unaffected. There are still references in the code only because it is still accepted as a place for statically-supplied data. + - Alternatively, the page can just avoid turning on certain bidders or modules. +- For CCPA / CPRA / US-Privacy: + - Consider the [US-Privacy](/dev-docs/modules/consentManagementUsp.html) module, which passes the IAB USP string through to bid adapters and supports data deletion events for User ID modules and other interested adapters and modules. + - Also consider implementing an [Activity Control](/dev-docs/activity-controls.html) to suppress activities upon opt-out or in environments without legal notice. An example implementation is available on the activity control documentation page. + - Also consider implementing the [GPP control module - usnat section](/dev-docs/modules/gppControl_usnat.html) to implement reasonable default expressions of activity controls when a usnat string is available as section 7 of a GPP string. +- Set the [COPPA flag](/dev-docs/publisher-api-reference/setConfig.html#setConfig-coppa), which passes this value through to modules and bid adapters. + - Also consider implementing an [Activity Control](/dev-docs/activity-controls.html) to suppress activities when COPPA applies. The implementation is very similar to the example CCPA implementation available on the activity control documentation page. +- The IAB is still refining the definition of [GPP](https://iabtechlab.com/gpp/). Prebid has built a GPP module that supports GPP 1.0, with 1.1 support coming soon after the specification is finalized and merged. Many bid adapters support both statically setting GPP strings, e.g. `pbjs.setConfig({ortb2: {regs: {gpp: "blah", gpp_sid: [1,2]}}});` and module-read consent. +- Avoid adding certain bidders or modules to the AdUnit. +- Turn off header bidding altogether. Prebid relies on the IAB and community members to determine what tools are needed to support publishers in meeting their legal obligations. As noted above, if there’s another tool you need, please open an issue in the appropriate repository, or join the org and help us improve the system! +### Why doesn't Prebid.org have a GVL ID? + +Back when there was a 3rd party component to [SharedID](/identity/sharedid.html), Prebid did have a Global Vendor List ID. But that 3rd party aspect of SharedID has been shut down for a long time, so Prebid.org is completely out of the user data path and has not renewed the GVL registration. + +Because Prebid.org doesn't touch data, the only TCF Purpose that's relevant for Prebid.js functionality is Purpose 1: Device Access. The way it works is that several Prebid-based modules support a "VENDORLESS_GVLID". These are seen as the publisher asking Prebid.js to store stuff on their behalf: + +- shared ID - requests to store the sharedId to local storage +- pubProvided ID - requests to store the pubProvidedId to local storage +- consentManagement module - requests to store the CMP state to local storage so PBJS can tell when a change was made to the state. +- geo location module - requests to retrieve the user's location from the browser. + +When the TCF Purpose 1 check is made for one of these VENDORLESS_GVLID scenarios, only the user's purpose consent is checked -- no vendor check is made. This makes sense because the 'vendor' in these scenarios is the publisher, and they're a first party, not a third party. + ### What happened to the allowAuctionWithoutConsent flag? This option to the ConsentManagement module was removed a long time ago in PBJS 4.0. Why? -* It was a poorly named flag. What it did was let the auction happen on the first page before the user had responded to the CMP. -* It was replaced by a combination of the "defaultGdprScope" flag and the ability for a publisher to disable enforcement of the `basicAds` TCF purpose. +- It was a poorly named flag. What it did was let the auction happen on the first page before the user had responded to the CMP. +- It was replaced by a combination of the "defaultGdprScope" flag and the ability for a publisher to disable enforcement of the `basicAds` TCF purpose. -See the [GDPR Enforcement Module](/dev-docs/modules/gdprEnforcement.html) documentation for more details. +See the [TCF Control Module](/dev-docs/modules/tcfControl.html) documentation for more details. ## Implementation @@ -92,8 +105,8 @@ See the [GDPR Enforcement Module](/dev-docs/modules/gdprEnforcement.html) docume Below is a set of recommended best practice starting points for your timeout settings: -* 1,000 milliseconds or less for the internal auction timeout -* 3,000 milliseconds or less for the Prebid tag's overall failsafe timeout +- 1,000 milliseconds or less for the internal auction timeout +- 3,000 milliseconds or less for the Prebid tag's overall failsafe timeout The former setting is used to track the auction once it started; if it expires, we will use whichever bidders have responded and select the winner(s) accordingly. @@ -121,10 +134,10 @@ It can. Versions 1.x of Prebid.js would re-consider previous bids under limited The "limited bid caching" feature applies only: -* for the same AdUnit, -* on the same page view, -* for the same user, and -* up to a certain Time-to-Live (TTL) or until the bid wins and is displayed. +- for the same AdUnit, +- on the same page view, +- for the same user, and +- up to a certain Time-to-Live (TTL) or until the bid wins and is displayed. Since the storage is in the browser, cached bids only apply to a single page context. If the user refreshes the page, the bid is lost. @@ -133,9 +146,9 @@ This setting is called “Time to Live” (TTL), documented in the pbjs.ge Examples of scenarios where a bid may be reconsidered in Prebid.js: -* Auto-refresh: Some pages will reload an AdUnit on a set interval (often 60-240 seconds). Previous bids for that particular AdUnit can be reconsidered for subsequent refreshes of that unit up to the TTL or until they win the unit. -* Infinite scroll: As the user scrolls, the same AdUnit may be dynamically created over and over. The bid can be reconsidered for dynamically-created AdUnits with the same name. Again, the bid is only re-considered on that AdUnit up to the bid TTL or until it's displayed. -* Galleries: Some pages feature carousel-style galleries that contain an AdUnit that refreshes as the user cycles through the content in the gallery. +- Auto-refresh: Some pages will reload an AdUnit on a set interval (often 60-240 seconds). Previous bids for that particular AdUnit can be reconsidered for subsequent refreshes of that unit up to the TTL or until they win the unit. +- Infinite scroll: As the user scrolls, the same AdUnit may be dynamically created over and over. The bid can be reconsidered for dynamically-created AdUnits with the same name. Again, the bid is only re-considered on that AdUnit up to the bid TTL or until it's displayed. +- Galleries: Some pages feature carousel-style galleries that contain an AdUnit that refreshes as the user cycles through the content in the gallery. Here's how it works: @@ -162,13 +175,13 @@ Therefore, it requires Prebid.js to run in a blocking/synchronous fashion. **Thi Here are a couple of alternative workarounds: -* **Option 1:** +- **Option 1:** Load a blocking script that has a load time of 300-500ms. This script does nothing but keep the page waiting. In the meantime Prebid.js can run asynchronously and return the bids. After the blocking script finishes loading, GPT can start synchronously; at this point there will be header bidding bids available. For the best user experience, you probably want to insert this blocking script after the above the fold page content has loaded. Or if you're okay with additional 500ms latency added to your page load time, this can be easily done. -* **Option 2:** +- **Option 2:** Use post-bid. The downsides are that post-bid no longer allows your header bidding partners to compete with Google Ad Manager/AdX, but they can still compete with each other. For more information, see [What is post-bid?]({{site.baseurl}}/overview/what-is-post-bid.html). @@ -209,9 +222,9 @@ what's sent to the ad server with [targetingControls.auctionKeyMaxChars](/dev-do It's technically possible, but we don't recommend doing this: -* The code isn't small. For performance reasons you don't want to run two versions if you can help it -* We don't test concurrent versions -* We won't specifically support debugging problems caused by running two concurrent versions. But will take take PRs if someone finds an issue. +- The code isn't small. For performance reasons you don't want to run two versions if you can help it +- We don't test concurrent versions +- We won't specifically support debugging problems caused by running two concurrent versions. But will take take PRs if someone finds an issue. If all this wasn't enough to warn you away from trying, it should work if you name the PBJS global differently for each instance (Update the value of 'globalVarName' in ) @@ -259,6 +272,6 @@ Sometimes the owner of a bid adapter or other kind of module wants to rename the ## Related Reading -* [Prebid.js Troubleshooting Guide](/troubleshooting/troubleshooting-guide.html) -* [Prebid.js Common Issues](/dev-docs/common-issues.html) -* [Prebid.js issues tagged 'question'](https://github.com/prebid/Prebid.js/issues?utf8=%E2%9C%93&q=is%3Aissue%20label%3Aquestion%20) +- [Prebid.js Troubleshooting Guide](/troubleshooting/troubleshooting-guide.html) +- [Prebid.js Common Issues](/dev-docs/common-issues.html) +- [Prebid.js issues tagged 'question'](https://github.com/prebid/Prebid.js/issues?utf8=%E2%9C%93&q=is%3Aissue%20label%3Aquestion%20) diff --git a/dev-docs/getting-started.md b/dev-docs/getting-started.md index 0990fa77b7..7a770f5d5b 100644 --- a/dev-docs/getting-started.md +++ b/dev-docs/getting-started.md @@ -15,7 +15,7 @@ sidebarType: 1 ## Overview -To run heading bidding on your site with Prebid.js you need to [download the Prebid.js package](/download.html), including your selected bidders and adapters, and add the code to your page. This code will gather bids from your selected demand sources (bidders) and pass the information on to your ad server. For full details on how Prebid.js works, see [What is Prebid.js?](/prebid/prebidjs.html). +To run header bidding on your site with Prebid.js you need to [download the Prebid.js package](/download.html), including your selected bidders and adapters, and add the code to your page. This code will gather bids from your selected demand sources (bidders) and pass the information on to your ad server. For full details on how Prebid.js works, see [What is Prebid.js?](/prebid/prebidjs.html). Developers should work with their ad ops team to plan out your Prebid configuration. You'll need to add information to your code regarding things such as: diff --git a/dev-docs/integrate-with-the-prebid-analytics-api.md b/dev-docs/integrate-with-the-prebid-analytics-api.md index ba1a9dfb42..b073000889 100644 --- a/dev-docs/integrate-with-the-prebid-analytics-api.md +++ b/dev-docs/integrate-with-the-prebid-analytics-api.md @@ -86,7 +86,7 @@ Analytics adapter for Example.com. Contact prebid@example.com for information. adapter needs to specify an enableAnalytics() function, but it should also call the base class function to set up the events. -5. Doing analytics may require user permissions under [GDPR](/dev-docs/modules/consentManagement.html), which means your adapter will need to be linked to your [IAB Global Vendor List](https://iabeurope.eu/vendor-list-tcf/) ID. If no GVL ID is found, and Purpose 7 (Measurement) is enforced, your analytics adapter will be blocked unless it is specifically listed under vendorExceptions. Your GVL ID can be added to the `registerAnalyticsAdapter()` call. +5. Doing analytics may require user permissions under [GDPR](/dev-docs/modules/consentManagementTcf.html), which means your adapter will need to be linked to your [IAB Global Vendor List](https://iabeurope.eu/vendor-list-tcf/) ID. If no GVL ID is found, and Purpose 7 (Measurement) is enforced, your analytics adapter will be blocked unless it is specifically listed under vendorExceptions. Your GVL ID can be added to the `registerAnalyticsAdapter()` call. #### Basic prototype analytics adapter @@ -150,6 +150,7 @@ There are two error events analytics modules may wish to listen for: auctionDebu * listen only to the events required * batch up calls to the backend for post-auction logging rather than calling immediately after each event. +* consider using the keepalive option on the ajax request to keep the priority low and the request queued after the pageview dies ### Step 3: Add unit tests diff --git a/dev-docs/modules/1plusXRtdProvider.md b/dev-docs/modules/1plusXRtdProvider.md index 70c2f215c5..8ce79efad6 100644 --- a/dev-docs/modules/1plusXRtdProvider.md +++ b/dev-docs/modules/1plusXRtdProvider.md @@ -12,7 +12,6 @@ sidebarType : 1 --- # 1plusX RTD Module - {:.no_toc} * TOC @@ -47,7 +46,8 @@ pbjs.setConfig({ params: { customerId: 'acme', bidders: ['appnexus', 'rubicon'], - timeout: TIMEOUT + timeout: TIMEOUT, + fpidStorageType: 'html5' } }] } @@ -57,6 +57,7 @@ pbjs.setConfig({ ## Parameters {: .table .table-bordered .table-striped } + | Name | Type | Description | Default | | :---------------- | :------------ | :--------------------------------------------------------------- |:----------------- | | name | String | Real time data module name | Always '1plusX' | @@ -65,3 +66,4 @@ pbjs.setConfig({ | params.customerId | String | Your 1plusX customer id | | | params.bidders | Array | List of bidders for which you would like data to be set | | | params.timeout | Integer | timeout (ms) | 1000ms | +| params.fpidStorageType | String | Where to read the first party id ('html5' or 'cookie') | 'html5' | diff --git a/dev-docs/modules/51DegreesRtdProvider.md b/dev-docs/modules/51DegreesRtdProvider.md index 9d99c83ed2..1fbf70bdf9 100644 --- a/dev-docs/modules/51DegreesRtdProvider.md +++ b/dev-docs/modules/51DegreesRtdProvider.md @@ -12,10 +12,12 @@ sidebarType : 1 --- {: .alert.alert-warning :} -This module loads a dynamically generated JavaScript from cloud.51degrees.com (or your self-hosted domain) based on the evidence (HTTP headers and API results) available. The external resource is used to handle constant platform and browser evolution without requiring frequent changes to the Prebid source code. +This module loads a dynamically generated JavaScript from Cloud API hosted at cloud.51degrees.com (or your self-hosted domain) based on the evidence (HTTP headers and API results) available. The external resource is used to handle constant platform and browser evolution without requiring frequent changes to the Prebid source code. -# 51Degrees RTD Submodule +{: .alert.alert-warning :} +The Cloud API is **free** to integrate and use. To increase limits please check [51Degrees pricing](https://51degrees.com/pricing). +# 51Degrees RTD Submodule {:.no_toc} * TOC @@ -29,7 +31,7 @@ This module loads a dynamically generated JavaScript from cloud.51degrees.com (o The module supports on premise and cloud device detection services with free options for both. -A free resource key for use with 51Degrees cloud service can be obtained from [51Degrees cloud configuration](https://configure.51degrees.com/tWrhNfY6). This is the simplest approach to trial the module. +A free resource key for use with 51Degrees cloud service can be obtained from [51Degrees cloud configuration](https://configure.51degrees.com/HNZ75HT1?utm_source=Prebid&utm_medium=Documentation). This is the simplest approach to trial the module. An interface compatible self hosted service can be used with .NET, Java, Node, PHP, and Python. See [51Degrees examples](https://51degrees.com/documentation/_examples__device_detection__getting_started__web__on_premise.html). @@ -51,7 +53,7 @@ gulp build --modules="rtdModule,51DegreesRtdProvider,appnexusBidAdapter,..." #### Resource Key -In order to use the module please first obtain a Resource Key using the [Configurator tool](https://configure.51degrees.com/tWrhNfY6) - choose the following properties: +In order to use the module please first obtain a Resource Key using the [Configurator tool](https://configure.51degrees.com/HNZ75HT1?utm_source=Prebid&utm_medium=Documentation) - choose the following properties: * DeviceId * DeviceType @@ -62,11 +64,13 @@ In order to use the module please first obtain a Resource Key using the [Configu * PlatformVersion * ScreenPixelsHeight * ScreenPixelsWidth +* ScreenPixelsPhysicalHeight +* ScreenPixelsPhysicalWidth * ScreenInchesHeight * ScreenInchesWidth -* PixelRatio (optional) +* PixelRatio -PixelRatio is desirable, but it's a paid property requiring a paid license. Free API service is limited. Please check [51Degrees pricing](https://51degrees.com/pricing) to choose a plan that suits your needs. +The Cloud API is **free** to integrate and use. To increase limits please check [51Degrees pricing](https://51degrees.com/pricing). #### User Agent Client Hint (UA-CH) Permissions @@ -106,20 +110,20 @@ In summary we recommend using `Delegate-CH` http-equiv as the preferred method o ### Configuration -This module is configured as part of the `realTimeData.dataProviders` +This module is configured as part of the `realTimeData.dataProviders`. We recommend setting `auctionDelay` to at least 250 ms and make sure `waitForIt` is set to `true` for the `51Degrees` RTD provider. ```javascript pbjs.setConfig({ debug: true, // we recommend turning this on for testing as it adds more logging realTimeData: { - auctionDelay: 1000, // should be set lower in production use + auctionDelay: 250, dataProviders: [ { name: '51Degrees', waitForIt: true, // should be true, otherwise the auctionDelay will be ignored params: { - // Get your resource key from https://configure.51degrees.com/tWrhNfY6 to connect to cloud.51degrees.com resourceKey: '', + // Get your resource key from https://configure.51degrees.com/HNZ75HT1?utm_source=Prebid&utm_medium=Documentation // alternatively, you can use the on-premise version of the 51Degrees service and connect to your chosen end point // onPremiseJSUrl: 'https://localhost/51Degrees.core.js' }, @@ -133,6 +137,7 @@ pbjs.setConfig({ > Note that `resourceKey` and `onPremiseJSUrl` are mutually exclusive parameters. Use strictly one of them: either a `resourceKey` for cloud integration and `onPremiseJSUrl` for the on-premise self-hosted integration. +{: .table .table-bordered .table-striped } | Name | Type | Description | Default | |:----------------------|:--------|:-------------------------------------------------------------------------------------------------|:-------------------| | name | String | Real time data module name | Always '51Degrees' | diff --git a/dev-docs/modules/aaxBlockmeterRtdProvider.md b/dev-docs/modules/aaxBlockmeterRtdProvider.md index 0b3b3bdd29..3ddb248566 100644 --- a/dev-docs/modules/aaxBlockmeterRtdProvider.md +++ b/dev-docs/modules/aaxBlockmeterRtdProvider.md @@ -12,7 +12,6 @@ sidebarType : 1 --- # AAX Blockmeter Realtime Data Module - {:.no_toc} * TOC diff --git a/dev-docs/modules/adagioRtdProvider.md b/dev-docs/modules/adagioRtdProvider.md index 2078f4cc30..a3f2883766 100644 --- a/dev-docs/modules/adagioRtdProvider.md +++ b/dev-docs/modules/adagioRtdProvider.md @@ -15,10 +15,10 @@ sidebarType : 1 ## Overview -This module can be used in combination with [Adagio Bid Adapter](/dev-docs/bidders/adagioBidAdapter.md) (SSP) and/or with Adagio prebid server endpoint. +This module can be used in combination with [Adagio Bid Adapter](/dev-docs/bidders/adagio.html) (SSP) and/or with Adagio prebid server endpoint. It computes and collects data required to leverage Adagio viewability and attention prediction engine. -Please contact [contact@adagio.io](contact@adagio.io) for more information. +Please contact for more information. {% include dev-docs/loads-external-javascript.md %} @@ -34,6 +34,7 @@ pbjs.setConfig({ params: { organizationId: '1000', // Required. Provided by Adagio site: "my-site" // Required. Provided by Adagio + placementSource: 'ortb' // Optional. Possible values: 'ortb' | 'code' | 'gpid' } }] } @@ -43,12 +44,13 @@ pbjs.setConfig({ Syntax details: {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|-------------------------|----------|-----------------------------------------------|-------------|----------| -| `name` | required | Real time data module name: Always `'adagio'` | `'adagio'` | `string` | -| `params` | required | | | `Object` | -| `params.organizationId` | required | Account id provided by Adagio. | `'1000'` | `string` | -| `params.site` | required | Account site name provided by Adagio. | `'my-site'` | `string` | +| Name | Scope | Description | Example | Type | +|--------------------------|----------|-----------------------------------------------|-------------|----------| +| `name` | required | Real time data module name: Always `'adagio'` | `'adagio'` | `string` | +| `params` | required | | | `Object` | +| `params.organizationId` | required | Account id provided by Adagio. | `'1000'` | `string` | +| `params.site` | required | Account site name provided by Adagio. | `'my-site'` | `string` | +| `params.placementSource` | optional | Programmatically set the `ortb2Imp.ext.data.placement` signal based on location. Possible values: `ortb` (default), `code`, `gpid`. | `'ortb'` | `string` | ## Installation diff --git a/dev-docs/modules/adlaneRtdProvider.md b/dev-docs/modules/adlaneRtdProvider.md new file mode 100644 index 0000000000..955358d6bb --- /dev/null +++ b/dev-docs/modules/adlaneRtdProvider.md @@ -0,0 +1,76 @@ +--- +layout: page_v2 +title: Adlane Real-Time Data Module +display_name: Adlane RTD Module +description: Adlane Real-Time Data Provider for Age Verification +page_type: module +module_type: rtd +module_code: adlaneRtdProvider +enable_download: true +vendor_specific: true +sidebarType: 1 +--- + +# Adlane RTD Provider + +## Overview + +The Adlane Real-Time Data (RTD) Provider automatically retrieves age verification information and adds it to the bid stream, allowing for age-appropriate ad targeting. This module does not have a Global Vendor List ID (GVL ID). + +## Integration + +1. Compile the Adlane RTD Module into your Prebid build: + + ```bash + gulp build --modules=adlaneRtdProvider ... + ``` + +2. Use `setConfig` to instruct Prebid.js to initialize the adlaneRtdProvider module, as specified below. + +## Configuration + +```javascript +pbjs.setConfig({ + realTimeData: { + auctionDelay: 1000, + dataProviders: [ + { + name: "adlane", + waitForIt: true, + } + ] + } +}); +``` + +## Parameters + +| Name | Type | Description | Default | +|-----------|---------|-----------------------------------------------|---------| +| name | String | Must be "adlane" | n/a | +| waitForIt | Boolean | Whether to wait for the module before auction | true | + +## Age Verification Data + +The module attempts to retrieve age verification data from the following sources, in order: + +1. AdlCmp API (if available) +2. Local storage + +The age verification data is added to the bid request in the following format: + +```javascript +{ + ortb2: { + regs: { + ext: { + age_verification: { + status: 'accepted', //The acceptance indicates that the user has confirmed they are 21 years of age or older (accepted/declined) + id: "123456789123456789", //unique identifier for the age verification // Optional + decisionDate: "2011-10-05T14:48:00.000Z", //ISO 8601 date string (e.g.,"2011-10-05T14:48:00.000Z") // Optional, represents the date when the age verification decision was made + } + } + } + } +} +``` diff --git a/dev-docs/modules/adplayerproVideoProvider.md b/dev-docs/modules/adplayerproVideoProvider.md new file mode 100644 index 0000000000..8543baa3b3 --- /dev/null +++ b/dev-docs/modules/adplayerproVideoProvider.md @@ -0,0 +1,24 @@ +--- +layout: page_v2 +page_type: module +title: Module - AdPlayer.Pro Video Submodule +description: Allows Prebid to integrate directly with AdPlayer.Pro video player. +module_code : adplayerproVideoProvider +display_name : AdPlayer.Pro Video Provider +enable_download : true +vendor_specific: true +sidebarType : 1 +--- + +# AdPlayer.Pro Video Provider + +The AdPlayer.Pro Video Provider is a submodule of the Prebid Video Module. + +The AdPlayer.Pro Vendor Code for the Video Module is `3`. + +For information on how to use the Video Module with AdPlayer.Pro please visit the [docs]({{site.github.url}}/prebid-video/video-module.html). + +## Additional Information + +- If you would like to further customize your AdPlayer.Pro experience, please visit our [Developer docs](https://docs.adplayer.pro/whitelabel-standalone-script/). +- To learn more [about us](https://adplayer.pro/). diff --git a/dev-docs/modules/adpod.md b/dev-docs/modules/adpod.md index c57c14149c..9e173e4f4e 100644 --- a/dev-docs/modules/adpod.md +++ b/dev-docs/modules/adpod.md @@ -10,7 +10,6 @@ sidebarType : 1 --- # Adpod Module - {:.no_toc} * TOC diff --git a/dev-docs/modules/airgridRtdProvider.md b/dev-docs/modules/airgridRtdProvider.md index d44922c3cd..3e06e61d00 100644 --- a/dev-docs/modules/airgridRtdProvider.md +++ b/dev-docs/modules/airgridRtdProvider.md @@ -12,6 +12,7 @@ sidebarType : 1 --- # AirGrid RTD Provider +{:.no_toc} AirGrid is a privacy-first, cookie-less audience platform. Designed to help publishers increase inventory yield, whilst providing audience signal to buyers in the bid request, without exposing raw user level data to any party. @@ -19,8 +20,6 @@ whilst providing audience signal to buyers in the bid request, without exposing This real-time data module provides quality first-party data, contextual data, site-level data and more that is injected into bid request objects destined for different bidders in order to optimize targeting. -{:.no_toc} - * TOC {:toc} @@ -62,7 +61,7 @@ pbjs.setConfig( | :------------ | :------------ | :------------ |:------------ | | name | `String` | RTD sub module name | Always 'airgrid' | | waitForIt | `Boolean` | Wether to delay auction for module response | Optional. Defaults to false | -| params.apiKey | `Boolean` | Publisher partner specific API key | Required | +| params.apiKey | `String` | Publisher partner specific API key | Required | | params.accountId | `String` | Publisher partner specific account ID | Required | | params.publisherId | `String` | Publisher partner specific publisher ID | Required | | params.bidders | `Array` | Bidders with which to share segment information | Optional | diff --git a/dev-docs/modules/akamaiDapRtdProvider.md b/dev-docs/modules/akamaiDapRtdProvider.md deleted file mode 100644 index b4efb216d6..0000000000 --- a/dev-docs/modules/akamaiDapRtdProvider.md +++ /dev/null @@ -1,84 +0,0 @@ ---- -layout: page_v2 -title: Akamai DAP Real Time Data Provider Module -display_name: Akamai DAP Real Time Data Provider Module -description: Akamai DAP Real Time Data Provider Module -page_type: module -module_type: rtd -module_code : akamaiDapRtdProvider -enable_download : true -vendor_specific: true -sidebarType : 1 ---- - -# Akamai DAP Real Time Data Provider Module - -{:.no_toc} - -* TOC -{:toc} - -The Akamai Data Activation Platform (DAP) is a privacy-first system that protects end-user privacy by only allowing them to be targeted as part of a larger cohort. Akamai DAP Real time data Provider automatically invokes the DAP APIs and submit audience segments and the Secure Ad ID(SAID) to the bid-stream. SAID is a JWT/JWE which carries with it the cohorts and only a side-car or trusted server in the demand-side platform is allowed to see its contents. - -## Publisher Usage - -1. Build the akamaiDapRTD module into the Prebid.js package with: - - ```bash - gulp build --modules=akamaiDapRtdProvider,... - ``` - -2. Use `setConfig` to instruct Prebid.js to initilaize the akamaiDapRtdProvider module, as specified below. - -### Configuration - -```javascript -pbjs.setConfig({ - realTimeData: { - auctionDelay: 2000, - dataProviders: [ - { - name: "dap", - waitForIt: true, - params: { - apiHostname: '', - apiVersion: "x1", - domain: 'your-domain.com', - identityType: 'email' | 'mobile' | ... | 'dap-signature:1.3.0', - segtax: 504, - dapEntropyUrl: 'https://dap-dist.akamaized.net/dapentropy.js', - dapEntropyTimeout: 1500 - } - } - ] - } -}); -``` - -Please reach out to your Akamai account representative() to get provisioned on the DAP platform. - -**Config Syntax details:** - -{: .table .table-bordered .table-striped } -| Name |Type | Description | Notes | -| :------------ | :------------ | :------------ |:------------ | -| name | String | Akamai Dap Rtd module name | 'dap' always| -| waitForIt | Boolean | Required to ensure that the auction is delayed until prefetch is complete | Optional. Defaults to false | -| apiHostname | String | Hostname provided by Akamai | Please reach out to your Akamai account representative() for this value| -| apiVersion | String | This holds the API version | It should be "x1" always | -| domain | String | The domain name of your webpage | | -| identityType | String | Something like this 'email', 'mobile', ... 'dap-signature:1.3.0' | | -| segtax | Integer | The taxonomy for Akamai | The value should be 504 | -| dapEntropyUrl | String | URL to dap entropy script | Optional if the script is directly included on the webpage. Contact your Akamai account rep for more details | -| dapEntropyTimeout | Integer | Maximum time allotted for the entropy calculation to happen | | - -### Testing - -To view an example of available segments returned by dap: - -```bash -gulp serve --modules=rtdModule,akamaiDapRtdProvider,appnexusBidAdapter,sovrnBidAdapter -``` - -and then point your browser at: -"" diff --git a/dev-docs/modules/anPspParamsConverter.md b/dev-docs/modules/anPspParamsConverter.md new file mode 100644 index 0000000000..a575408ac3 --- /dev/null +++ b/dev-docs/modules/anPspParamsConverter.md @@ -0,0 +1,25 @@ +--- +layout: page_v2 +page_type: module +title: Module - anPspParamsConverter +description: Formats bid params for AppNexus PSP requests made through Prebid.js. +module_code : anPspParamsConverter +display_name : anPspParamsConverter +enable_download : true +sidebarType : 1 +--- + +# anPspParamsConverter Module +{:.no_toc} + +This module is a temporary measure for publishers running Prebid.js 9.0+ and using the AppNexus PSP endpoint through their Prebid.js setup. Please ensure to include this module in your builds of Prebid.js 9.0+, otherwise requests to PSP may not complete successfully. + +## Module's Purpose + +This module replicates certain functionality that was previously stored in the appnexusBidAdapter.js file within a function named transformBidParams. + +This transformBidParams was a standard function in all adapters, which helped to change/modify the params and their values to a format that matched the bidder's request structure on the server-side endpoint. In Prebid.js 9.0, this standard function was removed in all adapter files, so that the whole client-side file (eg appnexusBidAdapter.js) wouldn't have to be included in a prebid.js build file that was meant for server-side bidders. + +## How to use the module as a publisher + +There is no setConfig setup needed for this module. Simply include this module in your Prebid.js build file if you plan to make requests to the AppNexus PSP endpoint through Prebid.js. diff --git a/dev-docs/modules/anonymisedRtdProvider.md b/dev-docs/modules/anonymisedRtdProvider.md index d266b01d6f..755b5393cb 100644 --- a/dev-docs/modules/anonymisedRtdProvider.md +++ b/dev-docs/modules/anonymisedRtdProvider.md @@ -21,10 +21,10 @@ Anonymised’s Real-time Data Provider automatically obtains segment IDs from th - Build the anonymisedRtd module into the Prebid.js package with: ```bash -gulp build --modules=anonymisedRtdProvider,... +gulp build --modules=rtdModule,anonymisedRtdProvider,... ``` -- Use `setConfig` to instruct Prebid.js to initilaize the anonymisedRtdProvider module, as specified below. +- Use `setConfig` to instruct Prebid.js to initialize the anonymisedRtdProvider module, as specified below. ### Configuration @@ -37,8 +37,12 @@ gulp build --modules=anonymisedRtdProvider,... waitForIt: true, params: { cohortStorageKey: "cohort_ids", - bidders: ["smartadserver", "appnexus"], - segtax: 1000 + bidders: ["appnexus", "onetag", "pubmatic", "smartadserver", ...], + segtax: 1000, + tagConfig: { + clientId: 'testId' + //The rest of the Anonymised Marketing Tag parameters goes here + } } } ] @@ -46,16 +50,21 @@ gulp build --modules=anonymisedRtdProvider,... }); ``` -Please note that anonymisedRtdProvider should be integrated into the publisher website along with the [Anonymised Marketing Tag](https://support.anonymised.io/integrate/marketing-tag). -Please reach out to Anonymised [representative](mailto:support@anonymised.io) if you have any questions or need further help to integrate Prebid, anonymisedRtdProvider, and Anonymised Marketing Tag +The `anonymisedRtdProvider` must be integrated into the publisher's website along with the [Anonymised Marketing Tag](https://support.anonymised.io/integrate/marketing-tag?t=LPukVCXzSIcRoal5jggyeg). One way to install the Marketing Tag is through `anonymisedRtdProvider` by specifying the required [parameters](https://support.anonymised.io/integrate/optional-anonymised-tag-parameters?t=LPukVCXzSIcRoal5jggyeg) in the `tagConfig` object. + +The `tagConfig.clientId` parameter is mandatory for the Marketing Tag to initialize. If `tagConfig` is empty or `tagConfig.clientId` is undefined, the `anonymisedRtdProvider` will not initialize the Marketing Tag. The publisher's `clientId` is [provided by Anonymised](https://support.anonymised.io/integrate/install-the-anonymised-tag-natively#InstalltheAnonymisedtagnatively-Instructions?t=LPukVCXzSIcRoal5jggyeg). + +For any questions or assistance with integrating Prebid, `anonymisedRtdProvider`, or the Anonymised Marketing Tag, please contact an [Anonymised representative](mailto:support@anonymised.io). **Config Syntax details:** {: .table .table-bordered .table-striped } | Name |Type | Description | Notes | | :------------ | :------------ | :------------ |:------------ | -| name | String | Anonymised Rtd module name | 'anonymised' always| -| waitForIt | Boolean | Required to ensure that the auction is delayed until prefetch is complete | Optional. Defaults to false | -| params.cohortStorageKey | String | the `localStorage` key, under which Anonymised Marketing Tag stores the segment IDs | 'cohort_ids' always | -| params.bidders | Array | Bidders with which to share segment information | Required | -| params.segtax | Integer | The taxonomy for Anonymised | '1000' always | +| name | `String` | Anonymised Rtd module name | 'anonymised' always| +| waitForIt | `Boolean` | Required to ensure that the auction is delayed until prefetch is complete | Optional. Defaults to false | +| params.cohortStorageKey | `String` | the `localStorage` key, under which Anonymised Marketing Tag stores the segment IDs | 'cohort_ids' always | +| params.bidders | `Array` | Bidders with which to share segment information | Optional | +| params.segtax | `Integer` | The taxonomy for Anonymised | '1000' always | +| params.tagConfig | `Object` | Configuration for the Anonymised Marketing Tag | Optional. Defaults to `{}`. | +| params.tagUrl | `String` | The URL of the Anonymised Marketing Tag script | Optional. Defaults to `https://static.anonymised.io/light/loader.js`. | diff --git a/dev-docs/modules/arcspanRtdProvider.md b/dev-docs/modules/arcspanRtdProvider.md index ce1aecb4f9..b2fa82bd16 100644 --- a/dev-docs/modules/arcspanRtdProvider.md +++ b/dev-docs/modules/arcspanRtdProvider.md @@ -12,7 +12,6 @@ sidebarType : 1 --- # ArcSpan RTD Module - {:.no_toc} * TOC @@ -57,5 +56,13 @@ pbjs.setConfig({ }) ``` +### Parameters + +{: .table .table-bordered .table-striped } + +| Name | Type | Description | Required | Default | +| :--- | :--- | :--- | :--- | :--- | +| `silo` | Integer | ArcSpan provided silo identifier used to load the contextual script | yes | n/a | + {: .alert.alert-info :} For best results, we recommend that you also deploy ArcSpan's JavaScript tag in your tag management solution, as instructed in the implementation overview you received from your ArcSpan representative. This will ensure that more of your auctions contain ArcSpan's contextual signals. Please reach out to your ArcSpan representative if you have any questions. diff --git a/dev-docs/modules/azerionedgeRtdProvider.md b/dev-docs/modules/azerionedgeRtdProvider.md index 2c3da1eb4d..67884e5ad3 100644 --- a/dev-docs/modules/azerionedgeRtdProvider.md +++ b/dev-docs/modules/azerionedgeRtdProvider.md @@ -5,10 +5,13 @@ display_name: Azerion Edge RTD Provider description: Client-side contextual cookieless audiences. page_type: module module_type: rtd -module_code : azerionedgeRtdProvider -enable_download : true +module_code: azerionedgeRtdProvider +enable_download: true vendor_specific: true -sidebarType : 1 +usp_supported: true +gdpr_supported: true +gvl_id: 253 +sidebarType: 1 --- # Azerion Edge RTD Provider @@ -66,25 +69,3 @@ pbjs.setConfig( | params.key | `String` | Publisher partner specific key | Mandatory. The key is required for the module to work. If you haven't received one, please reach | | params.bidders | `Array` | Bidders with which to share segment information | Optional. Defaults to "improvedigital". | | params.process | `Object` | Configuration for the Azerion Edge script. | Optional. Defaults to `{}`. | - -## Context - -As all data collection is on behalf of the publisher and based on the consent the publisher has -received from the user, this module does not require a TCF vendor configuration. Consent is -provided to the module when the user gives the relevant permissions on the publisher website. - -As Prebid.js utilizes TCF vendor consent for the RTD module to load, the module needs to be labeled -within the Vendor Exceptions. If the Prebid GDPR enforcement is enabled, the module should be configured -as exception, as shown below: - -```js -[ - { - purpose: 'storage', - enforcePurpose: true, - enforceVendor: true, - vendorExceptions: ["azerionedge"] - }, - ... -] -``` diff --git a/dev-docs/modules/bidResponseFilter.md b/dev-docs/modules/bidResponseFilter.md new file mode 100644 index 0000000000..85f753c272 --- /dev/null +++ b/dev-docs/modules/bidResponseFilter.md @@ -0,0 +1,52 @@ +--- +layout: page_v2 +page_type: module +title: Module - Bid response filter +description: Validates bid's ortb2 data against its meta data +module_code : bidResponseFilter +display_name : Bid Response Filter +enable_download : true +sidebarType : 1 + +--- + +# Bid Response Filter + +## Overview + +This optional module will trigger validation of each bid on the bid response. Validation of a particular bid is based on its `ortb2` values compared to the values in the `bid.meta`. The module configuration allows you to specify whether to enforce validation of particular fields or not. It also lets to specify if the bid should be rejected if selected field metadata value is not present. + +## Configuration + +Fields that can be configured: + +- `cat` - Banned categories ids +- `adv` - Banned advertiser domains +- `attr` - Banned attributes + +### Field configuration object + +{: .table .table-bordered .table-striped } +| Field | Scope | Type | Description | Default | +| -------------- | -------- | ------- | ------------------------------------------------------------------------------------------------------- | ------- | +| `enforce` | optional | boolean | Specifies whether to enforce validation for the field | `true` | +| `blockUnknown` | optional | boolean | Specifies whether it should reject the bid if the corresponding value in the bid metadata is undefined | `true` | + +### Example module configuration + +```javascript + pbjs.setConfig({ + bidResponseFilter: { + cat: { + blockUnknown: false // setting only one of parameters will keep the other one as default + }, + adv: { + enforce: false + }, + attr: { + enforce: false, + blockUnknown: false + } + } + }); +``` diff --git a/dev-docs/modules/bidViewable.md b/dev-docs/modules/bidViewable.md index 5e4f390e6c..78fcb4285c 100644 --- a/dev-docs/modules/bidViewable.md +++ b/dev-docs/modules/bidViewable.md @@ -11,7 +11,6 @@ sidebarType : 1 --- # Bid Viewability - GAM - {:.no_toc} - TOC diff --git a/dev-docs/modules/bidViewableIO.md b/dev-docs/modules/bidViewableIO.md index 73998041bf..0d7ecc1ea7 100644 --- a/dev-docs/modules/bidViewableIO.md +++ b/dev-docs/modules/bidViewableIO.md @@ -10,7 +10,6 @@ sidebarType : 1 --- # Bid Viewability - Ad Server Independent - {:.no_toc} - TOC diff --git a/dev-docs/modules/bidstailamedia.md b/dev-docs/modules/bidstailamedia.md new file mode 100644 index 0000000000..24ea3f3de9 --- /dev/null +++ b/dev-docs/modules/bidstailamedia.md @@ -0,0 +1,120 @@ +--- +layout: bidder +title: stailamedia Bidder +description: Prebid bidstailamedia Bidder Adapter +pbjs: true +biddercode: bidstailamedia +gvl_id: 965 (nexx360) +tcfeu_supported: true +usp_supported: true +gpp_supported: true +schain_supported: true +dchain_supported: false +floors_supported: true +userIds: all +tcfeu_supported: true +media_types: banner, video, native +safeframes_ok: true +deals_supported: true +sidebarType: 1 +fpd_supported: true +multiformat_supported: will-bid-on-any + +--- + +### Bid Params + +| Name | Scope | Description | Example | Type | +|---------------|----------|----------------------------|-------------------------------------- |-----------| +| `tagId` | required | tag ID | `"hk15z9sy"` | `string` | + +### First Party Data + +Publishers should use the `ortb2` method of setting [First Party Data](/features/firstPartyData.html). +The following fields are supported: + +* ortb2.site.ext.data.* +* ortb2.site.content.data[] +* ortb2.user.ext.data.* +* ortb2.user.data[] + +### Test Parameters + +```javascript +var adUnits = [ + // Banner adUnit + { + code: 'banner-div', + mediaTypes: { + banner: { + sizes: [[300, 250], [300,600]] + } + }, + bids: [{ + bidder: 'bidstailamedia', + params: { + tagId: 'hk15z9sy' + } + }] + }, + // Video adUnit + { + code: 'video1', + mediaTypes: { + video: { + playerSize: [640, 480], + context: 'instream' + } + }, + bids: [{ + bidder: 'bidstailamedia', + params: { + tagId: 'hk15z9sy' + } + }] + }, + // Native adUnit + { + code: 'native1', + mediaTypes: + native: { + title: { + required: true + }, + image: { + required: true + }, + sponsoredBy: { + required: true + } + } + }, + bids: [{ + bidder: 'bidstailamedia', + params: { + tagId: 'hk15z9sy' + } + }] + }, + // Multiformat Ad + { + code: 'multi1', + mediaTypes: { + video: { + playerSize: [640, 480], + context: 'instream' + }, + banner: { + sizes: [[300, 250], [300,600]] + } + }, + bids: [{ + bidder: 'bidstailamedia', + params: { + tagId: 'hk15z9sy', + videoTagId: 'hk15z9sy' + } + }] + }; +]; +``` diff --git a/dev-docs/modules/blueconicRtdProvider.md b/dev-docs/modules/blueconicRtdProvider.md index 83772d4842..a419c0da36 100644 --- a/dev-docs/modules/blueconicRtdProvider.md +++ b/dev-docs/modules/blueconicRtdProvider.md @@ -13,7 +13,6 @@ sidebarType : 1 --- # BlueConic Real-time Data Submodule - {:.no_toc} * TOC diff --git a/dev-docs/modules/brandmetricsRtdProvider.md b/dev-docs/modules/brandmetricsRtdProvider.md index ec904b3d20..adfcbc32ad 100644 --- a/dev-docs/modules/brandmetricsRtdProvider.md +++ b/dev-docs/modules/brandmetricsRtdProvider.md @@ -12,7 +12,6 @@ sidebarType : 1 --- # brandmetrics Real Time Data Provider Module - {:.no_toc} * TOC diff --git a/dev-docs/modules/browsiRtdProvider.md b/dev-docs/modules/browsiRtdProvider.md index e0b7866a43..737177d3a6 100644 --- a/dev-docs/modules/browsiRtdProvider.md +++ b/dev-docs/modules/browsiRtdProvider.md @@ -1,18 +1,17 @@ --- layout: page_v2 -title: Browsi Viewability Module -display_name: Browsi Viewability -description: Browsi Real Time Viewability +title: Browsi RTD Module +display_name: Browsi RTD Module +description: Browsi Real Time Module page_type: module module_type: rtd -module_code : browsiRtdProvider -enable_download : true +module_code: browsiRtdProvider +enable_download: true vendor_specific: true sidebarType : 1 --- -# Browsi Viewability Module - +# Browsi RTD Module {:.no_toc} * TOC @@ -20,19 +19,24 @@ sidebarType : 1 ## Overview -The Browsi Viewability module provides viewability predictions for ad slots on the page. -To use this module, you'll need to work with [Browsi](https://gobrowsi.com) to get -an account and receive instructions on how to set up your pages and ad server. +Browsi’s RTD module for Prebid.js provides real-time insights and predictive signals to optimize bid requests and ad delivery. +This module leverages Browsi's AI models to give publishers access to: + +* **Real-time predictions for GAM**: Enhance ad placements and maximize revenue by leveraging viewability and revenue predictions as key values in GAM ad requests. +* **Enhanced bid request signals**: Augment bid requests with additional contextual, behavioral, and engagement signals to improve demand partner performance. +* **Dynamic ad serving optimization**: Enable smarter ad delivery strategies based on predicted user behavior and page context. + +## Integration Implementation works like this: -1. Build the Browsi module into the Prebid.js package with: +1. Build the Browsi modules into the Prebid.js package with: ```bash - gulp build --modules=browsiRtdProvider&... + gulp build --modules=browsiRtdProvider,browsiAnalyticsAdapter ``` -2. Use `setConfig` to instruct the browser to obtain the viewability data in parallel with the header bidding auction +2. Use `setConfig` to instruct the browser to obtain Browsi’s predictive signals in parallel with the header bidding auction ## Configuration @@ -40,16 +44,17 @@ This module is configured as part of the `realTimeData.dataProviders` object: ```javascript pbjs.setConfig({ - "realTimeData": { - dataProviders:[{ - "name": "browsi", - "params": { - "url": "testUrl.com", // get params values - "siteKey": "testKey", // from Browsi - "pubKey": "testPub", // - "keyName":"bv" // - } - }] + realTimeData: { + auctionDelay : 3000, + dataProviders: [{ + name: "browsi", + params: { + url: "domain.com", + siteKey: "SITE", + pubKey: "PUB", + waitForIt: true + } + }] } }); ``` @@ -64,22 +69,9 @@ Syntax details: | params.siteKey |String |Site key| | | params.pubKey |String |Publisher key| | | params.url |String |Server URL| | -| params.keyName |String |Key value name| Optional. Defaults to 'bv'. | +| params.keyName |String |GAM key value name for the viewability prediction| Optional. Defaults to ‘browsiViewability’. | +| params.waitForIt |boolean |Allow waiting for data| true | ## Output -For each ad slot, the module returns expected viewability prediction in a JSON format. -When the data is received, it calls `pbjs.setTargetingForGPT` to set the defined `keyName` for each adunit. - -Example: - -```json -{ - "slotA":{ - "p":0.56, // ad server targeting variable (e.g. bv) for slotA is 0.56 - }, - "slotB":{ - "p":0.824, // ad server targeting variable (e.g. bv) for slotB is 0.824 - } -} -``` +For each ad slot, the module generates predictive signals in JSON format, assigns key-value pairs for viewability and revenue predictions via `pbjs.setTargetingForGPT`, and embeds the full JSON in the bid request under `.ortb2Imp.ext.data.browsi`. diff --git a/dev-docs/modules/captifyRtdProvider.md b/dev-docs/modules/captifyRtdProvider.md index e7c0e634e1..e8de341105 100644 --- a/dev-docs/modules/captifyRtdProvider.md +++ b/dev-docs/modules/captifyRtdProvider.md @@ -6,15 +6,17 @@ description: Captify Real Time Data Module page_type: module module_type: rtd module_code : captifyRtdProvider -enable_download : true +enable_download : false vendor_specific: true sidebarType : 1 --- # Captify RTD Module - {:.no_toc} +{: .alert.alert-warning :} +Captify RTD was removed in Prebid.js 8.0 + * TOC {:toc} @@ -73,4 +75,4 @@ pbjs.setConfig({ | `params` | Object | | | | | `params.pubId` | Integer | Partner ID, required to get results and provided by Captify | yes | Use `123456` for tests, speak to your Captify account manager to receive your pubId | | `params.bidders` | Array | List of bidders for which you would like data to be set | yes | Currently only 'appnexus' supported | -| `params.url` | String | Captify live-classification service url | no | Defaults to `https://live-classification.cpx.to/prebid-segments` +| `params.url` | String | Captify live-classification service url | no | Defaults to `https://live-classification.cpx.to/prebid-segments` | diff --git a/dev-docs/modules/categoryTranslation.md b/dev-docs/modules/categoryTranslation.md index cce5640b06..8651c6aff1 100644 --- a/dev-docs/modules/categoryTranslation.md +++ b/dev-docs/modules/categoryTranslation.md @@ -10,7 +10,6 @@ sidebarType : 1 --- # IAB Category Translation - {:.no_toc} This module converts the IAB sub category to Ad server industry group identifiers. The identifiers ensure competitive separation of industries and products. @@ -39,6 +38,14 @@ pbjs.setConfig({ }); ``` +### Parameters + +{: .table .table-bordered .table-striped } + +| Name | Type | Description | Required | Default | +| :--- | :--- | :--- | :--- | :--- | +| `translationFile` | String | URL of a custom brand category translation map | no | Prebid default map | + This file will be stored locally to expedite the conversion process. If a publisher opts to not provide a conversion mapping file Prebid will use its default conversion mapping file. Publishers should ensure that the JSON returned from their custom file is valid for Prebid by adhering to the following structure: diff --git a/dev-docs/modules/chromeAiRtdProvider.md b/dev-docs/modules/chromeAiRtdProvider.md new file mode 100644 index 0000000000..e4c78a238e --- /dev/null +++ b/dev-docs/modules/chromeAiRtdProvider.md @@ -0,0 +1,219 @@ +--- +layout: page_v2 +title: Chrome AI RTD Provider +display_name: Chrome AI RTD Provider +description: Use Chrome AI APIs for language detection and summarization. +page_type: module +module_type: rtd +module_code : chromeAiRtdProvider +enable_download : true +sidebarType : 1 +--- + +# Chrome AI RTD Provider + +## Overview + +The Chrome AI RTD Provider is a Prebid.js Real-Time Data (RTD) module that enhances bidding by leveraging Chrome's built-in AI capabilities. It can automatically detect page language using the [Chrome AI Language Detection API](https://developer.chrome.com/docs/ai/language-detection) and generate page summaries or keywords using the [Chrome AI Summarizer API](https://developer.chrome.com/docs/ai/summarizer-api). This information is added to the OpenRTB bid request objects, allowing bid adapters to optimize bids based on content language and context. + +## Features + +- Automatic language detection using the Chrome AI Language Detection API. +- Automatic page summarization or keyword generation using the Chrome AI Summarizer API. +- Caching of detected language and summaries/keywords in localStorage to reduce redundant API calls (configurable for summarizer). +- Configurable options for both language detection (e.g., confidence threshold) and summarization (e.g., type, format, length). +- Flexible ORTB2 path configuration for placing detected data. +- Ability to enable/disable each feature independently. +- Compatible with the Prebid.js RTD framework. + +## Integration + +### Build Setup + +To include the Chrome AI RTD Provider in your Prebid.js build, use the following command: + +```bash +gulp build --modules=rtdModule,chromeAiRtdProvider +``` + +### Basic Integration + +Add the Chrome AI RTD Provider to your Prebid.js configuration: + +```javascript +pbjs.setConfig({ + realTimeData: { + dataProviders: [{ + name: 'chromeAi', + waitForIt: true // Optional: delays the auction until language detection completes + }] + } +}); +``` + +### Advanced Configuration + +Configure language detection and summarization with additional options: + +```javascript +pbjs.setConfig({ + realTimeData: { + dataProviders: [{ + name: 'chromeAi', + waitForIt: true, // Set to true if auction should wait for both enabled features + params: { + languageDetector: { + enabled: true, // Set to false to disable language detection + confidence: 0.9, // Set minimum confidence threshold (0.0 - 1.0) + ortb2Path: 'site.content.language' // Default path for language + }, + summarizer: { + enabled: false, // Set to true to enable summarization/keyword generation + type: 'headline', // 'headline','key-points', 'tldr' or 'teaser' + format: 'markdown', // 'plain-text' or 'markdown' + length: 'short', // 'short', 'medium', or 'long' + ortb2Path: 'site.content.keywords', // Path for summary/keywords + cacheInLocalStorage: true // Whether to cache generated summary/keywords + } + } + }] + } +}); +``` + +## Configuration Options + +{: .table .table-bordered .table-striped } +| Parameter | Scope | Type | Description | Default | +|-----------|-------|------|-------------|---------| +| `waitForIt` | Optional | Boolean | Whether to delay auction for data retrieval | `false` | +| `languageDetector.enabled` | Optional | Boolean | Enable or disable language detection | `true` | +| `languageDetector.confidence` | Optional | Number | Minimum confidence threshold for detected language (0.0 - 1.0) | `0.8` | +| `languageDetector.ortb2Path` | Optional | String | Path in ORTB2 to store the detected language | `'site.content.language'` | +| `summarizer.enabled` | Optional | Boolean | Enable or disable summarization/keyword generation | `false` | +| `summarizer.type` | Optional | String | Type of summary: `'headline'`, `'key-points'`, `'tldr'`, or `'teaser'` | `'headline'` | +| `summarizer.format` | Optional | String | Format of the summary: `'plain-text'` or `'markdown'` | `'mark-down'` | +| `summarizer.length` | Optional | String | Length of the summary: `'short'`, `'medium'`, or `'long'` | `'short'` | +| `summarizer.ortb2Path` | Optional | String | Path in ORTB2 to store the generated summary/keywords | `'site.content.keywords'` | +| `summarizer.cacheInLocalStorage` | Optional | Boolean | Whether to cache the generated summary/keywords in localStorage | `true` | + +## How It Works + +The module initializes configured features (language detection, summarization) asynchronously. + +### Language Detection (`languageDetector`) + +1. **Data Prioritization**: On initialization or when `getBidRequestData` is called, the module first checks for existing language information in this order: + - Auction-specific ORTB2 data (from `reqBidsConfigObj` passed to `getBidRequestData`). + - Data cached in localStorage for the current page URL (from a previous detection). +2. **API Call**: If no language is found and the feature is enabled, it attempts to detect the language of the visible page content using the Chrome AI Language Detection API. + - The API's `availability()` method is checked. If 'unavailable', detection is skipped. If 'after-download', the module may proceed if the model downloads. +3. **Data Handling**: The detected language (if it meets the confidence threshold) is: + - Stored in localStorage for future page loads on the same URL. + - Added to the OpenRTB bid requests at the configured `languageDetector.ortb2Path` (default: `site.content.language`). + +### Summarization / Keyword Generation (`summarizer`) + +1. **Data Prioritization**: Similar to language detection, it checks for existing summary/keywords: + - Auction-specific ORTB2 data. + - Data cached in localStorage (if `cacheInLocalStorage: true`). +2. **API Call**: If no data is found and the feature is enabled, it attempts to generate a summary/keywords from the page content using the Chrome AI Summarizer API. + - The API's `availability()` method is checked. If 'unavailable', summarization is skipped. If 'after-download', the module may proceed. +3. **Data Handling**: The generated summary/keywords are: + - Stored in localStorage (if `cacheInLocalStorage: true`). + - Added to the OpenRTB bid requests at the configured `summarizer.ortb2Path` (default: `site.content.keywords`). + +If `waitForIt: true` is set in the RTD config, the auction will be delayed until all enabled and available Chrome AI features complete their processing. + +## Browser Compatibility + +- The browser must support the Chrome AI APIs being used (Language Detection, Summarizer). +- The specific Chrome AI models (e.g., for language detection or summarization) must be 'available' or become 'available-after-download'. The module handles these states. +- Sufficient text content must be available on the page (minimum 20 characters for language detection and summarization). +- If using the `waitForIt: true` option, consider the potential impact on auction latency. + +## Limitations + +- Relies on browser support for Chrome AI APIs. +- Requires sufficient and meaningful visible text content on the page for accurate results. +- Language detection may not be accurate for pages with multiple languages mixed together. +- Summarization quality depends on the page content and the capabilities of the underlying Chrome AI model. + +## Browser Compatibility + +[Language Detector API Support](https://caniuse.com/mdn-api_languagedetector) +## Example Use Cases + +### Standard Implementation + +```javascript +pbjs.setConfig({ + realTimeData: { + dataProviders: [{ + name: 'chromeAi', + waitForIt: true + }] + } +}); +``` + +### Disable Language Detection for Specific Sites + +```javascript +pbjs.setConfig({ + realTimeData: { + dataProviders: [{ + name: 'chromeAi', + params: { + languageDetector: { + enabled: false + } + } + }] + } +}); +``` + +### Higher Confidence Requirement for Language Detection + +```javascript +pbjs.setConfig({ + realTimeData: { + dataProviders: [{ + name: 'chromeAi', + waitForIt: true, + params: { + languageDetector: { + enabled: true, + confidence: 0.95 // Only use high-confidence detections + } + } + }] + } +}); +``` + +### Enable Summarizer with Custom Settings + +```javascript +pbjs.setConfig({ + realTimeData: { + dataProviders: [{ + name: 'chromeAi', + waitForIt: true, + params: { + languageDetector: { + enabled: false // Example: only using summarizer + }, + summarizer: { + enabled: true, + type: 'teaser', + format: 'markdown', // In markdown format + length: 'medium', + ortb2Path: 'site.ext.data.summary', // Custom ORTB2 path + } + } + }] + } +}); +``` diff --git a/dev-docs/modules/cleanioRtdProvider.md b/dev-docs/modules/cleanioRtdProvider.md index 455b8487b6..6bfe33b0a7 100644 --- a/dev-docs/modules/cleanioRtdProvider.md +++ b/dev-docs/modules/cleanioRtdProvider.md @@ -6,11 +6,20 @@ description: clean.io Real-time Anti-Malvertising Module page_type: module module_type: rtd module_code : cleanioRtdProvider -enable_download : true +enable_download : false vendor_specific: true sidebarType : 1 --- + +{: .alert.alert-warning :} +**Warning!** + +The **cleanioRtdProvider** module has been renamed to [humansecurityMalvDefenseRtdProvider](humansecurityMalvDefenseRtdProvider.html) following HUMAN Security's acquisition of the Clean.io project in 2022. + **cleanioRtdProvider** module is maintained for backward compatibility until the next major Prebid release. + +Please use **humansecurityMalvDefenseRtdProvider** instead of **cleanioRtdProvider** in your Prebid integration. + # clean.io Real-time Anti-Malvertising Module ## Overview @@ -49,6 +58,7 @@ pbjs.setConfig({ ### Configuration parameters {: .table .table-bordered .table-striped } + | Name | Type | Scope | Description | | :------------ | :------------ | :------------ |:------------ | | ``cdnUrl`` | ``string`` | Required | CDN URL of the script, which is to be used for protection. | @@ -57,6 +67,7 @@ pbjs.setConfig({ ## Integration modes {: .table .table-bordered .table-striped } + | Integration Mode | Parameter Value | Description | | :------------ | :------------ | :------------ | | Full page protection | ``'full'`` | Preferred mode. The module will add the protector agent script directly to the page, and it will protect all placements. This mode will make the most out of various behavioral detection mechanisms, and will also prevent typical malicious behaviors. Please note that in this mode, depending on Prebid library naming, Chrome may mistakenly tag non-ad-related content as ads: . | diff --git a/dev-docs/modules/confiantRtdProvider.md b/dev-docs/modules/confiantRtdProvider.md index e8c8af20b7..7d881c4386 100644 --- a/dev-docs/modules/confiantRtdProvider.md +++ b/dev-docs/modules/confiantRtdProvider.md @@ -53,3 +53,14 @@ pbjs.setConfig({ } }); ``` + +## Parameters + +{: .table .table-bordered .table-striped } + +| Name | Type | Description | Required | Default | +| :--- | :--- | :--- | :--- | :--- | +| `propertyId` | String | Identifier provided by Confiant | yes | n/a | +| `prebidExcludeBidders` | String | Comma separated bidder codes to exclude from Confiant scanning | no | empty | +| `prebidNameSpace` | String | Custom namespace for the integration | no | empty | +| `shouldEmitBillableEvent` | Boolean | Emit a billable event when a Confiant scan occurs | no | `false` | diff --git a/dev-docs/modules/consentManagementGpp.md b/dev-docs/modules/consentManagementGpp.md index 1e8ad5cb19..80c3bd77b8 100644 --- a/dev-docs/modules/consentManagementGpp.md +++ b/dev-docs/modules/consentManagementGpp.md @@ -54,11 +54,14 @@ Once the CMP is implemented, simply include this module into your build and add Here are the parameters supported in the `consentManagement` object specific for the GPP consent module: {: .table .table-bordered .table-striped } + | Param | Type | Description | Example | | --- | --- | --- | --- | | gpp | `Object` | | | +| gpp.enabled | `boolean` | Enables or disables the GPP consent management module. When set to `false`, Prebid does not initialize the CMP integration, does not delay auctions for consent, removes any active CMP event listeners. Defaults to `true` if not specified. | `false` | | gpp.cmpApi | `string` | The CMP interface that is in use. Supported values are **'iab'** or **'static'**. Static allows integrations where IAB-formatted consent strings are provided in a non-standard way. Default is `'iab'`. | `'iab'` | | gpp.timeout | `integer` | Length of time (in milliseconds) to allow the CMP to obtain the GPP consent information. Default is `10000`. | `10000` | +| gpp.actionTimeout | `integer` | Length of time (in milliseconds) to allow the user to take action to consent if they have not already done so. The actionTimer first waits for the CMP to load, then the actionTimeout begins for the specified duration. Default is `undefined`. | `10000` | | gpp.consentData | `Object` | An object representing the IAB GPP consent data being passed directly; only used when cmpApi is 'static'. Default is `undefined`. | | | gpp.consentData.sectionId | `integer` | Indicates the header section of the GPP consent string, recommended to be `3`. | | | gpp.consentData.gppVersion | `string` | The version number parsed from the header of the GPP consent string. | | @@ -115,6 +118,22 @@ Example 2: Static CMP using custom data passing. }); ``` +Example 3: Disabling the module. When disabled, Prebid.js will not fetch GPP data, will not wait for the CMP. Existing CMP listeners (if any were previously active) are cleaned up. + +```javascript + var pbjs = pbjs || {}; + pbjs.que = pbjs.que || []; + pbjs.que.push(function() { + pbjs.setConfig({ + consentManagement: { + gpp: { + enabled: false + } + } + }); + }); +``` + ## Build the Package Follow the basic build instructions in the GitHub Prebid.js repo's main [README](https://github.com/prebid/Prebid.js/blob/master/README.md). To include the consent management module, an additional option must be added to the **gulp build** command: @@ -129,7 +148,7 @@ You can also use the [Prebid.js Download](/download.html) page. {: .alert.alert-info :} -If you are submitting changes to an adapter to support GPP, please also submit a PR to the [docs repo](https://github.com/prebid/prebid.github.io) to add the `gpp_supported: true` variable to your respective page in the [bidders directory](https://github.com/prebid/prebid.github.io/tree/master/dev-docs/bidders). **This will ensure that your adapter's name will automatically appear on the list of adapters supporting GPP.** +If you are submitting changes to an adapter to support GPP, please also submit a PR to the [docs repo](https://github.com/prebid/prebid.github.io) to add the `gpp_sids` meta data with a comma separated list of section names (`tcfeu`, `tcfca`, `usnat`, `usstate_all`, `usp`) to your respective page in the [bidders directory](https://github.com/prebid/prebid.github.io/tree/master/dev-docs/bidders). **This will ensure that your adapter's name will automatically appear on the list of adapters supporting GPP.** ### Bidder Adapter GPP Integration @@ -172,7 +191,7 @@ Depending on your needs, you could include the consent information in a query of ## Adapters Supporting GPP -Bidders on this list have self-declared their GPP support in their [github.com/prebid/prebid.github.io/tree/master/dev-docs/bidders] md file by adding "gpp_supported: true". +Bidders on this list have self-declared their GPP support in their [github.com/prebid/prebid.github.io/tree/master/dev-docs/bidders] md file by adding "gpp_sids: tcfeu, tcfca, usnat, usstate_all, usp". @@ -200,7 +219,7 @@ var idx_gdpr=0; - [IAB Global Privacy Platform Full Specification Repository](https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform) - [IAB Global Privacy Platform CMP API Specification](https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Core/CMP%20API%20Specification.md) -- [Prebid Consent Management - GDPR Module](/dev-docs/modules/consentManagement.html) +- [Prebid Consent Management - GDPR Module](/dev-docs/modules/consentManagementTcf.html) - [Prebid Consent Management - US Privacy Module](/dev-docs/modules/consentManagementUsp.html) - [Prebid Activity Controls](/dev-docs/activity-controls.html) - [Prebid Activity Controls -- GPP control module - usnat](/dev-docs/modules/gppControl_usnat.html) diff --git a/dev-docs/modules/consentManagement.md b/dev-docs/modules/consentManagementTcf.md similarity index 85% rename from dev-docs/modules/consentManagement.md rename to dev-docs/modules/consentManagementTcf.md index 518ce48a02..f766a94aa9 100644 --- a/dev-docs/modules/consentManagement.md +++ b/dev-docs/modules/consentManagementTcf.md @@ -1,16 +1,16 @@ --- layout: page_v2 page_type: module -title: Consent Management - GDPR -description: If you have users in Europe, this module works with your Consent Management Platform to pass consent info to bidders and help align with EU regulations. See also the GDPR Enforcement module. -module_code : consentManagement -display_name : Consent Management - GDPR +title: Consent Management - TCF +description: If you have users in Europe, this module works with your Consent Management Platform to pass consent info to bidders and help align with EU regulations. See also the TCF Control module. +display_name : Consent Management - TCF +module_code : consentManagementTcf enable_download : true recommended: true sidebarType : 1 --- -# GDPR Consent Management Module +# TCF Consent Management Module {: .no_toc } - TOC @@ -28,12 +28,12 @@ This module works with supported [Consent Management Platforms](https://www.cmsw Prebid functionality created to address regulatory requirements does not replace each party's responsibility to determine its own legal obligations and comply with all applicable laws. **We recommend consulting with your legal counsel before determining how to utilize these features in support of your overall privacy approach.** -This base EU GDPR consent management module performs these actions: +This base EU TCF consent management module performs these actions: 1. Fetch the user's GDPR & Google additional consent data from the CMP. 2. Incorporate this data into the auction objects for adapters to collect. -The optional [GDPR enforcement module](/dev-docs/modules/gdprEnforcement.html) adds on these actions: +The optional [TCF control module](/dev-docs/modules/tcfControl.html) adds on these actions: 1. Allows the page to define which activities should be enforced at the Prebid.js level. 2. Actively enforces those activities based on user consent data (in the TCF string, not the AC string). @@ -66,21 +66,23 @@ but we recommend migrating to the new config structure as soon as possible. | Param | Type | Description | Example | | --- | --- | --- | --- | | gdpr | `Object` | | | +| gdpr.enabled | `boolean` | Enables or disables the TCF consent management module. When set to `false`, Prebid does not initialize the CMP integration, does not delay auctions for consent, removes any active CMP event listeners. Defaults to `true` if not specified. | `false` | | gdpr.cmpApi | `string` | The CMP interface that is in use. Supported values are **'iab'** or **'static'**. Static allows integrations where IAB-formatted consent strings are provided in a non-standard way. Default is `'iab'`. | `'iab'` | | gdpr.timeout | `integer` | Length of time (in milliseconds) to allow the CMP to obtain the GDPR consent string. Default is `10000`. | `10000` | | gdpr.actionTimeout | `integer` | Length of time (in milliseconds) to allow the user to take action to consent if they have not already done so. The actionTimer first waits for the CMP to load, then the actionTimeout begins for the specified duration. Default is `undefined`. | `10000` | | gdpr.defaultGdprScope | `boolean` | Defines what the `gdprApplies` flag should be when the CMP doesn't respond in time or the static data doesn't supply. Defaults to `false`. | `true` | | gdpr.consentData | `Object` | An object representing the GDPR consent data being passed directly; only used when cmpApi is 'static'. Default is `undefined`. | | -| gdpr.consentData.getTCData.tcString | `string` | Base64url-encoded TCF v2.x string with segments. | | -| gdpr.consentData.getTCData.addtlConsent | `string` | Additional consent string if available from the cmp TCData object | | -| gdpr.consentData.getTCData.gdprApplies | `boolean` | Defines whether or not this pageview is in GDPR scope. | | -| gdpr.consentData.getTCData.purpose.consents | `Object` | An object representing the user's consent status for specific purpose IDs. | | -| gdpr.consentData.getTCData.purpose.legitimateInterests | `Object` | An object representing the user's legitimate interest status for specific purpose IDs. | | -| gdpr.consentData.getTCData.vendor.consents | `Object` | An object representing the user's consent status for specific vendor IDs. | | -| gdpr.consentData.getTCData.vendor.legitimateInterests | `Object` | An object representing the user's legitimate interest status for specific vendors IDs. | | +| gpdr.dsaPlatform | `boolean` | If true, indicates that the publisher is to be considered an "Online Platform" for the purposes of the [Digital Services Act](https://digital-strategy.ec.europa.eu/en/policies/digital-services-act-package) | | +| gdpr.consentData.tcString | `string` | Base64url-encoded TCF v2.x string with segments. | | +| gdpr.consentData.addtlConsent | `string` | Additional consent string if available from the cmp TCData object | | +| gdpr.consentData.gdprApplies | `boolean` | Defines whether or not this pageview is in GDPR scope. | | +| gdpr.consentData.purpose.consents | `Object` | An object representing the user's consent status for specific purpose IDs. | | +| gdpr.consentData.purpose.legitimateInterests | `Object` | An object representing the user's legitimate interest status for specific purpose IDs. | | +| gdpr.consentData.vendor.consents | `Object` | An object representing the user's consent status for specific vendor IDs. | | +| gdpr.consentData.vendor.legitimateInterests | `Object` | An object representing the user's legitimate interest status for specific vendors IDs. | | {: .alert.alert-info :} -NOTE: The `purpose` and `vendor` objects are required if you are using the `gdprEnforcement` module. If the data is not included, your bid adapters, analytics adapters, and/or userId systems will likely be excluded from the auction as Prebid will assume the user has not given consent for these entities. +NOTE: The `purpose` and `vendor` objects are required if you are using the `tcfControl` module. If the data is not included, your bid adapters, analytics adapters, and/or userId systems will likely be excluded from the auction as Prebid will assume the user has not given consent for these entities. A related parameter is `deviceAccess`, which is at the global level of Prebid.js configuration because it can be used GDPR, CCPA, or custom privacy implementations: @@ -170,12 +172,28 @@ Example 3: Static CMP using custom data passing. }); ``` +Example 4: Disabling the module. When disabled, Prebid.js will not fetch TCF data, will not wait for the CMP. Existing CMP listeners (if any were previously active) are cleaned up. + +```javascript + var pbjs = pbjs || {}; + pbjs.que = pbjs.que || []; + pbjs.que.push(function() { + pbjs.setConfig({ + consentManagement: { + gdpr: { + enabled: false + } + } + }); + }); +``` + ## Build the Package Follow the basic build instructions in the GitHub Prebid.js repo's main [README](https://github.com/prebid/Prebid.js/blob/master/README.md). To include the consent management module, an additional option must be added to the **gulp build** command: ```bash -gulp build --modules=consentManagement,bidAdapter1,bidAdapter2 +gulp build --modules=consentManagementTcf,tcfControl,bidAdapter1,bidAdapter2 ``` You can also use the [Prebid.js Download](/download.html) page. @@ -210,7 +228,7 @@ Here is a sample of how the data is structured in the `bidderRequest` object: **_consentString_** -This field contains the user's choices on consent, represented as an encoded string value. In certain scenarios, this field might come to you with an `undefined` value; normally this happens when there was an error (or timeout) during the CMP interaction and the publisher turned off GDPR enforcement. If you don't want to pass `undefined` to your system, you can check for this value and replace it with a valid consent string. See the _consent_required_ code in the example below (under "gdprApplies") for a possible approach to checking and replacing values. +This field contains the user's choices on consent, represented as an encoded string value. In certain scenarios, this field might come to you with an `undefined` value; normally this happens when there was an error (or timeout) during the CMP interaction and the publisher turned off TCF controls. If you don't want to pass `undefined` to your system, you can check for this value and replace it with a valid consent string. See the _consent_required_ code in the example below (under "gdprApplies") for a possible approach to checking and replacing values. **_addtlConsent_** @@ -369,7 +387,7 @@ This should be false if there was some error in the consent data; otherwise set ## Further Reading -- [GDPR Enforcement Module](/dev-docs/modules/gdprEnforcement.html) +- [TCF Control Module](/dev-docs/modules/tcfControl.html) - [IAB TCF Implementation Guide](https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework/blob/master/TCFv2/TCF-Implementation-Guidelines.md) - [IAB Transparancy and Consent Framework Policies](https://iabeurope.eu/iab-europe-transparency-consent-framework-policies/) - [Prebid Consent Management - US Privacy Module](/dev-docs/modules/consentManagementUsp.html) diff --git a/dev-docs/modules/consentManagementUsp.md b/dev-docs/modules/consentManagementUsp.md index 90aed2ad66..ca804d5646 100644 --- a/dev-docs/modules/consentManagementUsp.md +++ b/dev-docs/modules/consentManagementUsp.md @@ -6,7 +6,7 @@ description: If you have users in California, this module works with your Consen module_code : consentManagementUsp display_name : Consent Management - US Privacy enable_download : true -recommended: true +recommended: false sidebarType : 1 --- @@ -22,10 +22,10 @@ sidebarType : 1 This consent management module is designed to support the California Consumer Privacy Act ([CCPA](https://www.iab.com/guidelines/ccpa-framework/)). The IAB has generalized these guidelines to cover future regulations, referring to the feature as "US Privacy." -This module works with an IAB-compatible US Privacy API (USP-API) to fetch an encoded string representing the user's notice and opt-out choices and make it available for adapters to consume and process. In Prebid 7+; the module defaults to working with an IAB-compatible US Privacy API; in prior versions, the module had to be configured to be in effect. +This module works with an IAB-compatible US Privacy API (USP-API) to fetch an encoded string representing the user's notice and opt-out choices and make it available for adapters to consume and process. In Prebid 7+; the module defaults to working with an IAB-compatible US Privacy API; in prior versions, the module had to be configured to be in effect. This module is no longer recommended, as the signal is no longer supported by a contractual framework as of January 31, 2024. {: .alert.alert-info :} -See also the [Prebid Consent Management - GDPR Module](/dev-docs/modules/consentManagement.html) for supporting the EU General Data Protection Regulation (GDPR) +See also the [Prebid Consent Management - TCF Module](/dev-docs/modules/consentManagementTcf.html) for supporting the IABTL Transparency and Consent Framework. Here's a summary of the interaction process: diff --git a/dev-docs/modules/currency.md b/dev-docs/modules/currency.md index be27ef75a7..6aa8580a9e 100644 --- a/dev-docs/modules/currency.md +++ b/dev-docs/modules/currency.md @@ -10,12 +10,12 @@ sidebarType : 1 --- - - # Currency Module - {:.no_toc} +* TOC +{:toc} + This module supports the conversion of multiple bidder currencies into a single currency used by the publisher's ad server. In previous versions of Prebid, this was accomplished by using [BidderSettings.bidCpmAdjustment]({{site.baseurl}}/dev-docs/publisher-api-reference/bidderSettings.html), but that's a static value not changed except when @@ -30,6 +30,7 @@ currency conversion file while the bids are taking place. Alternately, the conve be provided in the page. 1. At runtime, bids are converted to the ad server currency as needed. 1. Default rates can be provided in case the file cannot be loaded. +1. When `requestBids` is called, the Currency Module will delay the auction up to the supplied amount of time in `currency.auctionDelay` or as soon as the dynamic endpoint returns data, whichever is first. ## Currency Architecture @@ -195,6 +196,8 @@ pbjs.setConfig({ "conversionRateFile": "URL_TO_RATE_FILE", // optionally provide a default rate in case the file can't be read "defaultRates": { "USD": { "GPB": 0.75 }} + // optionally sets the auction defer time if the file has not been loaded yet + "auctionDelay": 1000 } }); ``` diff --git a/dev-docs/modules/debugging.md b/dev-docs/modules/debugging.md index 2e2d954d56..d48c921634 100644 --- a/dev-docs/modules/debugging.md +++ b/dev-docs/modules/debugging.md @@ -10,6 +10,10 @@ sidebarType : 1 --- # Debugging module +{: .no_toc} + +- TOC +{:toc } This module allows to "intercept" bids and replace their contents with arbitrary data for the purposes of testing and development. @@ -169,10 +173,9 @@ pbjs.setConfig({ { when: { adUnitCode: "video-adunit", - bidder: "bidderA' + bidder: "bidderA" }, then: { - cpm: 10, mediaType: "video", source: "client", currency: "SEK", @@ -180,6 +183,7 @@ pbjs.setConfig({ creativeId: "11111", width: 640, height: 360, + ttl: 300, vastXml: "Prebid TestVAST 2.0 Linear Ad00:00:15" } }, @@ -187,3 +191,57 @@ pbjs.setConfig({ } }); ``` + +### Force a Native Bid + +Note: the native response asset IDs and types must match the request. + +```javascript +pbjs.setConfig({ + debugging: { + enabled: true, + intercept: [ + { + when: { + adUnitCode: "test-div", + bidder: "bidderA" + }, + then: { + cpm: 10, + bidder: "bidderA", + mediaType: "native", + source: "client", + currency: "EUR", + cpm: 1.00, + creativeId: "222222", + native: { ortb: { + link: { url: "http://example.com" }, + assets: [{ + id: 1, + title: { text: "Test Native Creative" } + },{ + id: 2, + data: { + type: 2, + value: "Test Description" + } + },{ + id: 3, + img: { + type: 3, + url: "https://files.prebid.org/creatives/prebid300x250.png" + } + },{ + id: 4, + data: { + type: 1, + value: "Prebid" + } + }] + }} + } + } + ] + } +}); +``` diff --git a/dev-docs/modules/dfpAdpod.md b/dev-docs/modules/dfpAdpod.md new file mode 100644 index 0000000000..6a8bf6df10 --- /dev/null +++ b/dev-docs/modules/dfpAdpod.md @@ -0,0 +1,21 @@ +--- +layout: page_v2 +page_type: module +title: Module - Google Ad Manager Adpod Support +description: Required for serving adpod video through Google Ad Manager. +module_code : dfpAdpod +display_name : Google Ad Manager Adpod Support +enable_download : true +vendor_specific: true +sidebarType : 1 +--- + +# Google Ad Manager Adpod Support + +{:.no_toc} + +This module exposes the [`pbjs.adServers.dfp.buildAdpodVideoUrl](/dev-docs/publisher-api-reference/adServers.dfp.buildAdpodVideoUrl.html) method, required to use [adpod](/dev-docs/modules/adpod.html) with Google Ad Manager. + +## Further Reading + +- [Show long form video ads with GAM](/dev-docs/show-long-form-video-with-gam.html) diff --git a/dev-docs/modules/dgkeywordRtdProvider.md b/dev-docs/modules/dgkeywordRtdProvider.md index 60f06a4972..b6c0959edc 100644 --- a/dev-docs/modules/dgkeywordRtdProvider.md +++ b/dev-docs/modules/dgkeywordRtdProvider.md @@ -12,7 +12,6 @@ sidebarType : 1 --- # Digital Garage Keyword Module - {:.no_toc} * TOC diff --git a/dev-docs/modules/dsaControl.md b/dev-docs/modules/dsaControl.md index b5d01d10bc..9df36217eb 100644 --- a/dev-docs/modules/dsaControl.md +++ b/dev-docs/modules/dsaControl.md @@ -13,7 +13,7 @@ sidebarType : 1 {:.no_toc} * TOC - {:toc} +{:toc} ## Overview @@ -30,7 +30,7 @@ pbjs.setConfig({ regs: { ext: { dsa: { - dsarequired: 2, + dsarequired: 2, pubrender: 0 // ... } @@ -40,6 +40,15 @@ pbjs.setConfig({ }) ``` +### Parameters + +{: .table .table-bordered .table-striped } + +| Name | Type | Description | Required | Default | +| :--- | :--- | :--- | :--- | :--- | +| `dsarequired` | Integer | Indicates if DSA transparency information must be included (`0` = not required, `2` = required but advertiser may render, `3` = required and advertiser must render) | yes | n/a | +| `pubrender` | Integer | Signals publisher rendering capabilities (`0` = cannot render, `2` = will render) | yes | n/a | + This module will then enforce that: * all bids include DSA information, if required (`dsarequired` is either `2` or `3`); diff --git a/dev-docs/modules/dynamicAdBoostRtdProvider.md b/dev-docs/modules/dynamicAdBoostRtdProvider.md new file mode 100644 index 0000000000..38f4ce1a46 --- /dev/null +++ b/dev-docs/modules/dynamicAdBoostRtdProvider.md @@ -0,0 +1,34 @@ +--- +layout: page_v2 +title: Dynamic Ad Boost RTD Module +display_name: Dynamic Ad Boost RTD Module +description: This module is intended for publishers looking to enhance ad performance visibility and improve monetization through data analytics. +page_type: module +module_type: rtd +module_code: dynamicAdBoostRtd +enable_download: true +vendor_specific: true +sidebarType: 1 +--- + +# Dynamic Ad Boost Module + +{% include dev-docs/loads-external-javascript.md %} + +The Dynamic Ad Boost module integrates with Lupon Media to collect ad unit viewability data, enabling performance analysis and revenue optimization. + +## Key features + +- Captures real-time viewability metrics per ad unit. +- Supports site-specific configuration. +- Enables data-driven ad optimization. + +## Requirements + +- A Lupon Media account. +- Site integration guidelines provided by Lupon Media. +- Coordination with Lupon Media for setup and deployment. + +## Parameters + +There is no need for any parameters — the module will handle everything automatically. diff --git a/dev-docs/modules/ehealthcaresolutions.md b/dev-docs/modules/ehealthcaresolutions.md new file mode 100644 index 0000000000..1b089365fd --- /dev/null +++ b/dev-docs/modules/ehealthcaresolutions.md @@ -0,0 +1,92 @@ +--- +layout: bidder +title: eHealthcareSolutions +description: Prebid eHealthcareSolutions Bidder Adaptor +pbjs: true +biddercode: ehealthcaresolutions +media_types: banner, native +tcfeu_supported: false +usp_supported: true +coppa_supported: true +gpp_sids: usstate_all +schain_supported: false +safeframes_ok: false +ortb_blocking_supported: false +dsa_supported: false +deals_supported: true +floors_supported: true +sidebarType: 1 +--- +### Registration + +For assistance or setup instructions, please contact us at . + +### Banner Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------------|-----------|-----------------------|----------------|----------| +| `placement_id` | mandatory | Placement Id | `111520` | `number` | +| `height` | optional | Height of the creative| `250` | `number` | +| `width` | optional | Width of the creative | `300` | `number` | +| `bid_floor` | optional | Bid Floor Price | `0.5` | `decimal`| + +### AdUnit Format for Banner + +```javascript +var adUnits = [ + { + code: 'banner-ad', + mediaTypes: { + banner: { + sizes: [[300, 250]] + } + }, + bids: [{ + bidder: 'ehealthcaresolutions', + params: { + placement_id: 111520, + height: 250, + width: 300, + bid_floor: 0.5 + } + }] + } + ]; +``` + +### Native Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------------|-----------|-----------------------|----------------|----------| +| `placement_id` | mandatory | Placement Id | `111519` | `number` | +| `bid_floor` | optional | Bid Floor Price | `1` | `decimal`| + +### AdUnit Format for Native + +```javascript +var adUnits = [ + { + code: 'native-ad-container', + mediaTypes: { + native: { + title: { required: true, len: 100 }, + image: { required: true, sizes: [300, 250] }, + sponsored: { required: false }, + clickUrl: { required: true }, + desc: { required: true }, + icon: { required: false, sizes: [50, 50] }, + cta: { required: false } + } + }, + bids: [{ + bidder: 'ehealthcaresolutions', + params: { + placement_id: 111519, // Required parameter + bid_floor: 1 // Optional parameter + } + }] + } + ]; +``` diff --git a/dev-docs/modules/enrichmentFpdModule.md b/dev-docs/modules/enrichmentFpdModule.md deleted file mode 100644 index d80b64570e..0000000000 --- a/dev-docs/modules/enrichmentFpdModule.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -layout: page_v2 -page_type: module -title: Module - First Party Data Enrichment -description: Injects additional data into the auction stream, including: domain, keywords, and page url. -module_code : enrichmentFpdModule -display_name : First Party Data Enrichment -enable_download : true -recommended: true -sidebarType : 1 ---- - -# First Party Data Enrichment Module - -{:.no_toc} - -{: .alert.alert-warning :} -Since version 7.29, this module does nothing; its functionality is instead included by default in all Prebid distributions. - -This module adds a number of First Party Data (FPD) fields from the environment. - -Add it to the Prebid.js build with this command: - -```bash -gulp build --modules=enrichmentFpdModule -``` - -If included in the build, it will automatically perform the enrichments unless controlled with setConfig: - -```javascript -pbjs.setConfig({ - firstPartyData: { - skipEnrichments: true // defaults to false - } -}); -``` - -## How it works - -At the beginning of each auction, this module merges a number of values into the `ortb2` [requestBids parameter](/dev-docs/publisher-api-reference/requestBids.html). Specific details below. - -## Enrichments - -{: .table .table-bordered .table-striped } -| Page Source | ortb2 field | Notes | -|---+---+---| -| page URL | site.page | Uses pbjs getRefererInfo().page | -| referer URL | site.ref | Uses pbjs getRefererInfo().ref | -| host domain | site.domain | Pulled from the getRefererInfo().page the host domain is used with the www component dropped. | -| aggregated domain | site.publisher.domain | The highest level domain in which cookies can be set. | -| viewport width | device.w | Hunts for window.innerWidth, window.document.documentElement.clientWidth, window.document.body.clientWidth | -| viewport height | device.w | Hunts for window.innerHeight, window.document.documentElement.clientHeight, window.document.body.clientHeight | -| UA client hints | device.sua | Collects user agent client hints. See [note](#ua-hints) below. | -| meta keywords | site.keywords | Looks for a meta tag. e.g. | -| currency | cur | Collects the currency defined by the [Currency module](/dev-docs/modules/currency.html). | - - - -### User agent client hints - -The module populates `device.sua` with UA client hints retrieved from `navigator.userAgentData`. By default, it won't ask for any high entropy hint. You can specify the list of hints using the `uaHints` option with [any available high entropy hint](https://developer.mozilla.org/en-US/docs/Web/API/NavigatorUAData#returning_high_entropy_values): - -```javascript -pbjs.setConfig({ - firstPartyData: { - uaHints: [ - 'platform', - // ... - ] - } -}) -``` - -If `uaHints` is set to an empty array or is not set, the module will not attempt to retrieve any high entropy hint and use only the available low-entropy values. - -# Related Reading - -- [Prebid.js First Party Data feature](/features/firstPartyData.html) -- [First Party Data Validation Module](/dev-docs/modules/validationFpdModule) -- [OpenRTB 2.5](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf) diff --git a/dev-docs/modules/enrichmentLiftMeasurement.md b/dev-docs/modules/enrichmentLiftMeasurement.md new file mode 100644 index 0000000000..f43df57495 --- /dev/null +++ b/dev-docs/modules/enrichmentLiftMeasurement.md @@ -0,0 +1,67 @@ +--- +layout: page_v2 +title: Enrichment Lift Measurement Module +display_name: Enrichment Lift Measurement Module +description: Enrichment Lift Measurement Module +page_type: module +module_code: enrichmentLiftMeasurement +enable_download: true +vendor_specific: true +sidebarType: 1 +--- + +# Enrichment Lift Measurement + +The **Enrichment Lift Measurement Module** allows publishers to evaluate the performance of User ID submodules by configuring and executing A/B tests. It offers several configuration options that enable publishers to: + +- Route traffic to selected User ID submodules. +- Control where the A/B test configuration is stored. +- Specify how User ID submodules should be disabled. + +Additionally, the module attaches the A/B group configuration to analytics labels for tracking and reporting. + +## How It Works + +1. The publisher initializes the module using `config.setConfig`. +2. When a user loads the page, the module determines which User ID submodules should participate in the test based on the configured percentages. +3. Submodules not selected for the test are disabled via activity controls, either during submodule initialization or at the enrichment level. +4. The A/B group configuration (enabled/disabled submodules) is saved in either `localStorage` or `sessionStorage`. (In `memory` mode, this step is skipped, and the configuration is recalculated on each page load.) +5. The A/B configuration is attached to analytics labels to enable performance tracking and analysis. + +## Configuration + +{: .table .table-bordered .table-striped } + +| Parameter | Description | Allowed Values | Default | +|-------------------------|------------------------------------------------------------------|--------------------------------------------|---------| +| `storeSplits` | Defines where to store the A/B group configuration | `memory`, `sessionStorage`, `localStorage` | - | +| `suppression` | Determines how to disable User ID submodules | `submodules`, `eids` | `eids` | +| `modules[].name` | Name of the User ID submodule | *(string)* | - | +| `modules[].percentage` | Percentage of users for whom the module is enabled | *(number between 0 and 1)* | - | +| `testRun` | A label used for storing and reporting test configuration status | *(string)* | - | + +## Configuration Example + +```javascript +pbjs.setConfig({ + enrichmentLiftMeasurement: { + modules: [ + { name: 'idSharedSystem', percentage: 1.0 }, // Enabled for 100% of users + { name: '33acrossIdSystem', percentage: 0.5 } // Enabled for ~50% of users + ], + storeSplits: 'memory', // Configuration is not stored; recalculated on each page load + suppression: 'submodules', + testRun: 'JulyTest' + } +}); +``` + +The following object will be attached to analytics labels based on the configuration above: + +```javascript +{ + JulyTest: [ + { name: 'idSharedSystem', percentage: 1.0, enabled: true }, + { name: '33acrossIdSystem', percentage: 0.5, enabled: false } // May be true or false depending on random selection + ] +} diff --git a/dev-docs/modules/floors.md b/dev-docs/modules/floors.md index ea86698556..0bc7b02a33 100644 --- a/dev-docs/modules/floors.md +++ b/dev-docs/modules/floors.md @@ -58,6 +58,57 @@ Notes: * [Prebid Floor Service Providers](/dev-docs/modules/floors.html#floors-providers) * [Transcript of this video](/dev-docs/floors-video-overview.html) +### Simple Static Floor Signaling + +Some publishers just want to set a simple static floor and don't need enforcement. Please don't use this module for that. This module should only be used when you need to vary the floor by mediatype, size, etc. Here's how you can signal static floors on each Prebid adunit: + +```javascript +pbjs.addAdUnits({ + code: "test-div", + mediaTypes: { + banner: { + sizes: [[300,250]] + } + }, + ortb2Imp: { + bidfloor: 1.00, + bidfloorcur: "EUR" + }, + // ... +}); +``` + +### Simple Static Floor Enforcement + +If you need a static floor signal and also want to enforce that static floor, here's the quick start: + +```javascript + var adUnits = [ + { + code: 'test-div', + mediaTypes: { + banner: { sizes: [[300,250],[300,600]] } + }, + floors: { + currency: 'USD', + schema: { + delimiter: '|', + fields: [ 'mediaType' ] + }, + values: { + '*': 1.00 // enter your static floor here + } + }, + bids: [ + ... + ] + } + ]; +``` + +{: .alert.alert-warning :} +Prebid does not recommend setting static floors. They are blunt tools and you'll forget to update them. + ## How it Works There are several places where the Floor module changes the behavior of the Prebid.js auction process. Below is a diagram describing the general flow of the client-side Price Floors Module: @@ -298,10 +349,13 @@ Schema 1 restricts floors providers or publishers to applying only one data grou Note: if you're a dynamic floor provider service, your response must be a subset that will be merged under the 'data' object. +{: .alert.alert-warning :} +You **cannot** set the `floorMin` parameter without specifying a `data` object. See the [simple static floor](/dev-docs/modules/floors.html#simple-static-floors) section above for more info. + {: .table .table-bordered .table-striped } | Param | Type | Description | Default | |---+---+---+---+---| -| floorMin | float | The mimimum CPM floor used by the Price Floors Module (as of 4.13). The Price Floors Module will take the greater of floorMin and the matched rule CPM when evaluating getFloor() and enforcing floors. | - | +| floorMin | float | The mimimum CPM floor used by the Price Floors Module (as of 4.13). The Price Floors Module will take the greater of floorMin and the matched rule CPM when evaluating getFloor() and enforcing floors. **Note**: this is not a method of setting a [static floor](/dev-docs/modules/floors.html#simple-static-floors). | - | | floorProvider | string | Optional atribute (as of prebid version 4.1) used to signal to the Floor Provider's Analytics adapter their floors are being applied. They can opt to log only floors that are applied when they are the provider. If floorProvider is supplied in both the top level of the floors object and within the data object, the data object's configuration shall prevail.| - | | enforcement | object | Controls the enforcement behavior within the Price Floors Module.| - | | skipRate | integer | skipRate is a random function whose input value is any integer 0 through 100 to determine when to skip all floor logic, where 0 is always use floor data and 100 is always skip floor data. The use case is for publishers or floor providers to learn bid behavior when floors are applied or skipped. Analytics adapters will have access to model version (if defined) when skipped is true to signal the Price Floors Module is in floors mode. If skipRate is supplied in both the root level of the floors object and within the data object, the skipRate configuration within the data object shall prevail. | 0 | @@ -315,7 +369,7 @@ a subset that will be merged under the 'data' object. | data.floorProvider | string | Optional atribute (as of prebid version 4.2) used to signal to the Floor Provider's Analytics adapter their floors are being applied. They can opt to log only floors that are applied when they are the provider. If floorProvider is supplied in both the top level of the floors object and within the data object, the data object's configuration shall prevail.| - | | data.currency | string | Currency of floor data. Floor Module will convert currency where necessary. See Currency section for more details. | 'USD' | | data.skipRate | integer | skipRate is a random function whose input value is any integer 0 through 100 to determine when to skip all floor logic, where 0 is always use floor data and 100 is always skip floor data. The use case is for publishers or floor providers to learn bid behavior when floors are applied or skipped. Analytics adapters will have access to model version (if defined) when skipped is true to signal the Price Floors Module is in floors mode. If skipRate is supplied in both the root level of the floors object and within the data object, the skipRate configuration within the data object shall prevail. | 0 | -| data.floorsSchemaVersion | integer | The module supports two versions of the data schema. Version 1 allows for only one model to be applied in a given data set, whereas Version 2 allows you to sample multiple models selected by supplied weights. If no schema version is provided, the module will assume version 1 for the sake of backwards compatiblity. For schema version 2 see the next section. | 1 | +| data.floorsSchemaVersion | integer | The module supports two versions of the data schema. Version 1 allows for only one model to be applied in a given data set, whereas Version 2 allows you to sample multiple models selected by supplied weights. If no schema version is provided, the module will assume version 1 for the sake of backwards compatibility. For schema version 2 see the next section. | 1 | | data.modelVersion | string | Used by floor providers to train on model version performance. The expectation is a floor provider’s analytics adapter will pass the model verson back for algorithm training. | - | | data.modelTimestamp | integer | Epoch timestamp associated with modelVersion. Can be used to track model creation of floor file for post auction analysis.| - | | data.schema | object |allows for flexible definition of how floor data is formatted. | - | @@ -354,10 +408,13 @@ While some attributes are common in both schema versions, for completeness, all Note: if you're a dynamic floor provider service, your response must be a subset that will be merged under the 'data' object. +{: .alert.alert-warning :} +You **cannot** set the `floorMin` parameter without specifying a `data` object. See the [simple static floor](/dev-docs/modules/floors.html#simple-static-floors) section above for more info. + {: .table .table-bordered .table-striped } | Param | Type | Description | Default | |---+---+---+---+---| -| floorMin | float | The mimimum CPM floor used by the module (as of 4.13). The module will take the greater of floorMin and the matched rule CPM when evaluating getFloor() and enforcing floors. | - | +| floorMin | float | The mimimum CPM floor used by the module (as of 4.13). The module will take the greater of floorMin and the matched rule CPM when evaluating getFloor() and enforcing floors. **Note**: this is not a method of setting a [static floor](/dev-docs/modules/floors.html#simple-static-floors). | - | | floorMinCur | float | Prebid Server only: the currency used for the floorMin value. | - | | floorProvider | string | Optional atribute (as of prebid version 4.1) used to signal to the Floor Provider's Analytics adapter their floors are being applied. They can opt to log only floors that are applied when they are the provider. If floorProvider is supplied in both the top level of the floors object and within the data object, the data object's configuration shall prevail.| - | | skipRate | integer | skipRate is a random function whose input value is any integer 0 through 100 to determine when to skip all floor logic, where 0 is always use floor data and 100 is always skip floor data. The use case is for publishers or floor providers to learn bid behavior when floors are applied or skipped. Analytics adapters will have access to model version (if defined) when skipped is true to signal the module is in floors mode. If skipRate is supplied in both the root level of the floors object and within the data object, the skipRate configuration within the data object shall prevail. | 0 | @@ -371,16 +428,17 @@ a subset that will be merged under the 'data' object. | enforcement.floorDeals | boolean | Enforce floors for deal bid requests. | false | | enforcement.bidAdjustment | boolean | If true, the module will use the bidAdjustment function to adjust the floor per bidder. If false (or no bidAdjustment function is provided), floors will not be adjusted. Note: Setting this parameter to false may have unexpected results, such as signaling a gross floor when expecting net or vice versa. | true | | enforcement.enforceRate | integer | Prebid Server only: Defines a percentage for how often bid response enforcement activity should take place given that the floors feature is active. If the floors feature is skipped due to skipRate, this has no affect. For every non-skipped auction, this percent of them should be enforced: i.e. bids discarded. This feature lets publishers ease into enforcement in case bidders aren't adhering to floor rules. | 100 | -| enforcement.noFloorSignalBidders | array of strings | (Prebid.js 8.31+) Bidders which should not receive floor signals. | none | +| enforcement.noFloorSignalBidders | array of strings | (PBJS 8.31+, PBS-Java 3.4+) This is an array of bidders for which to avoid sending floors. This is useful for bidders where the publishers has established different floor rules in their systems. The value can be `["*"]`. | - | | endpoint | object | Controls behavior for dynamically retrieving floors. | - | | endpoint.url | string | URL of endpoint to retrieve dynamic floor data. | - | | data | object (required) | Floor data used by the module to pass floor data to bidders and floor enforcement. | - | | data.floorProvider | string | Optional atribute (as of prebid version 4.2) used to signal to the Floor Provider's Analytics adapter their floors are being applied. They can opt to log only floors that are applied when they are the provider. If floorProvider is supplied in both the top level of the floors object and within the data object, the data object's configuration shall prevail.| - | | data.currency | string | Currency of floor data. The module will convert currency where necessary. See Currency section for more details. | 'USD' | | data.skipRate | integer | skipRate is a random function whose input value is any integer 0 through 100 to determine when to skip all floor logic, where 0 is always use floor data and 100 is always skip floor data. The use case is for publishers or floor providers to learn bid behavior when floors are applied or skipped. Analytics adapters will have access to model version (if defined) when skipped is true to signal the module is in floors mode. If skipRate is supplied in both the root level of the floors object and within the data object, the skipRate configuration within the data object shall prevail.| 0 | -| data.floorsSchemaVersion | integer | The module supports two version of the data schema. Version 1 allows for only one model to be applied in a given data set, whereas Version 2 allows you to sample multiple models selected by supplied weights. If no schema version is provided, the module will assume version 1 for the sake of backwards compatiblity.| 1 | +| data.useFetchDataRate | integer | (PBS-Go 2.6+) useFetchDataRate is a random function whose input value is any integer 0 through 100 to determine when to skip dynamic floor data and fall back to static floor data. 0 means always use static floor data and 100 means always use dynamic floor data. The use case is for publishers or floor providers to confirm how dynamic floors data compares to static floors data. Analytics adapters will have access to the location of the actual floors data used, either "request" or "fetch". | 100 | +| data.floorsSchemaVersion | integer | The module supports two versions of the data schema. Version 1 allows for only one model to be applied in a given data set, whereas Version 2 allows you to sample multiple models selected by supplied weights. If no schema version is provided, the module will assume version 1 for the sake of backwards compatibility.| 1 | | data.modelTimestamp | int | Epoch timestamp associated with modelVersion. Can be used to track model creation of floor file for post auction analysis.| - | -| data.noFloorSignalBidders | array of strings | (Prebid.js 8.31+) Bidders which should not receive floor signals. | none | +| data.noFloorSignalBidders | array of strings | (PBJS 8.31+, PBS-Java 3.4+) This is an array of bidders for which to avoid sending floors. This is useful for bidders where the publishers has established different floor rules in their systems. The value can be `["*"]`. | - | | data.modelGroups | array of objects | Array of model objects to be used for A/B sampling multiple models. This field is only used when data.floorsSchemaVersion = 2 | - | | data.modelGroups[].currency | string | Currency of floor data. Floor Module will convert currency where necessary. See Currency section for more details. | 'USD' | | data.modelGroups[].skipRate | integer | skipRate is a random function whose input value is any integer 0 through 100 to determine when to skip all floor logic, where 0 is always use floor data and 100 is always skip floor data. The use case is for publishers or floor providers to learn bid behavior when floors are applied or skipped. Analytics adapters will have access to model version (if defined) when skipped is true to signal the module is in floors mode. | 0 | @@ -393,7 +451,7 @@ a subset that will be merged under the 'data' object. | data.modelGroups[].values."rule key" | string | Delimited field of attribute values that define a floor. | - | | data.modelGroups[].values."rule floor value" | float | The floor value for this key. | - | | data.modelGroups[].default | float | Floor used if no matching rules are found. | - | -| data.modelGroups[].noFloorSignalBidders | array of strings | (Prebid.js 8.31+) Bidders which should not receive floor signals. | none | +| data.modelGroups[].noFloorSignalBidders | array of strings | (PBJS 8.31+, PBS-Java 3.4+) This is an array of bidders for which to avoid sending floors. This is useful for bidders where the publishers has established different floor rules in their systems. The value can be `["*"]`. | - | | additionalSchemaFields | object | Object contain the lookup function to map custom schema.fields. Not supported by Prebid Server. | - | | additionalSchemaFields."custom key" | string | custom key name | - | | additionalSchemaFields."key map function" | function | Function used to lookup the value for that particular custom key | - | @@ -558,11 +616,11 @@ e.g. let deviceType = getDeviceTypeFromUserAgent(navigator.userAgent); - if(deviceType = 'mobile') + if(deviceType === 'mobile') return 'mobile' - else if (deviceType = 'tablet') + else if (deviceType === 'tablet') return 'tablet' - else if (deviceType = 'desktop') + else if (deviceType === 'desktop') return 'desktop' } @@ -1237,7 +1295,7 @@ Even if a publisher is using a floors provider, they may wish to provide additio 1. default floor data if dynamic data fails to load on time 2. global floorMin: allows the publisher to constrain dynamic floors with a global min -3. impression-level floor min (PBJS 6.24+): allows the publisher to constrain dynamic floors with an adunit-specific value +3. impression-level floor min (PBJS 6.24+): allows the publisher to constrain dynamic floors with an adunit-specific value. Specify this in `ortb2Imp.ext.prebid.floors.floorMin` (prior to Prebid.js 8 it was `ortb2Imp.ext.prebid.floorMin`). Here's an example covering the first two scenarios: @@ -1281,10 +1339,10 @@ pbjs.addAdUnits({ ortb2Imp: { ext: { prebid: { - data: { - floorMin: 0.25, - floorMinCur: "USD" - } + floors: { + floorMin: 0.25, + floorMinCur: "USD" + } } } }, @@ -1376,7 +1434,7 @@ Below is a chart explaining the behavior of currency conversion, if necessary, w | bid.currency | bid.originalCurrency | floor.currency | result | |---+---+---+---+---| | USD | USD | USD | Bid.cpm is compared to floor. If bid meets or exceeds the floor, bid.originalCpm is sent to the ad server. | -| USD | USD | EUR | Bid.cpm is converted to EUR then compared with floor. If bid meets or exceeds the floor, bid.originaCpm is sent to the ad server. | +| USD | USD | EUR | Bid.cpm is converted to EUR then compared with floor. If bid meets or exceeds the floor, bid.originalCpm is sent to the ad server. | | USD | EUR | EUR | bid.originalCpm is compared to floor. If bid meets or exceeds the floor, bid.Cpm is sent to the ad server. | | USD | JPY | EUR | Bid.cpm is converted to EUR then compared with floor. If bid meets or exceeds the floor, bid.Cpm is sent to the ad server. | | EUR | USD | EUR | Bid.cpm is compared to floor. If bid meets or exceeds the floor, bid.Cpm is sent to the ad server. | diff --git a/dev-docs/modules/freewheel.md b/dev-docs/modules/freewheel.md index de8b6a0571..43f23ea15e 100644 --- a/dev-docs/modules/freewheel.md +++ b/dev-docs/modules/freewheel.md @@ -12,8 +12,6 @@ sidebarType : 1 # Freewheel Module -{:.no_toc} - This module returns the targeting key value pairs for the FreeWheel ad server. ## How to use the module @@ -61,6 +59,15 @@ pbjs.adServers.freewheel.getTargeting({ } ``` +### Parameters + +{: .table .table-bordered .table-striped } + +| Name | Type | Description | Required | Default | +| :--- | :--- | :--- | :--- | :--- | +| `codes` | Array | AdUnit codes to retrieve targeting for | yes | n/a | +| `callback` | Function | Function invoked with error and targeting map | yes | n/a | + The values returned by `getTargeting` are concatenation of CPM, industy code, and video duration. FreeWheel SDK will send those values to FreeWheel Ad Server within the following query: ```text diff --git a/dev-docs/modules/gameraRtdProvider.md b/dev-docs/modules/gameraRtdProvider.md new file mode 100644 index 0000000000..f23cbf9b24 --- /dev/null +++ b/dev-docs/modules/gameraRtdProvider.md @@ -0,0 +1,55 @@ +--- +layout: page_v2 +title: Gamera Rtd Provider +display_name: Gamera Rtd Provider +description: Gamera Rtd Provider works in conjunction with the on-page Gamera script to enrich bid requests by adding First Party Data attributes. +page_type: module +module_type: rtd +module_code : gameraRtdProvider +enable_download : true +vendor_specific: true +sidebarType : 1 +--- + +# Gamera Real Time Data Provider + +## Overview + +RTD provider for Gamera.ai that enriches bid requests with real-time data, by populating the [First Party Data](/features/firstPartyData.html) attributes. +The module integrates with Gamera's AI-powered contextual targeting system to provide enhanced bidding capabilities. + +The Gamera RTD Provider works in conjunction with the Gamera script, which must be available on the page for the module to enrich bid requests. To learn more about the Gamera script, please visit the [Gamera website](https://gamera.ai/), or contact [Gamera](mailto:gareth@gamera.ai). + +## Build + +Include the Gamera RTD module in your Prebid.js build: + +```bash +gulp build --modules=rtdModule,gameraRtdProvider,... +``` + +## Configuration + +Configure the module in your Prebid.js configuration: + +```javascript +pbjs.setConfig({ + realTimeData: { + dataProviders: [{ + name: 'gamera', + params: { + // Optional configuration parameters + } + }] + } +}); +``` + +Syntax details: + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|--------------------------|----------|-----------------------------------------------|-------------|----------| +| `name` | required | Real time data module name: Always `'gamera'` | `'gamera'` | `string` | +| `params` | optional | Submodule configuration parameters (none at the moment) | `{}` | `Object` | +| `waitForIt` | optional | Should be `true` if there's an `auctionDelay` defined (defaults to `false`) | `false` | `Boolean` | diff --git a/dev-docs/modules/genericAnalyticsAdapter.md b/dev-docs/modules/genericAnalyticsAdapter.md index 8c21311c66..201410e70b 100644 --- a/dev-docs/modules/genericAnalyticsAdapter.md +++ b/dev-docs/modules/genericAnalyticsAdapter.md @@ -28,9 +28,9 @@ This is an analytics adapter that can interface with any backend, meant for publ -### Note on GDPR enforcement +### Note on TCF controls -If you are using the [GDPR enforcement module](/dev-docs/modules/gdprEnforcement.html) to enforce purpose 7, by default this module will be blocked when GDPR is in scope. +If you are using the [TCF control module](/dev-docs/modules/tcfControl.html) to enforce purpose 7, by default this module will be blocked when GDPR is in scope. To enable it, you may either specify the `gvlid` option (if you are interfacing with a partner) or declare a `softVendorException` if you deem that vendor consent is not required for compliance: ```javascript diff --git a/dev-docs/modules/geoedgeRtdProvider.md b/dev-docs/modules/geoedgeRtdProvider.md index 6bae377267..944cf0f5bc 100644 --- a/dev-docs/modules/geoedgeRtdProvider.md +++ b/dev-docs/modules/geoedgeRtdProvider.md @@ -12,7 +12,6 @@ sidebarType : 1 --- # Geoedge Realtime Module - {:.no_toc} * TOC @@ -21,7 +20,7 @@ sidebarType : 1 ## Overview The Geoedge Realtime module lets publishers block bad ads such as automatic redirects, malware, offensive creatives and landing pages. -To use this module, you'll need to work with [Geoedge](https://www.geoedge.com/publishers-real-time-protection/) to get an account and cutomer key. +To use this module, you'll need to work with [Geoedge](https://www.geoedge.com/publishers-real-time-protection/) to get an account and customer key. {% include dev-docs/loads-external-javascript.md %} diff --git a/dev-docs/modules/goldfishAdsRtdProvider.md b/dev-docs/modules/goldfishAdsRtdProvider.md index e789842f51..5a5bed4a67 100755 --- a/dev-docs/modules/goldfishAdsRtdProvider.md +++ b/dev-docs/modules/goldfishAdsRtdProvider.md @@ -13,7 +13,7 @@ sidebarType: 1 # Goldfish Ads Real Time Data Provider -This RTD module provides access to the Goldfish Ads Geograph, which leverages geographic and temporal data on a privcay-first platform. This module works without using cookies, PII, emails, or device IDs across all website traffic, including unauthenticated users, and adds audience data into bid requests to increase scale and yields. +This RTD module provides access to the Goldfish Ads Geograph, which leverages geographic and temporal data on a privacy-first platform. This module works without using cookies, PII, emails, or device IDs across all website traffic, including unauthenticated users, and adds audience data into bid requests to increase scale and yields. Contact for information. diff --git a/dev-docs/modules/gppControl_usnat.md b/dev-docs/modules/gppControl_usnat.md index b9de3e0585..df2853e3c4 100644 --- a/dev-docs/modules/gppControl_usnat.md +++ b/dev-docs/modules/gppControl_usnat.md @@ -21,9 +21,9 @@ sidebarType : 1 ## Overview -This consent management control module is designed to support the [Global Privacy Platform](https://iabtechlab.com/gpp/) Section 7 string, USNat. For more Prebid-related background, see [Prebid MSPA Support](/features/mspa-usnat.html). In sum, the USNat string is intended to unify various state laws into a single privacy string, with participants' behavior governed by the IAB's ([MSPA](https://www.iabprivacy.com/#)). It is intended to complement, not replace, the GPP consent management module, which gathers GPP consent strings and makes them available to vendor integrations. The goal is to gather sensible and conservative [activity controls](/dev-docs/activity-controls.html) for elements of Prebid.js given various expressions of the [USNat consent string](https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Sections/US-National/IAB%20Privacy%E2%80%99s%20National%20Privacy%20Technical%20Specification.md). +This consent management control module is designed to support the [Global Privacy Platform](https://iabtechlab.com/gpp/) Section 7 string, USNat. For more Prebid-related background, see [Prebid US Compliance Support](/features/mspa-usnat.html). In sum, the USNat string is intended to unify various state laws into a single privacy string, with participants' behavior governed by the IAB's ([MSPA](https://www.iabprivacy.com/#)). It is intended to complement, not replace, the GPP consent management module, which gathers GPP consent strings and makes them available to vendor integrations. The goal is to gather sensible and conservative [activity controls](/dev-docs/activity-controls.html) for elements of Prebid.js given various expressions of the [USNat consent string](https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Sections/US-National/IAB%20Privacy%E2%80%99s%20Multi-State%20Privacy%20Agreement%20(MSPA)%20US%20National%20Technical%20Specification.md). -This module does not support any other GPP section id or local GPP api. For US state section see the [GPP Control - US State module](/dev-docs/modules/gppControl_usstates.html). In order to control activities in a section without a control module, publishers can express their controls directly in the syntax of the [activity control infrastructure](/dev-docs/activity-controls.html). If a publisher wants finer control over section 7 implications on Prebid.js behavior than this module provides (eg not invalidating certain strings), they are able to achieve that using the activity control syntax as an alternative to this module. +This module does not support any other GPP section id or local GPP api. For US state section see the [GPP Control - US State module](/dev-docs/modules/gppControl_usstates.html), Prebid.js encourages publishers to consider with their legal counsel use of the national string over state strings. New state strings are being released, yet national string support is mature and less error prone. In order to control activities in a section without a control module, publishers can express their controls directly in the syntax of the [activity control infrastructure](/dev-docs/activity-controls.html). If a publisher wants finer control over section 7 implications on Prebid.js behavior than this module provides (eg not invalidating certain strings), they are able to achieve that using the activity control syntax as an alternative to this module. {: .alert.alert-warning :} Prebid functionality created to address regulatory requirements does not replace each party's responsibility to determine its own legal obligations and comply with all applicable laws. **We recommend consulting with your legal counsel before determining how to utilize these features in support of your overall privacy approach. This module is not yet intended to replace other consent modules; it supplements them.** @@ -37,7 +37,7 @@ This module activates if the `gpp` object in the consent management configuratio Follow the basic build instructions in the GitHub Prebid.js repo's main [README](https://github.com/prebid/Prebid.js/blob/master/README.md). To include the consent management module and the GPP Control - USNat module, an additional option must be added to the **gulp build** command: ```bash -gulp build --modules=consentManagementGpp,gppContol_usnat,bidAdapter1,bidAdapter2 +gulp build --modules=consentManagementGpp,gppControl_usnat,bidAdapter1,bidAdapter2 ``` You can also use the [Prebid.js Download](/download.html) page. @@ -46,8 +46,8 @@ You can also use the [Prebid.js Download](/download.html) page. - [IAB Global Privacy Platform Full Specification Repository](https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform) - [IAB Global Privacy Platform CMP API Specification](https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Core/CMP%20API%20Specification.md) -- [IAB Global Privacy Platform USNat string Specification](https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Sections/US-National/IAB%20Privacy%E2%80%99s%20National%20Privacy%20Technical%20Specification.md) -- [Prebid MSPA Support](/features/mspa-usnat.html) +- [IAB Global Privacy Platform USNat string Specification](https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Sections/US-National/IAB%20Privacy%E2%80%99s%20Multi-State%20Privacy%20Agreement%20(MSPA)%20US%20National%20Technical%20Specification.md) +- [Prebid US Compliance Support](/features/mspa-usnat.html) - [Prebid Activity Controls](/dev-docs/activity-controls.html) - [Prebid Consent Management - US Privacy Module](/dev-docs/modules/consentManagementUsp.html) - [Prebid Consent Management - GPP Module](/dev-docs/modules/consentManagementGpp.html) diff --git a/dev-docs/modules/gppControl_usstates.md b/dev-docs/modules/gppControl_usstates.md index e82ba32b91..d15c603fd7 100644 --- a/dev-docs/modules/gppControl_usstates.md +++ b/dev-docs/modules/gppControl_usstates.md @@ -22,7 +22,7 @@ sidebarType : 1 ## Overview This consent management control module is designed to support the [Global Privacy Platform](https://iabtechlab.com/gpp/) US state strings, [GPP sections](https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Sections/Section%20Information.md) 8 through 12. -It works by translating them into an equivalent US national string as detailed in [Interpreting USNat strings](/features/mspa-usnat.html#interpreting-usnat-strings), and using it to apply the same [activity restricitons](/features/mspa-usnat.html#usnat-activity-restrictions). +It works by translating them into an equivalent US national string as detailed in [Interpreting USNat strings](/features/mspa-usnat.html#interpreting-usnat-strings), and using it to apply the same [activity restrictions](/features/mspa-usnat.html#usnat-activity-restrictions). Prebid.js encourages publishers to consider with their legal counsel use of the national string over state strings. New state strings are being released, yet national string support is mature and less error prone. {: .alert.alert-warning :} Prebid functionality created to address regulatory requirements does not replace each party's responsibility to determine its own legal obligations and comply with all applicable laws. **We recommend consulting with your legal counsel before determining how to utilize these features in support of your overall privacy approach. This module is not intended to replace other consent modules; it supplements them.** @@ -117,8 +117,8 @@ You can also use the [Prebid.js Download](/download.html) page. - [IAB Global Privacy Platform Full Specification Repository](https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform) - [IAB Global Privacy Platform CMP API Specification](https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Core/CMP%20API%20Specification.md) -- [IAB Global Privacy Platform USNat string Specification](https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Sections/US-National/IAB%20Privacy%E2%80%99s%20National%20Privacy%20Technical%20Specification.md) -- [Prebid MSPA Support](/features/mspa-usnat.html) +- [IAB Global Privacy Platform USNat string Specification](https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Sections/US-National/IAB%20Privacy%E2%80%99s%20Multi-State%20Privacy%20Agreement%20(MSPA)%20US%20National%20Technical%20Specification.md +- [Prebid US Compliance Support](/features/mspa-usnat.html) - [Prebid Activity Controls](/dev-docs/activity-controls.html) - [Prebid Consent Management - US Privacy Module](/dev-docs/modules/consentManagementUsp.html) - [Prebid Consent Management - GPP Module](/dev-docs/modules/consentManagementGpp.html) diff --git a/dev-docs/modules/gpt-pre-auction.md b/dev-docs/modules/gpt-pre-auction.md index a35a8af71c..cab3e3489b 100644 --- a/dev-docs/modules/gpt-pre-auction.md +++ b/dev-docs/modules/gpt-pre-auction.md @@ -12,7 +12,6 @@ sidebarType : 1 --- # GPT Pre-Auction Module - {:.no_toc} * TOC diff --git a/dev-docs/modules/greenbidsRtdProvider.md b/dev-docs/modules/greenbidsRtdProvider.md index c45bbbec54..eb9ab80a9e 100644 --- a/dev-docs/modules/greenbidsRtdProvider.md +++ b/dev-docs/modules/greenbidsRtdProvider.md @@ -12,7 +12,6 @@ sidebarType : 1 --- # Greenbids Realtime Module - {:.no_toc} * TOC diff --git a/dev-docs/modules/growthCodeRtdProvider.md b/dev-docs/modules/growthCodeRtdProvider.md index 161f654780..b31397709c 100644 --- a/dev-docs/modules/growthCodeRtdProvider.md +++ b/dev-docs/modules/growthCodeRtdProvider.md @@ -12,7 +12,6 @@ sidebarType : 1 --- # GrowthCode Real-time Data Submodule - {:.no_toc} * TOC diff --git a/dev-docs/modules/hadronRtdProvider.md b/dev-docs/modules/hadronRtdProvider.md index 7e54c02e89..6f3149fbea 100644 --- a/dev-docs/modules/hadronRtdProvider.md +++ b/dev-docs/modules/hadronRtdProvider.md @@ -12,7 +12,6 @@ sidebarType : 1 --- # Audigent Hadron Real-time Data Submodule - {:.no_toc} * TOC diff --git a/dev-docs/modules/humansecurityMalvDefenseRtdProvider.md b/dev-docs/modules/humansecurityMalvDefenseRtdProvider.md new file mode 100644 index 0000000000..8780ff2526 --- /dev/null +++ b/dev-docs/modules/humansecurityMalvDefenseRtdProvider.md @@ -0,0 +1,74 @@ +--- +layout: page_v2 +title: HUMAN Security Malvertising Defense Real-Time Data Submodule +display_name: HUMAN Security Malvertising Defense RTD Submodule +description: The HUMAN Malvertising Defense RTD blocks 0-/1-click redirects and deceptive creatives in real time, lets safe ads render, and can optionally include HUMAN Ad Quality for broader protection. +page_type: module +module_type: rtd +module_code : humansecurityMalvDefense +enable_download : true +vendor_specific: true +sidebarType : 1 +--- + +# HUMAN Security Malvertising Defense Real-Time Data Submodule + +## Overview + +The HUMAN Security Malvertising Defense RTD submodule offers a robust, easy-to-implement anti-malvertising solution for publishers. +Its automatic updates continuously detect and block on-page malicious ad behaviors — such as unwanted redirects and deceptive ads with harmful landing pages. +This safeguards revenue and visitor experience without extra maintenance, and with minimal impact on page load speed and overall site performance. +Publishers can also opt in to add HUMAN Ad Quality monitoring for broader protection. + +Using this module requires prior agreement with [HUMAN Security](https://www.humansecurity.com/) to obtain the necessary distribution key. + +{% include dev-docs/loads-external-javascript.md %} + +## Integration + +To integrate, add the HUMAN Security Malvertising Defense submodule to your Prebid.js package with: + +```bash +gulp build --modules="rtdModule,humansecurityMalvDefenseRtdProvider,..." +``` + +> `rtdModule` is a required module to use HUMAN Security RTD module. + +## Configuration + +This module is configured as part of the `realTimeData.dataProviders` object. + +When built into Prebid.js, this module can be configured through the following `pbjs.setConfig` call: + +```javascript +pbjs.setConfig({ + realTimeData: { + dataProviders: [{ + name: 'humansecurityMalvDefense', + params: { + cdnUrl: 'https://cadmus.script.ac//script.js', // Contact HUMAN Security to get your own CDN URL + protectionMode: 'full', // Supported modes are 'full', 'bids' and 'bids-nowait', see below. + } + }] + } +}); +``` + +### Configuration parameters + +{: .table .table-bordered .table-striped } + +| Name | Type | Scope | Description | +| :------------ | :------------ | :------------ |:------------ | +| ``cdnUrl`` | ``string`` | Required | CDN URL of the script, which is to be used for protection. | +| ``protectionMode`` | ``'full'`` or ``'bids'`` or ``'bids-nowait'`` | Required | Integration mode. Please refer to the "Integration modes" section for details. | + +### Integration modes + +{: .table .table-bordered .table-striped } + +| Integration Mode | Parameter Value | Description | +| :------------ | :------------ | :------------ | +| Full page protection | ``'full'`` | Preferred mode. The module will add the protector agent script directly to the page, and it will protect all placements. This mode will make the most out of various behavioral detection mechanisms, and will also prevent typical malicious behaviors. | +| Bids-only protection | ``'bids'`` | The module will protect specific bid responses - specifically, the HTML that represents the ad payload - by wrapping them with the agent script. Ads served outside of Prebid will not be protected in this mode, as the module can only access ads delivered through Prebid. | +| Bids-only protection with no delay on bid rendering | ``'bids-nowait'`` | Same as above, but in this mode, the script will also *not* wrap those bid responses, which arrived prior to successful preloading of agent script. | diff --git a/dev-docs/modules/humansecurityRtdProvider.md b/dev-docs/modules/humansecurityRtdProvider.md new file mode 100644 index 0000000000..93b1b35ea9 --- /dev/null +++ b/dev-docs/modules/humansecurityRtdProvider.md @@ -0,0 +1,237 @@ +--- +layout: page_v2 +title: HUMAN Security Realtime Data Submodule +display_name: HUMAN Security RTD Submodule +description: The HUMAN Security RTD Submodule offers publishers a mechanism to integrate pre-bid signal collection for the purpose of providing real-time protection against all sorts of invalid traffic. +page_type: module +module_type: rtd +module_code : humansecurity +enable_download : true +vendor_specific: true +sidebarType : 1 +--- + +# HUMAN Security Real-time Data Submodule +{:.no_toc} + +* TOC +{:toc} + +## Overview + +The HUMAN Security RTD submodule offers publishers a mechanism to integrate pre-bid signal collection +for the purpose of providing real-time protection against all sorts of invalid traffic, +such as bot-generated ad interactions or sophisticated ad fraud schemes. + +### How does it work? + +HUMAN Security RTD submodule generates a HUMAN Security token, which then can be consumed by adapters, +sent within bid requests, and used for bot detection on the backend. + +### Key Facts about the HUMAN Security RTD Submodule + +* Enriches bid requests with IVT signal, historically done post-bid +* No incremental signals collected beyond existing HUMAN post-bid solution +* Offsets negative impact from loss of granularity in IP and User Agent at bid time +* Does not expose collected IVT signal to any party who doesn’t otherwise already have access to the same signal collected post-bid +* Does not introduce meaningful latency, as demonstrated in the Latency section +* Comes at no additional cost to collect IVT signal and make it available at bid time +* Leveraged to differentiate the invalid bid requests at device level, and cannot be used to identify a user or a device, thus preserving privacy. + +{% include dev-docs/loads-external-javascript.md %} + +## Build + +First, make sure to add the HUMAN Security submodule to your Prebid.js package with: + +```bash +gulp build --modules="rtdModule,humansecurityRtdProvider,..." +``` + +> `rtdModule` is a required module to use HUMAN Security RTD module. + +## Configuration + +This module is configured as part of the `realTimeData.dataProviders` object. +Please refer to [Prebid Documentation](/dev-docs/publisher-api-reference/setConfig.html#setConfig-realTimeData) +on RTD module configuration for details on required and optional parameters of `realTimeData`. + +By default, using this submodule *does not require any prior communication with HUMAN, nor any special configuration*, +besides just indicating that it should be loaded: + +```javascript +pbjs.setConfig({ + realTimeData: { + dataProviders: [{ + name: 'humansecurity' + }] + } +}); +``` + +It can be optionally parameterized, for example, to include client ID obtained from HUMAN, +should any advanced reporting be needed, or to have verbose output for troubleshooting: + +```javascript +pbjs.setConfig({ + realTimeData: { + dataProviders: [{ + name: 'humansecurity', + params: { + clientId: 'ABC123', + verbose: true + } + }] + } +}); +``` + +### Supported parameters + +{: .table .table-bordered .table-striped } +| Name |Type | Description | Required | +| :--------------- | :------------ | :------------------------------------------------------------------ |:---------| +| `clientId` | String | Should you need advanced reporting, contact [prebid@humansecurity.com](prebid@humansecurity.com) to receive client ID. | No | +| `verbose` | Boolean | Only set to `true` if troubleshooting issues. | No | + +### Logging, latency and troubleshooting + +The optional `verbose` parameter can be especially helpful to troubleshoot any issues and/or monitor latency. + +By default, the submodule may, in case of unexpected issues, invoke `logError`, emitting `auctionDebug` events +of type `ERROR`. With `verbose` parameter set to `true`, it may additionally: + +* Call `logWarning`, resulting in `auctionDebug` events of type `WARNING`, +* Call `logInfo` with latency information. + * To observe these messages in console, Prebid.js must be run in + [debug mode](/dev-docs/publisher-api-reference/setConfig.html#debugging) - + either by adding `?pbjs_debug=true` to your page's URL, or by configuring with `pbjs.setConfig({ debug: true });` + +Example output of the latency information: + +```text +INFO: [humansecurity]: impl JS time to init (ms): 6. +INFO: [humansecurity]: impl JS time to collect (ms): 13. +``` + +Here, the two reported metrics are how much time the signal collection script spent blocking on initialization, +and the total time required to obtain the signals, respectively. Note that "time to collect" metric accounts +for all the time spent since the script has started initializing until the signals were made available to the bidders, +therefore it includes "time to init", and typically some non-blocking time spent waiting for signals. Only “time to init” is blocking. + +## How can I contribute? + +Prebid has launched a Measurement Taskforce to address signal deprecation and measurement in the current environment, +which has become a publisher-level issue. Without a solution, granularity of measurement disappears. +If you would like to participate to help identify and develop solutions to these problems such as the one tackled +by this submodule, please consider joining the [Measurement Taskforce](https://prebid.org/project-management-committees/). + +## Notes + +### Operation model + +Following is the expected data flow: + +* Prebid.js gets initialized, including the HUMAN RTD submodule. +* The submodule loads the signal collection implementation script from a high-performance, low latency endpoint. +* This script starts collecting the signals, and makes them available to the RTD submodule as soon as possible. +* The RTD submodule places the collected signals into the ORTB structure for bid adapters to pick up. +* Bid adapters are expected to retrieve the `ortb2.device.ext.hmns` object and incorporate it into their bid requests. +* Bid requests having the `ortb2.device.ext.hmns` data allow their backend to make more informative requests to HUMAN Ad Fraud Defense. + * Should bid requests be passed to other platforms during the bidding process, adapter developers are + encouraged to keep `ortb2.device.ext.hmns` so that, for example, a downstream DSP can also have this data passed to HUMAN. + +### Remarks on the collected signals + +There are a few points that are worth being mentioned separately, to avoid confusion and unnecessary suspicion: + +* The nature of the collected signals is exactly the same as those already collected in analytics scripts + that arrive in the ads via existing post-bid processes. +* The signals themselves are even less verbose than those HUMAN normally collects post-bid, because of timing / performance requirements. +* No signals attempt to identify users. Their only purpose is to classify traffic into valid / invalid. +* The signal collection script is external to Prebid.js. This ensures that it can be constantly kept up to date with + the ever-evolving nature of the threat landscape without the publishers having to rebuild their Prebid.js frequently. + * The signal collection script is also obfuscated, as a defense-in-depth measure in order to complicate tampering by + bad actors, as are all similar scripts in the industry, which is something that cannot be accommodated by Prebid.js itself. + +### Why is this approach an innovation? + +Historically, IVT protection is achieved via dropping analytics scripts and/or pixels in the ads, which enriches impression data with collected signals. +Those signals, when analyzed by IVT protection vendors, allow distinguishing valid from invalid traffic, but only retroactively - +after the impression was served, and all the participant infrastructures have already participated in serving the request. + +This not only leads to unnecessary infrastructure costs, but to uncomfortable and often difficult processes of reconciliation +and reimbursement, or claw-back. When handled only at the post-bid stage, the true bad actors have already achieved their objectives, +and legitimate advertisers, platforms, and publishers are left holding the bag. + +HUMAN’s Ad Fraud Defense solves this problem by making predictions at the pre-bid stage about whether the traffic is fraudulent, +allowing the platforms to knowingly not participate in the IVT-generated auctions. + +However, the challenge in making those predictions is that even these prebid predictions rely primarily on historical data, +which not only introduces lag, but typically might be less accurate than direct decision making (were it possible) using +the high-quality signals obtained from the pixels and/or JS analytics scripts delivered in the ads. + +The HUMAN Security RTD submodule bridges the gap by introducing a new innovation: it **facilitates the very same signal +collection that is typically performed post-bid, but at the pre-bid stage, and makes the signals available during bidding.** +This not only permits for accurate invalid traffic detection at the earliest stages of the auction process, but diminishes +the impacts of signal deprecation such as the loss of IP and User Agent on effective fraud mitigation. + +### Why is this good for publishers? + +In the process of Invalid Traffic reconciliation, publishers are often the last to know, as they are informed by their downstream +partners that the inventory they had provided in good faith has been detected as invalid traffic. This is most painful when it +happens via post-bid detection when publishers are often the last party in the chain from whom the others can collect clawbacks, +and the publishers themselves are left with little recourse. And when invalid traffic is blocked by platforms prebid, it is after +the fact of publishers having sent out bid requests, thus harming fill rates, revenue opportunities, and overall auction and bidding +efficiencies. And of course, invalid traffic whether detected post-bid or pre-bid is damaging to the publisher’s reputation +with its demand partners. + +The HUMAN Security RTD submodule creates a more efficient integration for the process of invalid traffic mitigation. +Invalid traffic detection and filtration is being done already with or without the participation of publishers, and measurement +will be done on the ad inventory because advertisers need it to manage their own ad spend. The HUMAN Security RTD submodule gives +publishers a direct seat, and in fact the first seat, in the invalid traffic detection process, allowing it to be done effectively, +directly, and in a way that provides the publisher with more direct insight. + +Existing models of signal deprecation suggest that IP protection is going to be 100 times or more less granular. +This would normally be expected to significantly reduce the ability to do prebid publisher-side predictions. This in turn would prevent +the ability to see if specific impressions are bad and instead potentially result in the whole publisher being identified as being +invalid traffic by a buyer. It is important to note that the purpose of data collection by the HUMAN Security RTD submodule is +specifically for invalid traffic detection and filtration. It will not be used for unrelated and unauthorized purposes +like targeting audiences, etc. + +The HUMAN Security RTD submodule makes sure to have the best integration possible to avoid revenue loss. +It will help publishers avoid painful clawbacks. Currently, clawbacks are based on opaque measurement processes downstream from +publishers where the information is controlled and withheld. The HUMAN Security RTD submodule will make publishers a more direct +party to the measurement and verification process and help make sure the origin and the recipient match. + +Importantly, the effective use of the HUMAN Security RTD submodule signifies to SSPs and buyers that the publisher +is a joint partner in ensuring quality ad delivery, and demonstrates that the publisher is a premium supply source. + +Finally, the HUMAN Security RTD submodule sets the ecosystem up for a future where publisher level reporting is facilitated. +This will allow for increased transparency about what is happening with publisher inventory, further enhancing and +ensuring the value of the inventory. + +### FAQ + +#### Is latency an issue? + +The HUMAN Security RTD submodule is designed to minimize any latency in the auction within normal SLAs. + +#### Do publishers get any insight into how the measurement is judged? + +Having the The HUMAN Security RTD submodule be part of the prebid process will allow the publisher to have insight +into the invalid traffic metrics as they are determined and provide confidence that they are delivering quality +inventory to the buyer. + +#### How are privacy concerns addressed? + +The HUMAN Security RTD submodule seeks to reduce the impacts from signal deprecation that are inevitable without +compromising privacy by avoiding re-identification. Each bid request is enriched with just enough signal +to identify if the traffic is invalid or not. + +By having the The HUMAN Security RTD submodule operate at the Prebid level, data can be controlled +and not as freely passed through the bidstream where it may be accessible to various unknown parties. + +Note: anti-fraud use cases typically have carve outs in laws and regulations to permit data collection +essential for effective fraud mitigation, but this does not constitute legal advice and you should +consult your attorney when making data access decisions. diff --git a/dev-docs/modules/idLibrary.md b/dev-docs/modules/idLibrary.md index f30dfa34ef..f8654e6c44 100644 --- a/dev-docs/modules/idLibrary.md +++ b/dev-docs/modules/idLibrary.md @@ -14,8 +14,6 @@ Maintainer: eng-dmp@magnite.com # ID Import Library -{:.no_toc} - The ID Import Library module gathers and generates a map of identities present on the page. The primary usecase for this adapter is for Publishers who have included multiple UserId subadapters in their prebid.js implementation, and want to store the resulting user ids serverside for modeling or graphing purposes. The ID Library module, anchors the response of `refreshUserIds()` to a persistant identifier (md5 encrypted) and returns an map of uids. This map of uids comes in the form of a POST message in JSON format and must be output to a publisher configured endpoint. The module attempts to extract a persistant identifier in the following ways: @@ -26,8 +24,9 @@ The module attempts to extract a persistant identifier in the following ways: To get started, add the module to your Prebid.js wrapper. From the command line: -{: .alert.alert-info :} +```bash gulp build --modules=idImportLibrary +``` ## Application Flow @@ -45,6 +44,7 @@ In the idLibrary module, the persistant id is fetched from the page and synced w ## Configuration {: .table .table-bordered .table-striped } + | Param | Required | Description | | --- | --- | --- | | url | yes | The url endpoint is used to post the MD5 hasheds| diff --git a/dev-docs/modules/idWardRtdProvider.md b/dev-docs/modules/idWardRtdProvider.md index 642ae36ddd..9f49220c3d 100644 --- a/dev-docs/modules/idWardRtdProvider.md +++ b/dev-docs/modules/idWardRtdProvider.md @@ -8,6 +8,7 @@ module_type: rtd module_code : idWardRtdProvider enable_download : false vendor_specific: true +pbjs_version_notes: removed in 9.0 sidebarType : 1 --- diff --git a/dev-docs/modules/imRtdProvider.md b/dev-docs/modules/imRtdProvider.md index 0173f7974e..8a3a32e976 100644 --- a/dev-docs/modules/imRtdProvider.md +++ b/dev-docs/modules/imRtdProvider.md @@ -11,7 +11,6 @@ sidebarType : 1 --- # Intimate Merger Real time Data Provider - {:.no_toc} * TOC diff --git a/dev-docs/modules/index.md b/dev-docs/modules/index.md index 952f2c0a61..41788113b3 100644 --- a/dev-docs/modules/index.md +++ b/dev-docs/modules/index.md @@ -10,11 +10,11 @@ sidebarType: 1 The core of Prebid.js contains only the foundational code needed for header bidding. Any functionality that could be considered an add-on is part of a module. These are the major categories: -* [Bidder adapters](/dev-docs/bidders.html) -* [Analytics adapters](/overview/analytics.html) -* Any other extensible functionality - documented on this page +- [Bidder adapters](/dev-docs/bidders.html) +- [Analytics adapters](/overview/analytics.html) +- Any other extensible functionality - documented on this page -* TOC +- TOC {:toc} {% assign module_pages = site.pages | where: "page_type", "module" %} @@ -57,7 +57,7 @@ than others. See [the realTimeData setConfig](/dev-docs/publisher-api-reference/ -{% for page in module_pages %}{% if page.recommended == true or page.vendor_specific == true %}{% continue %}{% endif %} +{% for page in module_pages %}{% if page.recommended == true or page.vendor_specific == true or page.enable_download == false %}{% continue %}{% endif %} {{page.display_name}} {{page.description}} @@ -79,7 +79,7 @@ These modules may require accounts with a service provider. -{% for page in module_pages %}{% if page.recommended == true %}{% continue %}{% endif %}{% if page.vendor_specific == true %} +{% for page in module_pages %}{% if page.recommended == true or page.enable_download == false %}{% continue %}{% endif %}{% if page.vendor_specific == true %} {{page.display_name}} {{page.description}} @@ -89,9 +89,35 @@ These modules may require accounts with a service provider. +## User ID Modules + +UserID modules conform to a consistent set of publisher controls. The publisher can choose to run multiple user id modules, define an overall amount of time they're willing to wait for +results. See [the userSync setConfig](/dev-docs/publisher-api-reference/setConfig.html#setConfig-ConfigureUserSyncing-UserSyncProperties) reference and the [User ID Module](/dev-docs/modules/userId) for more details. + +{% assign userid_module_pages = site.pages | where: "layout", "userid" %} + + + + + + + + + + +{% for page in userid_module_pages %} + + + + + +{% endfor %} + +
ModuleDescriptionEID Source
{{page.title}}{{page.description}}{{page.eidsource}}
+ ## Further Reading -* [Source code of all modules](https://github.com/prebid/Prebid.js/tree/master/modules) -* [How to add a Bid Adapter](/dev-docs/bidder-adaptor.html) -* [How to add an Analytics Adapter](/dev-docs/integrate-with-the-prebid-analytics-api.html) -* [How to add a Real Time Data Submodule](/dev-docs/add-rtd-submodule.html) +- [Source code of all modules](https://github.com/prebid/Prebid.js/tree/master/modules) +- [How to add a Bid Adapter](/dev-docs/bidder-adaptor.html) +- [How to add an Analytics Adapter](/dev-docs/integrate-with-the-prebid-analytics-api.html) +- [How to add a Real Time Data Submodule](/dev-docs/add-rtd-submodule.html) diff --git a/dev-docs/modules/instreamTracking.md b/dev-docs/modules/instreamTracking.md index c0bbe124ed..7e9528a77f 100644 --- a/dev-docs/modules/instreamTracking.md +++ b/dev-docs/modules/instreamTracking.md @@ -10,7 +10,6 @@ sidebarType : 1 --- # Instream Video Ads Tracking - {:.no_toc} * TOC diff --git a/dev-docs/modules/intersectionRtdProvider.md b/dev-docs/modules/intersectionRtdProvider.md index a7d5d69ea0..ced4de6aca 100644 --- a/dev-docs/modules/intersectionRtdProvider.md +++ b/dev-docs/modules/intersectionRtdProvider.md @@ -2,6 +2,7 @@ layout: page_v2 title: Intersection Module display_name: Intersection + description: Real Time Intersection page_type: module module_type: rtd @@ -11,7 +12,6 @@ sidebarType : 1 --- # Intersection Module - {:.no_toc} * TOC @@ -27,6 +27,7 @@ Implementation works like this: 1. Build the Intersection module into the Prebid.js package with: ```bash + gulp build --modules=intersectionRtdProvider&... ``` @@ -37,6 +38,7 @@ Implementation works like this: This module is configured as part of the `realTimeData.dataProviders` object: ```javascript + pbjs.setConfig({ "realTimeData": { auctionDelay: 100, @@ -46,14 +48,18 @@ pbjs.setConfig({ }] } }); + ``` +The optional `waitForIt` flag instructs the module to delay the auction until intersection data is collected for all ad units or the `auctionDelay` timeout is reached. It defaults to `false`. + ## Output For each bidder, the module adds intersection in a JSON format. Example: ```javascript + { "intersection":{ 'boundingClientRect': { diff --git a/dev-docs/modules/jwplayerRtdProvider.md b/dev-docs/modules/jwplayerRtdProvider.md index dacdf35035..743641a027 100644 --- a/dev-docs/modules/jwplayerRtdProvider.md +++ b/dev-docs/modules/jwplayerRtdProvider.md @@ -12,7 +12,6 @@ sidebarType : 1 --- # JW Player RTD Provider - {:.no_toc} * TOC @@ -42,7 +41,11 @@ To use this module, you'll need to work with [JW Player](https://www.jwplayer.co name: "jwplayer", waitForIt: true, params: { - mediaIDs: ['abc', 'def', 'ghi', 'jkl'] + mediaIDs: ['abc', 'def', 'ghi', 'jkl'], + overrideContentId: 'always', + overrideContentUrl: 'always', + overrideContentTitle: 'always', + overrideContentDescription: 'always' } }] } @@ -65,7 +68,7 @@ To use this module, you'll need to work with [JW Player](https://www.jwplayer.co | waitForIt | Boolean | Required to ensure that the auction is delayed until prefetch is complete | Optional. Defaults to false | | params | Object | | | | params.mediaIDs | Array of Strings | Media Ids for prefetching | Optional | - | params.overrideContentId | String enum: 'always', 'whenEmpty' or 'never' | Determines when the module should update the oRTB site.content.id | Defaults to 'always' | + | params.overrideContentId | String enum: 'always', 'whenEmpty' or 'never' | Determines when the module should update the oRTB site.content.id | Defaults to 'whenEmpty' | | params.overrideContentUrl | String enum: 'always', 'whenEmpty' or 'never' | Determines when the module should update the oRTB site.content.url | Defaults to 'whenEmpty' | | params.overrideContentTitle | String enum: 'always', 'whenEmpty' or 'never' | Determines when the module should update the oRTB site.content.title | Defaults to 'whenEmpty' | | params.overrideContentDescription | String enum: 'always', 'whenEmpty' or 'never' | Determines when the module should update the oRTB site.content.ext.description | Defaults to 'whenEmpty' | @@ -182,6 +185,6 @@ To view an example: * in your browser, navigate to: -`http://localhost:9999/integrationExamples/gpt/jwplayerRtdProvider_example.html` +`http://localhost:9999/integrationExamples/realTimeData/jwplayerRtdProvider_example.html` **Note:** the mediaIds in the example are placeholder values; replace them with your existing IDs. diff --git a/dev-docs/modules/konduit.md b/dev-docs/modules/konduit.md index 720ce52d48..811753be93 100644 --- a/dev-docs/modules/konduit.md +++ b/dev-docs/modules/konduit.md @@ -5,16 +5,17 @@ title: Module - Konduit Accelerate description: Applies Konduit video ad acceleration optimization to wining video bid. module_code : konduitWrapper display_name : Konduit Accelerate -enable_download : true +enable_download : false vendor_specific: true sidebarType : 1 --- # Konduit Accelerate Module -{:.no_toc} +{: .alert.alert-warning :} +Prebid believes this module may no longer be maintained. -The Konduit Accelerate module applies the [Konduit](https://konduitvideo.com/) video acceleration optimization to a publisher’s existing Prebid setup. This optimization provides publishers with tools to monetize previously lost revenue and drive higher fill rates on their video inventory. +The Konduit Accelerate module applies the Konduit video acceleration optimization to a publisher’s existing Prebid setup. This optimization provides publishers with tools to monetize previously lost revenue and drive higher fill rates on their video inventory. To install the module, follow these instructions: diff --git a/dev-docs/modules/liveIntentRtdProvider.md b/dev-docs/modules/liveIntentRtdProvider.md new file mode 100644 index 0000000000..f91bcfdeb1 --- /dev/null +++ b/dev-docs/modules/liveIntentRtdProvider.md @@ -0,0 +1,55 @@ +--- +layout: page_v2 +title: LiveIntent RTD Module +display_name: LiveIntent RTD Module +description: LiveIntent Real Time Data Module +page_type: module +module_type: rtd +module_code : liveIntentRtdProvider +enable_download : true +vendor_specific: true +sidebarType : 1 +--- + +# LiveIntent RTD Module + +{% include dev-docs/loads-external-javascript.md %} + +The LiveIntent RTD module loads a script to extract segment information from bid requests. +These segments are resolved using the LiveIntent user ID module and are then supplied as user data segments in OpenRTB. + +Please visit [LiveIntent](https://www.liveIntent.com/) for more information. + +## Integration + +1) Build the LiveIntent RTD Module into the Prebid.js package with: + + ```bash + gulp build --modules=rtdModule,liveIntentRtdProvider,... + ``` + +2) Use `setConfig` to instruct Prebid.js to initialize the LiveIntent RTD module, as specified below. + +## Configuration + +```javascript +pbjs.setConfig({ + realTimeData: { + auctionDelay: 1000, + dataProviders: [ + { + name: "liveintent", + waitForIt: true + } + ] + } +}); +``` + +## Parameters + +{: .table .table-bordered .table-striped } +| Name |Type | Description |Required | Notes | +| :--------------- | :------------ | :------------------------------------------------------------------ |:---------|:------------ | +| `name` | String | Real time data module name | yes | Always 'liveIntent' | +| `waitForIt` | Boolean | Should be `true` if there's an `auctionDelay` defined (recommended) | no | Default `false` | diff --git a/dev-docs/modules/mass.md b/dev-docs/modules/mass.md index 6515d3e2d8..0ff3088684 100644 --- a/dev-docs/modules/mass.md +++ b/dev-docs/modules/mass.md @@ -10,7 +10,6 @@ sidebarType : 1 --- # MASS Module - {:.no_toc} * TOC diff --git a/dev-docs/modules/mediafilterRtdProvider.md b/dev-docs/modules/mediafilterRtdProvider.md index 3020d971f9..74dab375c2 100644 --- a/dev-docs/modules/mediafilterRtdProvider.md +++ b/dev-docs/modules/mediafilterRtdProvider.md @@ -47,3 +47,11 @@ pbjs.setConfig({ } }); ``` + +### Parameters + +{: .table .table-bordered .table-striped } + +| Name | Type | Description | Required | Default | +| :--- | :--- | :--- | :--- | :--- | +| `configurationHash` | String | Hash provided by The Media Trust to load the protection script | yes | n/a | diff --git a/dev-docs/modules/medianetRtdProvider.md b/dev-docs/modules/medianetRtdProvider.md index 2576d8af7a..ea235343ee 100644 --- a/dev-docs/modules/medianetRtdProvider.md +++ b/dev-docs/modules/medianetRtdProvider.md @@ -12,7 +12,6 @@ sidebarType : 1 --- # Media.net Realtime Module - {:.no_toc} * TOC diff --git a/dev-docs/modules/mgidRtdProvider.md b/dev-docs/modules/mgidRtdProvider.md index 547de867f8..59516d6dcf 100644 --- a/dev-docs/modules/mgidRtdProvider.md +++ b/dev-docs/modules/mgidRtdProvider.md @@ -12,7 +12,6 @@ sidebarType : 1 --- # Mgid Realtime Module - {:.no_toc} * TOC diff --git a/dev-docs/modules/mobianRtdProvider.md b/dev-docs/modules/mobianRtdProvider.md new file mode 100644 index 0000000000..cd347430ea --- /dev/null +++ b/dev-docs/modules/mobianRtdProvider.md @@ -0,0 +1,15 @@ +--- +layout: page_v2 +title: Mobian Real-Time Data Provider +display_name: Mobian Prebid Contextual Evaluation +description: Mobian provides contextual evaluations of pages given a URL, which publishers can use for targeting as an alternative to keyword-based evaluation. +page_type: module +module_type: rtd +module_code : mobianRtdProvider +enable_download : true +vendor_specific: false +sidebarType : 1 +--- +# Mobian Contextual Module +Mobian leverages AI to provide contextual measurement, inclusive of brand safety and suitability, as well as complex signals like emotion, sentiment, tonality and more. +This real-time data module pings the Mobian Contextual API at pre-bid time so that advertisers can target and align with their choice of content across Mobian's network of partners. diff --git a/dev-docs/modules/multibid.md b/dev-docs/modules/multibid.md index 8a463451ef..ea22fe26f6 100644 --- a/dev-docs/modules/multibid.md +++ b/dev-docs/modules/multibid.md @@ -10,7 +10,6 @@ sidebarType : 1 --- # MultiBid Module - {:.no_toc} * TOC diff --git a/dev-docs/modules/neuwoRtdProvider.md b/dev-docs/modules/neuwoRtdProvider.md index 667f469371..3120f6b520 100644 --- a/dev-docs/modules/neuwoRtdProvider.md +++ b/dev-docs/modules/neuwoRtdProvider.md @@ -1,8 +1,8 @@ --- layout: page_v2 -title: Neuwo Real-Time Data Module -display_name: Neuwo Real-Time Data Module -description: Enrich bids using neuwo.ai +title: Neuwo RTD Module +display_name: Neuwo RTD Module +description: Enrich bids with contextual data from the Neuwo API. page_type: module module_type: rtd module_code : neuwoRtdProvider @@ -10,48 +10,112 @@ enable_download : true sidebarType : 1 --- -# Neuwo Real-Time Data Module +# Neuwo RTD Module ## Overview -The Neuwo AI RTD module is an advanced AI solution for real-time data processing in the field of contextual targeting and advertising. With its cutting-edge algorithms, it allows advertisers to target their audiences with the highest level of precision based on context, while also delivering a seamless user experience. +The Neuwo RTD provider fetches real-time contextual data from the Neuwo API. When installed, the module retrieves IAB content and audience categories relevant to the current page's content. -The module provides advertisers with valuable insights and real-time contextual bidding capabilities. Whether you're a seasoned advertising professional or just starting out, Neuwo AI RTD module is the ultimate tool for contextual targeting and advertising. +This data is then added to the bid request by populating the OpenRTB 2.x objects `ortb2.site.content.data` (for IAB Content Taxonomy) and `ortb2.user.data` (for IAB Audience Taxonomy). This enrichment allows bidders to leverage Neuwo's contextual analysis for more precise targeting and decision-making. -The benefit of Neuwo AI RTD module is that it provides an alternative solution for advertisers to target their audiences and deliver relevant advertisements, as the widespread use of cookies for tracking and targeting is becoming increasingly limited. +Here is an example scheme of the data injected into the `ortb2` object by our module: -The RTD module uses cutting-edge algorithms to process real-time data, allowing advertisers to target their audiences based on contextual information, such as segments, IAB Tiers and brand safety. The RTD module is designed to be flexible and scalable, making it an ideal solution for advertisers looking to stay ahead of the curve in the post-cookie era. +```javascript +ortb2: { + site: { + content: { + // IAB Content Taxonomy data is injected here + data: [{ + name: "www.neuwo.ai", + segment: [{ + id: "274", + name: "Home & Garden", + }, + { + id: "42", + name: "Books and Literature", + }, + { + id: "210", + name: "Food & Drink", + }, + ], + ext: { + segtax: 7, + }, + }, ], + }, + }, + user: { + // IAB Audience Taxonomy data is injected here + data: [{ + name: "www.neuwo.ai", + segment: [{ + id: "49", + name: "Demographic | Gender | Female |", + }, + { + id: "161", + name: "Demographic | Marital Status | Married |", + }, + { + id: "6", + name: "Demographic | Age Range | 30-34 |", + }, + ], + ext: { + segtax: 4, + }, + }, ], + }, +} +``` -Generate your token at: [neuwo.ai/generatetoken/] +To get started, you can generate your API token at [https://neuwo.ai/generatetoken/](https://neuwo.ai/generatetoken/) or [contact us here](https://neuwo.ai/contact-us/). ## Configuration -| Name | Scope | Description | Example | Type | -|------------|----------|----------------------------------------|---------------|----------| -| `name` | required | Handle of the module used in real-time data providers; for this, use 'NeuwoRTDModule' | 'NeuwoRTDModule' | static | -| `params.publicToken` | required | Your neuwo.ai public token | `neu23-te45-idkf-44aa` (format example) | `string` | -| `params.apiUrl` | required | Your neuwo.ai API url | `https://some-api-url.neuwo.ai/a/b/c` (format example) | `string` | +> **Important:** You must add the domain (origin) where Prebid.js is running to the list of allowed origins in Neuwo Edge API configuration. If you have problems, [contact us here](https://neuwo.ai/contact-us/). + +This module is configured as part of the `realTimeData.dataProviders` object. ```javascript -const neuwoDataProvider = { - name: 'NeuwoRTDModule', - params: { - publicToken: '', - apiUrl: '' - } -} -pbjs.setConfig({realTimeData: { dataProviders: [ neuwoDataProvider ]}}) +pbjs.setConfig({ + realTimeData: { + dataProviders: [{ + name: 'NeuwoRTDModule', + params: { + neuwoApiUrl: '', + neuwoApiToken: '', + iabContentTaxonomyVersion: '3.0', + } + }] + } +}); ``` +**Parameters** + +| Name | Type | Required | Default | Description | +| :--------------------------------- | :----- | :------- | :------ | :------------------------------------------------------------------------------------------------ | +| `name` | String | Yes | | The name of the module, which is `NeuwoRTDModule`. | +| `params` | Object | Yes | | Container for module-specific parameters. | +| `params.neuwoApiUrl` | String | Yes | | The endpoint URL for the Neuwo Edge API. | +| `params.neuwoApiToken` | String | Yes | | Your unique API token provided by Neuwo. | +| `params.iabContentTaxonomyVersion` | String | No | `'3.0'` | Specifies the version of the IAB Content Taxonomy to be used. Supported values: `'2.2'`, `'3.0'`. | + ## Installation ### Step 1: Install Prebid.js -- Option 1: Use Prebid [Download](/download.html) page to build the Prebid.js package - - Include Neuwo Real-Time Data Module +#### Option 1 + +Use Prebid [Download](https://docs.prebid.org/download.html) page to build the Prebid.js package and include Neuwo RTD Module + +#### Option 2 -- Option 2: Include `neuwoRtdProvider` in build: `gulp build --modules=rtdModule,neuwoRtdProvider,...` +Include `neuwoRtdProvider` in build: `gulp build --modules=rtdModule,neuwoRtdProvider,...` ### Step 2: Set configuration -Enable Neuwo Real-Time Data Module using `pbjs.setConfig` in a related Javascript context. Command example is provided in Configuration section. +Enable Neuwo Real-Time Data Module using `pbjs.setConfig` in a related Javascript context. Command example is provided in [Configuration](#configuration) section. diff --git a/dev-docs/modules/nodalsAiRtdProvider.md b/dev-docs/modules/nodalsAiRtdProvider.md new file mode 100644 index 0000000000..28c12ea3ba --- /dev/null +++ b/dev-docs/modules/nodalsAiRtdProvider.md @@ -0,0 +1,66 @@ +--- +layout: page_v2 +title: Nodals AI Real-Time Data Module +display_name: Nodals AI Real-Time Data Module +description: Nodals AI Real-Time Data Module provides a mechanism to utilise and optimise first-party signals for targeting. +page_type: module +module_type: rtd +module_code : nodalsAiRtdProvider +enable_download : true +vendor_specific: true +sidebarType : 1 +--- + +# Nodals AI Real-Time Data Module + +## Overview +Nodals AI provides a real-time data prebid module that will analyse first-party signals present on page load, determine the value of them to Nodals’ advertisers and add a key-value to the ad server call to indicate that value. The Nodals AI RTD module loads external code as part of this process. + +In order to be able to utilise this module, please contact [info@nodals.ai](mailto:info@nodals.ai) for account setup and detailed GAM setup instructions. + +## Build + +First, ensure that you include the generic Prebid RTD Module _and_ the Nodals AI RTD module into your Prebid build: + +```bash +gulp build --modules=rtdModule,nodalsAiRtdProvider +``` + +## Configuration + +Update your Prebid configuration to enable the Nodals AI RTD module, as illustrated in the example below: + +```javascript +pbjs.setConfig({ + ..., + realTimeData: { + auctionDelay: 100, // optional auction delay + dataProviders: [{ + name: 'nodalsAi', + waitForIt: true, // should be true only if there's an `auctionDelay` + params: { + propertyId: 'c10516af' // obtain your property id from Nodals AI support + } + }] + }, + ... +}) +``` + +Configuration parameters: + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|--------------------------|----------|-----------------------------------------------|-------------|----------| +| `name` | required | Real time data module name: Always `'nodalsAi'` | `'nodalsAi'` | `String` | +| `waitForIt` | optional | Set to `true` if there's an `auctionDelay` defined (defaults to `false`) | `false` | `Boolean` | +| `params` | required | Submodule configuration parameters | `{}` | `Object` | +| `params.propertyId` | required | Publisher specific identifier, provided by Nodals AI | `'76346cf3'` | `String` | +| `params.storage` | optional | Optional storage configiration | `{}` | `Object` | +| `params.storage.key` | optional | Storage key used to store Nodals AI data in local storage | `'yourKey'` | `String` | +| `params.storage.ttl` | optional | Time in seconds to retain Nodals AI data in storage until a refresh is required | `900` | `Integer` | +| `params.ptr` | optional | Optional partner configiration | `{}` | `Object` | +| `params.ptr.permutive` | optional | Optional configiration for Permutive Audience Platform | `{}` | `Object` | +| `params.ptr.permutive.cohorts` | optional | A method for the publisher to explicitly supply Permutive Cohort IDs, disabling automatic fetching by this RTD module | `['66711', '39032', '311']` | `Array` | +| `params.ptr.permutive.storageKey` | optional | Publisher specific Permutive storage key where cohort data is held. | `'_psegs'` | `String` | diff --git a/dev-docs/modules/oftmediaRtdProvider.md b/dev-docs/modules/oftmediaRtdProvider.md new file mode 100644 index 0000000000..ababdb4866 --- /dev/null +++ b/dev-docs/modules/oftmediaRtdProvider.md @@ -0,0 +1,86 @@ +--- +layout: page_v2 +title: 152media RTD Module +display_name: 152media +description: Real-time data enrichment from 152media +page_type: module +module_type: rtd +module_code : oftmediaRtdProvider +enable_download : true +sidebarType : 1 +--- + +# 152media (Oftmedia) Real-time Data Submodule + +{:.no_toc} + +* TOC +{:toc} + +## Overview + +The 152media Real-time Data (RTD) module enhances programmatic advertising performance by providing contextual and audience-based data at runtime. Integrated into Prebid.js, it enables publishers to: + +* Improve bid relevance with enriched targeting data +* Filter unqualified or low-value bid requests +* Leverage AI-based deal optimization + +This module is maintained by [152media](mailto:hello@152media.com) and requires the global `rtdModule` to function. + +{% include dev-docs/loads-external-javascript.md %} + +## Usage + +### Build + +To include the 152media RTD module in your Prebid.js build: + +```bash +gulp build --modules="rtdModule,oftmediaRtdProvider" +```` + +> **Note:** `rtdModule` is required as a dependency. + +## Configuration + +Use `pbjs.setConfig` to initialize the 152media RTD module with the following syntax: + +```javascript +pbjs.setConfig({ + realTimeData: { + auctionDelay: 500, // Recommended setting + dataProviders: [ + { + name: "oftmedia", + waitForIt: true, // Ensures data is available before auction starts + params: { + publisherId: "0653b3fc-a645-4bcc-bfee-b8982974dd53", // Required: Get this ID from 152media + keywords: ["red", "blue", "white"], // Optional: Contextual keywords + bidderCode: "appnexus", // Required: Targeted bidder + enrichRequest: true // Optional: Adds additional targeting fields + } + } + ] + } +}); +``` + +## Parameters + +| Parameter | Type | Description | Default | +| ---------------------- | ---------------- | ------------------------------------------------------------ | ------------ | +| `name` | String | Always `"oftmedia"` | | +| `waitForIt` | Boolean | Ensures auction is delayed until data is ready | `false` | +| `params.publisherId` | String | Your unique Publisher ID provided by 152media | **Required** | +| `params.keywords` | Array of Strings | Contextual keywords for enhancing relevance | `[]` | +| `params.bidderCode` | String | Bidder code that should receive the enriched data | **Required** | +| `params.enrichRequest` | Boolean | Enriches the request object with extra targeting information | `false` | +| `params.timeout` | Integer (ms) | Timeout for data retrieval (optional) | `1000` | + +## Output + +When active, the module appends targeting and/or deal data into the ad unit targeting objects and/or modifies the request payload, depending on the configuration and support by the selected bidder. + +## Support + +For questions, help, or to obtain a publisher ID, please contact [hello@152media.com](mailto:hello@152media.com). diff --git a/dev-docs/modules/oneKeyRtdProvider.md b/dev-docs/modules/oneKeyRtdProvider.md index 6ab216354a..650c5dfb7d 100644 --- a/dev-docs/modules/oneKeyRtdProvider.md +++ b/dev-docs/modules/oneKeyRtdProvider.md @@ -12,7 +12,6 @@ sidebarType : 1 --- # OneKey Data Provider - {:.no_toc} * TOC diff --git a/dev-docs/modules/optableRtdProvider.md b/dev-docs/modules/optableRtdProvider.md new file mode 100644 index 0000000000..79c42fb4ba --- /dev/null +++ b/dev-docs/modules/optableRtdProvider.md @@ -0,0 +1,156 @@ +--- +layout: page_v2 +title: Optable RTD Provider Module +display_name: Optable RTD Module +description: Optable Real Time Data Module +page_type: module +module_type: rtd +module_code : optableRtdProvider +enable_download : true +vendor_specific: true +sidebarType : 1 +--- + +{: .alert.alert-warning :} +This module may load a publisher-specific JavaScript bundle. The external resource provides flexibility in ID handling without the need to modify the RTD submodule source code. + +# Optable RTD Submodule +{:.no_toc} + +* TOC +{:toc} + +## Description + +Optable RTD submodule enriches the OpenRTB request by populating `user.ext.eids` and `user.data` using an identity graph and audience segmentation service hosted by Optable on behalf of the publisher. This RTD submodule primarily relies on the Optable bundle loaded on the page, which leverages the Optable-specific Visitor ID and other PPIDs to interact with the identity graph, enriching the bid request with additional user IDs and audience data. + +## Usage + +### Integration + +Compile the Optable RTD Module with other modules and adapters into your Prebid.js build: + +```bash +gulp build --modules="rtdModule,optableRtdProvider,appnexusBidAdapter,..." +``` + +> Note that Optable RTD module is dependent on the global real-time data module, `rtdModule`. + +### Preloading Optable SDK bundle + +In order to use the module you first need to register with Optable and obtain a bundle URL. The bundle URL may be specified as a `bundleUrl` parameter to the script, or otherwise it can be added directly to the page source as: + +```html + +``` + +In this case bundleUrl parameter is not needed and the script will await bundle loading before delegating to it. + +### Configuration + +This module is configured as part of the `realTimeData.dataProviders`. We recommend setting `auctionDelay` to 1000 ms and make sure `waitForIt` is set to `true` for the `Optable` RTD provider. + +```javascript +pbjs.setConfig({ + debug: true, // we recommend turning this on for testing as it adds more logging + realTimeData: { + auctionDelay: 1000, + dataProviders: [ + { + name: 'optable', + waitForIt: true, // should be true, otherwise the auctionDelay will be ignored + params: { + bundleUrl: '', + adserverTargeting: '', + }, + }, + ], + }, +}); +``` + +### Additional input to the module + +Optable bundle may use PPIDs (publisher provided IDs) from the `user.ext.eids` as input. +In addition, other arbitrary keys can be used as input, f.e. the following: + +* `optableRtdConfig.email` - a SHA256-hashed user email +* `optableRtdConfig.phone` - a SHA256-hashed [E.164 normalized phone](https://unifiedid.com/docs/getting-started/gs-normalization-encoding#phone-number-normalization) (meaning a phone number consisting of digits and leading plus sign without spaces or any additional characters, f.e. a US number would be: `+12345678999`) +* `optableRtdConfig.postal_code` - a ZIP postal code string + +Each of these identifiers is completely optional and can be provided through `pbjs.mergeConfig(...)` like so: + +```javascript +pbjs.mergeConfig({ + optableRtdConfig: { + email: await sha256("test@example.com"), + phone: await sha256("12345678999"), + postal_code: "61054" + } +}) +``` + +Where `sha256` function can be defined as: + +```javascript +async function sha256(input) { + return [...new Uint8Array( + await crypto.subtle.digest("SHA-256", new TextEncoder().encode(input)) + )].map(b => b.toString(16).padStart(2, "0")).join(""); +} +``` + +To handle PPIDs and the above input - a custom `handleRtd` function may need to be provided. + +### Parameters + +{: .table .table-bordered .table-striped } + +| Name | Type | Description | Default | Notes | +|--------------------------|----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------|----------| +| name | String | Real time data module name | Always `optable` | | +| waitForIt | Boolean | Should be set `true` together with `auctionDelay: 1000` | `false` | | +| params | Object | | | | +| params.bundleUrl | String | Optable bundle URL | `null` | Optional | +| params.adserverTargeting | Boolean | If set to `true`, targeting keywords will be passed to the ad server upon auction completion | `true` | Optional | +| params.handleRtd | Function | An optional function that uses Optable data to enrich `reqBidsConfigObj` with the real-time data. If not provided, the module will do a default call to Optable bundle. The function signature is `[async] (reqBidsConfigObj, optableExtraData, mergeFn) => {}` | `null` | Optional | + +## Publisher Customized RTD Handler Function + +When there is more pre-processing or post-processing needed prior/post calling Optable bundle - a custom `handleRtd` +function can be supplied to do that. +This function will also be responsible for the `reqBidsConfigObj` enrichment. +It will also receive the `optableExtraData` object, which can contain the extra data required for the enrichment and +shouldn't be shared with other RTD providers/bidders. +`mergeFn` parameter taken by `handleRtd` is a standard Prebid.js utility function that take an object to be enriched and +an object to enrich with: the second object's fields will be merged into the first one (also see the code of an example +mentioned below): + +```javascript +mergeFn( + reqBidsConfigObj.ortb2Fragments.global, // or other nested object as needed + rtdData, +); +``` + +A `handleRtd` function implementation has access to its surrounding context including capturing a `pbjs` object, calling `pbjs.getConfig()` and f.e. reading off the `consentManagement` config to make the appropriate decision based on it. + +## Example + +If you want to see an example of how the optable RTD module works, run the following command: + +```bash +gulp serve --modules=optableRtdProvider,consentManagementGpp,consentManagementTcf,appnexusBidAdapter +``` + +and then open the following URL in your browser: + +[`http://localhost:9999/integrationExamples/gpt/optableRtdProvider_example.html`](http://localhost:9999/integrationExamples/gpt/optableRtdProvider_example.html) + +Open the browser console to see the logs. + +## Maintainer contacts + +Any suggestions or questions can be directed to [prebid@optable.co](mailto:prebid@optable.co). + +Alternatively please open a new [issue](https://github.com/prebid/prebid-server-java/issues/new) or [pull request](https://github.com/prebid/prebid-server-java/pulls) in this repository. diff --git a/dev-docs/modules/overtoneRtdProvider.md b/dev-docs/modules/overtoneRtdProvider.md new file mode 100644 index 0000000000..a13f5cd232 --- /dev/null +++ b/dev-docs/modules/overtoneRtdProvider.md @@ -0,0 +1,81 @@ +# Overtone Real-time Data Submodule + +## Overview + + Module Name: Overtone Rtd Provider + Module Type: Rtd Provider + Maintainer: tech@overtone.ai + +## Description + +The Overtone RTD module appends Contextual segments to the bidding object based on the Overtone taxonomy and custom metrics added by the publisher. Please contact in order to be whitelisted for use of our API and to explore dozens of contextual signals. + +## Usage +To install and enable the Overtone RTD module, follow these steps: + +### Step 1: Prepare the base Prebid file + +* **Option 1**: Use Prebid [Download](https://docs.prebid.org/download.html) page to build the Prebid package. Ensure that you check the **Overtone Real-Time Data Module** checkbox. +* **Option 2**: From the command line, run `gulp build --modules=overtoneRtdProvider,...`. + +### Step 2: Configure the module + +### Configuration + +Use `setConfig` to instruct Prebid.js to initilize the Overtone RTD module, as specified below. + +This module is configured as part of the `realTimeData.dataProviders` + +javascript +pbjs.setConfig({ + realTimeData: { + dataProviders: [{ + name: 'overtone', + params: { + apiKey: 'YOUR_API_KEY', + domains: ['example.com'], + timeout: 500 + } + }] + } +}); + +| Name | Type | Description | Default | +| :------------------------ | :------------ | :--------------------------------------------------------------- |:----------------- | +| name | String | Real time data module name | Always 'overtone' | +| params | Object | | | +| params.apiKey | String | Your unique API key provided by Overtone | YOUR_API_KEY | +| params.domains | Array | Array of whitelisted domains for contextual analysis | | +| params.timeout | Integer | timeout (ms) | 500ms | + +## Validation and Testing + +Validation of the Overtone RTD module is essential to ensure proper configuration. Use the provided test suite in the Prebid.js repository: + +File: `test/spec/modules/overtoneRtdProvider_spec.mjs` + +### Test Scenarios + +#### Successful Response + +**Input**: Valid domain with contextual data. + +**Expected Output**: Populated `categories` array with status `1`. + +#### Failed Request + +**Input**: Invalid domain or missing API key. + +**Expected Output**: Empty `categories` array with status `3`. + +#### Ignored URL + +**Input**: Domain not whitelisted by Overtone. + +**Expected Output**: Empty `categories` array with status `4`. + +--- + +## Support and Contact + +For questions, issues, or support, contact the Overtone technical team at . diff --git a/dev-docs/modules/paapi.md b/dev-docs/modules/paapi.md index 8a47f9402e..e158687e78 100644 --- a/dev-docs/modules/paapi.md +++ b/dev-docs/modules/paapi.md @@ -16,7 +16,7 @@ This module allows Prebid.js to support PAAPI, formerly known as [FLEDGE](https: This document covers the steps necessary for publishers to enable PAAPI on their inventory. It also describes the changes Bid Adapters need to implement in order to support PAAPI. -A related module, [fledgeForGpt](/dev-docs/modules/fledgeForGpt.html), adds support specifically for GPT's [component auctions](https://developers.google.com/publisher-tag/reference#googletag.config.componentauctionconfig). +A related module, [paapiForGpt](/dev-docs/modules/paapiForGpt.html), adds support specifically for GPT's [component auctions](https://developers.google.com/publisher-tag/reference#googletag.config.componentauctionconfig). ## Publisher Integration @@ -29,7 +29,7 @@ To use PAAPI, publishers must: ``` - enable PAAPI, globally or by ad unit, through [configuration](#config) -- manage the PAAPI auctions. This can be delegated to GPT with the [fledgeForGpt module](/dev-docs/modules/fledgeForGpt.html); homegrown solutions are possible with [getPAAPIConfig](/dev-docs/publisher-api-reference/getPAAPIConfig.html), but out of scope for this document. +- manage the PAAPI auctions. This can be delegated to GPT with the [paapiForGpt module](/dev-docs/modules/paapiForGpt.html); homegrown solutions are possible with [topLevelPaapi](/dev-docs/modules/topLevelPaapi.html). @@ -43,6 +43,8 @@ This module exposes the following settings: |enabled | Boolean |Enable/disable the module |Defaults to `false` | |bidders | Array[String] |Optional list of bidders |Defaults to all bidders | |defaultForSlots | Number |Default value for `imp.ext.ae` in requests for specified bidders |Should be 1 | +|componentSeller | Object |Configuration for publishers acting as component sellers | See [note](#componentSeller) | +|parallel | Boolean | If true, start PAAPI auctions in parallel with Prebid auctions when possible | See [parallel auctions](#parallel) | As noted above, PAAPI support is disabled by default. To enable it, set the `enabled` value to `true` for this module and configure `defaultForSlots` to be `1` (meaning _Client-side auction_). using the `setConfig` method of Prebid.js: @@ -72,30 +74,6 @@ pbjs.que.push(function() { }); ``` -### Bidder Configuration - -This module adds the following setting for bidders: - -{: .table .table-bordered .table-striped } -|Name |Type |Description |Notes | -| ------------ | ------------ | ------------ |------------ | -| fledgeEnabled | Boolean | Enable/disable a bidder to participate in FLEDGE | Defaults to `false` | -|defaultForSlots | Number |Default value for `imp.ext.ae` in requests for specified bidders |Should be 1| - -In addition to enabling PAAPI at the module level, individual bidders can also be enabled. This allows publishers to -selectively test with one or more bidders as they desire. To enable one or more bidders, use the `setBidderConfig` method -of Prebid.js: - -```js -pbjs.setBidderConfig({ - bidders: ["bidderA"], - config: { - fledgeEnabled: true, - defaultForSlots: 1 - } -}); -``` - ### AdUnit Configuration All adunits can be opted-in to PAAPI in the global config via the `defaultForSlots` parameter. @@ -124,6 +102,18 @@ pbjs.addAdUnits({ }); ``` + +### Advanced usage: publisher-managed component auction + +Bid adapters typically act as PAAPI sellers, each providing one or more [component auctions](https://github.com/WICG/turtledove/blob/main/FLEDGE.md#24-scoring-bids-in-component-auctions) in a multi-seller PAAPI auction. +Some adapters may act as PAAPI buyers: instead of a full component auction, they can reply directly with buyer information. By configuring `componentSeller`, these buyers are collected into one or more publisher-managed component auctions. + +{: .table .table-bordered .table-striped } +|Name |Type |Description | +| ------------ | ------------ | ------------ | +|componentSeller.auctionConfig | Object | [AuctionConfig](https://github.com/WICG/turtledove/blob/main/FLEDGE.md#21-initiating-an-on-device-auction) object to use for the component auction(s) | +|componentSeller.separateAuctions | Boolean | If `true`, generate a component auction for each bid adapter. If `false` (the default), buyers are collected into as few component auctions as possible (typically one, but multiple are possible if multiple bidders reply with the same buyer) | + ## Bid Adapter Integration Chrome has enabled a two-tier auction in PAAPI. This allows multiple sellers (frequently SSPs) to act on behalf of the publisher with @@ -134,49 +124,161 @@ bids to the final layer. To learn more about Component Auctions, go [here](https The PAAPI auction, including Component Auctions, are configured via an `AuctionConfig` object that defines the parameters of the auction for a given seller. This module enables PAAPI support by allowing bid adaptors to return `AuctionConfig` objects in addition to bids. If a bid adaptor returns an -`AuctionConfig` object, Prebid.js will make it available through [`getPAAPIConfig`](/dev-docs/publisher-api-reference/getPAAPIConfig.html), as well as other PAAPI modules such as [fledgeForGpt](/dev-docs/modules/fledgeForGpt.html). +`AuctionConfig` object, Prebid.js will make it available through [`getPAAPIConfig`](/dev-docs/publisher-api-reference/getPAAPIConfig.html), as well as other PAAPI modules such as [paapiForGpt](/dev-docs/modules/paapiForGpt.html). + +{: .alert.alert-warning :} +If your adapter interfaces with an ORTB backend, you may take advantage of Prebid's [ORTB conversion library](https://github.com/prebid/Prebid.js/blob/master/libraries/ortbConverter/README.md), which implements the following using [protected audience community extensions](https://github.com/InteractiveAdvertisingBureau/openrtb/blob/main/extensions/community_extensions/Protected%20Audience%20Support.md) Modifying a bid adapter to support PAAPI is a straightforward process and consists of the following steps: 1. Detecting when a bid request is PAAPI eligible -2. Responding with AuctionConfig +2. Responding with AuctionConfig or InterestGroupBuyer in addition to (or instead of) bids +3. (Optional, but recommended) implementing a `buildPAAPIConfigs` method to support [parallel auctions](#parallel) -PAAPI eligibility is made available to bid adapters' [`buildRequests`](/dev-docs/bidder-adaptor.html#building-the-request) method through the `ortb2Imp.ext.ae` property of bid requests; it is set to `1` when the browser supports PAAPI and publisher configuration has enabled it as described above. Bid adapters -who wish to participate should read this flag and pass it to their server. +### Input parameters -When a bid request is PAAPI enabled, a bid adapter can return a tuple consisting of bids and AuctionConfig objects rather than just a list of bids: + +When PAAPI is configured, the following fields are made available to adapters' [`buildRequests`](/dev-docs/bidder-adaptor.html#building-the-request): + +{: .table .table-bordered .table-striped } +|Name |Type |Description |Notes | +| ------------ | ------------ | ------------ | +| `validBidRequests[].ortb2Imp.ext.ae` | Integer | `1` when the PAAPI is enabled for the request | +| `validBidRequests[].ortb2Imp.ext.igs` | Object | [InterestGroupSupport](https://github.com/InteractiveAdvertisingBureau/openrtb/blob/main/extensions/community_extensions/Protected%20Audience%20Support.md#object-interestgroupauctionsupport) object| +| `validBidRequests[].ortb2Imp.ext.igs.ae` | Integer | duplicate of `ortb2Imp.ext.ae` | +| `validBidRequests[].ortb2Imp.ext.igs.biddable` | Integer | `1` when `ae` is `1` | +| `validBidRequests[].ortb2Imp.ext.paapi.requestedSize` | Object | Size (as an object `{width, height}`) that will be passed as `requestedSize` to [`runAdAuction`](https://github.com/WICG/turtledove/blob/main/FLEDGE.md#21-initiating-an-on-device-auction) | +| `bidderRequest.paapi.enabled` | Boolean | `true` if the publisher has enabled PAAPI and the browser supports it | +| `bidderRequest.paapi.componentSeller` | Boolean | `true` if the publisher can act as a component seller and accept `igb` objects instead of auction configs | + +### Output values + +When a bid request is PAAPI enabled, a bid adapter can return a tuple consisting of bids and PAAPI objects rather than just a list of bids: ```js function interpretResponse(resp, req) { // Load the bids from the response - this is adapter specific const bids = parseBids(resp); - // Load the auctionConfigs from the response - also adapter specific - const fledgeAuctionConfigs = parseAuctionConfigs(resp); - - if (fledgeAuctionConfigs) { - // Return a tuple of bids and auctionConfigs. It is possible that bids could be null. - return {bids, fledgeAuctionConfigs}; - } else { - return bids; - } + // Load auction configs or igb from the response - also adapter specific + const paapi = parsePaapi(resp); + return {bids, paapi}; } ``` -An AuctionConfig must be associated with an adunit and auction, and this is accomplished using the value in the `bidId` field from the objects in the -`validBidRequests` array passed to the `buildRequests` function - see [here](/dev-docs/bidder-adaptor.html#ad-unit-params-in-the-validbidrequests-array) -for more details. This means that the AuctionConfig objects returned from `interpretResponse` must contain a `bidId` field whose value corresponds to -the request it should be associated with. This may raise the question: why isn't the AuctionConfig object returned as part of the bid? The -answer is that it's possible to participate in the PAAPI auction without returning a contextual bid. + +`paapi` must be an array of objects containing: + +{: .table .table-bordered .table-striped } +|Name |Type |Description |Notes | +| ------------ | ------------ | ------------ | +| `bidId` | String | one of the input requests' `bidId`. Used to identify the slot that this object refers to. | +| `igb` | Object | [InterestGroupBuyer](https://github.com/InteractiveAdvertisingBureau/openrtb/blob/main/extensions/community_extensions/Protected%20Audience%20Support.md#object-interestgroupauctionsupport) object| +| `config` | Object | [AuctionConfig](https://github.com/WICG/turtledove/blob/main/FLEDGE.md#21-initiating-an-on-device-auction) object | -An example of this can be seen in the OpenX bid adapter [here](https://github.com/prebid/Prebid.js/blob/master/modules/openxBidAdapter.js) or RTB House bid adapter [here](https://github.com/prebid/Prebid.js/blob/master/modules/rtbhouseBidAdapter.js). +Each object must specify exactly one of `igb` or `config`. -Other than the addition of the `bidId` field, the `AuctionConfig` object should adhere to the requirements set forth in PAAPI. The details of creating an -`AuctionConfig` object are beyond the scope of this document. +An example of this can be seen in the OpenX bid adapter [here](https://github.com/prebid/Prebid.js/blob/master/modules/openxBidAdapter.js). + + +## Parallel auctions + +PAAPI auctions can be started in parallel with Prebid auctions for a significant improvement in end-to-end latency, +as long as the adapters involved provide at least part of the auction config(s) in advance, before any request is sent to their backend. + +To support parallel execution, adapters can provide a `buildPAAPIConfigs` method, taking [the same arguments as buildRequests](#paapi-input) and returning an array of PAAPI configuration objects in the same format as `interpretResponse`'s [`paapi` parameter](#paapi-output). + +```javascript +registerBidder({ + // ... + buildPAAPIConfigs(validBidRequests, bidderRequest) { + // should return an array of {bidId, config, igb} + } +}) +``` + +When provided, `buildPAAPIConfigs` is invoked just before `buildRequests`, and the configuration it returns is eligible to be immediately used to start PAAPI auctions (whether it will depends on the `parallel` config flag and the top level seller's support for it). + +When _not_ provided, the adapter cannot participate in parallel auctions, and PAAPI configuration returned by `interpretResponse` are liable to be discarded when parallel auctions are enabled. For this reason we recommend implementing `buildPAAPIConfigs`. + +[Some signals](https://github.com/WICG/turtledove/blob/main/FLEDGE.md#211-providing-signals-asynchronously) can be provided asynchronously; Prebid supports this by merging them from the return value of `interpretResponse`, using `bidId` as key. +Notably, however, at least `seller`, `interestGroupBuyers`, and `decisionLogicUrl` must be provided synchronously (i.e., they must be hard-coded). + +For example: + +```javascript +// suppose that `buildPAAPIConfigs` returns the following: +([ + { + bidId: 'bid1', + config: { + seller: 'example.seller', + decisionLogicUrl: 'example.seller/logic.js', + interestGroupBuyers: ['example.buyer'], + auctionSignals: { + foo: 'bar' + }, + perBuyerTimeouts: { + 'example.buyer': 200 + } + } + }, +]) + +// and `interpretResponse` later returns: +({ + paapi: [ + { + bidId: 'bid1', // matches the bidId from `buildPAAPIConfigs` + config: { + // `perBuyerCurrencies` must be provided synchronously; + // this will be ignored + perBuyerCurrencies: { + 'example.buyer': 'USD' + }, + // `auctionSignals` and `sellerSignals` can be provided asynchronously + // and will be merged with those returned by `buildPAAPIConfigs` + auctionSignals: { + bar: 'baz' + }, + sellerSignals: { + foo: 'bar' + } + } + }, + { + bidId: 'bid2', // does not match. + // `config` will be used as-is, but only if no auction was already + // started in parallel for this slot; it will be discarded otherwise. + config: { + /* ... */ + } + } + ] +}) + +// the result as seen in the sandboxed auction for `bid1` will then be: + +({ + seller: 'example.seller', + decisionLogicUrl: 'example.seller/logic.js', + interestGroupBuyers: ['example.buyer'], + auctionSignals: { + foo: 'bar', + bar: 'baz' + }, + perBuyerTimeouts: { + 'example.buyer': 200 + }, + sellerSignals: { + foo: 'bar' + } +}) +``` ## Related Reading -- [fledgeForGpt module](/dev-docs/modules/fledgeForGpt.html) +- [paapiForGpt module](/dev-docs/modules/paapiForGpt.html) - [Protected Audience API (PAAPI)](https://github.com/WICG/turtledove/blob/main/FLEDGE.md), formerly FLEDGE - [Component Auctions](https://github.com/WICG/turtledove/blob/main/FLEDGE.md#21-initiating-an-on-device-auction) - [getPAAPIConfig](/dev-docs/publisher-api-reference/getPAAPIConfig.html) diff --git a/dev-docs/modules/fledgeForGpt.md b/dev-docs/modules/paapiForGpt.md similarity index 58% rename from dev-docs/modules/fledgeForGpt.md rename to dev-docs/modules/paapiForGpt.md index 5f64dfa5a5..82f0959b2f 100644 --- a/dev-docs/modules/fledgeForGpt.md +++ b/dev-docs/modules/paapiForGpt.md @@ -1,9 +1,9 @@ --- layout: page_v2 page_type: module -title: Module - fledgeForGpt +title: Module - paapiForGpt description: how to use PAAPI with GPT -module_code : fledgeForGpt +module_code : paapiForGpt display_name : Fledge (PAAPI) for GPT enable_download : true sidebarType : 1 @@ -24,41 +24,42 @@ To use PAAPI with GPT: - include this module with your Prebid.js bundle; this also automatically includes the [PAAPI module](/dev-docs/modules/paapi.html) ```bash - gulp build --modules=fledgeForGpt,... + gulp build --modules=paapiForGpt,... ``` - [configure PAAPI](/dev-docs/modules/paapi.html#config) - (optional) invoke [setPAAPIConfigForGPT](/dev-docs/publisher-api-reference/setPAAPIConfigForGPT.html) at end of auction. -By default, Prebid.js attempts to configure GPT slots for PAAPI at the end of each auction. This requires GPT to be loaded before the first Prebid auction is started; to avoid this requirement, or for more control in general over GPT slot configuration, you can use [`setPAAPIConfigForGPT`](/dev-docs/publisher-api-reference/setPAAPIConfigForGPT.html). - ## Explicit configuration -First, disable automatic configuration of GPT slots: +By default, Prebid.js attempts to configure GPT slots for PAAPI together with their targeting (that is, when [setTargetingForGPTAsync](/dev-docs/publisher-api-reference/setTargetingForGPTAsync.html) is called). + +For more control how GPT slots are configured, you can set `configWithTargeting: false` and explicitly call [setPAAPIConfigForGPT](/dev-docs/publisher-api-reference/setPAAPIConfigForGPT.html). For example: ```js pbjs.setConfig({ paapi: { + enabled: true, + defaultForSlots: 1, gpt: { - autoconfig: false + configWithTargeting: false } } }) -``` - -You may then use `setPAAPIConfigForGPT`, typically from a `bidsBackHandler`: - -```js pbjs.requestBids({ // ... - bidsBackHandler: function(bids, timedOut, auctionId) { - pbjs.setPAAPIConfigForGPT(); - // ... + bidsBackHandler: function(bids, timedOut, auctionId) { + pbjs.setPAAPIConfigForGPT(); + // ... } }) ``` -See the [API reference](/dev-docs/publisher-api-reference/setPAAPIConfigForGpt.html) for more options. +## Refreshing Ads + +It's important to invoke the `pbjs.setPAAPIConfigForGPT()` function within the `bidsBackHandler` whenever new bids are requested, such as when refreshing ad slots. This ensures that the auctionConfig is manually applied to a GPT slot when autoconfig is disabled. Without this manual configuration, GPT slots will not be properly set up to handle new bids, potentially resulting in duplicate impression calls. + +See the [API reference](/dev-docs/publisher-api-reference/setPAAPIConfigForGPT.html) for more options. ## Related Reading diff --git a/dev-docs/modules/permutiveRtdProvider.md b/dev-docs/modules/permutiveRtdProvider.md index b09e2f0dba..10c3836212 100644 --- a/dev-docs/modules/permutiveRtdProvider.md +++ b/dev-docs/modules/permutiveRtdProvider.md @@ -12,7 +12,6 @@ sidebarType : 1 --- # Permutive RTD Provider - {:.no_toc} * TOC @@ -61,6 +60,7 @@ as well as enabling settings for specific use cases mentioned above (e.g. acbidd ## Parameters {: .table .table-bordered .table-striped } + | Name | Type | Description | Default | | ---------------------- | -------------------- | --------------------------------------------------------------------------------------------- | ------------------ | | name | String | This should always be `permutive` | - | @@ -71,14 +71,17 @@ as well as enabling settings for specific use cases mentioned above (e.g. acbidd ### Context -Permutive is not listed as a TCF vendor as all data collection is on behalf of the publisher and based on consent the publisher has received from the user. -Rather than through the TCF framework, this consent is provided to Permutive when the user gives the relevant permissions on the publisher website which allow the Permutive SDK to run. -This means that if GDPR enforcement is configured _and_ the user consent isn’t given for Permutive to fire, no cohorts will populate. -As Prebid utilizes TCF vendor consent, for the Permutive RTD module to load, Permutive needs to be labeled within the Vendor Exceptions +While Permutive is listed as a TCF vendor (ID: 361), Permutive does not obtain consent directly from the TCF. As we act as a processor on behalf of our publishers consent is given to the Permutive SDK by the publisher, not by the [GDPR Consent Management Module](/dev-docs/modules/consentManagement.html). + +This means that if GDPR enforcement is configured within the Permutive SDK _and_ the user consent isn’t given for Permutive to fire, no cohorts will populate. + +If you are also using the [TCF Control Module](/dev-docs/modules/tcfControl.html), in order to prevent Permutive from being blocked, it needs to be labeled within the Vendor Exceptions. ### Instructions -1. Publisher enables rules within Prebid GDPR module +{% include dev-docs/vendor-exception.md gvlId="361" %} + +1. Publisher enables rules within Prebid.js configuration. 2. Label Permutive as an exception, as shown below. ```javascript diff --git a/dev-docs/modules/prebidServer.md b/dev-docs/modules/prebidServer.md index 22bb4c6737..627a94a890 100644 --- a/dev-docs/modules/prebidServer.md +++ b/dev-docs/modules/prebidServer.md @@ -56,20 +56,20 @@ The same bidder cannot be set in both configs. For example: ```javascript pbjs.setConfig({ s2sConfig: [ - { - name: "pbs-appnexus", - accountId: '12345', - bidders: ['appnexus','pubmatic'], - defaultVendor: 'appnexus', - timeout: 300, - }, - { - name: "pbs-rubicon", - accountId: '678910', - bidders: ['rubicon'], - defaultVendor: 'rubicon', - timeout: 300, - }, + { + name: "pbs-appnexus", + accountId: '12345', + bidders: ['appnexus','pubmatic'], + defaultVendor: 'appnexus', + timeout: 300, + }, + { + name: "pbs-rubicon", + accountId: '678910', + bidders: ['rubicon'], + defaultVendor: 'rubicon', + timeout: 300, + }, ], }); ``` @@ -85,7 +85,7 @@ There are many configuration options for s2sConfig: | `allowUnknownBidderCodes` | Optional | Boolean | Allow Prebid Server to bid on behalf of bidders that are not explicitly listed in the adUnit. See important [note](#allowUnknownBidderCodes) below. Defaults to `false`. | | `defaultVendor` | Optional | String | Automatically includes all following options in the config with vendor's default values. Individual properties can be overridden by including them in the config along with this setting. See the Additional Notes below for more information. | | `enabled` | Optional | Boolean | Enables this s2sConfig block - defaults to `false` | -| `timeout` | Optional | Integer | Number of milliseconds allowed for the server-side auctions. This should be approximately 200ms-300ms less than your Prebid.js timeout to allow for all bids to be returned in a timely manner. Defaults to 1000ms. | +| `timeout` | Optional | Integer | Number of milliseconds allowed for the server-side auctions. This should be approximately 200ms-300ms less than your Prebid.js timeout to allow for all bids to be returned in a timely manner. Defaults to 75% of [`bidderTimeout`](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Bidder-Timeouts) or 750ms, whichever is lesser. | | `adapter` | Required | String | Adapter to use to connect to Prebid Server. Defaults to 'prebidServer' | | `endpoint` | Required | URL or Object | Defines the auction endpoint for the Prebid Server cluster. See table below for object config properties. | | `syncEndpoint` | Required | URL or Object | Defines the cookie_sync endpoint for the Prebid Server cluster. See table below for object config properties. | @@ -96,6 +96,9 @@ There are many configuration options for s2sConfig: | `defaultTtl` | Optional | Integer | Configures the default TTL in the Prebid Server adapter to use when Prebid Server does not return a bid TTL - 60 if not set | | `adapterOptions` | Optional | Object | Arguments will be added to resulting OpenRTB payload to Prebid Server in every impression object at request.imp[].ext.BIDDER. See the example above. | | `extPrebid` | Optional | Object | Arguments will be added to resulting OpenRTB payload to Prebid Server in request.ext.prebid. See the examples below. | +| `customHeaders` | Optional | Object | These custom headers will be included in the XHR call to the bidder's endpoint. This will allow you to send data specific to your use case. The format consists of an object where the keys represent the header names and the values correspond to the respective header values. Here is an example how a customHeader object might look like - `{"Header1": "Value1", "Header2": "Value2"}`| +| `endpointCompression` | Optional | Boolean | Gzip compress the auction request payload when supported and debug mode is off. Adds `gzip=1` to the request URL. | +| `filterBidderlessCalls` | Optional | Boolean | When `true`, ad units that have no bidders defined are excluded from Prebid Server requests. Defaults to `false`. | `true` | If `endpoint` and `syncEndpoint` are objects, these are the supported properties: @@ -112,6 +115,7 @@ If `endpoint` and `syncEndpoint` are objects, these are the supported properties - If `bidders` is omitted, only adUnits that also omit bidders will be sent to Prebid Server. See the [stored impressions](#stored-imp) example below. - If the `s2sConfig` timeout is not specified, Prebid Server will utilize a configured default for `tmax`. - When using the `endpoint` or `syncEndpoint` object configs, you should define both properties. If either property is not defined, Prebid Server requests for that type of user will not be made. If you do not need to distinguish endpoints for consent reasons, you can simply define the same URL value in both fields or use the String version of the field (which is configured to use defined URL for all users). +- When `endpointCompression` is enabled, Prebid.js compresses the request body sent to Prebid Server and appends `gzip=1` to the endpoint URL. This feature is skipped when debug mode is active or the browser lacks GZIP support. Do not use if your PBS Host does not yet support gzip request compression. - When `allowUnknownBidderCodes` is `true`, bidders that have not been explicitly requested in [`adUnit.bids`](../adunit-reference.html#adunitbids) may take part in the auction. This can break custom logic that relies on the availability of a bid request object for any given bid. Known scenarios where custom code won't get the request when there's an "unknown bidder": - There will not be a [`bidRequested`](/dev-docs/publisher-api-reference/getEvents.html) event. - In the [MASS custom renderers](/dev-docs/modules/mass.html#configuration-parameters) module, `payload.bidRequest` will be undefined. @@ -203,6 +207,50 @@ Here's how it works: 1. The s2sConfig.bidders array contains 'tripleliftVideo' telling Prebid.js to direct bids for that code to the server 1. Finally, the extPrebid.aliases line tells Prebid Server to route the 'tripleliftVideo' biddercode to the 'triplelift' server-side adapter. +Make sure to register your aliases' [`gvlMapping`](/dev-docs/publisher-api-reference/setConfig.html#setConfig-gvlMapping) via setConfig as well. + +### Routing for Multiple PBS instances + +Bids: + +```javascript +[{ + bidder: 'foobar', + params: {...}, +}, +{ + bidder: 'foobar', + params: {...}, + pbsHost: 'foobar-2' +}] +``` + +s2sConfig: + +```javascript +[{ + accountId: 1234, + bidders: ['foobar'], + enabled: true, + endpoint: { + noP1Consent : 'https://pbs.auction/openrtb2/auction', + p1Consent : 'https://pbs.auction/openrtb2/auction' + } +}, +{ + accountId: 5678, + bidders: ['foobar-2'], + syncBidders: ['foobar'], + enabled: true, + endpoint: { + noP1Consent : 'https://pbs.alt.auction/openrtb2/auction', + p1Consent : 'https://pbs.alt.auction/openrtb2/auction' + } +}] +``` + +The above would distribute `bid[0]` to s2s endpoint `https://pbs.auction/openrtb2/auction`, whereas `bid[1]` will be distributed to `https://pbs.alt.auction/openrtb2/auction`. The syncBidders is used to sync both with the original biddercode to as well as applying bidder specific FPD for pbs calls via bidderconfig. + ### Video via s2sConfig Supporting video through the Server-to-Server route can be done by providing a couple of extra arguments on the `extPrebid` object. e.g. diff --git a/dev-docs/modules/previousAuctionInfo.md b/dev-docs/modules/previousAuctionInfo.md new file mode 100644 index 0000000000..948bc87923 --- /dev/null +++ b/dev-docs/modules/previousAuctionInfo.md @@ -0,0 +1,97 @@ +--- +layout: page_v2 +page_type: module +title: Module - Previous Auction Info +description: Allows publishers and bidders to collect and inject past auction data into future bid requests +module_code : previousAuctionInfo +display_name : Previous Auction Info +enable_download : true +sidebarType : 1 + +--- + +# Previous Auction Info + +## Overview + +The Previous Auction Info module enables functionality to collect prior auction data for participating bidders and publishers (This feature is `opt-in`, by default it is disabled). + +## How to Enable the Module + +A Publisher must do the following in order for the module to work: + +* Include the Previous Auction Info module within your Prebid.js build: [https://docs.prebid.org/download.html](https://docs.prebid.org/download.html) + +* Configure Prebid.js to enable the Previous Auction Info module: + +```javascript +pbjs.setConfig({previousAuctionInfo: { enabled: true, bidders: ['bidderCode1', 'bidderCode2'], maxQueueLength: 10 }}) +``` + +* Only valid bid requests submitted by bidders who have enabled the Previous Auction Info module will be permitted. + +If the requirements above are met, the flow for how the module works is as follows: + +1. A Prebid.js auction runs and completes. +1. At the end of an auction, details about the auction are collected from each bidder using the module. +1. If a Prebid bid wins, then the `rendered` field is updated to `1` to indicate this in the collected auction data for all bidders who bid on the same adunit within the same Prebid auction. +1. During the next Prebid.js auction, if a bidder is included in previousAuctionInfo.bidders AND is included in the auction, then previous auction info data will be injected into the bidder's bid request of the new auction within the following path: `ortb2.ext.prebid.previousauctioninfo`. + +## Configuration Options + +{: .table .table-bordered .table-striped } +| Field | Required? | Type | Description | +|---|---|---|---| +| previousAuctionInfo.enabled | yes | boolean | Enables/disables the module. | +| previousAuctionInfo.bidders | no | array of strings | Array of bidder codes to determine which bidders are allowed to receive collected previous auction info. Omitting this field will enable all bidders. | +| previousAuctionInfo.maxQueueLength | no | integer | The number of previous auction info payloads to store/collect per bidder before injecting these payloads into the bidstream. Any payloads collected for a bidder during one auction will be injected into the bidstream during the next auction that the same bidder participates in with valid bids. If this field is omitted, the value of this field is 10. | + +## Example of Previous Auction Info Payload + +`previousAuctionInfo` is an array of prior auction data catered to a specific bidder (if present, it will be added to a bidder's bid request). See below for an example of how the structure of the data looks (Note: Once collected previous auction data has been injected into the bid stream, then it is removed and no longer stored within the module): + +```javascript +ortb2: { + ext: { + prebid: { + previousauctioninfo: [ + { + bidderRequestId: "123abc", + bidId: "456def", + rendered: 1, // default is 0 + source: "pbjs", + adUnitCode: "div-gpt-ad-123-0", + highestBidCpm: 0.052275935, // default is null + highestBidCurrency: "USD", // default is null + bidderCpm: 0.04, // default is null + bidderOriginalCpm: 0.04, // default is null + bidderCurrency: "USD", // default is null + bidderOriginalCurrency: "USD", // default is null + rejectionReason: "Invalid request ID", // default is null + timestamp: 1739400860310 + } + ] + } + } +} +``` + +## Description of Previous Auction Info Payload + +{: .table .table-bordered .table-striped } +| Field | Type | Description | Default | +|---|---|---|---| +| ortb2.ext.prebid.previousauctioninfo | array | | | +| ortb2.ext.prebid.previousauctioninfo[].bidderRequestId | string | ID of a previous bidder request | | +| ortb2.ext.prebid.previousauctioninfo[].bidId | string | ID of a previous bid request | | +| ortb2.ext.prebid.previousauctioninfo[].rendered | integer | Signifies if the relevant adunit bid on was rendered or not | 0 | +| ortb2.ext.prebid.previousauctioninfo[].source | string | Where the previous auction info was collected | | +| ortb2.ext.prebid.previousauctioninfo[].adUnitCode | string | Ad unit code of the ad slot that was bid on | | +| ortb2.ext.prebid.previousauctioninfo[].highestBidCpm | float | The highest Prebid bid cpm observed for the relative ad slot of a previous auction | null | +| ortb2.ext.prebid.previousauctioninfo[].highestBidCurrency | string | The currency of the highest Prebid bid observed for an ad slot of a previous auction | null | +| ortb2.ext.prebid.previousauctioninfo[].bidderCpm | float | The bid cpm submitted by the bidder receiving the previous auction info payload | null | +| ortb2.ext.prebid.previousauctioninfo[].bidderOriginalCpm | float | The original bid cpm submitted by the bidder receiving the previous auction info payload | null | +| ortb2.ext.prebid.previousauctioninfo[].bidderCurrency | string | The bidder currency submitted by the bidder receiving the previous auction info payload | null | +| ortb2.ext.prebid.previousauctioninfo[].bidderOriginalCurrency | string | The original bidder currency submitted by the bidder receiving the previous auction info payload | null | +| ortb2.ext.prebid.previousauctioninfo[].rejectionReason | string | The error reason, if one was present | null | +| ortb2.ext.prebid.previousauctioninfo[].timestamp | integer | Time that the previous auction info payload was collected | | diff --git a/dev-docs/modules/pubCommonId.md b/dev-docs/modules/pubCommonId.md index 80f706b182..461580f3ef 100644 --- a/dev-docs/modules/pubCommonId.md +++ b/dev-docs/modules/pubCommonId.md @@ -13,8 +13,6 @@ sidebarType : 1 # Publisher Common ID Module -{:.no_toc} - This module stores a unique user id in the first party domain and makes it accessible to all adapters. Similar to IDFA and AAID, this is a simple UUID that can be utilized to improve user matching, especially for iOS and MacOS browsers, and is compatible with ITP (Intelligent Tracking Prevention). It's lightweight and self contained. Adapters that support Publisher Common ID will be able to pick up the user ID and return it for additional server-side cross device tracking. ## Page integration diff --git a/dev-docs/modules/pubmaticRtdProvider.md b/dev-docs/modules/pubmaticRtdProvider.md new file mode 100644 index 0000000000..f1c159f4a2 --- /dev/null +++ b/dev-docs/modules/pubmaticRtdProvider.md @@ -0,0 +1,92 @@ +--- +layout: page_v2 +page_type: module +title: PubMatic RTD Provider +display_name: PubMatic RTD Module +description: RTD module for Prebid provided by PubMatic for dynamic yield optimization +module_type: rtd +module_code: pubmaticRtdProvider +enable_download: true +vendor_specific: true +sidebarType: 1 +--- + +# PubMatic RTD Module +{:.no_toc} + +* TOC +{:toc} + +## Overview + +The PubMatic RTD module provides dynamic yield optimization by fetching real-time pricing floor data and generating targeting data for ad server integration and reporting. The module integrates with Prebid's Price Floors system as per [Dynamic Floor Data Provider](https://docs.prebid.org/dev-docs/modules/floors.html#floor-data-provider-interface) guidelines. + +## Integration + +Step 1: Contact PubMatic to get a publisher ID and create your first profile. Additional settings like floor multipliers, and key-values enablement can be managed through the PubMatic UI. + +Step 2: Integrate the PubMatic Analytics Adapter (see Prebid Analytics modules) as well as the Price Floors module. + +Step 3: Prepare the base Prebid file. + +For example: + +To compile the Price Floors, PubMatic RTD module and PubMatic Analytics Adapter into your Prebid build: + +```shell +gulp build --modules=priceFloors,rtdModule,pubmaticRtdProvider,pubmaticAnalyticsAdapter +``` + +{: .alert.alert-info :} +Note: The PubMatic RTD module is dependent on the global real-time data module : `rtdModule`, price floor module : `priceFloors` and PubMatic Analytics Adapter : `pubmaticAnalyticsAdapter`. + +Step 4: Set configuration and enable PubMatic RTD Module using pbjs.setConfig. + +## Configuration + +This module is configured as part of the `realTimeData.dataProviders`. We recommend setting `auctionDelay` to at least 250 ms and make sure `waitForIt` is set to `true` for the `pubmatic` RTD provider. + +```js +const AUCTION_DELAY = 250; +pbjs.setConfig({ + // rest of the config + ..., + realTimeData: { + auctionDelay: AUCTION_DELAY, + dataProviders: [ + { + name: "pubmatic", + waitForIt: true, + params: { + publisherId: ``, // please contact PubMatic to get a publisherId for yourself + profileId: ``, // please contact PubMatic to get a profileId for yourself + }, + }, + ], + }, + // rest of the config + ..., +}); +``` + +## Parameters + +{: .table .table-bordered .table-striped } +| Name | Type | Description | Default | +| :----------------- | :------ | :------------------------------------------------------------- | :------------------------- | +| name | String | Name of the real-time data module | Always `pubmatic` | +| waitForIt | Boolean | Should be `true` if an `auctionDelay` is defined (mandatory) | `false` | +| params | Object | | | +| params.publisherId | String | Publisher ID | | +| params.profileId | String | Profile ID | | + +## Targeting Keys + +The module sets the following targeting keys for ad server integration and reporting: + +{: .table .table-bordered .table-striped } +| Key | Description | Values | +| :-- | :---------- | :----- | +| pm_ym_flrs | Whether RTD floor was applied to the auction | 0 (not applied)/1 (applied) | +| pm_ym_flrv | Floor value after applying dynamic multipliers | Decimal value (e.g., "1.25") | +| pm_ym_bid_s | Bid outcome status | 0 (no bid), 1 (won), 2 (floored) | diff --git a/dev-docs/modules/pubxaiRtdProvider.md b/dev-docs/modules/pubxaiRtdProvider.md index 26a0f84923..070e086d86 100644 --- a/dev-docs/modules/pubxaiRtdProvider.md +++ b/dev-docs/modules/pubxaiRtdProvider.md @@ -12,7 +12,6 @@ sidebarType: 1 --- # Pubx.ai RTD Module - {:.no_toc} * TOC @@ -48,18 +47,20 @@ pbjs.setConfig({ ..., realTimeData: { auctionDelay: AUCTION_DELAY, - dataProviders: { - name: "pubxai", - waitForIt: true, - params: { - pubxId: ``, - endpoint: ``, // (optional) - floorMin: ``, // (optional) - enforcement: ``, // (optional) - data: `` // (optional) - } - } - } + dataProviders: [ + { + name: "pubxai", + waitForIt: true, + params: { + pubxId: ``, + endpoint: ``, // (optional) + floorMin: ``, // (optional) + enforcement: ``, // (optional) + data: `` // (optional) + }, + }, + ], + }, // rest of the config ..., }); diff --git a/dev-docs/modules/qortexRtdProvider.md b/dev-docs/modules/qortexRtdProvider.md index 189d492345..d259880c05 100644 --- a/dev-docs/modules/qortexRtdProvider.md +++ b/dev-docs/modules/qortexRtdProvider.md @@ -12,7 +12,6 @@ sidebarType : 1 --- # Qortex Real-time Data Submodule - {:.no_toc} * TOC @@ -22,12 +21,12 @@ sidebarType : 1 The Qortex RTD module appends contextual segments to the bidding object based on the content of a page using the Qortex API. -Upon load, the Qortex context API will analyze the bidder page (video, text, image, etc.) and will return a [Content object](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf#page=26). The module will then merge that object into the appropriate bidders' `ortb2.site.content`, which can be used by prebid adapters that use `site.content` data. +Upon load, if the `Qortex Group Id` and module parameters provided during configuration is active, the Qortex context API will attempt to generate and return a [Content object](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf#page=26) using indexed data from provided page content. The module will then merge that object into the appropriate bidders' `ortb2.site.content`, which can be used by prebid adapters that use `site.content` data. ## Build ```SH -gulp build --modules="rtdModule,qortexRtdProvider,qortexBidAdapter,..." +gulp build --modules="rtdModule,qortexRtdProvider,..." ``` > `rtdModule` is a required module to use Qortex RTD module. @@ -50,24 +49,20 @@ pbjs.setConfig({ params: { groupId: 'ABC123', //required bidders: ['qortex', 'adapter2'], //optional (see below) - tagConfig: { // optional, please reach out to your account manager for configuration reccommendation - videoContainer: 'string', - htmlContainer: 'string', - attachToTop: 'string', - esm6Mod: 'string', - continuousLoad: 'string' - } + enableBidEnrichment: true, //optional (see below) + tagConfig: { } // optional, please reach out to your account manager for configuration reccommendation } }] } }); ``` -### Paramter Details +### Parameter Details {: .table .table-bordered .table-striped } | Name |Type | Description |Required | Notes | | :--------------- | :------------ | :------------------------------------------------------------------ |:---------|:------------ | | `groupId` | String | The Qortex groupId linked to the publisher | Yes | Your account manager can provide this information for you if needed, it is required for any type integration and access to Qortex services | | `bidders` | Array of Strings | this is a list containing the bidder code of the prebid adapters you would like this module to impact | No | If this parameter is included, `ortb2.site.content` will be updated *only* for adapters in this array. If this parameter is omitted, the RTD module will default to updating `ortb2.site.content` on *all* bid adapters being used on the page| -| `tagConfig` | Object | The config settings that could be used to initialize the Qortex integration on your page | No | A preconfigured object for this step will be provided to you by the Qortex team. The RTD module will only carry out this process if a valid tagConfig is provided. +|`enableBidEnrichment`| Bool | Indicate whether to opt-in to the features of the RTD module that use our API to enrich bids with first party data for contextuality | No | Enabling this feature will allow this module to interact with the Qortex AI contextuality server for indexing and analysis. Please use caution when adding this module to pages that may contain personal user data or proprietary information. By default, the adapter will disable these features if this is marked `null` or omitted from the configuration parameters.| +|`tagConfig` | Object | The config settings that could be used to initialize the Qortex integration on your page | No | A preconfigured object for this step will be provided to you by the Qortex team. The RTD module will only carry out this process if a valid tagConfig is provided. If this parameter is not present, the Qortex integration can still be configured and loaded manually on your page outside of prebid. The RTD module will continue to initialize and operate as normal.| diff --git a/dev-docs/modules/raveltechRtdProvider.md b/dev-docs/modules/raveltechRtdProvider.md new file mode 100644 index 0000000000..596720699f --- /dev/null +++ b/dev-docs/modules/raveltechRtdProvider.md @@ -0,0 +1,84 @@ +--- +layout: page_v2 +title: Raveltech RTD Module +display_name: Raveltech RTD Module +description: Raveltech Real Time Data Module +page_type: module +module_type: rtd +module_code : raveltechRtdProvider +enable_download : true +vendor_specific: true +sidebarType : 1 +--- + +# Raveltech RTD Module for Prebid.js + +## Overview + +```text +Module Name: Raveltech RTD Provider +Module Type: RTD Provider +Maintainer: maintainers@raveltech.io +``` + +The RavelTech RTD (Real-Time Data) module for Prebid.js enables publishers to integrate seamlessly with Ravel Technologies' privacy-focused solution, ensuring bidder requests are anonymized before reaching SSPs and DSPs. By leveraging the Ravel Privacy Bus, this module prevents the transmission of personally identifiable information (PII) in bid requests, strengthening privacy compliance and security. + +## How It Works + +The module operates in two modes: + +1. Bid URL Replacement: +** The module modifies the bid request URL of the configured bidders to pass through the Ravel proxy, ensuring that all IDs are anonymized. +2. Bid Duplication (if `preserveOriginalBid` is enabled): +** The module duplicates the original bid request, sending one request as-is and another through the Ravel proxy with anonymized IDs. + +## Configuration + +To enable the Raveltech RTD module, you need to configure it with a list of bidders and specify whether to preserve the original bid request. +For the anonymization feature to work, you also need to load a javascript in the header of your HTML page: + +```html + +``` + +**NB: the URL to load zkad.js may change depending your setup. Please reach out to your contact at Ravel Technologies to ensure you have the correct URL.** + +Please contact to activate your adapter after installation or for more information. + +### Build + +```bash +gulp build --modules="rtdModule,raveltechRtdProvider,appnexusBidAdapter,..." +``` + +> Note that the global RTD module, `rtdModule`, is a prerequisite of the raveltech RTD module. + +### Parameters + +| Parameter | Type | Description | +|--------------------|--------|-------------| +| `bidders` | Array | A list of bidder codes (or their alias if an alias is used) that should have their bid requests anonymized via Ravel. | +| `preserveOriginalBid` | Boolean | If `true`, the original bid request is preserved, and an additional bid request is sent through the Ravel proxy. If `false`, the original bid request is replaced with the Ravel-protected request. | + +### Example Configuration + +```javascript +pbjs.setConfig({ + realTimeData: { + dataProviders: [{ + name: 'raveltech', + params: { + bidders: ['appnexus', 'rubicon'], + preserveOriginalBid: true + } + }] + } +}); +``` + +## Privacy Features + +The RavelTech RTD module allows publishers to implement the following privacy protections: + +- Personally Identifiable Information (PII) is either removed or converted into Anonymized IDs (RIDs). +- Bid requests are routed through an anonymized proxy before reaching the SSP, ensuring IP address anonymization. diff --git a/dev-docs/modules/reconciliationRtdProvider.md b/dev-docs/modules/reconciliationRtdProvider.md index c85eb2436c..84192f4120 100644 --- a/dev-docs/modules/reconciliationRtdProvider.md +++ b/dev-docs/modules/reconciliationRtdProvider.md @@ -12,7 +12,6 @@ sidebarType: 1 --- # Reconciliation SDK Module - {:.no_toc} * TOC diff --git a/dev-docs/modules/schain.md b/dev-docs/modules/schain.md index 562d1f5b8c..b394d20b48 100644 --- a/dev-docs/modules/schain.md +++ b/dev-docs/modules/schain.md @@ -10,7 +10,6 @@ sidebarType : 1 --- # Supply Chain Object Module - {:.no_toc} * TOC @@ -28,6 +27,10 @@ Two modes are supported: ## How to Use the Module +{: .alert.alert-warning :} +Since Prebid 10, schain is treated as first party data: this module just copies `schain.config` into `ortb2.source.ext.schain`. You may provide it (or `ortb2.source.schain`) directly, removing the need for this module. +Note that bidder-specific first party data is merged with global first party data, while up until Prebid 9 bidder-specific schains override the global schain. The simplest way to upgrade to 10 is to avoid using both. + First, build the schain module into your Prebid.js package: ```bash @@ -87,20 +90,29 @@ pbjs.setBidderConfig({ You can find more information about the `pbjs.setBidderConfig` function in the [Publisher API Reference]({{site.baseurl}}/dev-docs/publisher-api-reference/setBidderConfig.html). +{: .alert.alert-warning :} +**Prebid 10 :** You can either use above method or `ortb2.source.schain` property to pass schain. You can read more about passing [First Party Data](https://docs.prebid.org/dev-docs/publisher-api-reference/setConfig.html#first-party-data). As far as precedence is concerned, `ortb2.source.schain` property takes precedence over the schain config setup via `pbjs.setConfig` using above mentioned method. + ### Global and Bidder-Specific Together Yes, you can set both global and bidder-specific SChain configs. When together, the schain config setup via `pbjs.setConfig` acts as a global config that applies to all your bidders, while `pbjs.setBidderConfig` overrides the global config for the noted bidder(s). ## SChain Config Syntax +{: .alert.alert-warning :} +**Prebid 10 :** Validation will be automatically performed by the **validationFpdModule** if you have included it in your Prebid.js build. If the `skipValidation` parameter is set to true in the validationFpdModule configuration, validation will be skipped. Please visit the [validationFpdModule documentation](https://docs.prebid.org/dev-docs/modules/validationFpdModule.html) for more information. + {: .table .table-bordered .table-striped } | SChain Param | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | -| validation | optional | string | `'strict'`: In this mode, schain object will not be passed to adapters if it is invalid. Errors are thrown for invalid schain object. `'relaxed'`: Errors are thrown for an invalid schain object but the invalid schain object is still passed to adapters. `'off'`: No validations are performed and schain object is passed as-is to adapters. The default value is `'strict'`. | 'strict' | +| validation (deprecated from Prebid 10) | optional | string | `'strict'`: In this mode, schain object will not be passed to adapters if it is invalid. Errors are thrown for invalid schain object. `'relaxed'`: Errors are thrown for an invalid schain object but the invalid schain object is still passed to adapters. `'off'`: No validations are performed and schain object is passed as-is to adapters. The default value is `'strict'`. | 'strict' | | config | required | object | This is the full Supply Chain object sent to bidders conforming to the [IAB OpenRTB SupplyChain Object Specification](https://github.com/InteractiveAdvertisingBureau/openrtb/blob/master/supplychainobject.md). | (See examples above) | ## Adapter Information +{: .alert.alert-warning :} +**Prebid 10 :** Adapters can read `bidderRequest.ortb2.source.ext.schain` instead of `bidRequest.schain`. + Adapters can read the `bidRequest.schain` object and pass it through to their endpoint. The adapter does not need to be concerned about whether a bidder-specific schain was provided; the system will provide the relevant one. ## Adapters Supporting the schain Module diff --git a/dev-docs/modules/scope3RtdProvider.md b/dev-docs/modules/scope3RtdProvider.md new file mode 100644 index 0000000000..37ba682928 --- /dev/null +++ b/dev-docs/modules/scope3RtdProvider.md @@ -0,0 +1,215 @@ +--- +layout: page_v2 +title: Scope3 RTD Provider +display_name: Scope3 RTD Provider +description: Scope3 Real-Time Data Provider for Prebid.js +page_type: module +module_type: rtd +module_code: scope3RtdProvider +enable_download: true +vendor_specific: true +sidebarType: 1 +--- + +# Scope3 RTD Provider + +The Scope3 RTD (Real-Time Data) Provider enables publishers to leverage Scope3's Agentic Execution Engine (AEE) for real-time media buying optimization. This module sends complete OpenRTB requests to Scope3 and receives contextual signals that enhance auction targeting. + +{:.no_toc} + +* TOC +{:toc} + +## Overview + +The Scope3 RTD Provider: + +* Sends complete OpenRTB 2.x requests including extended UIDs, geo data, and device information +* Receives AEE signals for include/exclude targeting and macros +* Supports bidder-specific segments and deal IDs +* Enables configurable GAM targeting keys +* Works client-side without API keys + +## Usage + +### Basic Configuration + +```javascript +pbjs.setConfig({ + realTimeData: { + auctionDelay: 100, + dataProviders: [{ + name: "scope3", + waitForIt: true, + params: { + orgId: "your-org-id" + } + }] + } +}); +``` + +### Full Configuration + +```javascript +pbjs.setConfig({ + realTimeData: { + auctionDelay: 200, + dataProviders: [{ + name: "scope3", + waitForIt: true, + params: { + orgId: "your-org-id", + endpoint: "", + timeout: 1500, + bidders: ["appnexus", "rubicon", "pubmatic"], + includeKey: "scope3_include", + excludeKey: "scope3_exclude", + macroKey: "scope3_macro", + publisherTargeting: true, + advertiserTargeting: true, + cacheEnabled: true, + cacheTtl: 300000 + } + }] + } +}); +``` + +## Configuration Parameters + +{: .table .table-bordered .table-striped } + +| Name | Type | Required | Description | +|------|------|----------|-------------| +| orgId | String | Yes | Your Scope3 organization ID | +| endpoint | String | No | API endpoint (default: `https://prebid.scope3.com/prebid`) | +| timeout | Number | No | Request timeout in milliseconds (default: 1000) | +| bidders | Array | No | List of bidders to target (default: all auction bidders) | +| includeKey | String | No | GAM targeting key for include signals (default: "scope3_include") | +| excludeKey | String | No | GAM targeting key for exclude signals (default: "scope3_exclude") | +| macroKey | String | No | GAM targeting key for macro data (default: "scope3_macro") | +| publisherTargeting | Boolean | No | Enable publisher-level targeting (default: true) | +| advertiserTargeting | Boolean | No | Enable advertiser-level targeting (default: true) | +| cacheEnabled | Boolean | No | Enable response caching (default: true) | +| cacheTtl | Number | No | Cache TTL in milliseconds (default: 300000) | + +## Response Format + +The Scope3 AEE returns signals in this format: + +```json +{ + "aee_signals": { + "include": ["sports_fan", "auto_intender"], + "exclude": ["competitor_exposed"], + "macro": "eyJjb250ZXh0IjogImhpZ2hfdmFsdWUifQ==", + "bidders": { + "appnexus": { + "segments": ["seg1", "seg2"], + "deals": ["DEAL123"] + }, + "rubicon": { + "segments": ["seg3"], + "deals": [] + } + } + } +} +``` + +## GAM Integration + +### Line Item Setup + +Create GAM line items with key-value targeting using the configured keys: + +**Include Targeting:** + +* Key: `scope3_include` (or your configured includeKey) +* Values: `sports_fan`, `auto_intender`, etc. +* Operator: "is any of" + +**Exclude Targeting:** + +* Key: `scope3_exclude` (or your configured excludeKey) +* Values: `competitor_exposed`, etc. +* Operator: "is none of" + +**Macro Targeting:** + +* Key: `scope3_macro` (or your configured macroKey) +* Values: Base64-encoded contextual data + +### Example Line Item Configuration + +```text +Creative: 300x250 Banner +Targeting: + * scope3_include is any of "sports_fan", "auto_intender" + * scope3_exclude is none of "competitor_exposed" + * scope3_macro is "eyJjb250ZXh0IjogImhpZ2hfdmFsdWUifQ==" +``` + +## Data Flow + +1. **Request**: Module sends complete OpenRTB request to Scope3 including: + * All extended user IDs + * Geo and device data + * Ad unit configurations + * Bidder list + +2. **Processing**: Scope3's AEE analyzes the request context + +3. **Response**: AEE returns targeting signals: + * Global include/exclude segments + * Bidder-specific segments and deals + * Contextual macro data + +4. **Application**: Module applies signals to bid request: + * Global targeting in `ortb2Fragments.global.site.ext.data` + * Bidder segments in `ortb2Fragments.bidder[].user.data` + * Deal IDs in ad unit `ortb2Imp.ext` + +## Testing + +### Integration Testing + +Use the Hello World example to verify integration: + +1. Configure the module with your orgId +2. Monitor network requests to confirm data is sent +3. Check that targeting data appears in bid requests +4. Verify GAM line items receive the targeting keys + +### Debug Mode + +Enable Prebid debug mode to see targeting data: + +```javascript +pbjs.debug = true; +``` + +Check the browser console for RTD provider logs and bid request modifications. + +## Privacy Considerations + +The Scope3 RTD Provider: + +* Respects user consent choices +* Only processes data necessary for contextual targeting +* Does not store personal information +* Complies with privacy regulations when properly configured + +## Support + +For questions about the Scope3 RTD Provider: + +* Technical issues: Open a GitHub issue in the Prebid.js repository +* Integration support: Contact your Scope3 representative +* Documentation: Submit PRs to improve this documentation + +## Related Modules + +* [Real-Time Data Module]({{site.baseurl}}/dev-docs/modules/realTimeData.html) +* [RTD Sub-Module Development]({{site.baseurl}}/dev-docs/add-rtd-submodule.html) diff --git a/dev-docs/modules/scoremedia.md b/dev-docs/modules/scoremedia.md new file mode 100644 index 0000000000..430c77b423 --- /dev/null +++ b/dev-docs/modules/scoremedia.md @@ -0,0 +1,121 @@ +--- +layout: bidder +title: scoremedia +description: Prebid scoremedia Bidder Adapter +pbjs: true +biddercode: scoremedia +gvl_id: 965 +tcfeu_supported: true +usp_supported: true +gpp_supported: true +schain_supported: true +dchain_supported: false +floors_supported: true +userIds: all +tcfeu_supported: true +media_types: banner, video, native +safeframes_ok: true +deals_supported: true +sidebarType: 1 +fpd_supported: true +multiformat_supported: will-bid-on-any + +--- + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|----------------------------|-------------------------------------- |-----------| +| `tagId` | required | tag ID | `"795dtj21"` | `string` | + +### First Party Data + +Publishers should use the `ortb2` method of setting [First Party Data](/features/firstPartyData.html). +The following fields are supported: + +* ortb2.site.ext.data.* +* ortb2.site.content.data[] +* ortb2.user.ext.data.* +* ortb2.user.data[] + +### Test Parameters + +```javascript +var adUnits = [ + // Banner adUnit + { + code: 'banner-div', + mediaTypes: { + banner: { + sizes: [[300, 250], [300,600]] + } + }, + bids: [{ + bidder: 'scoremedia', + params: { + tagId: '795dtj21' + } + }] + }, + // Video adUnit + { + code: 'video1', + mediaTypes: { + video: { + playerSize: [640, 480], + context: 'instream' + } + }, + bids: [{ + bidder: 'scoremedia', + params: { + tagId: '795dtj21' + } + }] + }, + // Native adUnit + { + code: 'native1', + mediaTypes: + native: { + title: { + required: true + }, + image: { + required: true + }, + sponsoredBy: { + required: true + } + } + }, + bids: [{ + bidder: 'scoremedia', + params: { + tagId: '795dtj21' + } + }] + }, + // Multiformat Ad + { + code: 'multi1', + mediaTypes: { + video: { + playerSize: [640, 480], + context: 'instream' + }, + banner: { + sizes: [[300, 250], [300,600]] + } + }, + bids: [{ + bidder: 'scoremedia', + params: { + tagId: '795dtj21', + videoTagId: 'testscore' + } + }] + }; +]; +``` diff --git a/dev-docs/modules/semantiqRtdProvider.md b/dev-docs/modules/semantiqRtdProvider.md new file mode 100644 index 0000000000..d15f254b0f --- /dev/null +++ b/dev-docs/modules/semantiqRtdProvider.md @@ -0,0 +1,57 @@ +--- +layout: page_v2 +title: SemantIQ RTD module +display_name : SemantIQ +description: SemantIQ RTD module allows to retrieve real-time data from the SemantIQ service. +page_type: module +module_type: rtd +module_code: semantiqRtdProvider +enable_download: true +sidebarType: 1 +vendor_specific: true + +--- + +# Semantiq Rtd Provider + +## Description + +This module retrieves real-time data from the SemantIQ service and populates ORTB data. + +You need to obtain a company ID from [Audienzz](https://audienzz.com) for the module to function properly. Contact [service@audienzz.ch](mailto:service@audienzz.ch) for details. + +## Integration + +1. Include the module into your `Prebid.js` build. + + ```sh + gulp build --modules='rtdModule,semantiqRtdProvider,...' + ``` + +1. Configure the module via `pbjs.setConfig`. + + ```js + pbjs.setConfig({ + ... + realTimeData: { + dataProviders: [ + { + name: 'semantiq', + waitForIt: true, + params: { + companyId: 12345, + timeout: 1000, + }, + }, + ], + }, + }); + ``` + +## Parameters + +{: .table .table-bordered .table-striped } +|Name |Required|Description |Type |Default value|Example | +|---------+--------+------------------------------------------------------------+--------+-------------+---------------------| +|companyId|No |Company ID obtained from [Audienzz](https://audienzz.com). |number \| number[] |- |12345 | +|timeout |No |The maximum time to wait for a response in milliseconds. |number |1000 |3000 | diff --git a/dev-docs/modules/sizeMapping.md b/dev-docs/modules/sizeMapping.md index 8aa2172c13..88f1fd1f11 100644 --- a/dev-docs/modules/sizeMapping.md +++ b/dev-docs/modules/sizeMapping.md @@ -10,7 +10,6 @@ sidebarType: 1 --- # Size Mapping Module - {: .no_toc } * TOC diff --git a/dev-docs/modules/sizeMappingV2.md b/dev-docs/modules/sizeMappingV2.md index 22b1bf8bde..25c655a5de 100644 --- a/dev-docs/modules/sizeMappingV2.md +++ b/dev-docs/modules/sizeMappingV2.md @@ -10,7 +10,6 @@ sidebarType: 1 --- # Advanced Size Mapping Module - {: .no_toc } * TOC diff --git a/dev-docs/modules/spm.md b/dev-docs/modules/spm.md new file mode 100644 index 0000000000..15f6ab7a41 --- /dev/null +++ b/dev-docs/modules/spm.md @@ -0,0 +1,121 @@ +--- +layout: bidder +title: Sportplatz Media +description: Prebid spm Bidder Adapter +pbjs: true +biddercode: spm +gvl_id: 965 +tcfeu_supported: true +usp_supported: true +gpp_supported: true +schain_supported: true +dchain_supported: false +floors_supported: true +userIds: all +tcfeu_supported: true +media_types: banner, video, native +safeframes_ok: true +deals_supported: true +sidebarType: 1 +fpd_supported: true +multiformat_supported: will-bid-on-any + +--- + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|----------------------------|-------------------------------------- |-----------| +| `tagId` | required | tag ID | `"n1x53vta"` | `string` | + +### First Party Data + +Publishers should use the `ortb2` method of setting [First Party Data](/features/firstPartyData.html). +The following fields are supported: + +* ortb2.site.ext.data.* +* ortb2.site.content.data[] +* ortb2.user.ext.data.* +* ortb2.user.data[] + +### Test Parameters + +```javascript +var adUnits = [ + // Banner adUnit + { + code: 'banner-div', + mediaTypes: { + banner: { + sizes: [[300, 250], [300,600]] + } + }, + bids: [{ + bidder: 'spm', + params: { + tagId: 'n1x53vta' + } + }] + }, + // Video adUnit + { + code: 'video1', + mediaTypes: { + video: { + playerSize: [640, 480], + context: 'instream' + } + }, + bids: [{ + bidder: 'spm', + params: { + tagId: 'n1x53vta' + } + }] + }, + // Native adUnit + { + code: 'native1', + mediaTypes: + native: { + title: { + required: true + }, + image: { + required: true + }, + sponsoredBy: { + required: true + } + } + }, + bids: [{ + bidder: 'spm', + params: { + tagId: 'n1x53vta' + } + }] + }, + // Multiformat Ad + { + code: 'multi1', + mediaTypes: { + video: { + playerSize: [640, 480], + context: 'instream' + }, + banner: { + sizes: [[300, 250], [300,600]] + } + }, + bids: [{ + bidder: 'spm', + params: { + tagId: 'n1x53vta', + videoTagId: 'n1x53vta' + } + }] + }; +]; +``` diff --git a/dev-docs/modules/storageControl.md b/dev-docs/modules/storageControl.md new file mode 100644 index 0000000000..9c467841f0 --- /dev/null +++ b/dev-docs/modules/storageControl.md @@ -0,0 +1,124 @@ +--- +layout: page_v2 +page_type: module +title: Module - Storage Control +description: Check or enforce disclosure of device storage use +module_code : storageControl +display_name : storageControl +enable_download : true +recommended: true +sidebarType : 1 +min_js_version: 10.0.0 +--- + +# Storage Control Module + +This module checks other modules' use of device storage against their disclosed list of storage keys and warns about or (optionally) denies undisclosed storage use. +Additionally, it provides an API to list all disclosed storage keys. + +## Background + +The TCF Global Vendor List (GVL) requires vendors to disclose their use of device storage by publishing a [JSON file](https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework/blob/master/TCFv2/Vendor%20Device%20Storage%20%26%20Operational%20Disclosures.md) that lists all the identifiers (cookie names and/or localStorage keys) and their associated domains. +The Storage Control module uses that information to validate that when a Prebid module accesses storage, it uses identifiers that have been disclosed as in use for first party domains. +Vendors not in the GVL can provide a disclosure JSON to Prebid directly - see [adapter integration](#adapter-integration) below. + +## Publisher Integration + +Include this module in the Prebid bundle: + + ```bash + gulp build --modules=storageControl,... + ``` + +If you are instead using Prebid as an NPM dependency, you'll need to explicitly import disclosure metadata. +This is done by including `metadata/prebid-core` and pairing each module import with a corresponding `import 'prebid.js/metadata/'`. For example: + +```javascript +import {pbjs} from 'prebid.js'; +import 'prebid.js/modules/userId'; +import 'prebid.js/modules/sharedIdSystem'; + +import 'prebid.js/metadata/prebid-core'; +import 'prebid.js/metadata/userId'; +import 'prebid.js/metadata/sharedIdSystem'; + +// ... +``` + +### Module Configuration + +This module exposes a single configuration option `storageControl.enforcement`, e.g.: + +```javascript +pbjs.setConfig({ + storageControl: { + enforcement: 'off' + } +}) +``` + +Possible values for it are: + +{: .table .table-bordered .table-striped } +|Value | Description | +| ------------ | ------------ | +|`'off''` | The default. Use of undisclosed storage keys only generates a console warning. | +|`'strict'` | Deny access to undisclosed storage keys | +|`'allowAliases'` | Deny access to undisclosed storage keys, unless the use is from an alias of a module that does disclose them, in which case only log a warning. This can happen for instance when a bidder provides an alias linked to a different vendor in the GVL. | + +### Storage Disclosure Summary + +With this module included, the `getStorageUseDisclosures` API returns a list of all disclosures pertaining the first party domain for all installed modules. For example: + +```javascript +pbjs.getStorageUseDisclosures() + +/** + [ + { + "disclosedIn": "https://cdn.jsdelivr.net/gh/prebid/Prebid.js/metadata/disclosures/prebid/sharedId-optout.json", + "disclosedBy": [ + "sharedIdSystem" + ], + "identifier": "_pubcid_optout", + "type": "cookie", + "maxAgeSeconds": 31536000, + "cookieRefresh": false, + "purposes": [] + }, + ... + ] + */ +``` + +The return value follows the same format as the TCF [disclosures array](https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework/blob/master/TCFv2/Vendor%20Device%20Storage%20%26%20Operational%20Disclosures.md), except that + +- `domain`/`domains` is omitted (and always `'*'` in the original disclosure, as Prebid's storage is always on the first party domain); +- each item in the array contains these additional fields: + +{: .table .table-bordered .table-striped } +|Name | Type | Description | +| ------------ | ------------ | ------------ | +|`disclosedIn` | String | URL of the JSON containing this disclosure. Can be `null` for identifiers chosen trough publisher configuration - such as those set by the [userId module](/dev-docs/modules/userId.html) | +|`disclosedBy` | Array of Strings | Names of the Prebid modules providing this disclosure | + + + +## Adapter Integration + +Modules that use storage should publish a [disclosure file](https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework/blob/master/TCFv2/Vendor%20Device%20Storage%20%26%20Operational%20Disclosures.md) listing all keys that the pass to `storageManager` for the first party domain (`'*'`). This can be done by either: + +- providing a GVL ID in your adapter. The corresponding `deviceStorageDisclosureUrl` from the GVL is then used as your disclosure. +- providing a `disclosureURL` directly. This does not require membership in the GVL, and overrides its disclosure if provided. For example: + +```javascript +registerBidder({ + code: 'exampleBidder', + disclosureURL: 'https://exampleBidder.com/disclosures.json' +}) +``` + +## Related Reading + +- [Vendor Device Storage & Operational Disclosures](https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework/blob/master/TCFv2/Vendor%20Device%20Storage%20%26%20Operational%20Disclosures.md) +- [Consent string and vendor list formats](https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework/blob/master/TCFv2/IAB%20Tech%20Lab%20-%20Consent%20string%20and%20vendor%20list%20formats%20v2.md) diff --git a/dev-docs/modules/symitriDapRtdProvider.md b/dev-docs/modules/symitriDapRtdProvider.md new file mode 100644 index 0000000000..66211f6908 --- /dev/null +++ b/dev-docs/modules/symitriDapRtdProvider.md @@ -0,0 +1,114 @@ +--- +layout: page_v2 +title: Symitri DAP Real Time Data Provider Module +display_name: Symitri DAP Real Time Data Provider Module +description: Symitri DAP Real Time Data Provider Module +page_type: module +module_type: rtd +module_code : symitriDapRtdProvider +enable_download : true +vendor_specific: true +sidebarType : 1 +--- + +# Symitri DAP Real Time Data Provider Module + +{:.no_toc} + +* TOC +{:toc} + +The Symitri Data Activation Platform (DAP) is a privacy-first system that protects end-user privacy by only allowing them to be targeted as part of a larger cohort. Symitri DAP Real time data Provider automatically invokes the DAP APIs and submit audience segments and the Secure Ad ID(SAID) to the bid-stream. SAID is a JWT/JWE which carries with it the cohorts and only a side-car or trusted server in the demand-side platform is allowed to see its contents. + +## Publisher Usage + +1. Build the symitriDapRTD module into the Prebid.js package with: + + ```bash + gulp build --modules=symitriDapRtdProvider,... + ``` + +2. Use `setConfig` to instruct Prebid.js to initilaize the symitriDapRtdProvider module, as specified below. + +### Configuration + +```javascript +pbjs.setConfig({ + realTimeData: { + auctionDelay: 2000, + dataProviders: [ + { + name: "symitriDap", + waitForIt: true, + params: { + apiHostname: '', + apiVersion: 'x1'|'x2', + domain: 'your-domain.com', + identityType: 'simpleid'|'compositeid'|'hashedid', + identityValue: '', + segtax: 708, + pixelUrl: '', + } + } + ] + } +}); +``` + +Please reach out to your Symitri account representative() to get provisioned on the DAP platform. + +**Config Syntax details:** + +{: .table .table-bordered .table-striped } +| Name |Type | Description | Notes | +| :------------ | :------------ | :------------ |:------------ | +| name | String | Symitri Dap Rtd module name | 'symitriDap' always| +| waitForIt | Boolean | Required to ensure that the auction is delayed until prefetch is complete | Optional. Defaults to false | +| apiHostname | String | Hostname provided by Symitri | Please reach out to your Symitri account representative() for this value| +| apiVersion | String | This holds the API version | Please reach out to your Symitri account representative() for this value | +| domain | String | The domain name of your webpage | | +| identityType | String | 'simpleid' or 'compositeid' or 'hashedid' | See the section below labelled "identityType" for more details. | +| identityValue | String | This is a required field to pass HEM and/or EIDs | See the "identity" section below for more details. | +| segtax | Integer | The taxonomy for Symitri | The value should be 708 | +| pixelUrl | String | Pixel URL provided by Symitri which will be triggered when bid matching with Symitri dealid wins and creative gets rendered | | + +### identityType +Use 'simpleid' to pass email or other plain text ids and SymitriRTD Module will hash it. + +Use 'hashedid' to pass in single already hashed id. + +Use 'compositeid' to pass in multiple identifiers as key-value pairs as shown below, can also be used for single already hashed identifiers: + +```bash +{ + "identityType": "compositeid", + "identityValue": "HEM:,ID5:,RampId:", + ... +} + "identityType": "hashedid", + "identityValue": "", +``` + +### Identity + +In the event there is no identity, the ""identityType" and "identityValue" can be set to: + +```javascript +pbjs.setConfig({ + ... + identityType: 'compositeid', + identityValue: 'HEM:', + ... +}); +``` + +### Testing + +To view an example of available segments returned by dap: + +```bash +gulp serve --modules=rtdModule,symitriDapRtdProvider,appnexusBidAdapter,sovrnBidAdapter +``` + +and then point your browser at: +"" diff --git a/dev-docs/modules/targetVideo_video.md b/dev-docs/modules/targetVideo_video.md new file mode 100644 index 0000000000..013e73c4c8 --- /dev/null +++ b/dev-docs/modules/targetVideo_video.md @@ -0,0 +1,30 @@ +--- +layout: page_v2 +page_type: module +title: Module - TargetVideo Video +description: Required for serving instream video through TargetVideo. +module_code : targetVideoAdServerVideo +display_name : TargetVideo Video Support +enable_download : true +vendor_specific: true +sidebarType : 1 +--- + + + +# TargetVideo Video + +{:.no_toc} + +This module is required to use the Prebid Instream video examples with TargetVideo. For instructions showing how to add this module to Prebid.js, see below. + +## Step 1: Prepare the base Prebid file as usual + +The standard options: + +- Build from a locally-cloned git repo +- Receive the email package from the Prebid [Download](/download.html) page + +## Step 2: Integrate into your prebid.js configuration + +The method exposes the [`pbjs.adServers.targetVideo.buildVideoUrl`]({{site.baseurl}}/dev-docs/publisher-api-reference/adServers.targetVideo.buildVideoUrl.html) method to use. diff --git a/dev-docs/modules/gdprEnforcement.md b/dev-docs/modules/tcfControl.md similarity index 70% rename from dev-docs/modules/gdprEnforcement.md rename to dev-docs/modules/tcfControl.md index 27906a944b..c3d385eeaa 100644 --- a/dev-docs/modules/gdprEnforcement.md +++ b/dev-docs/modules/tcfControl.md @@ -1,42 +1,46 @@ --- layout: page_v2 page_type: module -title: GDPR Enforcement Module +title: TCF Control Module description: If you have users in Europe, you can use this module to enable actions for processing under the GDPR and ePrivacy -module_code : gdprEnforcement -display_name : GDPR Enforcement +module_code : tcfControl +display_name : TCF Control enable_download : true recommended: true sidebarType : 1 --- -# GDPR Enforcement Module +# TCF Control Module {: .no_toc } +{: .alert.alert-info :} +Until Prebid.js 9.0 this was known as the "GDPR Enforcement" module. + * TOC {: toc } {% include legal-warning.html %} {: .alert.alert-warning :} -This module requires the [EU GDPR consent management module](/dev-docs/modules/consentManagement.html) (the base consent module), which reads consent values from the Consent Management Platform (CMP). The GDPR Enforcement Module -will then take action based on the results. See the [base module page](/dev-docs/modules/consentManagement.html) for general background, usage, and legal disclaimers. +This module requires the [TCF consent management module](/dev-docs/modules/consentManagementTcf.html) (the base consent module), which reads consent values from the Consent Management Platform (CMP). The TCF Control Module +will then take action based on the results. See the [base module page](/dev-docs/modules/consentManagementTcf.html) for general background, usage, and legal disclaimers. ## Overview -The [base consent module](/dev-docs/modules/consentManagement.html) performs the following actions: +The [base consent module](/dev-docs/modules/consentManagementTcf.html) performs the following actions: 1. Fetches the user's GDPR consent data from the CMP. 2. Incorporates this data into the auction objects for adapters to collect. -The GDPR Enforcement Module adds the following: +The TCF Control Module adds the following: -1. Allows the page to define which activities should be enforced at the Prebid.js level. -2. Actively enforces those activities based on user consent data. +1. Allows the page to define which activities should be restricted at the Prebid.js level. +2. Actively restricts those activities based on user consent data. The following table details the Prebid.js activities that fall under the [Transparency and Consent Framework (TCF)](https://iabeurope.eu/iab-europe-transparency-consent-framework-policies/) scope: {: .table .table-bordered .table-striped } + | In-Scope Activity | TCF Legal Basis Required | Activity | Prebid.js Version | | --- | --- | --- | --- | | Invoke usersync pixels | Purpose 1 - Store and/or access information on a device | May prevent one or more vendor usersyncs. | 3.14+ | @@ -50,41 +54,42 @@ The following table details the Prebid.js activities that fall under the [Transp ## Page Integration -A page needs to define configuration rules about how Prebid.js should enforce each in-scope activity. +A page needs to define configuration rules about how Prebid.js should restricts each in-scope activity. {: .alert.alert-warning :} **Important Legal Note:** Prebid.org cannot provide legal advice about GDPR or any other governmental regulation. Our aim is to provide a toolkit of functionality that will let publishers configure header bidding as defined by their legal counsel. We will consider feature suggestions, and review any code offered by the community. {: .alert.alert-info :} -To turn on Prebid.js enforcement you must: +To turn on Prebid.js restrictions you must: -(1) Include the gdprEnforcement module in the Prebid.js build +(1) Include the tcfControl module in the Prebid.js build and (2) setConfig `consentManagement.gdpr.cmpApi` to either 'iab' or 'static' -The following fields related to GDPR enforcement are supported in the [`consentManagement`](/dev-docs/modules/consentManagement.html) object: +The following fields related to anonymizing aspects of the auction are supported in the [`consentManagement`](/dev-docs/modules/consentManagementTcf.html) object: {: .table .table-bordered .table-striped } + | Param | Type | Description | Example | | --- | --- | --- | --- | | gdpr.rules | `Array of Objects` | Lets the publisher override the default behavior. | | | gdpr.rules[].purpose | `String` | Supported values: "storage" (Purpose 1), "basicAds" (Purpose 2), "personalizedAds" (purpose 4), "measurement" (Purpose 7), "transmitPreciseGeo" (Special Feature 1) | "storage" | -| gdpr.rules[].enforcePurpose | `Boolean` | Determines whether to enforce the purpose consent. The default in Prebid.js 3.x is not to enforce purposes. Prebid.js 4.0 enforces legal basis for Purposes 1 and 2 by default. | true | -| gdpr.rules[].enforceVendor | `Boolean` | Determines whether to enforce vendor signals for this purpose. The default in Prebid.js 3.x is not to enforce vendor signals. Prebid.js 4.0 enforces legal basis for Purposes 1 and 2 by default. | true | -| gdpr.rules[].vendorExceptions | `Array of Strings` | Defines a list of biddercodes or module names that are exempt from the enforcement of this Purpose. | ["bidderA", "userID-module-B"] | -| gdpr.rules[].softVendorExceptions | `Array of Strings` | Defines a list of biddercodes or module names that are exempt from the enforcement of vendor signals for this purpose. Unlike with `vendorExceptions`, Purpose consent is still enforced . | ["bidderA", "userID-module-B"] | +| gdpr.rules[].enforcePurpose | `Boolean` | Determines whether to enforce the purpose consent. The default in Prebid.js 3.x was not to enforce any purposes. Prebid.js 4.0 and later require legal basis for Purposes 1 and 2 by default. | true | +| gdpr.rules[].enforceVendor | `Boolean` | Determines whether to check vendor signals for this purpose. The default in Prebid.js 3.x is not to check vendor signals. Prebid.js 4.0 and later require legal basis for Purposes 1 and 2 by default. | true | +| gdpr.rules[].vendorExceptions | `Array of Strings` | Defines a list of biddercodes or module names that are exempt from determining legal basis for this Purpose. **Note:** Prebid.org recommends working with a privacy lawyer before making enforcement exceptions for any vendor. | ["bidderA", "userID-module-B"] | +| gdpr.rules[].softVendorExceptions | `Array of Strings` | Defines a list of biddercodes or module names that are exempt from the checking vendor signals for this purpose. Unlike with `vendorExceptions`, Purpose consent is still checked. **Note:** Prebid.org recommends working with a privacy lawyer before making enforcement exceptions for any vendor. | ["bidderA", "userID-module-B"] | | gdpr.rules[].eidsRequireP4Consent | `Boolean` | Only relevant on the personalizedAds `purpose`. If true, user IDs and EIDs will not be shared without evidence of consent for TCF Purpose 4. If false, evidence of consent for any of Purposes 2-10 is sufficient for sharing user IDs and EIDs. Defaults to false. See [note](#note-transmitEids) | true | | strictStorageEnforcement | `Boolean` | If false (the default), allows some use of storage regardless of purpose 1 consent - see [note](#strictStorageEnforcement) below | true | Notes: -* By default, Prebid allows some limited use of storage even when purpose 1 consent was not given: this is limited to non-PII, such as [category translation mappings](/dev-docs/modules/categoryTranslation.html), or temporary test data used to probe the browser's storage features. If `strictStorageEnforcement` is true, purpose 1 consent will always be enforced for any access to storage. -* To accomodate Prebid.js modules and adapters that don't have GVL IDs, the vendorExceptions list is based on Prebid.js biddercodes instead of Global Vendor List (GVL) IDs (i.e. "bidderA" instead of "12345"). +* By default, Prebid allows some limited use of storage even when purpose 1 consent was not given: this is limited to non-PII, such as [category translation mappings](/dev-docs/modules/categoryTranslation.html), or temporary test data used to probe the browser's storage features. If `strictStorageEnforcement` is true, Purpose 1 consent will always be enforced for any access to storage. +* To accommodate Prebid.js modules and adapters that don't have GVL IDs, the vendorExceptions list is based on Prebid.js biddercodes instead of Global Vendor List (GVL) IDs (i.e. "bidderA" instead of "12345"). * An alternate way of establishing a GVL mapping is to define a 'gvlMapping' object: ```javascript pbjs.setConfig({ gvlMapping: { - bidderA: 12345, + bidderA: 12345, bidderB: 67890 } }); @@ -95,13 +100,15 @@ pbjs.setConfig({ The following examples cover a range of use cases and show how Prebid.js supports configuration of different business rules. +{% include dev-docs/vendor-exception.md %} + 1. Restrict device access activity and basic ads. These are the default values (in Prebid.js 4.0) if the module is included in the build. ```javascript pbjs.setConfig({ consentManagement: { gdpr: { - cmpApi: 'iab', // activates the enforcement module + cmpApi: 'iab', // activates the control module defaultGdprScope: true, rules: [{ // these are the default values purpose: "storage", @@ -111,10 +118,17 @@ configuration of different business rules. purpose: "basicAds", enforcePurpose: true, enforceVendor: true + },{ + purpose: "personalizedAds", + enforcePurpose: true, + enforceVendor: true },{ purpose: "measurement", enforcePurpose: true, enforceVendor: true + },{ + purpose: "transmitPreciseGeo", + enforcePurpose: true }] } } @@ -142,9 +156,9 @@ configuration of different business rules. enforcePurpose: true, enforceVendor: true },{ - purpose: "basicAds", - enforcePurpose: true, - enforceVendor: true, + purpose: "basicAds", + enforcePurpose: true, + enforceVendor: true, vendorExceptions: ["firstPartyBidder"] }] ``` @@ -168,38 +182,40 @@ configuration of different business rules. purpose: "measurement", enforcePurpose: true, enforceVendor: true, - vendorExceptions: ["analyticsB"] + vendorExceptions: ["analyticsB"] }] ``` -## Basic Enforcement +## Basic Legal Basis Prebid.js does not have access to the Global Vendor List (GVL), so it implements a "basic" form of TCF 'legal basis' validation using the supplied consent string. -A goal of 'basic enforcement' is to confirm that there's enough evidence of consent to pass data on to vendors who do have access to the GVL and can fully parse and enforce. +A goal of 'basic legal basis' is to confirm that there's enough evidence of consent to pass data on to vendors who do have access to the GVL and can fully parse and take any necessary action. Evidence of consent for a particular purpose or vendor means that: -* Prebid.js has the the user's purpose or vendor consent, or +* Prebid.js has the the user's vendor purpose or vendor consent, or * (for Purpose 2 only) we've confirmed the user's Legitimate Intereset (LI) Transparency is established for this purpose or vendor. Before allowing an activity tied to a TCF-protected Purpose for a given vendor, one of these scenarios must be true: -* Configuration rules enforce both consent and vendor signals and: +* Configuration rules check both consent and vendor signals and: * we have evidence of consent for both, or * we have evidence of consent for the purpose, and the vendor is excepted through `softVendorException`, or * the vendor is excepted through `vendorExceptions`; -* Configuration rules enforce only purpose consent and either: +* Configuration rules check only purpose consent and either: * we have evidence of consent for the purpose, or * the vendor is excepted through `vendorExceptions`; -* Configuration rules enforce only vendor signals and either: +* Configuration rules check only vendor signals and either: * we have evidence of consent for the vendor, or * the vendor is excepted through either `softVendorExceptions` or `vendorExceptions`; -* Configuration rules enforce neither purpose consent nor vendor signal. +* Configuration rules check neither purpose consent nor vendor signal. See the [IAB TCF Consent String Format](https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework/blob/master/TCFv2/IAB%20Tech%20Lab%20-%20Consent%20string%20and%20vendor%20list%20formats%20v2.md) for details. +Before allowing an activity tied to a TCF-protected Purpose for a publisher module, such as Generic Analytics, SharedId, Pub-provided-id, configuration rules check for the relevant publisher purpose consent instead of vendor consent. IAB Europe officials have written to Prebid that "When one is seeking a signal indicating whether the Publisher has had their consent (or legitimate interest) legal basis established to the data subject by the CMP, one should examine the Publisher Purposes Transparency and Consent string segment signals, if present. The core string PurposesConsent bit sequence is intended solely to represent disclosures made by the CMP in the context of Vendors." + ### Note on Extended User IDs @@ -213,7 +229,7 @@ By default, sending user IDs and EIDs to bid adapters or RTD modules (the `trans * We have evidence of consent for any purpose between 2 and 10, and the vendor is excepted through `softVendorException` in at least one of: `basicAds`, `personalizedAds`, or `measurement`; * The vendor is excepted through `vendorExceptions` in at least one of `basicAds`, `personalizedAds`, or `measurement`. -This behavior can be changed to the same "basic enforcement" algorithm described above, tied to TCF Purpose 4, by setting `eidsRequireP4Consent: true` on a `personalizedAds` rule: +This behavior can be changed to the same "basic legal basis" algorithm described above, tied to TCF Purpose 4, by setting `eidsRequireP4Consent: true` on a `personalizedAds` rule: ```javascript ... @@ -225,17 +241,17 @@ This behavior can be changed to the same "basic enforcement" algorithm described ## Build the Package -Follow the basic build instructions in the GitHub Prebid.js repo's main [README](https://github.com/prebid/Prebid.js/blob/master/README.md). Include the base consent management module and this enforcement module as additional options on the **gulp build** command: +Follow the basic build instructions in the GitHub Prebid.js repo's main [README](https://github.com/prebid/Prebid.js/blob/master/README.md). Include the base consent management module and this control module as additional options on the **gulp build** command: ```bash -gulp build --modules=consentManagement,gdprEnforcement,bidAdapter1,bidAdapter2 +gulp build --modules=consentManagement,tcfControl,bidAdapter1,bidAdapter2 ``` You can also use the [Prebid.js Download](/download.html) page. ## Further Reading -* [EU GDPR Consent Management Module](/dev-docs/modules/consentManagement.html) +* [EU GDPR Consent Management Module](/dev-docs/modules/consentManagementTcf.html) * [IAB TCF Implementation Guidelines](https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework/blob/master/TCFv2/TCF-Implementation-Guidelines.md) * [IAB TCF2 Consent String Format](https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework/blob/master/TCFv2/IAB%20Tech%20Lab%20-%20Consent%20string%20and%20vendor%20list%20formats%20v2.md) * [Prebid TCF2 Support](https://docs.google.com/document/d/1fBRaodKifv1pYsWY3ia-9K96VHUjd8kKvxZlOsozm8E/edit#) diff --git a/dev-docs/modules/topLevelPaapi.md b/dev-docs/modules/topLevelPaapi.md new file mode 100644 index 0000000000..735846a760 --- /dev/null +++ b/dev-docs/modules/topLevelPaapi.md @@ -0,0 +1,124 @@ +--- +layout: page_v2 +page_type: module +title: Module - topLevelPaapi +description: Run top level PAAPI auctions +module_code : topLevelPaapi +display_name : Run top level PAAPI auctions +enable_download : true +sidebarType : 1 +--- + +# Top level PAAPI module + +This module allows Prebid.js to support PAAPI by running on-device auctions as the top level seller. + +## Comparison with paapiForGpt + +Both this module and [paapiForGpt](/dev-docs/modules/paapiForGpt.html) allow bid adapters to participate in PAAPI auctions as component sellers. + +With paapiForGpt, bidders' intent to participate in PAAPI is submitted to GPT, which can then decide how to run the on-device auction. +With topLevelPaapi, Prebid.js directly manages the on-device auction, trading ease of use for more control. + +## Publisher Integration + +To use topLevelPaapi: + +- you'll need a [decision logic URL](https://github.com/WICG/turtledove/blob/main/FLEDGE.md#23-scoring-bids) that has been [attested](https://github.com/privacysandbox/attestation) with Google. How to write decision logic and how to attest it are both out of scope for this document. +- include this module with your Prebid.js bundle; this also automatically includes the [PAAPI module](/dev-docs/modules/paapi.html) + + ```bash + gulp build --modules=topLevelPaapi,... + ``` + +- [configure this module](#config) +- render PAAPI bids (see [examples](#examples)) + + +## Module Configuration + +This module exposes the following settings: + +{: .table .table-bordered .table-striped } +|Name |Type |Description |Notes | +| ------------ | ------------ | ------------ |------------ | +|paapi.topLevelSeller | Object | | | +|paapi.topLevelSeller.auctionConfig | Object | Base [AuctionConfig](https://github.com/WICG/turtledove/blob/main/FLEDGE.md#2-sellers-run-on-device-auctions) to use in `runAdAuction` | Only `seller` and `decisionLogicURL` are required | +|paapi.topLevelSeller.autorun | Boolean | If `true` (the default) , automatically start PAAPI auctions as soon as possible | | +|paapi.topLevelSeller.overrideWinner | Boolean | If `true`, replace contextual winners with PAAPI winners as they are rendered. Default is `false`. | see [example](#overrideWinner) | + + +## Examples + +### Basic Example using renderAd + +```javascript +pbjs.setConfig({ + paapi: { + enabled: true, + defaultForSlots: 1, + topLevelSeller: { + auctionConfig: { + seller: 'https://www.publisher.com', + decisionLogicURL: 'https://www.publisher.com/decisionLogic.js', + }, + } + } +}) +``` + +With the above, `navigator.runAdAuction` is invoked once per ad unit, and the result is made available through [`getPAAPIBids`](/dev-docs/publisher-api-reference/getPAAPIBids.html): + +```javascript +pbjs.requestBids({ + bidsBackHandler: function(contextualBids) { + pbjs.getPAAPIBids().then(paapiBids => { + Object.entries(contextualBids).forEach(([adUnitCode, {bids}]) => { + const paapiWinner = paapiBids[adUnitCode]; + const contextualWinner = bids?.[0]; + const targetDoc = document.getElementById(adUnitCode).contentDocument // assumes there's an iframe with id = adUnitCode + // PAAPI bids can be rendered as if they were "normal" Prebid bids + if (paapiWinner) { + pbjs.renderAd(targetDoc, paapiWinner.adId) + } else { + pbjs.renderAd(targetDoc, contextualWinner.adId) + } + }) + }) + } +}) +``` + + +### Automatically render PAAPI winners instead of contextual bids + +When `overrideWinner` is enabled, rendering a "normal" Prebid bid will instead render a PAAPI bid, if the PAAPI auction for the slot yielded a winner. This is an easy way include the result of PAAPI auctions without having to change the rendering logic. For example: + +```javascript +pbjs.setConfig({ + paapi: { + enabled: true, + defaultForSlots: 1, + topLevelSeller: { + auctionConfig: { + seller: 'https://www.publisher.com', + decisionLogicURL: 'https://www.publisher.com/decisionLogic.js', + }, + overrideWinner: true + } + } +}); + +pbjs.requestBids({ + bidsBackHandler: function() { + // if Prebid wins the GAM auction (and renders a Prebid creative), the following will render PAAPI winners over the Prebid winners + pbjs.setTargetingForGPTAsync(); + } +}) +``` + +## Related Reading + +- [PAAPI module](/dev-docs/modules/paapi.html) +- [FLEDGE](https://github.com/WICG/turtledove/blob/main/FLEDGE.md) +- [getPAAPIBids](/dev-docs/publisher-api-reference/getPAAPIBids.html) diff --git a/dev-docs/modules/topicsFpdModule.md b/dev-docs/modules/topicsFpdModule.md index 30eff8b5e0..27346a3c01 100644 --- a/dev-docs/modules/topicsFpdModule.md +++ b/dev-docs/modules/topicsFpdModule.md @@ -55,15 +55,34 @@ pbjs.setConfig({ userSync: { // ..., topics: { - maxTopicCaller: 3, // SSP rotation + maxTopicCaller: 4, bidders: [{ bidder: 'pubmatic', - iframeURL: 'https://ads.pubmatic.com/AdServer/js/topics/topics_frame.html', - expiry: 7 // Configurable expiry days - },{ - bidder: 'appnexus', - iframeURL: 'https://appnexus.com:8080/topics/fpd/topic.html', // dummy URL - expiry: 7 // Configurable expiry days + iframeURL: 'https://ads.pubmatic.com/AdServer/js/topics/topics_frame.html' + }, { + bidder: 'rtbhouse', + iframeURL: 'https://topics.authorizedvault.com/topicsapi.html' + }, { + bidder: 'openx', + iframeURL: 'https://pa.openx.net/topics_frame.html' + }, { + bidder: 'improvedigital', + iframeURL: 'https://hb.360yield.com/privacy-sandbox/topics.html' + }, { + bidder: 'onetag', + iframeURL: 'https://onetag-sys.com/static/topicsapi.html' + }, { + bidder: 'taboola', + iframeURL: 'https://cdn.taboola.com/libtrc/static/topics/taboola-prebid-browsing-topics.html' + }, { + bidder: 'discovery', + iframeURL: 'https://api.popin.cc/topic/prebid-topics-frame.html' + }, { + bidder: 'undertone', + iframeURL: 'https://creative-p.undertone.com/spk-public/topics_frame.html' + }, { + bidder: 'vidazoo', + iframeURL: 'https://static.vidazoo.com/topics_api/topics_frame.html' }] } // ... diff --git a/dev-docs/modules/userId.md b/dev-docs/modules/userId.md index 3025b6e144..911cd4b2e7 100644 --- a/dev-docs/modules/userId.md +++ b/dev-docs/modules/userId.md @@ -39,7 +39,7 @@ Not all bidder adapters support all forms of user ID. See the tables below for a ## User ID, GDPR, Permissions, and Opt-Out -When paired with the [Consent Management](/dev-docs/modules/consentManagement.html) module, privacy rules are enforced: +When paired with the [Consent Management](/dev-docs/modules/consentManagementTcf.html) module, privacy rules are enforced: * The module checks the GDPR consent string * If no consent string is available OR if the user has not consented to Purpose 1 (local storage): @@ -71,9 +71,13 @@ Publishers using Google AdManager may want to sync one of the identifiers as the The PPID in GAM (which is unrelated to the PPID UserId Submodule) has strict rules; refer to [Google AdManager documentation](https://support.google.com/admanager/answer/2880055?hl=en) for them. Please note, Prebid uses a [GPT command](https://developers.google.com/publisher-tag/reference#googletag.PubAdsService) to sync identifiers for publisher convenience. It doesn't currently work for instream video requests, as Prebid typically interacts with the player, which in turn may interact with IMA. IMA does has a [similar method](https://developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/reference/js/google.ima.ImaSdkSettings#setPpid) as GPT, but IMA does not gather this ID from GPT. {: .table .table-bordered .table-striped } + | Param under userSync | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | ppid | Optional | String | Must be a source from the [pbjs.getUserIdsAsEids()](#getUserIdsAsEids) array | `"pubcid.org"` | +| autoRefresh | Optional | Boolean | Refresh IDs automatically when their configuration changes. Defaults to `false`. | `true` | +| retainConfig | Optional | Boolean | When set to `false`, previously configured IDs are removed if they are not present in updated configuration. Defaults to `true`. | `false` | +| enforceStorageType | Optional | Boolean | Restrict submodules to storing IDs only in the location defined by `storage.type`. | `true` | The table below has the options that are common across ID systems. See the sections below for specific configuration needed by each system and examples. @@ -83,12 +87,13 @@ The table below has the options that are common across ID systems. See the secti {% assign count = 0 %} {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | -| name | Required | String | May be any of the following values: {% for page in userid_pages -%}{% if count == 1 %}{{ name_string │ append: ", " -}}{% endif %}{% assign count = 1 %}`"{{ name_string │ append: name_string -}}{{ name_string │ append: page.useridmodule -}}"`{% endfor %} | `"unifiedId"` | +| name | Required | String | May be any of the following values: {% for page in userid_pages -%}`"{{ page.useridmodule -}}"`{% if forloop.last == false -%}, {% endif -%}{% endfor -%} | `"unifiedId"` | | params | Based on User ID sub-module | Object | | | | bidders | Optional | Array of Strings | An array of bidder codes to which this user ID may be sent. | `['bidderA', 'bidderB']` | -| storage | Optional | Object | The publisher can specify some kind of local storage in which to store the results of the call to get the user ID. This can be cookie, HTML5 storage or both. This is not needed when `value` is specified or the ID system is managing its own storage | | +| storage | Optional | Object | The publisher can specify some kind of local storage in which to store the results of the call to get the user ID. This can be a cookie, HTML5 storage or both.| | | storage.type | Required | String | Must be `"cookie"`, `"html5"` or `"cookie&html5"`. This is where the results of the user ID will be stored. | `"cookie"` | | storage.name | Required | String | The name of the cookie or html5 local storage where the user ID will be stored. | `"_unifiedId"` | | storage.expires | Strongly Recommended | Integer | How long (in days) the user ID information will be stored. If this parameter isn't specified, session cookies are used in cookie-mode, and local storage mode will create new IDs on every page. | `365` | @@ -97,7 +102,7 @@ The table below has the options that are common across ID systems. See the secti ## Permissions -Publishers can control which user ids are shared with the bid adapters they choose to work with by using the bidders array. The bidders array is part of the User id module config, publisher may choose to send an id to some bidders but not all, the default behavior is that each user id go to all bid adapters the publisher is working with. +Publishers can control which user ids are shared with the bid adapters they choose to work with by using the bidders array. The bidders array is part of the User id module config, publisher may choose to send an id to some bidders but not all, the default behavior is that each user id goes to all bid adapters the publisher is working with. Use the optional `bidders` parameter to define an array of bidder codes to which this user ID may be sent. @@ -159,7 +164,7 @@ It is possible for a user id submodule to populate several identifiers including This can be configured inside the `userSync` object in the following manner: -Let's say that the UID2 token populated by the trade desk user id submodule has the value 'uid2_value' and the UID2 token populated by Liveintent user id module has the value 'liveIntentUid2_value' (The actual identifiers populated in this case should be one and the same however the values are written differently in order to help the reader understand the source from which the identifiers get picked up from) +Let's say that the UID2 token populated by the UID2 user ID submodule has the value 'uid2_value' and the UID2 token populated by Liveintent user id module has the value 'liveIntentUid2_value' (The actual identifiers populated in this case should be one and the same however the values are written differently in order to help the reader understand the source from which the identifiers get picked up from) ```javascript "userSync": { @@ -202,9 +207,22 @@ The corresponding user id object and the eids array will look like this: {% assign userid_pages = site.pages | where: "layout", "userid" | sort_natural: "title" %} + + + + + + + {% for page in userid_pages %} -
  • {{page.title}}
  • + + + + + + {% endfor %} +
    ID System NamePrebid.js Attr: bidRequest.userIdEID SourceExample
    {{page.title}}{{page.bidRequestUserId}}{{page.eidsource}}{{page.example}}
    ## Bidder Adapter Implementation @@ -216,50 +234,6 @@ To add a custom data type for the response of `pbjs.getUserIdsAsEids()`, see oth Bidders that want to support the User ID module in Prebid.js need to update their bidder adapter to read the indicated bidRequest attributes and pass them to their endpoint. -{: .table .table-bordered .table-striped } -| ID System Name | ID System Host | Prebid.js Attr: bidRequest.userId. | EID Source | Example Value | -| --- | --- | --- | --- | --- | --- | -| 33Across ID | 33Across | 33acrossId | 33across.com | "1111" | -| Admixer ID | Admixer | admixerId | admixer.net | "1111" | -| adQuery QiD | adQuery | qid | adquery.io | "p9v2dpnuckkzhuc..." | -| Adriver ID | Adriver | adriverId | adriver.ru | "1111" | -| Adtelligent ID | Adtelligent | adtelligentId | adtelligent.com | `"1111"` | -| AMX ID | AMX | amxId | amxdt.net | "3ca11058-..." | -| BritePool ID | BritePool | britepoolid | britepool.com | "1111" | -| AudienceOne ID | DAC | dacId | dac.co.jp | {"id": "1111"} | -| DeepIntent ID | Deep Intent | deepintentId | deepintent.com | "1111" | -| DMD ID | DMD | dmdId | hcn.health | "1111" | -| Czech Ad ID | czechAdId | czechAdId | czechadid.cz | "1111" | -| CriteoID | Criteo | criteoId | criteo.com | "1111" | -| Fabrick ID | Neustar | fabrickId | neustar.biz | "1111" | -| FLoC ID | n/a | flocId | | | -| GrowthCode ID | GrowthCode | growthCodeId | growthcode.io | "1111" | -| Hadron ID | Audigent | hadronId | audigent.com | {"hadronId":"user-hadron-id", "auSeg":["segment1", "segment2"]} | -| ID+ | Zeotap | IDP | zeotap.com | "1111" | -| ID5 ID | ID5 | id5id | id5-sync.com | {uid: "1111", ext: { linkType: 2, abTestingControlGroup: false } } | -| IdentityLink | LiveRamp | idl_env | liveramp.com | "1111" | -| Intent IQ ID | Intent IQ | intentiqid | intentiq.com | "1111" | -| Kinesso ID | Kinesso | kpuid | kpuid.com | "1111" | -| LiveIntent ID | Live Intent | lipb.lipbid | liveintent.com | "1111" | -| Lotame Panorama ID | Lotame | lotamePanoramaId | crwdcntrl.net | "e4b9..." | -| MediaWallah OpenLink ID | MediaWallah | mwOpenLinkId | mediawallahscript.com | "1111" | -| merkleID | Merkle | merkleId | merkleinc.com | "1111" | -| naveggId | Navegg | naveggId | navegg.com | "1111" | -| netID | netID | netId | netid.de | "fH5A..." | -| Novatiq ID | Novatiq | novatiqId | novatiq.com | "1111" | -| Parrable ID | Parrable | parrableId | parrable.com | {"eid":"01.15946..."} | -| Publisher Link ID | n/a | publinkId | epsilon.com | | -| PubProvided ID | n/a | pubProvidedId | publisher domain | "1111" | -| Quantcast ID | n/a | quantcastId | quantcast.com | "1111" | -| Tapad ID | Tapad | tapadId | tapad.com | "1111" | -| Teads ID | Teads | teadsId | teads.com | "1111" | -| SharedID (PBJS 5.x) | n/a | pubcid | pubcid.org | "1111" | -| SharedID (PBJS 4.x)| Prebid | sharedid | sharedid.org | {"id":"01EAJWWN...", "third":"01EAJ..."} | -| Unified ID | Trade Desk | tdid | adserver.org | "1111" | -| ConnectID | Yahoo | connectId | yahoo.com | {"connectId": "72d04af6..."} | -| FreePass ID | FreePass | freepassId | | "1111" | -| UtiqMtp ID | Utiq | utiqMtpId | utiq-mtp.com | "1111" | - For example, the adapter code might do something like: ```javascript @@ -344,9 +318,11 @@ If you're an ID provider that wants to get on this page: * Add your *IdSystem name into the modules/.submodules.json file * Follow all the guidelines in the [contribution page](https://github.com/prebid/Prebid.js/blob/master/CONTRIBUTING.md). * Submit a Pull Request against the [Prebid.js repository](https://github.com/prebid/Prebid.js). -* Fork the prebid.org [documentation repository](https://github.com/prebid/prebid.github.io), modify /dev-docs/modules/userId.md, /download.md, and submit a documentation Pull Request. - - +* Update the Prebid docs + * Fork the prebid.org [documentation repository](https://github.com/prebid/prebid.github.io) + * Add `/dev-docs/modules/userid-submodules/.md` + * Add a new row to `/dev-docs/modules/userId.md#prebidjs-adapters` + * Submit a documentation Pull Request ## ESP Configurations @@ -357,6 +333,7 @@ Please find more details [Share encrypted signals with bidders (Beta)](https://s Alternatively, GAM can now pull IDs from Prebid for UserId submodules that [register with GAM](https://services.google.com/fb/forms/encryptedsignalsforpublishers-signalcollectorform/) For those registered submodules, publishers can [select Prebid UserID module (Beta) under "Signal collection deployment."](https://support.google.com/admanager/answer/10488752?hl=en). Publishers selecting this option should not also select those identifiers in the `encryptedSignalSources.sources.source` array. {: .table .table-bordered .table-striped } + | Param under userSync | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | encryptedSignalSources | Optional | Object | Publisher can specify the ESP config by adding encryptedSignal Object under userSync Object | | @@ -411,4 +388,4 @@ This will have no effect until you call the `registerSignalSources` API. This me ## Further Reading * [Prebid.js Usersync](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Configure-User-Syncing) -* [GDPR ConsentManagement Module](/dev-docs/modules/consentManagement.html) +* [TCF ConsentManagement Module](/dev-docs/modules/consentManagementTcf.html) diff --git a/dev-docs/modules/userid-submodules/33across.md b/dev-docs/modules/userid-submodules/33across.md index 903bc2a9df..c923df0b9d 100644 --- a/dev-docs/modules/userid-submodules/33across.md +++ b/dev-docs/modules/userid-submodules/33across.md @@ -3,6 +3,9 @@ layout: userid title: 33Across ID description: 33Across ID User ID sub-module useridmodule: 33acrossIdSystem +bidRequestUserId: 33acrossId +eidsource: 33across.com +example: '"1111"' --- @@ -21,15 +24,18 @@ gulp build --modules=33acrossIdSystem,userId The following configuration parameters are available: {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | The name of this sub-module | `"33acrossId"` | | params ||| Details for the sub-module initialization || | params.pid | Required | String | Partner ID (PID) | Please reach out to [PrebidUIM@33across.com](mailto:PrebidUIM@33across.com) and request your PID | -| params.storeFpid | Optional | Boolean | Indicates whether a supplemental first-party ID may be stored to improve addressability | `false` (default) or `true` | +| params.hem | Optional | String | Hashed email address in sha256 format | `"ba4235544d6c91865fb07.."` | +| params.storeFpid | Optional | Boolean | Indicates whether a supplemental first-party ID may be stored to improve addressability | `true` (default) or `false` | +| params.storeTpid | Optional | Boolean | Indicates whether a supplemental third-party ID may be stored to improve addressability | `true` (default) or `false` | | storage ||||| | storage.name | Required | String | The name of the cookie or html5 local storage key | `"33acrossId"` (recommended) | -| storage.type | Required | String | This is where the 33across user ID will be stored | `"html5"` (recommended) or `"cookie"` | +| storage.type | Required | String | This is where the 33across user ID will be stored | `"cookie&html5"` (recommended) or `"html5"` or `"cookie"` | | storage.expires | Strongly Recommended | Number | How long (in days) the user ID information will be stored | `30` (recommended) | | storage.refreshInSeconds | Strongly Recommended | Number | How many seconds until the ID is refreshed | `8 * 3600` (recommended) | @@ -41,12 +47,11 @@ pbjs.setConfig({ userIds: [{ name: "33acrossId", params: { - pid: "0010b00002GYU4eBAH", // Example ID - storeFpid: true + pid: "0010b00002GYU4eBAH" // Example ID }, storage: { name: "33acrossId", - type: "html5", + type: "cookie&html5", expires: 30, refreshInSeconds: 8 * 3600 } @@ -54,3 +59,7 @@ pbjs.setConfig({ } }); ``` + +## HEM Collection + +33Across ID System supports user's hashed emails (HEMs). HEMs could be collected from 3 different sources in following priority order: `hem` configuration parameter, global `_33across.hem.sha256` field or from storage (cookie or local storage). diff --git a/dev-docs/modules/userid-submodules/admixer.md b/dev-docs/modules/userid-submodules/admixer.md index 1ceb62cafb..4a56a0f0d3 100644 --- a/dev-docs/modules/userid-submodules/admixer.md +++ b/dev-docs/modules/userid-submodules/admixer.md @@ -3,6 +3,9 @@ layout: userid title: AdmixerID description: AdmixerID User ID sub-module useridmodule: admixerIdSystem +bidRequestUserId: admixerId +eidsource: admixer.net +example: '"1111"' --- @@ -12,12 +15,14 @@ The Admixer privacy policy is at Add Admixer ID module to your Prebid.js package with: -{: .alert.alert-info :} +```bash gulp build --modules=admixerIdSystem +``` ## AdmixerID Configuration {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | `"admixerId"` | `"admixerId"` | diff --git a/dev-docs/modules/userid-submodules/adplus.md b/dev-docs/modules/userid-submodules/adplus.md new file mode 100644 index 0000000000..fefbb4611c --- /dev/null +++ b/dev-docs/modules/userid-submodules/adplus.md @@ -0,0 +1,43 @@ +--- +layout: userid +title: AdPlus ID +description: AdPlus ID User ID sub-module +useridmodule: adplusIdSystem +bidRequestUserId: adplusId +eidsource: ad-plus.com.tr +example: '"1111"' +--- + +## AdPlus ID Configuration + +Please make sure to add the AdPlus user ID sub-module to your Prebid.js package with: + +```shell +gulp build --modules=adplusIdSystem,userId +``` + +{: .table .table-bordered .table-striped } + +| Param under userSync.userIds[] | Scope | Type | Description | Example | +| --- | --- | --- | --- | --- | +| name | Required | String | The name of this module: `"adplusId"` | `"adplusId"` | +| storage.expires | Optional | Number | How long (in days) the user ID information will be stored | `7` (recommended) | +| storage.refreshInSeconds | Optional | Number | How many seconds until the ID is refreshed | `24 * 3600` (recommended) | + +## AdPlus ID Example + +```javascript +pbjs.setConfig({ + userSync: { + userIds: [{ + name: "adplusId", + storage: { + name: "adplusId", + type: "cookie&html5", + expires: 7, + refreshInSeconds: 24 * 3600 + } + }] + } +}); +``` diff --git a/dev-docs/modules/userid-submodules/adquery.md b/dev-docs/modules/userid-submodules/adquery.md index df509d54ea..7b24a99d9b 100644 --- a/dev-docs/modules/userid-submodules/adquery.md +++ b/dev-docs/modules/userid-submodules/adquery.md @@ -3,6 +3,9 @@ layout: userid title: adQuery QiD description: adQuery QiD User ID sub-module useridmodule: adqueryIdSystem +bidRequestUserId: qid +eidsource: adquery.io +example: '"p9v2dpnuckkzhuc"' --- diff --git a/dev-docs/modules/userid-submodules/adriver.md b/dev-docs/modules/userid-submodules/adriver.md index e1f6b48b7f..a4d57747aa 100644 --- a/dev-docs/modules/userid-submodules/adriver.md +++ b/dev-docs/modules/userid-submodules/adriver.md @@ -3,11 +3,15 @@ layout: userid title: Adriver ID description: Adriver ID User ID sub-module useridmodule: adriverId +bidRequestUserId: adriverId +eidsource: adriver.ru +example: '"1111"' --- ## Adriver ID Configuration {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | The name of this module: `"adriverId"` | `"adriverId"` | diff --git a/dev-docs/modules/userid-submodules/adtelligent.md b/dev-docs/modules/userid-submodules/adtelligent.md index ac210e75fd..f10adc76b6 100644 --- a/dev-docs/modules/userid-submodules/adtelligent.md +++ b/dev-docs/modules/userid-submodules/adtelligent.md @@ -3,6 +3,9 @@ layout: userid title: Adtelligent description: Adtelligent User ID sub-module useridmodule: adtelligentIdSystem +bidRequestUserId: adtelligentId +eidsource: adtelligent.com +example: '"1111"' --- @@ -10,8 +13,9 @@ The [Adtelligent](https://adtelligent.com) ID system is a unique per-session use Add it to your Prebid.js package with: -{: .alert.alert-info :} +```bash gulp build --modules=userId,adtelligentIdSystem +``` ## Adtelligent Configuration diff --git a/dev-docs/modules/userid-submodules/amxrtb.md b/dev-docs/modules/userid-submodules/amxrtb.md index 8ab6d0eef4..b03199e172 100644 --- a/dev-docs/modules/userid-submodules/amxrtb.md +++ b/dev-docs/modules/userid-submodules/amxrtb.md @@ -3,6 +3,9 @@ layout: userid title: AMX ID description: AMX ID User ID sub-module useridmodule: amxIdSystem +bidRequestUserId: amxId +eidsource: amxdt.net +example: '"3ca11058-..."' --- diff --git a/dev-docs/modules/userid-submodules/audienceone.md b/dev-docs/modules/userid-submodules/audienceone.md index 74d8d5bfee..158640c893 100644 --- a/dev-docs/modules/userid-submodules/audienceone.md +++ b/dev-docs/modules/userid-submodules/audienceone.md @@ -3,6 +3,9 @@ layout: userid title: AudienceOne ID by DAC description: AudienceOne ID by DAC User ID sub-module useridmodule: dacIdSystem +bidRequestUserId: dacId +eidsource: dac.co.jp +example: {"id": "1111"} --- @@ -11,12 +14,14 @@ Please visit [solutions.dac.co.jp/audienceone](https://solutions.dac.co.jp/audie Add the AudienceOne ID to your Prebid.js Package with: -{: .alert.alert-info :} +```bash gulp build --modules=dacIdSystem +``` ## AudienceOne ID Configuration {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | The name of this module | `"dacId"` | diff --git a/dev-docs/modules/userid-submodules/britepool.md b/dev-docs/modules/userid-submodules/britepool.md index 1ad65a74ff..d96c00a0d5 100644 --- a/dev-docs/modules/userid-submodules/britepool.md +++ b/dev-docs/modules/userid-submodules/britepool.md @@ -3,6 +3,10 @@ layout: userid title: BritePool description: BritePool User ID sub-module useridmodule: britepoolIdSystem +enable_download: false +bidRequestUserId: britepoolid +eidsource: britepool.com +example: '"1111"' --- {: .alert.alert-warning :} @@ -13,8 +17,9 @@ integration partners (such as PubMatic), are able to maximize revenues without c Add it to your Prebid.js package with: -{: .alert.alert-info :} +```bash gulp build --modules=britepoolIdSystem +``` ## BritePool Registration @@ -23,6 +28,7 @@ Please reach out to [prebid@britepool.com](mailto:prebid@britepool.com) and requ ## BritePool Configuration {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | `"britepoolId"` | `"britepoolId"` | diff --git a/dev-docs/modules/userid-submodules/ceeIdSystem.md b/dev-docs/modules/userid-submodules/ceeIdSystem.md new file mode 100644 index 0000000000..2e2194a1c7 --- /dev/null +++ b/dev-docs/modules/userid-submodules/ceeIdSystem.md @@ -0,0 +1,81 @@ +--- +layout: userid +title: CEEIdSystem +description: CEEID User ID sub-module +useridmodule: ceeIdSystem +bidRequestUserId: ceeId +eidsource: ceeid.eu +example: '"1111"' +--- + +## Prebid Configuration + +First, make sure to add ceeIdSystem to your Prebid.js package with: + +```bash +gulp build --modules=ceeIdSystem +``` + +## CEEID Configuration + +{: .table .table-bordered .table-striped } + +| Param under userSync.userIds[] | Scope | Type | Description | Example | +| --- | --- | --- | --- | --- | +| name | Required | String | The name of CEEID user ID module. | `"ceeId"` | +| storage | Required | Object | Container of storage options. | | +| storage.type | Required | String | Type of storage to use | `"cookie"` | +| storage.name | Required | String | Name of storage to set | `"ceeIdToken"` | +| storage.expires | Optional | Int | Time when storage should expire it is recommended to use this options otherwise storage last only during session | `7` | +| storage.refreshInSeconds | Optional | Int | Time when storage value and expiration date will get refreshed in seconds | `360` | +| params | Required | Object | Container of all module params. | | +| params.publisherId | Required | String | Required param which defines your publisher ID to send in query | `'123'` | +| params.type | Required | String | Required param which defines type of encoding used on user email. Use 'email' if HEM was encoded by base64 or use 'hex' if it was encoded by hex | `'hex'` | +| params.value | Required | String | Required param where you pass HEM value | `'exampleHEMValue'` | +| params.cookieName | Optional | String | Your custom name of token to read it is only used if second way of integration is chosen. | `'myExampleCookieName'` | + +## CEEID Examples + +You can configure this submodule in your `userSync.userIds[]` configuration. We have two implementation methods depending on the publisher's needs. The first method we suggest for publishers is to provide appropriate data that will allow you to query the endpoint to retrieve the ceeId token. To query the endpoint correctly, you will need the publisher's ID in the params.publisheId field. In addition, the HEM type, i.e. how the user's email was encoded, we consider two methods: base64 encoding and hex encoding. The value of HEM should be passed in the params.value field. + +```javascript +pbjs.setConfig({ + userSync: { + userIds: [{ + name: 'ceeId', + storage: { + type: 'cookie', + name: 'ceeIdToken', + expires: 7, + refreshInSeconds: 360 + }, + params: { + publisherId: '123', // Publisher ID + type: 'email', // use 'email' if HEM was encoded by base64 or use 'hex' if it was encoded by hex + value: 'exampleHEMValue', // HEM value + } + }] + } +}); +``` + +The second way is to use a token from a cookie or local storage previously prepared by the publisher. The only thing needed in this approach is to enter the name of the cookie/local storage that the module should use in the params.cookieName field. + +```javascript +pbjs.setConfig({ + userSync: { + userIds: [{ + name: 'ceeId', + storage: { + type: 'cookie', + name: 'ceeIdToken', + expires: 7, + refreshInSeconds: 360 + }, + params: { + cookieName: 'name' // Your custom name of token to read from cookies or local storage + } + }] + } +}); +``` diff --git a/dev-docs/modules/userid-submodules/cpexid.md b/dev-docs/modules/userid-submodules/cpexid.md index ee9a48fa42..f1c543c6c0 100644 --- a/dev-docs/modules/userid-submodules/cpexid.md +++ b/dev-docs/modules/userid-submodules/cpexid.md @@ -3,16 +3,21 @@ layout: userid title: Czech Ad ID (czechAdId) description: Czech Ad ID (czechAdId) User ID sub-module useridmodule: czechAdIdSystem +bidRequestUserId: czechAdId +eidsource: czechadid.cz +example: '"1111"' --- Czech Ad ID is a joint project of publishers of the [CPEx alliance](https://www.cpex.cz/) and [Seznam.cz](https://www.seznam.cz). It is a deterministic user ID that offers cross-domain and cross-device identification. For more information see [czechadid.cz](https://www.czechadid.cz)). -{: .alert.alert-info :} +```bash gulp build --modules=czechAdIdSystem +``` ## czechAdId Configuration {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | The name of this module | `"czechAdId"` | diff --git a/dev-docs/modules/userid-submodules/criteo.md b/dev-docs/modules/userid-submodules/criteo.md index 8e48b94ce2..27d43641bd 100644 --- a/dev-docs/modules/userid-submodules/criteo.md +++ b/dev-docs/modules/userid-submodules/criteo.md @@ -3,6 +3,9 @@ layout: userid title: Criteo ID for Exchanges description: Criteo ID for Exchanges User ID sub-module useridmodule: criteoIdSystem +bidRequestUserId: criteoId +eidsource: criteo.com +example: '"1111"' --- @@ -13,8 +16,9 @@ The Criteo privacy policy is at [www.criteo.com/privacy/](https://www.criteo.com Add it to your Prebid.js package with: -{: .alert.alert-info :} +```bash gulp build --modules=criteoIdSystem +``` ## Criteo ID Configuration diff --git a/dev-docs/modules/userid-submodules/deepintent.md b/dev-docs/modules/userid-submodules/deepintent.md index 6a56d887d6..171b2c0b4d 100644 --- a/dev-docs/modules/userid-submodules/deepintent.md +++ b/dev-docs/modules/userid-submodules/deepintent.md @@ -2,7 +2,10 @@ layout: userid title: Deepintent description: Deepintent User ID sub-module -useridmodule: deepintentIdSystem +useridmodule: deepintentDpesIdSystem +bidRequestUserId: deepintentId +eidsource: deepintent.com +example: '"1111"' --- @@ -17,6 +20,7 @@ DPES ID is free to use and requires a simple registration with DeepIntent. Pleas ## Deepintent DPES ID Configuration {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | The name of this module: `"deepintentId"` | `"deepintentId"` | diff --git a/dev-docs/modules/userid-submodules/dmd.md b/dev-docs/modules/userid-submodules/dmd.md index 7e932dc0c0..95b86aea3f 100644 --- a/dev-docs/modules/userid-submodules/dmd.md +++ b/dev-docs/modules/userid-submodules/dmd.md @@ -3,6 +3,9 @@ layout: userid title: DMD ID by DMD Marketing Corp description: DMD ID by DMD Marketing Corp User ID sub-module useridmodule: dmdIdSystem +bidRequestUserId: dmdId +eidsource: hcn.health +example: '"1111"' --- @@ -12,8 +15,9 @@ For assistance setting up your module, please contact us at console.log({ data })` | +| params.timeoutInMillis | Optional | Number | This is the timeout in milliseconds, which defines the maximum duration before the callback is triggered. The default value is 500. | `450` | +| params.browserBlackList | Optional | String | This is the name of a browser that can be added to a blacklist. | `"chrome"` | +| params.manualWinReportEnabled | Optional | Boolean | This variable determines whether the bidWon event is triggered automatically. If set to false, the event will occur automatically, and manual reporting with reportExternalWin will be disabled. If set to true, the event will not occur automatically, allowing manual reporting through reportExternalWin. The default value is false. | `true` | +| params.domainName | Optional | String | Specifies the domain of the page in which the IntentIQ object is currently running and serving the impression. This domain will be used later in the revenue reporting breakdown by domain. For example, cnn.com. It identifies the primary source of requests to the IntentIQ servers, even within nested web pages. | `"currentDomain.com"` | +| params.gamObjectReference | Optional | Object | This is a reference to the Google Ad Manager (GAM) object, which will be used to set targeting. If this parameter is not provided, the group reporting will not be configured. | `googletag` | +| params.gamParameterName | Optional | String | The name of the targeting parameter that will be used to pass the group. If not specified, the default value is `intent_iq_group`. | `"intent_iq_group"` | +| params.adUnitConfig | Optional | Number | Determines how the `placementId` parameter is extracted in the report (default is 1). Possible values: 1 – adUnitCode first, 2 – placementId first, 3 – only adUnitCode, 4 – only placementId | `1` | +| params.sourceMetaData | Optional | String | This metadata can be provided by the partner and will be included in the requests URL as a query parameter | `"123.123.123.123"` | +| params.sourceMetaDataExternal | Optional | Number | This metadata can be provided by the partner and will be included in the requests URL as a query parameter | `123456` | +| params.iiqServerAddress | Optional | String | The base URL for the IntentIQ API server. If parameter is provided in `configParams`, it will be used. | `"https://domain.com"` | +| params.iiqPixelServerAddress | Optional | String | The base URL for the IntentIQ pixel synchronization server. If parameter is provided in `configParams`, it will be used. | `"https://domain.com"` | +| params.reportingServerAddress | Optional | String | The base URL for the IntentIQ reporting server. If parameter is provided in `configParams`, it will be used. | `"https://domain.com"` | +| params.reportMethod | Optional | String | Defines the HTTP method used to send the analytics report. If set to `"POST"`, the report payload will be sent in the body of the request. If set to `"GET"` (default), the payload will be included as a query parameter in the request URL. |`"GET"` | +| params.siloEnabled | Optional | Boolean | Determines if first-party data is stored in a siloed storage key. When set to `true`, first-party data is stored under a modified key that appends `_p_` plus the partner value rather than using the default storage key. The default value is `false`. | `true` | +| params.groupChanged | Optional | Function | A callback that is triggered every time the user’s A/B group is set or updated. |`(group) => console.log('Group changed:', group)` | +| params.chTimeout | Optional | Number | Maximum time (in milliseconds) to wait for Client Hints from the browser before sending request. Default value is `10ms` | `30` | +| params.additionalParameters | Optional | Array | This parameter allows sending additional custom key-value parameters with specific destination logic (sync, VR, winreport). Each custom parameter is defined as an object in the array. | `[ { parameterName: “abc”, parameterValue: 123, destination: [1,1,0] } ]` | +| params.additionalParameters [0].parameterName | Required | String | Name of the custom parameter. This will be sent as a query parameter. | `"abc"` | +| params.additionalParameters [0].parameterValue | Required | String / Number | Value to assign to the parameter. | `123` | +| params.additionalParameters [0].destination | Required | Array | Array of numbers either `1` or `0`. Controls where this parameter is sent `[sendWithSync, sendWithVr, winreport]`. | `[1, 0, 0]` | ### Configuration example -```javascript -pbjs.setConfig({ - userSync: { - userIds: [ - { - name: "intentIqId", - params: { - partner: 123456, // valid partner id - percentage: 95, - enableCookieStorage: true - }, - storage: { - type: "html5", - name: "intentIqId", // set localstorage with this name - expires: 60, - refreshInSeconds: 4 * 3600, // refresh ID every 4 hours to ensure it's fresh - }, - }, - ], - syncDelay: 3000, - }, -}); -``` - ```javascript pbjs.setConfig({ userSync: { userIds: [{ name: "intentIqId", params: { - partner: 123456 // valid partner id - pcid: PCID_VARIABLE, // string value, dynamically loaded into a variable before setting the configuration - pai: PAI_VARIABLE , // string value, dynamically loaded into a variable before setting the configuration - percentage: 95, - enableCookieStorage: false + partner: 123456, // valid partner id + timeoutInMillis: 500, + browserBlackList: "chrome", + callback: (data) => {...}, // your logic here + groupChanged: (group) => console.log('Group is', group), + manualWinReportEnabled: true, // Optional parameter + domainName: "currentDomain.com", + gamObjectReference: googletag, // Optional parameter + gamParameterName: "intent_iq_group", // Optional parameter + adUnitConfig: 1, // Extracting placementId strategy (adUnitCode or placementId order of priorities) + sourceMetaData: "123.123.123.123", // Optional parameter + sourceMetaDataExternal: 123456, // Optional parameter + reportMethod: "GET", // Optional parameter + chTimeout: 10, // Optional parameter + additionalParameters: [ // Optional parameter + { + parameterName: "abc", + parameterValue: 123, + destination: [1, 1, 0] // sendWithSync: true, sendWithVr: true, winreport: false + }, + { + parameterName: "xyz", + parameterValue: 111, + destination: [0, 1, 1] // sendWithSync: false, sendWithVr: true, winreport: true + } + ] }, storage: { type: "html5", name: "intentIqId", // set localstorage with this name - expires: 60 + expires: 0, + refreshInSeconds: 0 } - }], - syncDelay: 3000 + }] } }); ``` diff --git a/dev-docs/modules/userid-submodules/jixie.md b/dev-docs/modules/userid-submodules/jixie.md new file mode 100644 index 0000000000..8fa3f89cfd --- /dev/null +++ b/dev-docs/modules/userid-submodules/jixie.md @@ -0,0 +1,49 @@ +--- +layout: userid +title: Jixie ID +description: Jixie ID User ID sub-module +useridmodule: jixieId +bidRequestUserId: jixieId +eidsource: jixie.io +example: '"1111"' +--- + + +The Jixie ID module is specially useful for publishers that will connect with Jixie bidder through PrebidServer adapter feature of PrebidJS and/or for publishers that are unable to integrate with the Jixie ID/event script to still acquire the important Jixie client ID for users. + +For assistance setting up your module, please contact us at + +Add the Jixie ID to your Prebid.js Package with: + +```bash +gulp build --modules=userId,jixieIdSystem +``` + +## Jixie ID Registration + +Please reach out to [partners.jixie.io](mailto:partners.jixie.io) to request your `accountid` + +## Jixie ID Configuration + +{: .table .table-bordered .table-striped } + +| Param under userSync.userIds[] | Scope | Type | Description | Example | +| --- | --- | --- | --- | --- | +| name | Required | String | The name of Module | `"jixieId"` | +| params | optional | Object | Container of all module params. | | +| params.accountid | optional | String | This is your `accountid` as provided by Jixie. | `Mo165qXxxx` | + +## DMD ID Example + +```javascript +pbjs.setConfig({ + userSync: { + userIds: [{ + name: 'jixieId', + params: { + accountid: 'Mo165qXxxx' // provided to you by Jixie + } + }] + } +}); +``` diff --git a/dev-docs/modules/userid-submodules/kinesso.md b/dev-docs/modules/userid-submodules/kinesso.md index 0253366081..f8adbb2f04 100644 --- a/dev-docs/modules/userid-submodules/kinesso.md +++ b/dev-docs/modules/userid-submodules/kinesso.md @@ -3,6 +3,9 @@ layout: userid title: Kinesso ID description: Kinesso ID User ID sub-module useridmodule: kinessoIdSystem +bidRequestUserId: kpuid +eidsource: kpuid.com +example: '"1111"' --- @@ -15,6 +18,7 @@ The Kinesso identity solution creates a persistent cross domain authenticated us The Kinesso ID sub adapter sets two cookies, one as a third party cookie and the other as a first party cookie in the publisher's domain. These cookies are merged with the user's hashed email address (when present) server side and sent to Kinesso. The combined output looks like this: {: .table .table-bordered .table-striped } + | kpuid | knsso | hid | account_id | created on | | --- | --- | --- | --- | --- | | `` | `` | `` | `` | `` | @@ -23,8 +27,9 @@ Kinesso will then attach these users to deals ids that they will target in the O Add it to your Prebid.js package with: -{: .alert.alert-info :} +```bash gulp build --modules=kinessoIdSystem +``` ## Kinesso ID Registration @@ -33,6 +38,7 @@ You can set up Kinesso ID sub adapter by contacting Kinesso at =3.0.0) installed on your page in addition to Prebid. Please contact LiveIntent for support in setting up LiveConnect. +This will significantly reduce the size of your Prebid.js bundle and allow you to use the newest features of LiveConnect. All other versions will be deprecated in the future. + + Add the **external** LiveIntent Identity module to your Prebid.js package with: + + ```bash + LiveConnectMode=external gulp build --modules=liveIntentIdSystem + ``` + This is an example of how the `request.userId.lipb` object, which contains the resolution result, would look like: ```json @@ -36,6 +48,13 @@ This is an example of how the `request.userId.lipb` object, which contains the r } ``` +## Configure the LiveConnect Tag +Configuring the LiveConnect tag is a critical step in setting up effective identity resolution on your website. This tag helps capture user interactions, generate first-party cookies, and link these interactions to stable identifiers. By doing so, the LiveConnect tag transforms anonymous site traffic into actionable data, enabling you to better understand and engage with your audience. + +For detailed configuration instructions, refer to the following resources: +[LiveConnect for HIRO Clients Configuration Guide](https://support.liveintent.com/hc/en-us/articles/30245171256724-LiveConnect-Configuration-Guide-for-HIRO-Clients) + +If you need a publisher id or distributor id for the LiveConnect script on the page, please connect your LiveIntent representative for it. If you're not already a LiveIntent customer, feel free to [reach out](https://www.liveintent.com/get-in-touch/) to us. You can also explore the [LiveIntent’s privacy policies](https://www.liveintent.com/services-privacy-policy/). ## How LiveIntent user ID sub-module works @@ -82,7 +101,12 @@ pbjs.setConfig({ ### Multiple user IDs -The attributes `uid2`, `medianet`, `magnite`, `bidswitch`, `pubmatic`, `openx`, `sovrn`, `index` and `thetradedesk` are treated specially by LiveIntent's user ID sub-module. Each of these attributes will result in a separate ID returned by the sub-module. +The attributes `uid2`, `medianet`, `magnite`, `bidswitch`, `pubmatic`, `openx`, `sovrn`, `index`, `thetradedesk`, `sharethrough`, `sonobi`, `vidazoo`, `zetassp`, `triplelift`, `nexxen` and `fpid` are treated specially by LiveIntent's user ID sub-module. Each of these attributes will result in a separate ID returned by the sub-module. Note: `thetradedesk` will be exposed as `tdid` because of historical reasons. + +#### Note + +* `thetradedesk` will be exposed as `tdid` because of historical reasons. +* In order for `segments` to be present in `ortb2.user.data` of the bid requests, you need to configure the [liveIntentRTDProvider](/dev-docs/modules/liveIntentRtdProvider.html) module. For example, in case `uid2` is configured to be requested in addition to the `nonID`, the `request.userId` object would look like the following: @@ -100,9 +124,54 @@ For example, in case `uid2` is configured to be requested in addition to the `no } ``` -NOTE: `uid2` is exposed as part of `lipb` as well as separately as `uid2`. `medianet`, `magnite`, `bidswitch`, `pubmatic`, `openx`, `sovrn`, `index` and `thetradedesk` behave the same way. +NOTE: `uid2` is exposed as part of `lipb` as well as separately as `uid2`. `medianet`, `magnite`, `bidswitch`, `pubmatic`, `openx`, `sovrn`, `index`, `thetradedesk` (as `tdid`), `sharethrough`, `vidazoo`, `zetassp`, `triplelift`, `nexxen` and `fpid` behave the same way. + +For the attributes `lipbid` (nonID), `uid2`, `medianet`, `magnite`, `bidswitch`, `pubmatic`, `openx`, `sovrn`, `index`, `thetradedesk` (`tdid`), `sharethrough`, `vidazoo`, `zetassp`, `triplelift`, `nexxen` and `fpid` there is also support for their conversion into OpenRTB EIDS format. Please refer to [User ID Module](../userId.md) documentation for more information on conversion, and [Example of eids array generated by UserId Module](https://github.com/prebid/Prebid.js/blob/master/modules/userId/eids.md) for output format examples. + +### FPID + +The `fpid` is a first party identifier that can be exposed through the liveconnect user ID module. In order to use this functionality tell the module which identifier you want to use as a `fpid` in the config params: + +```javascript +{ + "params": { + "fpid": { + "strategy": "cookie", // "cookie" | "html5" -- Where the identifier should be read from + "name": "foobar" // key in the chosen storage backend + } + } +} +``` -For the attributes `lipbid` (nonID), `uid2`, `medianet`, `magnite`, `bidswitch`, `pubmatic`, `openx`, `sovrn`, `index` and `thetradedesk`, there is also support for their conversion into OpenRTB EIDS format. Please refer to [User ID Module](../userId.md) documentation for more information on conversion, and [Example of eids array generated by UserId Module](https://github.com/prebid/Prebid.js/blob/master/modules/userId/eids.md) for output format examples. +Additionally, add it to the requested attributes: + +```javascript +{ + //... + "params": { + "fpid": { + "strategy": "cookie", + "name": "foobar" + }, + "requestedAttributesOverrides": {'fpid': true} + } + //... +} +``` + +The user id result will contain both the `fpid` directly in the `lipb` object and separately: + +```javascript +{"lipb":{"fpid":"foobar"},"fpid":{"id":"foobar"}} +``` + +The same applies for the eids: + +```javascript +[{"source":"fpid.liveintent.com","uids":[{"id":"foobar","atype":1}]}] +``` + +NOTE: If COPPA applies, LiveIntent’s user ID module will not return the `fpid`. ### Request uid2 @@ -126,10 +195,8 @@ pbjs.setConfig({ ## LiveIntent ID configuration -{: .alert.alert-info :} -NOTE: For optimal performance, the LiveIntent ID sub-module should be called at every opportunity. It is best not to use `params.storage` with this sub-module as it has its own optimal caching mechanism. - {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | The name of this sub-module. | `liveIntentId` | @@ -139,8 +206,11 @@ NOTE: For optimal performance, the LiveIntent ID sub-module should be called at | params.ajaxTimeout |Optional| Number |This configuration parameter defines the maximum duration of a call to the `IdentityResolution` endpoint. By default, 5000 milliseconds.|`5000`| | params.partner | Optional| String |The name of the partner whose data will be returned in the response.|`prebid`| | params.identifiersToResolve |Optional| Array[String] |Used to send additional identifiers in the request for LiveIntent to resolve against the LiveIntent ID and additional attributes.|`['my-id']`| -| params.requestedAttributesOverrides | Optional | Object | Object containing booleans used to override the default resolution. Attributes set to `true` will be added to the resolved list, while attributes set to `false` will be removed. Valid attributes are `nonId`, `uid2`, `medianet`, `magnite`, `bidswitch`, `pubmatic`, `openx`, `sovrn`, `index` and `thetradedesk`. | `{'uid2': true}` | +| params.requestedAttributesOverrides | Optional | Object | Object containing booleans used to override the default resolution. Attributes set to `true` will be added to the resolved list, while attributes set to `false` will be removed. Valid attributes are `nonId`, `uid2`, `medianet`, `magnite`, `bidswitch`, `pubmatic`, `openx`, `sovrn`, `index`, `thetradedesk` (`tdid`), `sharethrough`, `vidazoo`, `zetassp`, `triplelift`, `segments`, `nexxen` and `fpid`. | `{'uid2': true}` | | params.emailHash |Optional| String |The hashed email address of a user. We can accept the hashes, which use the following hashing algorithms: md5, sha1, sha2.|`1a79a4d60de6718e8e5b326e338ae533`| +| params.ipv4 |Optional| String |The IPv4 address of a user. |`1.2.3.4`| +| params.ipv6 |Optional| String |The IPv6 address of a user. |`2001:db8:3333:4444:5555:6666:7777:8888`| +| params.userAgent |Optional| String |The user agent of a user. Example of a Safari string: |`Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1`| | params.url | Optional| String |Use this to change the default endpoint URL if you can call the LiveIntent Identity Exchange within your own domain.|`https://idx.my-domain.com`| | params.liCollectConfig |Optional| Object |Container of all collector params.|| | params.liCollectConfig.fpiStorageStrategy |Optional| String |This parameter defines whether the first-party identifiers that LiveConnect creates and updates are stored in a cookie jar, or in local storage. If nothing is set, default behaviour would be `cookie`. Allowed values: [`cookie`, `ls`, `none`]|`cookie`| @@ -148,6 +218,12 @@ NOTE: For optimal performance, the LiveIntent ID sub-module should be called at | params.liCollectConfig.fpiExpirationDays |Optional| Number |The expiration time of an identifier created and updated by LiveConnect. By default, 730 days.|`729`| | params.liCollectConfig.collectorUrl |Optional| String |The parameter defines where the signal pixels are pointing to. The params and paths will be defined subsequently. If the parameter is not set, LiveConnect will by default emit the signal towards `https://rp.liadm.com`.| `https://rp.liadm.com`| | params.liCollectConfig.appId |Optional| String |LiveIntent's media business entity application ID.|`a-0012`| +| params.fpid.name | Optional | String | The parameter is cookie/localstorage key name | `'__super_duper_cookie'`| +| params.fpid.strategy | Optional | String | The parameter defines where to get the identifier from. Either from the cookie jar, `'cookie'`, or from the local storage, `'html5'`. | `'html5'`| +| storage | Required | Object | This object defines where and for how long the results of the call to get a user ID will be stored. | | +| storage.type | Required | String | This parameter defines where the resolved user ID will be stored (either `'cookie'` or `'html5'` localstorage).| `'cookie'` | +| storage.name | Required | String | The name of the cookie or html5 localstorage where the resolved user ID will be stored. | `'pbjs_li_nonid'` | +| storage.expires | Recommended | Integer | How long (in days) the user ID information will be stored. The recommended value is `1` | `1` | ## LiveIntent ID examples @@ -202,6 +278,10 @@ NOTE: For optimal performance, the LiveIntent ID sub-module should be called at fpiExpirationDays: 730, collectorUrl: "https://rp.liadm.com", appId: "a-0012" + }, + fpid: { + strategy: "cookie" + name: "foobar" } } }] diff --git a/dev-docs/modules/userid-submodules/lockraim.md b/dev-docs/modules/userid-submodules/lockraim.md new file mode 100644 index 0000000000..6a1d8c7373 --- /dev/null +++ b/dev-docs/modules/userid-submodules/lockraim.md @@ -0,0 +1,119 @@ +--- +layout: userid +title: lockr AIM +description: lockr Alternative Identity Manager sub-module +useridmodule: lockrAIMIdSystem +--- + +Alternative Identity Manager (AIM) is a unified container for identity and data management. +AIM includes a self-service platform for publishers to seamlessly integrate and activate alternative IDs like LiveRamp’s Authenticated Traffic Solution (ATS), Unified ID 2.0 (UID2), and ID5. The self-service component allows the publisher to easily enable or disable IDs and to send identity clusters to CDPs or cleanrooms without engaging engineering teams. For more information about AIM and detailed integration docs, please visit [our documentation](https://sso.loc.kr/api/lockr_reference.html#tag/Alternate-Identity-Management-(AIM)). + +### **Account Creation | AIM** + +1. Sign up for an [Identity lockr account.](https://sso.loc.kr/console/signup) +2. Setup your app and activate the AIM library. +3. Compile Prebid with the appropriate configurations, and deploy. + +### **Configuration | AIM** + +Add the lockr’s AIM submodule to your Prebid.js package by running: + +```sh +gulp build –modules=lockrAIMIdSystem,... +``` + +The following configuration parameters are available: +{: .table .table-bordered .table-striped } +| Param | Scope | Type | Description | Example | +|----------------|----------|--------|----------------------------------------|-----------------------| +| name | Required | String | The name of this module: `"lockrAIMId"`| `"lockrAIMId"` | +| params | Required | Object | Details for the configuration. | | +| params.email | Required | String | Email address for identity tokens. | `test@example.com` | +| params.appID | Required | String | Identity lockr appID | `e84afc5f-4adf-4144-949f-1de5bd151fcc` | + +**Google oAuth:** +If you are using Google oAuth (_as an example_), the onSignIn function will subsequently call window.lockr.setAdditionalData function and include a raw email. + +```javascript +function onSignIn(googleUser) { + pbjs.setConfig({ + userSync: { + userIds: [{ + name: 'lockrAIMId', + params: { + email: 'john@example.com', + appID: 'e84afc5f-4adf-4144-949f-1de5bd151fcc' + } + }] + } + }); +} +``` + +**Facebook oAuth:** +If you are using Facebook Login (_as an example_), the statusChangeCallback function will subsequently call window.lockr.setAdditionalData function and include a raw email. + +```javascript +function statusChangeCallback(response) { + console.log('statusChangeCallback'); + console.log(response); + if(response.status === 'connected'){ + pbjs.setConfig({ + userSync: { + userIds: [{ + name: 'lockrAIMId', + params: { + email: 'john@example.com', + appID: 'e84afc5f-4adf-4144-949f-1de5bd151fcc' + } + }] + } + }); + }else{ + document.getElementById('status').innerHTML = 'Please login'; + } +} +``` + +**Note:** The above code can be triggered from anywhere on the domain (i.e. a subscription form). + +**lockr AIM Example** + +```javascript +pbjs.setConfig({ + userSync: { + userIds: [{ + name: 'lockrAIMId', + params: { + email: 'test@example.com', + appID: 'e84afc5f-4adf-4144-949f-1de5bd151fcc' + } + }] + } +}); +``` + +_Note_: lockr’s AIM self-service interface empowers publishers with the ability to pass the alternative IDs activated back to the client as local storage or as a first party cookie. Each Identity Provider can be individually set to restrict from client-side delivery and instead be retained as an authentication event within Identity lockr. In this case no data is lost, but instead maintained for automated or manual sharing to any Data Endpoint. + +**Troubleshooting and Error handling:** + +1. Navigate to the domain where Prebid.js Library is integrated. +2. Go to the 'Network' tab of your Developer Tools. Search for “prebid.js” +3. In the application tab, you can confirm any activated Identity Provider (if client-side storage is turned on in AIM’s Identity Provider settings). +4. Debugging: + Enable the debug flag to true in the setConfig call: + +```javascript +pbjs.setConfig({ + debug: true, + userSync: { + userIds: [{ + name: 'lockrAIMId', + params: { + email: 'test@example.com', + appID: 'e84afc5f-4adf-4144-949f-1de5bd151fcc' + } + }] + } +}); +``` diff --git a/dev-docs/modules/userid-submodules/lotame.md b/dev-docs/modules/userid-submodules/lotame.md index f9d9e89a3a..0b03b81f7d 100644 --- a/dev-docs/modules/userid-submodules/lotame.md +++ b/dev-docs/modules/userid-submodules/lotame.md @@ -3,31 +3,36 @@ layout: userid title: Lotame Panorama ID description: Lotame Panorama ID User ID sub-module useridmodule: lotamePanoramaIdSystem +bidRequestUserId: lotamePanoramaId +eidsource: crwdcntrl.net +example: '"e4b9..."' --- -[Lotame Panorama](https://www.lotame.com/panorama/) is a suite of data-enrichment solutions for digital advertising that empowers marketers, agencies, publishers and media companies to transform consumer personas into addressable audiences. At the heart of Lotame Panorama is the Panorama ID, a people-based identifier powered by deterministic and probabilistic data, available across the cookie-challenged web and all browsers. +[Lotame Panorama ID™](https://www.lotame.com/panorama-id/) is a pseudonymous ID that represents devices for the purposes of audience enrichment and campaign activation. It is powered by the Lotame Panorama Graph, which is built on hashed emails and browser and device data and combined with machine learning and predictive models to estimate the likelihood that a group of devices may be used by the same user or are in the same household. -Lotame’s Panorama ID module sends information from the request to its identity graph in order to successfully generate a Panorama ID. For more information on how the Panorama ID works, please visit [www.lotame.com/panorama/id/](https://www.lotame.com/panorama/id/). +Lotame’s Panorama ID module sends the IP address, user agent, and timestamp from the request to Lotame in order to successfully generate a Panorama ID. For more information on how the Panorama ID works, please visit [https://www.lotame.com/panorama-identity/](https://www.lotame.com/panorama-identity/). -Lotame's privacy policy related to the Panorama ID and the collection of data and how data is used is available at [www.lotame.com/about-lotame/privacy/lotames-products-services-privacy-policy/](https://www.lotame.com/about-lotame/privacy/lotames-products-services-privacy-policy/). Consult with your legal counsel to determine the appropriate user disclosures with respect to use of the Lotame Panorama ID module. +Through registering above, your organization will execute Lotame’s Panorama ID Enrollment Terms for Prebid.org. Lotame’s [Services Privacy Notice](https://www.lotame.com/privacy/privacy-notices/services/) describes the processing of personal data by Lotame. If you have any questions about Panorama ID, please reach out by emailing [prebid@lotame.com](mailto:prebid@lotame.com). Add it to your Prebid.js package with: -{: .alert.alert-info :} +```bash gulp build --modules=lotamePanoramaIdSystem +``` ## Lotame Panorama ID Registration & Implementation -To get started, you will need to register with Lotame in order to receive your unique client ID for the userID module. You can [register here](https://www.cognitoforms.com/LotameSolutionsInc/PanoramaIDOfferingEnrollment) or contact [prebid@lotame.com](mailto:prebid@lotame.com) for any questions that you may have. +To get started, you will need to [register](https://www.cognitoforms.com/LotameSolutionsInc/PanoramaIDOfferingEnrollment) with Lotame in order to receive your unique client ID for the userID module. Please contact [prebid@lotame.com](mailto:prebid@lotame.com) for any questions that you may have. Once you sign up, you will receive an email with your client ID and instructions for implementation. ## Lotame Panorama ID Example {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | The name of the module | "lotamePanoramaId" | diff --git a/dev-docs/modules/userid-submodules/mediawallah.md b/dev-docs/modules/userid-submodules/mediawallah.md index 14e5e1bd06..7dde08f051 100644 --- a/dev-docs/modules/userid-submodules/mediawallah.md +++ b/dev-docs/modules/userid-submodules/mediawallah.md @@ -3,6 +3,9 @@ layout: userid title: MediaWallah OpenLinkID description: MediaWallah OpenLinkID User ID sub-module useridmodule: mwOpenLinkIdSystem +bidRequestUserId: mwOpenLinkId +eidsource: mediawallahscript.com +example: '"1111"' --- @@ -10,8 +13,9 @@ MediaWallah's openLink is an anonymous person based ID that enables buyers and s Add support for MediaWallah OpenLinkID to your Prebid.js package with: -{: .alert.alert-info :} +```bash gulp build --modules=userId,mwOpenLinkIdSystem +``` ## MediaWallah OpenLinkID Registration @@ -19,7 +23,8 @@ MediaWallah requires the creation of an accountId a partnerId in order to take a ## MediaWallah OpenLinkID Configuration -
    +{: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | The name of this module. | `'mwOpenLinkId'` | @@ -27,8 +32,6 @@ MediaWallah requires the creation of an accountId a partnerId in order to take a | params.accountId | Required | String | The MediaWallah assigned Account Id | `1000` | | params.partnerId | Required | String | The MediaWallah assign partner Id |`'1001'`| | params.uid | Optional | String | Your unique Id for the user or browser. Used for matching. | `'u-123xyz'` | -{: .table .table-bordered .table-striped } -
    ## MediaWallah OpenLinkID Examples diff --git a/dev-docs/modules/userid-submodules/merkle.md b/dev-docs/modules/userid-submodules/merkle.md index 71f583c6a9..534f88ce8b 100644 --- a/dev-docs/modules/userid-submodules/merkle.md +++ b/dev-docs/modules/userid-submodules/merkle.md @@ -3,6 +3,9 @@ layout: userid title: Merkle ID description: Merkle IDUser ID sub-module useridmodule: merkleIdSystem +bidRequestUserId: merkleId +eidsource: merkleinc.com +example: '"1111"' --- diff --git a/dev-docs/modules/userid-submodules/mobkoi.md b/dev-docs/modules/userid-submodules/mobkoi.md new file mode 100644 index 0000000000..92df14bbb9 --- /dev/null +++ b/dev-docs/modules/userid-submodules/mobkoi.md @@ -0,0 +1,51 @@ +--- +layout: userid +title: Mobkoi ID +description: Mobkoi ID User ID sub-module +useridmodule: mobkoiIdSystem +bidRequestUserId: mobkoiId +eidsource: mobkoi.com +example: '"1111111111111"' +--- + +The Mobkoi ID system provides user identification capabilities for improved addressability and targeted advertising. This module handles user ID synchronization and storage while supporting GDPR consent management. + +## Add Mobkoi ID to your Prebid.js Package + +Add the module to your Prebid.js package: + +```bash +gulp build --modules=consentManagementTcf,tcfControl,mobkoiIdSystem,userId +``` + +## Mobkoi ID Configuration + +{: .table .table-bordered .table-striped } +| Param under userSync.userIds[] | Scope | Type | Description | Example | +| --- | --- | --- | --- | --- | +| name | Required | String | The name of this module | `"mobkoiId"` | +| storage | Required | Object | Storage settings for the ID | | +| storage.type | Required | String | Where to store the ID - must be `"cookie"` | `"cookie"` | +| storage.name | Required | String | Cookie name for storing the ID | `"_mobkoi_Id"` | +| storage.expires | Required | Integer | Number of days before the cookie expires | `30` | + +## Example Configuration + +```javascript +pbjs.setConfig({ + userSync: { + userIds: [ + { + name: 'mobkoiId', + storage: { + type: 'cookie', + name: '_mobkoi_Id', + expires: 30, // days + }, + }, + ], + }, +}); +``` + +For integration support or questions, contact . diff --git a/dev-docs/modules/userid-submodules/netid.md b/dev-docs/modules/userid-submodules/netid.md index 67c2ff79a2..d02020a2bc 100644 --- a/dev-docs/modules/userid-submodules/netid.md +++ b/dev-docs/modules/userid-submodules/netid.md @@ -3,6 +3,9 @@ layout: userid title: netID description: netID User ID sub-module useridmodule: netIdSystem +bidRequestUserId: netId +eidsource: netid.de +example: '"fH5A..."' --- diff --git a/dev-docs/modules/userid-submodules/novatiq.md b/dev-docs/modules/userid-submodules/novatiq.md index cf86db5854..c409e68f16 100644 --- a/dev-docs/modules/userid-submodules/novatiq.md +++ b/dev-docs/modules/userid-submodules/novatiq.md @@ -3,6 +3,9 @@ layout: userid title: Novatiq Hyper ID description: Novatiq Hyper ID User ID sub-module useridmodule: novatiqIdSystem +bidRequestUserId: novatiqId +eidsource: novatiq.com +example: '"1111"' --- @@ -12,8 +15,9 @@ The [Novatiq](https://www.novatiq.com) proprietary dynamic Hyper ID is a unique, Enable by adding the Novatiq submodule to your Prebid.js package with: -{: .alert.alert-info :} +```bash gulp build --modules=novatiqIdSystem,userId +``` Module activation and configuration: @@ -39,7 +43,8 @@ pbjs.setConfig({ ## Parameters for the Novatiq Module -
    +{: .table .table-bordered .table-striped } + | Param | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | Module identification: `"novatiq"` | `"novatiq"` | @@ -53,8 +58,6 @@ pbjs.setConfig({ | params.urlParams.useStandardUuid | Optional | Boolean | Use a standard UUID format, or the Novatiq UUID format | `false` | | params.urlParams.useSspId | Optional | Boolean | Send the sspid (sourceid) along with the sync request
    Makes the params.sourceid optional if set | `false` | | params.urlParams.useSspHost | Optional | Boolean | Send the ssphost along with the sync request | `false` | -{: .table .table-bordered .table-striped } -
    ## Novatiq Hyper ID with Prebid SharedID Support @@ -62,8 +65,9 @@ You can make use of the Prebid.js SharedId module as follows. Enable by adding the Novatiq and SharedId submodule to your Prebid.js package with: -{: .alert.alert-info :} +```bash gulp build --modules=novatiqIdSystem,userId +``` Module activation and configuration: diff --git a/dev-docs/modules/userid-submodules/onekey.md b/dev-docs/modules/userid-submodules/onekey.md index 9b4d937868..5577abfe23 100644 --- a/dev-docs/modules/userid-submodules/onekey.md +++ b/dev-docs/modules/userid-submodules/onekey.md @@ -19,19 +19,21 @@ Background information: It can be added to you Prebid.js package with: -{: .alert.alert-info :} +```bash gulp build –modules=userId,oneKeyIdSystem +``` ⚠️ This module works with a RTD module. Both must be configured. See the [OneKey RTD Module](/dev-docs/modules/oneKeyRtdProvider.html). ## OneKey Registration OneKey is a community based Framework with a decentralized approach. -Go to [onekey.community](https://onekey.community/) for more details. +Go to onekey.community for more details. ## OneKey Configuration {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | The name of this module | `"oneKeyData"` | diff --git a/dev-docs/modules/userid-submodules/open-pair.md b/dev-docs/modules/userid-submodules/open-pair.md new file mode 100644 index 0000000000..29b5f7e96d --- /dev/null +++ b/dev-docs/modules/userid-submodules/open-pair.md @@ -0,0 +1,91 @@ +--- +layout: userid +title: Open PAIR ID +description: Open PairId User ID sub-module +useridmodule: openPairIdSystem +bidRequestUserId: openPairId +eidsource: pair-protocol.com +example: '"nnjbddb46374634mndjhd78jh"' +--- + +Originally developed by Google and subsequently donated to the industry. +This version supports single and two Data Clean Room setups, in which the advertiser and publisher use different clean rooms. + +(Publisher Advertiser Identity Reconciliation) is a secure and privacy-forward way for enabling advertisers and publishers to reconcile their +first-party data for marketing use cases via advanced data encryption methods without the +reliance on third-party cookies. + +PAIR can help advertisers and publishers maintain control of first-party data while ensuring there is no pooling of data, no leakage of data, no leakage of insights, durablility for the future using secure encryption methods, and no user tracking across publishers. + +See this [page](https://iabtechlab.com/pair/) for more information about the PAIR protocol. + +Add it to your Prebid.js package with: + +```bash +gulp build --modules=openPairIdSystem +``` + +## PAIR ID Configuration + +{: .table .table-bordered .table-striped } + +| Param under userSync.userIds[] | Scope | Type | Description | Example | +| --- | --- | --- | --- | --- | +| name | Required | String | The name of PAIR ID user ID module. | `"openPairId"` | +| params | Optional | Object | Container of all module params. Each entry can be used to configured a specific clean room. | | + +## PAIR ID Examples + +Publishers manage PAIR Ids themselves can store pairIds as a byte64 encoded array of ids in local storage and/or 1st party cookies entry `pairId`. + +```javascript + +// should have byte64 value ready in 'pairId' local storage/cookie entry + +pbjs.setConfig({ + userSync: { + userIds: [{ + name: 'openPairId' + }] + } +}); +``` + +Clean rooms may use specific storage keys, this version supports specifying the storage key for any clean room such as the following example. + +```javascript + +// value in 'pairId' local storage/cookie entry will be combined with ids provided by cleanroom liveramp +pbjs.setConfig({ + userSync: { + userIds: [ + { + name: 'openPairId', + params: { + cleanRoomVendor: { + storageKey: '_storage_key' + } + } + } + ] + } +}); +``` + +As per the PAIR specification, you can define the inserter and matcher. + +```javascript +pbjs.setConfig({ + userSync: { + userIds: [ + { + name: 'openPairId', + params: { + inserter: 'some-domain.com', + matcher: 'another-domain.com' + } + } + ] + } +}); +``` diff --git a/dev-docs/modules/userid-submodules/pair.md b/dev-docs/modules/userid-submodules/pair.md index b53ca71ec9..883c19d65b 100644 --- a/dev-docs/modules/userid-submodules/pair.md +++ b/dev-docs/modules/userid-submodules/pair.md @@ -11,12 +11,14 @@ reliance on third-party cookies. PAIR can help advertisers and publishers mainta Add it to your Prebid.js package with: -{: .alert.alert-info :} +```bash gulp build --modules=pairIdSystem +``` ## PAIR ID Configuration {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | The name of PAIR ID user ID module. | `"pairId"` | @@ -45,8 +47,7 @@ Or if to use cleanrooms provided implementation, it can be specified by adding t ```javascript -// value in 'pairid' local storage/cookie entry will be combined with ids provided by cleamroom liveramp - +// value in 'pairId' local storage/cookie entry will be combined with ids provided by cleamroom liveramp pbjs.setConfig({ userSync: { userIds: [{ diff --git a/dev-docs/modules/userid-submodules/parrable.md b/dev-docs/modules/userid-submodules/parrable.md index f022af4c33..99bdf612ec 100644 --- a/dev-docs/modules/userid-submodules/parrable.md +++ b/dev-docs/modules/userid-submodules/parrable.md @@ -2,7 +2,11 @@ layout: userid title: Parrable ID description: Parrable ID User ID sub-module +pbjs_version_notes: removed in 9.0 useridmodule: parrableIdSystem +bidRequestUserId: parrableId +eidsource: parrable.com +example: '{"eid":"01.15946..."}' --- @@ -10,8 +14,9 @@ The Parrable ID is a Full Device Identifier that can be used to identify a devic Add it to your Prebid.js package with: -{: .alert.alert-info :} +```bash gulp build --modules=parrableIdSystem +``` ## Parrable ID Registration @@ -24,6 +29,7 @@ The Parrable privacy policy as at [www.parrable.com/privacy-policy/](https://www In addition to the parameters documented above in the Basic Configuration section the following Parrable specific configuration is required: {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | params | Required | Object | Details for the Parrable ID. | | diff --git a/dev-docs/modules/userid-submodules/permutiveIdentityManagerIdSystem.md b/dev-docs/modules/userid-submodules/permutiveIdentityManagerIdSystem.md new file mode 100644 index 0000000000..bf5e44a87d --- /dev/null +++ b/dev-docs/modules/userid-submodules/permutiveIdentityManagerIdSystem.md @@ -0,0 +1,65 @@ +--- +layout: userid +title: Permutive Identity Manager +description: Permutive Identity Manager User ID sub-module +useridmodule: permutiveIdentityManagerIdSystem +--- + +# Permutive Identity Manager + +This module supports [Permutive](https://permutive.com/) customers in using Permutive's Identity Manager functionality. + +To use this Prebid.js module it is assumed that the site includes Permutive's SDK, with Identity Manager configuration +enabled. See Permutive's user documentation for more information on Identity Manager. + +## Building Prebid.js with Permutive Identity Manager Support + +Prebid.js must be built with the `permutiveIdentityManagerIdSystem` module in order for Permutive's Identity Manager to be able to +activate relevant user identities to Prebid. + +To build Prebid.js with the `permutiveIdentityManagerIdSystem` module included: + +```sh +gulp build --modules=userId,permutiveIdentityManagerIdSystem +``` + +## Prebid configuration + +There is minimal configuration required to be set on Prebid.js, since the bulk of the behaviour is managed through +Permutive's dashboard and SDK. + +It is recommended to keep the Prebid.js caching for this module short, since the mechanism by which Permutive's SDK +communicates with Prebid.js is effectively a local cache anyway. + +```js +pbjs.setConfig({ + ... + userSync: { + userIds: [ + { + name: 'permutiveIdentityManagerId', + params: { + ajaxTimeout: 90 + }, + storage: { + type: 'html5', + name: 'permutiveIdentityManagerId', + refreshInSeconds: 5 + } + } + ], + auctionDelay: 100 + }, + ... +}); +``` + +### ajaxTimeout + +By default this module will read IDs provided by the Permutive SDK from local storage when requested by prebid, and if +nothing is found, will not provide any identities. If a timeout is provided via the `ajaxTimeout` parameter, it will +instead wait for up to the specified number of milliseconds for Permutive's SDK to become available, and will retrieve +identities from the SDK directly if/when this happens. + +This value should be set to a value smaller than the `auctionDelay` set on the `userSync` configuration object, since +there is no point waiting longer than this as the auction will already have been triggered. diff --git a/dev-docs/modules/userid-submodules/publisherlink.md b/dev-docs/modules/userid-submodules/publisherlink.md index 2f6f44e965..6cbace8f08 100644 --- a/dev-docs/modules/userid-submodules/publisherlink.md +++ b/dev-docs/modules/userid-submodules/publisherlink.md @@ -3,6 +3,9 @@ layout: userid title: Publisher Link description: Publisher Link User ID sub-module useridmodule: publinkIdSystem +bidRequestUserId: publinkId +eidsource: epsilon.com +example: --- @@ -24,13 +27,14 @@ The Publisher Link opt-out is included [here](https://www.epsilon.com/privacy/dm In addition to the parameters documented above in the Basic Configuration section the following Publisher Link specific configuration is available: {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | The name of this module. | `'publinkId'` | | params | Required | Object | Customized parameters. | | | params.e | Required | String | Hashed email address of the user. Supports MD5 and SHA256. | `'7D320454942620664D96EF78ED4E3A2A'` | | params.site_id | Required | String | Site ID provided by Epsilon. | `'123456'` | -| params.api_key | Required | String | API key provided by Epsilon. | `'00000000-0000-0000-0000-00000000000'` +| params.api_key | Required | String | API key provided by Epsilon. | `'00000000-0000-0000-0000-00000000000'` | ## Publisher Link Examples diff --git a/dev-docs/modules/userid-submodules/pubmatic.md b/dev-docs/modules/userid-submodules/pubmatic.md new file mode 100644 index 0000000000..296fe7cc3e --- /dev/null +++ b/dev-docs/modules/userid-submodules/pubmatic.md @@ -0,0 +1,54 @@ +--- +layout: userid +title: PubMatic ID +description: PubMatic ID User ID sub-module +useridmodule: pubmaticIdSystem +bidRequestUserId: pubmaticId +eidsource: esp.pubmatic.com +example: '"1111"' +--- + + +## PubMatic ID Configuration + +Please make sure to add the PubMatic user ID sub-module to your Prebid.js package with: + +```shell +gulp build --modules=pubmaticIdSystem,userId +``` + +The following configuration parameters are available: + +{: .table .table-bordered .table-striped } + +| Param under userSync.userIds[] | Scope | Type | Description | Example | +| --- | --- | --- | --- | --- | +| name | Required | String | The name of this sub-module | `"pubmaticId"` | +| params ||| Details for the sub-module initialization || +| params.publisherId | Required | String | Publisher ID | `"123456"` | +| storage ||||| +| storage.name | Required | String | The name of the cookie or html5 local storage key | `"pubmaticId"` | +| storage.type | Required | String | This is where the PubMatic user ID will be stored | `"cookie&html5"` (recommended) or `"html5"` or `"cookie"` | +| storage.expires | Required (Must be `30`) | Number | How long (in days) the user ID information will be stored | `30` | +| storage.refreshInSeconds | Required (Must be `86400`) | Number | How many seconds until the ID is refreshed | `86400` | + +## PubMatic ID Example + +```javascript +pbjs.setConfig({ + userSync: { + userIds: [{ + name: "pubmaticId", + params: { + publisherId: "123456" // Example ID + }, + storage: { + name: "pubmaticId", + type: "cookie&html5", + expires: 30, + refreshInSeconds: 86400 + } + }] + } +}); +``` diff --git a/dev-docs/modules/userid-submodules/pubprovided.md b/dev-docs/modules/userid-submodules/pubprovided.md index ba15abfe25..e533bd8c15 100644 --- a/dev-docs/modules/userid-submodules/pubprovided.md +++ b/dev-docs/modules/userid-submodules/pubprovided.md @@ -3,6 +3,9 @@ layout: userid title: PubProvided ID description: PubProvided ID User ID sub-module useridmodule: pubProvidedIdSystem +bidRequestUserId: pubProvidedId +eidsource: publisher domain +example: '"1111"' --- @@ -57,37 +60,37 @@ The PubProvided ID module allows publishers to set and pass a first-party user i }); ``` -If multiple parties are writing to this object in an undetermined order, a setup that feels quite awkward, they should each do something of this nature: - -```javascript -pbjs.mergeConfig({ - userSync: { - userIds: (() => { - const uidCfgs = pbjs.getConfig('userSync.userIds') || []; - let ppid = uidCfgs.find(cfg => cfg.name === 'pubProvidedId'); - if (!ppid) { - ppid = {name: 'pubProvidedId', params: {eids: []}}; - uidCfgs.push(ppid); - } - ppid.params.eids.push({ - source: "example.com", - uids: [{ - id: "example", - atype: 1, - ext: { - stype: "ppuid" - } - - }] - }) - return uidCfgs; - })() - } -}) -pbjs.refreshUserIds({submoduleNames: ['pubProvidedId']}) -``` + If multiple parties are writing to this object in an undetermined order, a setup that feels quite awkward, they should each do something of this nature: + + ```javascript + pbjs.mergeConfig({ + userSync: { + userIds: (() => { + const uidCfgs = pbjs.getConfig('userSync.userIds') || []; + let ppid = uidCfgs.find(cfg => cfg.name === 'pubProvidedId'); + if (!ppid) { + ppid = {name: 'pubProvidedId', params: {eids: []}}; + uidCfgs.push(ppid); + } + ppid.params.eids.push({ + source: "example.com", + uids: [{ + id: "example", + atype: 1, + ext: { + stype: "ppuid" + } -In each case, bid adapters will receive the eid values after consent is validated. The above examples, if calling `setConfig` instead of `mergeConfig`, will overwrite existing known IDs. If there is any possibility other id submodules have already been initiated or multiple scripts on the page are setting these fields, be sure to prefer `mergeConfig`. + }] + }) + return uidCfgs; + })() + } + }) + pbjs.refreshUserIds({submoduleNames: ['pubProvidedId']}) + ``` + + In each case, bid adapters will receive the eid values after consent is validated. The above examples, if calling `setConfig` instead of `mergeConfig`, will overwrite existing known IDs. If there is any possibility other id submodules have already been initiated or multiple scripts on the page are setting these fields, be sure to prefer `mergeConfig`. 2. This design allows for the setting of any number of uuids in the eids object. Publishers may work with multiple ID providers and nest their own ID within the same eids object. The opportunity to link a 1st party uuid and a 3rd party generated UUID presents publishers with a unique ability to address their users in a way demand sources will understand. @@ -105,12 +108,14 @@ This module is distinct from the Google Ad Manager PPID; which we enable setting Add it to your Prebid.js package with: -{: .alert.alert-info :} +```bash gulp build --modules=pubProvidedIdSystem +``` ## PubProvided Configuration {: .table .table-bordered .table-striped } + | Params under usersync.userIds[]| Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | ID value for the ID module | `"PubProvided"` | diff --git a/dev-docs/modules/userid-submodules/quantcast.md b/dev-docs/modules/userid-submodules/quantcast.md index 14ded4e370..0b4b145dff 100644 --- a/dev-docs/modules/userid-submodules/quantcast.md +++ b/dev-docs/modules/userid-submodules/quantcast.md @@ -3,14 +3,18 @@ layout: userid title: Quantcast ID description: Quantcast ID User ID sub-module useridmodule: quantcastIdSystem +bidRequestUserId: quantcastId +eidsource: quantcast.com +example: '"1111"' --- The Prebid Quantcast ID module stores a Quantcast ID in a first party cookie. The ID is then made available in the bid request. The ID from the cookie added in the bidstream allows Quantcast to more accurately bid on publisher inventories without third party cookies, which can result in better monetization across publisher sites from Quantcast. And, it’s free to use! For easier integration, you can work with one of our SSP partners, like PubMatic, who can facilitate the legal process as well as the software integration for you. Add it to your Prebid.js package with: -{: .alert.alert-info :} +```bash gulp build --modules=userId,quantcastIdSystem +``` Quantcast’s privacy policies for the services rendered can be found at @@ -26,6 +30,7 @@ The Quantcast ID module will only perform any action and return an ID in situati ## Quantcast ID Configuration {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | `"quantcastId"` | `"quantcastId"` | diff --git a/dev-docs/modules/userid-submodules/ramp.md b/dev-docs/modules/userid-submodules/ramp.md index bde1b08d33..84f8f7e6d6 100644 --- a/dev-docs/modules/userid-submodules/ramp.md +++ b/dev-docs/modules/userid-submodules/ramp.md @@ -3,6 +3,9 @@ layout: userid title: LiveRamp RampID description: LiveRamp RampID User ID sub-module useridmodule: identityLinkIdSystem +bidRequestUserId: idl_env +eidsource: liveramp.com +example: '"1111"' --- @@ -10,8 +13,9 @@ RampID, formerly known as IdentityLink, provided by [LiveRamp](https://liveramp. Add it to your Prebid.js package with: -{: .alert.alert-info :} +```bash gulp build --modules=identityLinkIdSystem +``` ## RampID Registration @@ -22,17 +26,18 @@ The RampID privacy policy is at [liveramp.com/privacy/service-privacy-policy/](h ## RampID Configuration {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | The name of LiveRamp's user ID module. | `"identityLink"` | | params | Required | Object | Container of all module params. | | | params.pid | Required | String | This is the Placement ID, a unique identifier that is used to identify each publisher, obtained from registering with LiveRamp. | `"999"` | | params.notUse3P | Not required | Boolean | Property for choosing if a cookieable RampID envelope (RTIS) should be set and stored until the user authenticates which then will be replaced by an authenticated RampID envelope (ATS) (either `true` or `false`). | `false` | -| storage | Required | Object | This object defines where and for how long the results of the call to get a RampID envelope will be stored. | +| storage | Required | Object | This object defines where and for how long the results of the call to get a RampID envelope will be stored. | | | storage.type | Required | String | This parameter defines where the resolved RampID envelope will be stored (either `"cookie"` or `"html5"` localStorage). | `"cookie"` | | storage.name | Required | String | The name of the cookie or html5 localstorage where the resolved RampID envelope will be stored. LiveRamp requires `"idl_env"`. | `"idl_env"` | | storage.expires | Required | Integer | How long (in days) the RampID envelope information will be stored. To be GDPR and CCPA compliant, we strongly advise to set a 15-day TTL ("Time to Live" / expiration time). If you are not planning to obtain RampID envelopes for EU/EEA or U.S. users, we advise you to change the expiration time to 30 days. | `15` | -| storage.refreshInSeconds | Required | Integer | The amount of time (in seconds) the RampID envelope should be cached in storage before calling LiveRamp again to retrieve a potentially updated value for the RampID envelope. | `1800` +| storage.refreshInSeconds | Required | Integer | The amount of time (in seconds) the RampID envelope should be cached in storage before calling LiveRamp again to retrieve a potentially updated value for the RampID envelope. | `1800` | {: .alert.alert-info :} **NOTE:** The RampID envelope that is delivered to Prebid will be encrypted by LiveRamp with a rotating key to avoid unauthorized usage and to enforce privacy requirements. Therefore, we strongly recommend setting `storage.refreshInSeconds` to 30 minutes (1800 seconds) to ensure all demand partners receive an ID that has been encrypted with the latest key, has up-to-date privacy signals, and allows them to transact against it. diff --git a/dev-docs/modules/userid-submodules/rewardedInterest.md b/dev-docs/modules/userid-submodules/rewardedInterest.md new file mode 100644 index 0000000000..9a1617d47f --- /dev/null +++ b/dev-docs/modules/userid-submodules/rewardedInterest.md @@ -0,0 +1,36 @@ +--- +layout: userid +title: Rewarded Interest ID +description: Rewarded Interest User ID Submodule +useridmodule: rewardedInterestIdSystem +--- + +[Rewarded Interest](https://www.rewardedinterest.com/) is an identity provider that enables users to monetize and manage the exposure of their identity to various ad providers through the Rewarded Interest browser extension. + +This submodule passes the Rewarded Interest Identity Token, obtained from the browser extension, into the oRTB request. The Identity Token is included only if the browser has the Rewarded Interest extension installed, and the user has authorized it to share the token. + +The Rewarded Interest Identity Token itself does not reveal the user's identity, as it is encrypted and refreshed frequently. Rewarded Interest partners (such as DSPs, SSPs, and publishers) can use the Rewarded Interest Identity Resolution API to resolve the Identity Token into a CMAID (Consumer Mediated Advertising Identifier). The CMAID is a durable, cross-site, cross-device advertising identifier that remains consistent across visits and devices enrolled by a Rewarded Interest user, unless they choose to reset or pause it. + +Add this submodule to your Prebid.js wrapper with: + +{: .alert.alert-info :} +gulp build --modules=userId,rewardedInterestIdSystem + +## Rewarded Interest ID Configuration + +{: .table .table-bordered .table-striped } +| Param under usersync.userIds[] | Scope | Type | Description | Example | +|--------------------------------|----------|--------|--------------------------|------------------------| +| name | Required | String | The name of this module. | `"rewardedInterestId"` | + +## Rewarded Interest ID Example + +```javascript +pbjs.setConfig({ + userSync: { + userIds: [{ + name: "rewardedInterestId" + }] + } +}) +``` diff --git a/dev-docs/modules/userid-submodules/sharedid.md b/dev-docs/modules/userid-submodules/sharedid.md index 4c2c224b6a..f68470e6ca 100644 --- a/dev-docs/modules/userid-submodules/sharedid.md +++ b/dev-docs/modules/userid-submodules/sharedid.md @@ -3,6 +3,9 @@ layout: userid title: SharedID description: SharedID User ID sub-module useridmodule: sharedIdSystem +bidRequestUserId: sharedid +eidsource: sharedid.org +example: '{"id":"01EAJWWN...", "third":"01EAJ..."}' --- @@ -13,25 +16,27 @@ SharedID into account. Prebid recommends implementing a method where users can Add it to your Prebid.js package with: -{: .alert.alert-info :} +```bash gulp build --modules=sharedIdSystem +``` ## SharedID ID Configuration In addition to the parameters documented above in the Basic Configuration section the following SharedID specific configuration is available: {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | The name of this module. | `'sharedId'` | | params | Optional | Object | Customized parameters | | | params.create | Optional | Boolean | For publisher server support only. If true, the publisher's server will create the (pubcid) cookie. Default is true. | `true` | -| params.pixelUrl | Optional | String | For publisher server support only. Where to call out to for a server cookie -- see [Prebid Identity](/identity/sharedid.html) for more information. | `/wp-json/pubcid/v1/extend/` +| params.pixelUrl | Optional | String | For publisher server support only. Where to call out to for a server cookie -- see [Prebid Identity](/identity/sharedid.html) for more information. | `/wp-json/pubcid/v1/extend/` | | params.extend | Optional | Boolean | If true, the expiration time of the stored IDs will be refreshed during each page load. Default is false. | `false` | -| storage | Required | Object | The publisher must specify some kind of local storage in which to store the results of the call to get the user ID. This can be either cookie or HTML5 storage. | +| storage | Required | Object | The publisher must specify some kind of local storage in which to store the results of the call to get the user ID. This can be either cookie or HTML5 storage.| | | storage.expires | Integer | Required | How long the user ID information will be stored. | `365` | -| storage.name | String | Required | The name of the cookie or html5 local storage where the user ID will be stored. | `_pubcid` -| storage.type | String | Required | This is where the results of the user ID will be stored. Must be either: Must be either: "cookie" or "html5". For server side implementations, which have the best identifier life and revenue impact, this must be a cookie. | `cookie` +| storage.name | String | Required | The name of the cookie or html5 local storage where the user ID will be stored. | `_pubcid` | +| storage.type | String | Required | This is where the results of the user ID will be stored. Must be either: Must be either: "cookie" or "html5". For server side implementations, which have the best identifier life and revenue impact, this must be a cookie. | `cookie` | ## SharedID Examples diff --git a/dev-docs/modules/userid-submodules/taboola.md b/dev-docs/modules/userid-submodules/taboola.md new file mode 100644 index 0000000000..5e6cca82e7 --- /dev/null +++ b/dev-docs/modules/userid-submodules/taboola.md @@ -0,0 +1,60 @@ +--- +layout: userid +title: Taboola ID +description: Taboola ID User ID sub-module +useridmodule: taboolaIdSystem +bidRequestUserId: taboolaId +eidsource: taboola.com +example: '"abc123def456"' +--- + + +Taboola is a global leader in powering recommendations across the open web. The Taboola ID module allows publishers to enable identity support for Taboola demand by leveraging a persistent user ID from Taboola's identity infrastructure. + +This ID helps improve addressability, performance, and monetization opportunities across Taboola-integrated supply paths, particularly in environments where third-party cookies are limited or unavailable. + +The Taboola privacy policy can be found at [www.taboola.com/privacy-policy](https://www.taboola.com/privacy-policy). + +Add it to your Prebid.js package with: + +```bash +gulp build --modules=taboolaIdSystem,userId +``` + +## Taboola ID Configuration + +The Taboola ID module does not require any configuration parameters. If needed, it supports an optional `storage` config to persist the ID locally. + +{: .alert.alert-info :} +NOTE: The Taboola ID module supports both first-party and server-side Prebid identity environments. + +The following configuration parameters are available: + +{: .table .table-bordered .table-striped } + +| Param under userSync.userIds[] | Scope | Type | Description | Example | +| --- | --- | --- |-----------------------------------------------------------|-----------------------------------------------------------| +| name | Required | String | The name of this sub-module | `"taboolaId"` | +| storage ||| | | +| storage.name | Required | String | The name of the cookie or html5 local storage key | `"taboolaId"` (recommended) | +| storage.type | Required | String | This is where the taboola user ID will be stored | `"cookie&html5"` (recommended) or `"html5"` | +| storage.expires | Strongly Recommended | Number | How long (in days) the user ID information will be stored | `365` (recommended) | + +## Taboola ID Example + +```javascript +pbjs.setConfig({ + userSync: { + userIds: [ + { + name: 'taboolaId', + storage: { //Optionally specify where to store the ID, e.g. cookies or localStorage + name: 'taboolaId', + type: 'html5', // or 'html5&cookie' + expires: 365 // days + } + } + ] + } +}); +``` diff --git a/dev-docs/modules/userid-submodules/tapad.md b/dev-docs/modules/userid-submodules/tapad.md index 7fdd8cfaa0..937ade5078 100644 --- a/dev-docs/modules/userid-submodules/tapad.md +++ b/dev-docs/modules/userid-submodules/tapad.md @@ -3,6 +3,9 @@ layout: userid title: Tapad ID description: Tapad ID User ID sub-module useridmodule: tapadIdSystem +bidRequestUserId: tapadId +eidsource: tapad.com +example: '"1111"' --- @@ -15,12 +18,14 @@ Tapad’s Privacy landing page containing links to region-specific Privacy Notic Add it to your Prebid.js package with: -{: .alert.alert-info :} +```bash gulp build --modules=userId,tapadIdSystem +``` ## Tapad ID Configuration {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | `"tapadId"` | `"tapadId"` | diff --git a/dev-docs/modules/userid-submodules/teads.md b/dev-docs/modules/userid-submodules/teads.md index dd8f7fffcb..cf29808432 100644 --- a/dev-docs/modules/userid-submodules/teads.md +++ b/dev-docs/modules/userid-submodules/teads.md @@ -4,6 +4,9 @@ title: Teads ID description: Teads ID User ID sub-module useridmodule: teadsIdSystem pbjs_version_notes: please avoid using v7.20.0 and v7.21.0 +bidRequestUserId: teadsId +eidsource: teads.com +example: '"1111"' --- @@ -20,6 +23,7 @@ gulp build --modules=userId,teadsIdSystem Then configure the teadsId in your `userSync` configuration. {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | `"teadsId"` | `"teadsId"` | diff --git a/dev-docs/modules/userid-submodules/tncIdSystem.md b/dev-docs/modules/userid-submodules/tncIdSystem.md new file mode 100644 index 0000000000..27d005b70e --- /dev/null +++ b/dev-docs/modules/userid-submodules/tncIdSystem.md @@ -0,0 +1,57 @@ +--- +layout: userid +title: TNCID by The Newco +description: TNCID UserID sub-module +useridmodule: tncIdSystem +bidRequestUserId: tncId +eidsource: thenewco.it +example: '"1111"' +--- + +TNCID is a shared persistent identifier that improves user recognition compared to both third-party and first-party cookies. This enhanced identification capability enables publishers and advertisers to consistently recognize their audiences, leading to improved monetization and more precise targeting. The Newco User ID sub-module adds powerful TNCID user identification technology to your Prebid.js bidstream. +For more details, visit our website and contact us to request your publisher-id and the on-page tag. + +## Prebid Configuration + +First, make sure to add the TNCID submodule to your Prebid.js package with: + +```bash +gulp build --modules=tncIdSystem,userId +``` + +## TNCIdSystem module Configuration + +{% include dev-docs/loads-external-javascript.md %} + +You can configure this submodule in your `userSync.userIds[]` configuration: + +```javascript +pbjs.setConfig({ + userSync: { + userIds: [{ + name: 'tncId', + params: { + url: 'TNC-fallback-script-url' // Fallback url, not required if onpage tag is present (ask TNC for it) + }, + storage: { + type: "cookie", + name: "tncid", + expires: 365 // in days + } + }], + syncDelay: 5000 + } +}); +``` + +## Configuration Params + +The following configuration parameters are available: + +{: .table .table-bordered .table-striped } + +| Param under userSync.userIds[] | Scope | Type | Description | Example | +| --- | --- | --- | --- | --- | +| name | Required | String | The name of this sub-module | `"tncId"` | +| params ||| Details for the sub-module initialization || +| params.url | Required | String | TNC script fallback URL - This script is loaded if there is no TNC script on page | `"https://js.tncid.app/remote.min.js"` | diff --git a/dev-docs/modules/userid-submodules/trustpid.md b/dev-docs/modules/userid-submodules/trustpid.md index ab4ec4d7ac..ea4c4b8032 100644 --- a/dev-docs/modules/userid-submodules/trustpid.md +++ b/dev-docs/modules/userid-submodules/trustpid.md @@ -4,6 +4,9 @@ title: Trustpid description: Trustpid User ID sub-module pbjs_version_notes: not in 8.x useridmodule: trustpidSystem +bidRequestUserId: +eidsource: +example: --- {: .alert.alert-info :} @@ -16,9 +19,10 @@ Trustpid is also the brand name of the service, which is provided by Vodafone Sa ## Trustpid configuration {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | -| name | Required | String | The name of the module | `"trustpid"` +| name | Required | String | The name of the module | `"trustpid"` | | params | Required | Object | Object with configuration parameters for trustpid User Id submodule | - | | params.maxDelayTime | Required | Integer | Max amount of time (in seconds) before looking into storage for data | 2500 | | bidders | Required | Array of Strings | An array of bidder codes to which this user ID may be sent. Currently required and supporting AdformOpenRTB | `['adf']` | diff --git a/dev-docs/modules/userid-submodules/unified.md b/dev-docs/modules/userid-submodules/unified.md index 5c9fc0856b..3192b42492 100644 --- a/dev-docs/modules/userid-submodules/unified.md +++ b/dev-docs/modules/userid-submodules/unified.md @@ -3,6 +3,9 @@ layout: userid title: Unified ID description: Unified ID User ID sub-module useridmodule: unifiedIdSystem +bidRequestUserId: tdid +eidsource: adserver.org +example: '"1111"' --- @@ -10,8 +13,9 @@ The Unified ID solution is provided by adsrvr.org and the Trade Desk. Add it to your Prebid.js package with: -{: .alert.alert-info :} +```bash gulp build --modules=unifiedIdSystem +``` ## Unified ID Registration @@ -25,6 +29,7 @@ The Unified ID privacy is covered under the [TradeDesk Services Privacy Policy]( ## Unified ID Configuration {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | `"unifiedId"` | `"unifiedId"` | @@ -33,6 +38,8 @@ The Unified ID privacy is covered under the [TradeDesk Services Privacy Policy]( | params.url | Required for UnifiedId if not using TradeDesk | String | If specified for UnifiedId, overrides the default Trade Desk URL. | "" | | value | Optional | Object | Used only if the page has a separate mechanism for storing the Unified ID. The value is an object containing the values to be sent to the adapters. In this scenario, no URL is called and nothing is added to local storage | `{"tdid": "D6885E90-2A7A-4E0F-87CB-7734ED1B99A3"}` | +Either `params.partner` or `params.url` must be provided. + ## Unified ID Examples 1. Publisher has a partner ID with The Trade Desk, and is using the default endpoint for Unified ID. diff --git a/dev-docs/modules/userid-submodules/unified2.md b/dev-docs/modules/userid-submodules/unified2.md index c61b98bec0..74593d37df 100644 --- a/dev-docs/modules/userid-submodules/unified2.md +++ b/dev-docs/modules/userid-submodules/unified2.md @@ -11,15 +11,17 @@ UID2 relies on user consent before an ID can be added to the bid stream. Consent To add UID2 to your Prebid.js package, run the following: -{: .alert.alert-info :} +```bash gulp build --modules=uid2IdSystem +``` ## Unified ID 2.0 Registration You can set up Unified ID 2.0 in one of these ways: -- Include the module to your pb.js wrapper. You will need to apply for publisher access [on the UID2 website](https://unifiedid.com/request-access). Using this option, you must generate UID2 tokens server-side. There is currently no flow for client-side only, unless you use an SSO provider. You provide these tokens to Prebid.js either by using a cookie or directly in the configuration. +- Include the module to your Prebid.js wrapper. You will need to apply for publisher access [on the UID2 website](https://unifiedid.com/request-access). Using this option, you must generate UID2 tokens server-side. You provide these tokens to Prebid.js either by using a cookie or directly in the configuration. - Use a [managed services](https://prebid.org/product-suite/managed-services/) company that can do this for you. +- Use UID2 Client Side Integration with Prebid.js Each publisher’s privacy policy should take UnifiedID 2.0 into account. @@ -61,11 +63,16 @@ For a server-side integration, you can create a smaller Prebid.js build by disab gulp build --modules=uid2IdSystem --disable UID2_CSTG ``` +## Unified ID 2.0 Client Side Integration for Prebid.js + +Prebid.js supports fully client side integration for UID2. See the [official UID2 documentation](https://unifiedid.com/docs/guides/integration-prebid-client-side) for the most up-to-date integration instructions. + ## Unified ID 2.0 Configuration The following parameters apply only to the Unified ID 2.0 module integration. {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | ID value for the Unified ID 2.0 module - `"uid2"` | `"uid2"` | diff --git a/dev-docs/modules/userid-submodules/utiq.md b/dev-docs/modules/userid-submodules/utiq.md index e895f5268a..87ca81589f 100644 --- a/dev-docs/modules/userid-submodules/utiq.md +++ b/dev-docs/modules/userid-submodules/utiq.md @@ -2,7 +2,10 @@ layout: userid title: Utiq ID description: Utiq User ID sub-module -useridmodule: utiqSystem +useridmodule: utiqIdSystem +bidRequestUserId: utiqId +eidsource: utiq.com +example: '"1111"' --- Utiq generates unique tokens, enabling improved efficiency in programmatic advertising while safeguarding transparency and control for end customers via `consenthub.utiq.com`. A website visitor’s Utiq is generated based on network identifiers provided by network operators and requires explicit user consent. @@ -12,9 +15,10 @@ Utiq is also the brand name of the service, which is provided by Utiq SA/NV. ## Utiq ID configuration {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | -| name | Required | String | The name of the module | `"utiq"` | +| name | Required | String | The name of the module | `"utiqId"` | Configuration example: @@ -23,13 +27,39 @@ pbjs.setConfig({ userSync: { userIds: [ { - name: "utiq", + name: "utiqId", }, ], }, }) ``` +You can find more information at [docs.utiq.com/docs/programmatic-integration](https://docs.utiq.com/docs/programmatic-integration) + +### TCF Activity Integration + +If you use the Prebid.js [TCF Control Module](/dev-docs/modules/tcfControl.html), which prevents access to local storage for non consented vendors, you may need to add a vendor exception for the Utiq user id module to work, as Utiq is not a TCF vendor and will be automatically blocked by Prebid when TCF Control is enabled. Utiq performs its own consent check, outside TCF, to ensure that there is no device storage access in the absence of consent. + +To do that, you can use below configuration: + +{% include dev-docs/vendor-exception.md %} + +```javascript +pbjs.setConfig({ + consentManagement: { + gdpr: { + cmpApi: 'iab', + rules: [{ // these are the default values + purpose: "storage", + enforcePurpose: true, // block localStorage based on purpose 1 of TCF + enforceVendor: true, // block localStorage for non consented / non TCF vendors + vendorExceptions: ["utiqId"] // configuration line to add to make utiq exception + }] + } + } +}); +``` + ## Utiq ID onboarding If you wish to find out more about Utiq, please contact diff --git a/dev-docs/modules/userid-submodules/utiqMtp.md b/dev-docs/modules/userid-submodules/utiqMtp.md index 854042d27e..6f061622a4 100644 --- a/dev-docs/modules/userid-submodules/utiqMtp.md +++ b/dev-docs/modules/userid-submodules/utiqMtp.md @@ -3,6 +3,9 @@ layout: userid title: UtiqMtp ID description: UtiqMtp User ID sub-module useridmodule: utiqMtpIdSystem +bidRequestUserId: utiqMtpId +eidsource: utiq-mtp.com +example: '"1111"' --- Utiq generates unique tokens, enabling improved efficiency in programmatic advertising while safeguarding transparency and control for end customers via `consenthub.utiq.com`. A website visitor’s Utiq ID is generated based on network identifiers provided by network operators and requires explicit user consent. @@ -21,9 +24,11 @@ If you are interested in using Utiq on your website, please contact Utiq on to verify which are these SSPs. + +## TCF Activity Integration + +If you use the Prebid.js [TCF Control Module](/dev-docs/modules/tcfControl), which prevents access to local storage for non consented vendors, you may need to add a vendor exception for the Utiq user id module to work, as Utiq is not a TCF vendor and will be automatically blocked by Prebid when TCF Control is enabled. Utiq performs its own consent check, outside TCF, to ensure that there is no device storage access in the absence of consent. + +To do that, you can use below configuration: + +```javascript +pbjs.setConfig({ + consentManagement: { + gdpr: { + cmpApi: "iab", + rules: [ + { + // these are the default values + purpose: "storage", + enforcePurpose: true, // block localStorage based on purpose 1 of TCF + enforceVendor: true, // block localStorage for non consented / non TCF vendors + vendorExceptions: ["utiqMtpId"], // configuration line to add to make utiq exception + }, + ], + }, + }, +}); +``` + ## Utiq ID onboarding If you wish to find out more about Utiq, please contact diff --git a/dev-docs/modules/userid-submodules/yahoo.md b/dev-docs/modules/userid-submodules/yahoo.md index ee4eb0f50a..34a983de36 100644 --- a/dev-docs/modules/userid-submodules/yahoo.md +++ b/dev-docs/modules/userid-submodules/yahoo.md @@ -3,14 +3,18 @@ layout: userid title: Yahoo ConnectID description: Yahoo ConnectID User ID sub-module useridmodule: connectIdSystem +bidRequestUserId: connectId +eidsource: yahoo.com +example: {"connectId": "72d04af6..."} --- Yahoo ConnectID is a person based ID and does not depend on 3rd party cookies. It enables ad tech platforms to recognize and match users consistently across the open web. Built on top of Yahoo's robust and proprietary ID Graph it delivers higher monetization while respecting user privacy via multiple controls. Add support for Yahoo ConnectID to your Prebid.js package using: -{: .alert.alert-info :} +```bash gulp build --modules=userId,connectIdSystem +``` ## Yahoo ConnectID Registration @@ -20,17 +24,15 @@ A Yahoo-supplied publisher-specific pixel ID is required. Reach out to [connecti Note: Parameters are case-sensitive. ConnectID is the proper name of our product, however, when used in code it is spelled as connect**I**d. Follow the example in the table below. -
    +{: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | The name of this module. | `"connectId"` | | params | Required | Object | Container of all module params. || -| params.pixelId | Required | Number | -The Yahoo-supplied publisher-specific pixel ID. | `"0000"` | +| params.pixelId | Required | Number | The Yahoo-supplied publisher-specific pixel ID. | `"0000"` | | params.he | Optional | String | The SHA-256 hashed user email address which has been lowercased prior to hashing. |`"ed8ddbf5a171981db8ef938596ca297d5e3f84bcc280041c5880dba3baf9c1d4"`| | params.puid | Optional | String | A domain-specific user identifier such as a first-party cookie. If not passed, a puid value will be auto-generated and stored in local and / or cookie storage. | `"ab9iibf5a231ii1db8ef911596ca297d5e3f84biii00041c5880dba3baf9c1da"` | -{: .table .table-bordered .table-striped } -
    ## Yahoo ConnectID Examples @@ -99,7 +101,7 @@ Follow the steps below to check that ConnectIDs are being successfully retrieved Yahoo ConnectID provides multiple mechanisms for users to manage their privacy choices. Users can manage their choices via [ConnectID Control Portal](http://connectid.yahoo.com), on the [Yahoo Privacy Dashboard](https://legal.yahoo.com/us/en/yahoo/privacy/dashboard/index.html) and [NAI’s Audience Matched Opt Out page](https://optout.networkadvertising.org/optout/email). No further actions are required by Publishers as Yahoo will ensure that privacy choices selected by users via one of these methods are honored. We will automatically stop generating ConnectIDs for users who have opted-out. -When desired, additional privacy control can be provided to your users. Within your privacy policy or website privacy settings, [Create an Easy Opt-in Opt-out Toggle](https://documentation.help.yahooinc.com/platform/SSP/Sellers/Integrate/Create-an-Easy-OptIn-Optout-Toggle.htm) for ConnectID. +When desired, additional privacy control can be provided to your users. Within your privacy policy or website privacy settings, Create an Easy Opt-in Opt-out Toggle for ConnectID. Finally, ConnectID follows all global privacy laws (such as the CCPA) and industry frameworks (such as NAI, DAA and IAB). Yahoo will auto-detect most privacy signals present on the page (including those set by Prebid libraries) and not generate a ConnectID for users that have opted-out. @@ -107,12 +109,11 @@ Finally, ConnectID follows all global privacy laws (such as the CCPA) and indust Please note that the storage related parameters are optional. We recommend that you omit them, since ConnectID module is pre-configured with the most optimal storage parameters already. -
    +{: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | storage | Optional | Object | Defines where and for how long the results of the call to get a user ID will be stored. | | | storage.type | Optional | String | Defines where the resolved user ID will be stored (either 'cookie' or 'html5' local storage). | `'cookie'` | | storage.name | Optional | String | The name of the cookie or html5 local storage where the resolved user ID will be stored. | `'connectId'` | | storage.expires | Optional | Integer | How long (in days) the user ID information will be stored. | `15` | -{: .table .table-bordered .table-striped } -
    diff --git a/dev-docs/modules/userid-submodules/yandex.md b/dev-docs/modules/userid-submodules/yandex.md new file mode 100644 index 0000000000..7d7884de0f --- /dev/null +++ b/dev-docs/modules/userid-submodules/yandex.md @@ -0,0 +1,43 @@ +--- +layout: userid +title: Yandex ID +description: Yandex User ID sub-module +useridmodule: yandexIdSystem +bidRequestUserId: yandexId +eidsource: yandex.com +example: '"1111"' +--- + +Yandex ID module is designed to improve the personalization of ads for publishers' users. This documentation provides information about the Yandex User ID module, and instructions to install it. + +## Step 1. Add Yandex ID to Prebid.js package + +Add the module to your Prebid.js package: + +```bash +gulp build --modules=yandexIdSystem +``` + +## Step 2. Enable Yandex ID + +Include the following call to `setConfig` in your Prebid.js code: + +```javascript +pbjs.setConfig({ + userSync: { + userIds: [ + { + name: 'yandex', + bidders: ['yandex'], + storage: { + type: 'cookie', + name: '_ym_uid', + expires: 365, + }, + }, + ], + }, +}); +``` + +**Storage Requirements**: Yandex ID requires the storage object to specify cookie `type`, name `_ym_uid`, and an expiration of at least 30 days. diff --git a/dev-docs/modules/validationFpdModule.md b/dev-docs/modules/validationFpdModule.md index acf440cf89..ecf2d88bef 100644 --- a/dev-docs/modules/validationFpdModule.md +++ b/dev-docs/modules/validationFpdModule.md @@ -65,5 +65,4 @@ and if it exists, certain fields will be removed. # Related Reading - [Prebid.js First Party Data feature](/features/firstPartyData.html) -- [First Party Data Enrichment Module](/dev-docs/modules/enrichmentFpdModule) - [OpenRTB 2.5](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf) diff --git a/dev-docs/modules/weboramaRtdProvider.md b/dev-docs/modules/weboramaRtdProvider.md index 29d450291a..f558c47da3 100644 --- a/dev-docs/modules/weboramaRtdProvider.md +++ b/dev-docs/modules/weboramaRtdProvider.md @@ -12,7 +12,6 @@ sidebarType : 1 --- # Weborama RTD Segmentation Module - {:.no_toc} * TOC @@ -151,12 +150,8 @@ On this section we will explain the `params.weboUserDataConf` subconfiguration: ##### User Consent -The WAM User-Centric configuration will check for user consent if gdpr applies. It will check for consent: - -* Vendor ID 284 (Weborama) -* Purpose IDs: 1, 3, 4, 5 and 6 - -If the user consent does not match such conditions, this module will not load, means we will not check for any data in local storage and the default profile will be ignored. +In a user-centric configuration, the WAM module will verify user consent when GDPR is applicable. It specifically checks for consent related to the purposes declared by Weborama in the Global Vendor List (Vendor ID 284). +If the required consent is not provided, the module will not activate, and it will neither access local storage nor apply any default user profile. #### Sfbx LiTE Site-Centric Configuration diff --git a/dev-docs/modules/wurflRtdProvider.md b/dev-docs/modules/wurflRtdProvider.md new file mode 100644 index 0000000000..8668ac5438 --- /dev/null +++ b/dev-docs/modules/wurflRtdProvider.md @@ -0,0 +1,166 @@ +--- +layout: page_v2 +title: WURFL RTD Provider Module +display_name: WURFL RTD Module +description: WURFL Real Time Data Module +page_type: module +module_type: rtd +module_code : wurflRtdProvider +enable_download : true +vendor_specific: true +sidebarType : 1 +--- + +{: .alert.alert-warning :} +This module loads a dynamically generated JavaScript from prebid.wurflcloud.com + +# WURFL RTD Submodule +{:.no_toc} + +* TOC +{:toc} + +## Description + +The WURFL RTD module enriches the Prebid.js bid request's OpenRTB 2.0 device data with [WURFL device data](https://www.scientiamobile.com/wurfl-js-business-edition-at-the-intersection-of-javascript-and-enterprise/). The module populates the `device` and `device.ext.wurfl` with WURFL device capabilities, ensuring that all bidder adapters have access to enriched device data. At a minimum, three WURFL capabilities are made available to all adapters: `is_mobile`, `complete_device_name` and `form_factor`. + +SSPs and other demand partners subscribed to this service with ScientiaMobile will also receive an expanded set of device properties, including more detailed detection for iOS devices (e.g., specific iPhone and iPad model information). For a comprehensive list of available device capabilities, please refer to the [WURFL device capabilities](https://www.scientiamobile.com/capabilities/?products%5B%5D=wurfl-js) documentation. + +## A Note About User-Agent Client Hints + +WURFL.js is fully compatible with Chromium's User-Agent Client Hints (UA-CH) device identification mechanisms. If the User-Agent string is generic and Client Hints are not available in the HTTP request, the service will automatically request and obtain [high entropy client hint values](https://wicg.github.io/ua-client-hints/#getHighEntropyValues) from the client. + +However, it is still recommended to explicitly opt-in and declare support for User-Agent Client Hints on the publisher's website. Doing so improves performance and contributes to a faster user experience. For detailed instructions on implementing User-Agent Client Hint support, refer to the [relevant documentation here](https://docs.scientiamobile.com/guides/implementing-useragent-clienthints). + +## Integration Notes + +While the WURFL RTD module enriches the OpenRTB 2.0 payload, it is the responsibility of the SSP's adapter to access and pass the information to the auction endpoint. The auction endpoint must then use the new data to support its business logic. + +The following scenarios are possible: + +{: .table .table-bordered .table-striped } + +| | SSP Adapter | SSP Server Side End-Point | +| :------------------------ | :------------ | :--------------------------------------------------------------- | +| SSP adapter is already passing the ORTB2 device to the server (auction endpoint). | No changes required. | Update backend logic to utilize the device data. | +| SSP adapter is not currently passing the data to server. | Update adapter to read `device` and/or `device.ext.wurfl` data and pass it to the endpoint. | Update backend logic to utilize the device data. | +| SSP doesn't have a Bidder Adapter. | Implement PreBid.js adapter and read `device` and/or `device.ext.wurfl` data and pass it to the endpoint. | Update end-point to read and utilize the data. | + +## Usage + +### Build + +To build the WURFL RTD module with Prebid.js, use the following command: + +```bash +gulp build --modules="wurflRtdProvider,appnexusBidAdapter,..." +``` + +### Configuration + +To initialize the WURFL RTD module in Prebid.js, use the `setConfig` function as shown below. +The module is configured within `realTimeData.dataProviders`. +Ensure `waitForIt` is set to `true`. We recommend setting `auctionDelay` to `500 ms` initially, +though lower values may be suitable with fine-tuning. + +```javascript +pbjs.setConfig({ + realTimeData: { + auctionDelay: 500, + dataProviders: [{ + name: 'wurfl', + waitForIt: true, + params: { + debug: false + } + }] + } +}); +``` + +### Parameters + +{: .table .table-bordered .table-striped } + +| Name | Type | Description | Default | +| :------------------------ | :------------ | :--------------------------------------------------------------- |:----------------------| +| name | String | Real time data module name | Always set to 'wurfl' | +| waitForIt | Boolean | Set to `true` if an `auctionDelay` is defined (required) | `false` | +| params | Object | Configuration parameters for the WURFL RTD module. | | +| params.altHost | String | Alternate host for connecting to WURFL.js | | +| params.debug | Boolean | Enable debug mode. | `false` | + +## Testing + +To test how the WURFL RTD module works, run the following command: + +`gulp serve --modules=wurflRtdProvider,appnexusBidAdapter` + +Then, point your browser to: + +`http://localhost:9999/integrationExamples/gpt/wurflRtdProvider_example.html` + +## Expected Behavior + +WURFL RTD adds device information to the bidderRequest's `ortb2.device.ext.wurfl` object (enabled SSPs have access to an extended capability set). + +```json +{ + "id": "1edd88d3-12c6-40b2-a80b-138e276b4553", + "at": 1, + "site": {...}, + "device": { + "w": 1170, + "h": 2532, + "dnt": 0, + "ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 18_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.3 Mobile/15E148 Safari/604.1", + "language": "it", + "make": "Apple", + "model": "iPhone 16e", + "devicetype": 1, + "os": "iOS", + "osv": "18.3", + "hwv": "iPhone 16e", + "ppi": 456, + "pxratio": 3.0, + "js": 1, + "ext": { + "vpw": 980, + "vph": 1429, + "wurfl": { + "wurfl_id": "apple_iphone_ver18_3_subhw16e", + "advertised_browser": "Mobile Safari", + "advertised_browser_version": "18.3", + "advertised_device_os": "iOS", + "advertised_device_os_version": "18.3", + "ajax_support_javascript": true, + "brand_name": "Apple", + "complete_device_name": "Apple iPhone 16e", + "density_class": "3.0", + "form_factor": "Smartphone", + "is_app_webview": false, + "is_connected_tv": false, + "is_full_desktop": false, + "is_mobile": true, + "is_ott": false, + "is_phone": true, + "is_robot": false, + "is_smartphone": true, + "is_smarttv": false, + "is_tablet": false, + "manufacturer_name": "", + "marketing_name": "", + "max_image_height": 568, + "max_image_width": 320, + "model_name": "iPhone 16e", + "physical_screen_height": 141, + "physical_screen_width": 65, + "pixel_density": 456, + "pointing_method": "touchscreen", + "resolution_height": 2532, + "resolution_width": 1170 + } + } + } +} +``` diff --git a/dev-docs/modules/zeusPrimeRtdProvider.md b/dev-docs/modules/zeusPrimeRtdProvider.md index 338bcee32a..ada1fb6bd8 100644 --- a/dev-docs/modules/zeusPrimeRtdProvider.md +++ b/dev-docs/modules/zeusPrimeRtdProvider.md @@ -69,4 +69,4 @@ Zeus Prime requires the gamId parameter, or the Google Ad Manager Network Code, ## Troubleshooting -For troubleshooting steps and guides to assist with verifying your Zeus Prime installation, see our [installation documentation](https://zeustechnology.com/docs/installation). +For troubleshooting steps and guides to assist with verifying your Zeus Prime installation, see our [installation documentation](https://zeustechnology.com/). diff --git a/dev-docs/pb10-notes.md b/dev-docs/pb10-notes.md new file mode 100644 index 0000000000..20fa95ba27 --- /dev/null +++ b/dev-docs/pb10-notes.md @@ -0,0 +1,120 @@ +--- +layout: page_v2 +title: Prebid.js 10.0 Release Notes & Publisher API Changes +description: Description of the breaking changes included for Prebid.js 10.0 +sidebarType: 1 +--- + +# Prebid.js 10.0 Bidder Interface and Publisher API Changes + +{:.no_toc} + +This document describes the changes included for Prebid.js version 10.0. + +* TOC +{:toc} + +## Publisher Summary + +1. A large number of obsolete modules have been removed. Many modules have changed name. See below for the list. +2. The legacy method of native targeting keys, `sendTargetingKeys`, has been removed. +3. `pbadslot` has been removed from the preAuction module. Use `ortb2Imp.ext.gpid` instead. +4. The API methods `getBidResponses` and `getNoBidsForAdUnitCode` now return arrays of bids. +5. TypeScript support has landed and Node.js 20+ is required to build. +6. Using Prebid as an NPM dependency no longer requires using Babel or Prebid's Babel settings. +7. `targetingControls.allBidsCustomTargeting` now defaults to `false`, this prevents custom targeting values from being set for non-winning bids. +8. Storage use disclosures can now be enforced and catalogued + +## Removed Modules + +The following modules have been removed from Prebid.js as part of the 10.0 release. The `dfp` modules are still there but now import the `gam` modules. Publishers building with one of them will need to point to its replacement or remove the module from their build. + +{: .table .table-bordered .table-striped } + +| Module | Replacement | +|:-----------------------------|:-------------------------| +| dfpAdServerVideo | gamAdServerVideo | +| dfpAdPod | gamAdPod | +| telariaBidAdapter | | +| eclickads | eclick | +| imdsBidAdapter | advertisingBidAdapter | +| cleanmedianetBidAdapter | gamoshiBidAdapter | +| kueezBidAdapter | kueezRTBBidAdapter | +| saambaaBidAdapter | advangelistBidAdapter | +| adoceanBidAdapter | | +| radsBidAdapter | | +| freewheelsspBidAdapter | fwsspBidAdapter | +| akamaiDapRtdProvider | symetriRtdProvider | +| bidwatchAnalyticsAdapter | oxxionAnalyticsAdapter | +| conversantAnalyticsAdapter | | +| konduitAnalyticsAdapter | | +| konduitWrapper | | +| globalsunBidAdapter | global_sunBidAdapter | +| verizonMediaIdSystem | yahooConnectId | +| loglyliftBidAdapter | | +| apnPspParamsConverter | | +| yieldmoSyntheticInventoryModule | | +| adsinteractiveBidAdapter | ads_interactiveBidAdapter | +| admanBidAdapter | | +| bridgeuppBidAdapter | sonaradsBidAdapter | +| BTBidAdapter | blockthroughBidAdaper | +| brightMountainMediaBidAdapter | bmtmBidAdapter | +| vubleAnalyticsAdapter | | +| serverbidServerBidAdapter | | +| gothamAdsBidAdapter | intenzeBidAdapter | +| growadvertisingBidAdapter | growAdsBidAdapter | +| incrxBidAdapter | incrementxBidAdapter | +| viantOrtbBidAdapter | viantBidAdapter | +| zetaBidAdapter | zeta_globalBidAdapter | +| fanAdapter | fanBidAdapter | +| cadentaperturemxBidAdapter | cadent_aperture_mxBidAdapter | +| epomDspBidAdapter | epom_dspBidAdapter | +| pubwiseBidAdapter | pwbidBidAdapter | + +## Consent and Data Handling + +* **Default behavior for publisher purpose permissions in the TCF control module now enables purposes P4, P7 and special feature 1.** +* Global vendor list IDs have been filled in for a number of bidder and analytics modules. +* **A new activity control, and purpose 1 enforcement, prevent bidder endpoint access to third party storage via set-cookie headers.** +* **The storage disclosures module enables publishers to identify all keys used in the first party and deny access to undisclosed keys. A build artifact is produced to help provide clear and concise information on device storage use for e-privacy directive adherence.** + +## User Id Module + +* **The user ID module introduces an `enforceStorageType` flag, which why by default warn when a userId submodule accesses the incorrect storage type. Future versions will prevent access.** +* **`userId` accepts two new config flags, autoRefresh (default false) and retainConfig (default true).** With `autoRefresh: true`, `userId` automatically refreshes IDs for which the configuration changed (either a previously configured module now has different config, or a new module was configured). With `retainConfig: false`, `userId` "forgets" userIds that were previously configured, but are missing from `userSync.userIds[]` in a later setConfig. +* For bidders: `bid.userId` is no longer populated; bid modules should rely on `userIdAsEids` or `user.ext.eids`. Several bid adapters made this change in the 10.0 release; others in 9.x in anticipation. +* Eids in `user.eids` are appended to the array in `user.ext.eids` and de-duplicated. + +## TypeScript and Build Updates + +* **TypeScript files are now accepted in the code base. Tooling and linting were updated accordingly.** +* The build target browser use statistics are now updated as part of the build process. +* Tests now target Chrome 109 as the minimum version. `not dead` was added to the babel target. +* **The `pbYield` helper was added and greedy rendering is disabled by default.** + +## `Schain` is now first party data + +* Publishers should provide schain as first party data in `ortb2.source.schain` or `ortb2.source.ext.schain`. +* The schain module is no longer necessary and has been updated to simply copy `schain` configuration into first party data; it will be removed in the future. +* Adapters should look for schain in `ortb2.source.ext.schain`. +* Like all first party data, **bidder-specific schains are now merged with the global schain**, where previously they would replace it. Publishers setting both global and bidder-specific schains will need to make changes; the simplest way to address this is to use only bidder-specific schains. + +## API Changes + +* The `ADPOD` mediatype has received a deprecation warning. +* Bid response helper methods (`getBidResponses*` and `getNoBids*`) now return an array which also exposes the array under `.bids` for backward compatibility. +* `getHighestUnusedBidResponseForAdUnitCode` returns null instead of an empty object when no suitable bid exists. +* **Schain data now lives under `ortb2.source.ext.schain` and is normalized when provided in first party data. The module is now superfluous for publishers transitioned to seeing this object directly and will be removed in the future.** +* **Native ad units no longer support `sendTargetingKeys`, and native key-value pairs can no longer be sent to the ad server. Please migrate to a newer setup.** +* The `createBid` API has been removed. +* The `statusMessage` and `getStatusCode()` properties were removed from bid objects. +* **The DFP modules have been renamed to GAM modules (`gamAdServerVideo`, `gamAdpod`, etc.). Please migrate to the new names.** +* **Default configuration of various PBS Host companies has been removed. The PBS adapter now requires an explicit endpoint in its configuration.** +* Support for the legacy `pbadslot` field has been removed from all utilities and adapters. +* All public API methods have a log message in debug mode. +* **`mediatypes.banner` params that match to imp[].banner are type checked** + +## Further Reading + +* [Publisher API Reference](/dev-docs/publisher-api-reference.html) +* [First Party Data](/features/firstPartyData.html) diff --git a/dev-docs/pb9-notes.md b/dev-docs/pb9-notes.md new file mode 100644 index 0000000000..39bf23619b --- /dev/null +++ b/dev-docs/pb9-notes.md @@ -0,0 +1,124 @@ +--- +layout: page_v2 +title: Prebid.js 9.0 Release Notes & Publisher API Changes +description: Description of the breaking changes included for Prebid.js 9.0 +sidebarType: 1 +--- + +# Prebid.js 9.0 Bidder Interface and Publisher API Changes + +{:.no_toc} + +This document describes the changes included for Prebid.js version 9.0. + +* TOC +{:toc} + +## Removed Modules + +The following modules have been removed from Prebid.js as part of the 9.0 release. Publishers building with one of them will need to point to its replacement or remove the module from their build. + +{: .table .table-bordered .table-striped } +| Module | Replacement | +|:-----------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Brightcom | OMS Bid Adapter | +| Sovrn Analytics | | +| Empty FPD module file | | +| Adomik | | +| Britepool | | +| SpotX | | +| pirId | | +| Engage BDR | | +| MyTarget | | +| Parrable | | +| Blue BillyWig | | +| Idward RTD | Anonymized RTD | +| Minutemedia Plus | | +| eplanning Analytics | | +| mars media Analytics | | +| sigmoid Analytics | | +| sonobi Analytics | | +| staq Analytics | | +| RichAudience | Update: added to 9.1.0 | +| adbookpsp | | +| yahooSSP | yahooAds | +| GDPR Consent module | TCF Consent module | +| GDPR Enforcement module | TCF Control module | +| Bizzclick | Blasto | +| Utiq | UtiqId | +| Prebid Manager | AsterioBid Prebid Manager | +| Ras | RingierAxelSpringer | +| Fledge for GPT | PAAPI for GPT | +| DFP Video | Split into DFP Video and DFP AdPod | + +## Consent changes + +The USP string was removed from the consent metadata; also USP module is no longer in the recommended build. The GDPR modules were renamed to TCF modules, to reflect their adherence to a technical specification and not imply adherence to the underlying legislation and case law. Support for GPP 1.0 was removed from the GPP module. Of particular importance, "vendorless" modules such as the sharedid module no longer rely on vendor consent in the TCF object, but instead rely on publisher purpose consent. Publishers should check their __tcfapi consent data object to confirm publisher purpose consents are requested by their CMP. + +## Rendering + +This [creative](https://github.com/prebid/Prebid.js/blob/master/integrationExamples/gpt/x-domain/creative.html) is now the preferred creative choice for Google Ad Manager users for web. It is created as part of the build process. This [legacy implementation](https://github.com/prebid/Prebid.js/blob/8.52.0/integrationExamples/gpt/creative_rendering.html) was deleted and examples using the Prebid Universal Creative (PUC) in documentation are being ported over to [the new guidance](https://docs.prebid.org/adops/js-dynamic-creative.html). Publishers also using Prebid Mobile SDK creative for apps may wish to remain on the PUC for ease of operations. + +The legacy method of trafficking native creatives has also had a deprecation warning issued. Publishers should prefer the Ortb2 implementation as sendTargetingKeys for native, hb_native_ASSET, will no longer be supported in a coming version. + +## Video ORTB2 Objects + +The Ortb2 core adapter utility no longer infers placement from context. Context = 'instream' now only refers to the technical integration method the publisher is using to interact with the player and is not relevant to the ortb2 bid requests. Adapters should not infer placement nor plcmt is instream from this value. It is however reasonable to infer plcmt = 4 from context = outstream. Adapters are not permitted to only support placement and not plcmt; they are welcome to pass both. Publishers are advised to set plcmt on their video ad units explicitly to avoid downstream inferences causing buyer inventory quality enforcements. + +## PAAPI + +Any module described as Fledge is now PAAPI. PAAPI Configuration is simplified and publishers experimenting with Fledge in 8.x should refer to the module documentation for updates. + +Publishers wishing to support PAAPI should install the PAAPI module and select the submodule appropriate for their top level seller (TLS). Both gpt.js and publisher designated top level decision logic have submodules. Ad servers wishing to add support for top level selling in Prebid.js may choose to issue instructions compatible with the newly released publisher designated TLS or submit their own submodule. + +Bid adapters can now return either complete auction config or an `igb` object according to the Ortb community extension for PAAPI. Publishers wishing to be or to designate a component seller to handle the `igb` objects returned by some bid modules should configure PAAPI with, for example + +`pbjs.setConfig({ + paapi: { + enabled: true, + componentSeller: { + auctionConfig: { + decisionLogicURL: 'publisher.example' + // ... + } + } + } + })` + +PAAPI for GPT now supports custom slot configuration. Also, the autoConfig option has been removed and replaced with configWithTargeting, defaulting to true, which sets GPT targeting and submits auction configs together. It differs in the previous autoconfig in that it no longer relies on gpt being available at the time of requestBids, only at the time of setTargeting. + +Publishers should be aware this behavior may prohibit submission of auction configuration to GPT sooner than the Prebid.js auction has completed, and will likely prefer to use `setPAAPIConfigForGPT`. We're hoping a futute gpt.js release will enable submission of configuration including unresolved promises earlier than the completion of the Prebid auction, by providing an `allConfigsSubmitted` type utility. Prebid support for other top level sellers will include this functionality in the near future. + +## Miscellaneous configuration changes (publishers) + +Pbadslot has had a deprecation warning issued, it is redundant specifying with imp.ext.gpid. Publishers setting pbadslot explicitly will see a warning. In the future, the pre-auction module will not populate it and setting it in configuration will have no effect. + +We stopped supporting top level site, app, and device configuration directly, eg `setConfig({device: X})`. Please prefer the ortb2 object in configuration (or in requestBids), eg `setConfig({ortb2: {device: X}})` + +s2s tmax and userId module default timings were set to more reasonable defaults. + +The Topics module now requires publishers to choose which external topics gathering frames will be injected. Documentation lists many options. + +We now require node.js 20+ to build. Babel was upgraded; the build target was modernized. The test suite raised its browser version targets. + +transformBidParams was removed from the build so publishers would not need an adapter to use a bidder in prebid server. Appnexus adapter added the anPspParamsConverter module as a temporary measure to solve for their adapter. + +Private functions are no longer available to npm consumers. + +Some adapters changed their configuration, including JW Player RTD, Openweb, Yahoo Ads, Improve Digital and 33Across Id module. See [https://github.com/prebid/Prebid.js/issues/11608](https://github.com/prebid/Prebid.js/issues/11608). + +## Miscellaneous deprecation notices (module maintainers) + +Bidders should prefer the eids object in the bidrequest. The redundant userid object in bid requests will be removed in a future version. + +Userid submodules may no longer be able to access set methods in storage manager in the future. The parent userid module is capable of setting the value returned by the submodule according to publisher configuration. + +A variety of performance degrading functions may become unavailable to adapters. Some already have, including .innerText and .outerText. Bidders should generally rely on the request object to interrogate navigator, and if things are missing from the request object, we invite PRs on it as preferred over redundant module implementations. + +Some modules not using our methods, or using excessive payloads, for storage or network transmission were modified. + +Bidders may no longer import the events system. + +getConfig is no longer allowed to gather consent, as it may be stale; use the consent object. + +Bidder companion scripts are now completely removed; only other module types may source js. diff --git a/dev-docs/pbs-bidders.md b/dev-docs/pbs-bidders.md index cbc289e03b..690618f725 100644 --- a/dev-docs/pbs-bidders.md +++ b/dev-docs/pbs-bidders.md @@ -8,7 +8,7 @@ sidebarType: 5 # Prebid Server Bidder Params This page contains documentation on the specific parameters required by each supported bidder. -These docs only apply to Prebid Server bidders. For Prebid.js bidders see the +These docs only apply to Prebid Server-based bidders. For Prebid.js, see the [Prebid.js Bidders](/dev-docs/bidders.html) page. For each bidder listed below, you'll find the following information: @@ -20,51 +20,116 @@ For each bidder listed below, you'll find the following information: You can also download the full CSV data file. -{% assign bidder_pages = site.pages | where: "layout", "bidder" | where: "pbs", true %} +{% assign bidder_pages = site.pages | where: "layout", "bidder" | where: "pbs", true | sort_natural: "title" %} {: .alert.alert-warning :} Publishers are advised to check with legal counsel before doing business with any particular bidder. -## Prebid Server Bidder List +## Search a Prebid Server bidder -
      + + + + +
      + +## Full List + +### #-A + +
        {% for page in bidder_pages %} -
      • -{{ page.title }} -
      • + {% assign firstletter = page.title | slice:0 | downcase %} + {% unless firstletter == "0" or firstletter == "1" or firstletter == "2" or firstletter == "3" or firstletter == "4" or firstletter == "5" or firstletter == "6" or firstletter == "7" or firstletter == "8" or firstletter == "9" or firstletter == "a" %}{% continue %}{% endunless %} +
      • + {{ page.title }} +
      • {% endfor %}
      -## Bidder Documentation +### B-C +
        {% for page in bidder_pages %} + {% assign firstletter = page.title | slice:0 | downcase %} + {% unless firstletter == "b" or firstletter == "c" %}{% continue %}{% endunless %} +
      • + {{ page.title }} +
      • +{% endfor %} +
      -
      - -

      {{ page.title }}

      +### D-G -

      Features

      +
        +{% for page in bidder_pages %} + {% assign firstletter = page.title | slice:0 | downcase %} + {% unless firstletter == "d" or firstletter == "e" or firstletter == "f" or firstletter == "g" %}{% continue %}{% endunless %} +
      • + {{ page.title }} +
      • +{% endfor %} +
      -{% include dev-docs/bidder-meta-data.html page=page %} +### H-L -

      "Send All Bids" Ad Server Keys

      +
        +{% for page in bidder_pages %} + {% assign firstletter = page.title | slice:0 | downcase %} + {% unless firstletter == "h" or firstletter == "i" or firstletter == "j" or firstletter == "k" or firstletter == "l" %}{% continue %}{% endunless %} +
      • + {{ page.title }} +
      • +{% endfor %} +
      -These are the bidder-specific keys that would be targeted within GAM in a Send-All-Bids scenario. GAM truncates keys to 20 characters. +### M-O -{: .table .table-bordered .table-striped } -| {{ "hb_pb_" | append: page.biddercode | slice: 0,20 }} | {{ "hb_bidder_" | append: page.biddercode | slice: 0,20 }} | {{ "hb_adid_" | append: page.biddercode | slice: 0,20 }} | -| {{ "hb_size_" | append: page.biddercode | slice: 0,20 }} | {{ "hb_source_" | append: page.biddercode | slice: 0,20 }} | {{ "hb_format_" | append: page.biddercode | slice: 0,20 }} | -| {{ "hb_cache_host_" | append: page.biddercode | slice: 0,20 }} | {{ "hb_cache_id_" | append: page.biddercode | slice: 0,20 }} | {{ "hb_uuid_" | append: page.biddercode | slice: 0,20 }} | -| {{ "hb_cache_path_" | append: page.biddercode | slice: 0,20 }} | {{ "hb_deal_" | append: page.biddercode | slice: 0,20 }} | | +
        +{% for page in bidder_pages %} + {% assign firstletter = page.title | slice:0 | downcase %} + {% unless firstletter == "m" or firstletter == "n" or firstletter == "o" %}{% continue %}{% endunless %} +
      • + {{ page.title }} +
      • +{% endfor %} +
      -{% if page.prevBiddercode %} +### P-R -This bidder previously had a bidder code of `{{ page.prevBiddercode }}`, but prefers new configurations to use `{{ page.biddercode }}`. +
        +{% for page in bidder_pages %} + {% assign firstletter = page.title | slice:0 | downcase %} + {% unless firstletter == "p" or firstletter == "q" or firstletter == "r" %}{% continue %}{% endunless %} +
      • + {{ page.title }} +
      • +{% endfor %} +
      -{% endif %} +### S-T -{{ page.content }} +
        +{% for page in bidder_pages %} + {% assign firstletter = page.title | slice:0 | downcase %} + {% unless firstletter == "s" or firstletter == "t" %}{% continue %}{% endunless %} +
      • + {{ page.title }} +
      • +{% endfor %} +
      -
      +### U-Z +
        +{% for page in bidder_pages %} + {% assign firstletter = page.title | slice:0 | downcase %} + {% unless firstletter == "u" or firstletter == "v" or firstletter == "w" or firstletter == "x" or firstletter == "y" or firstletter == "z" %}{% continue %}{% endunless %} +
      • + {{ page.title }} +
      • {% endfor %} +
      +
      diff --git a/dev-docs/plugins/bc/bc-prebid-plugin-api.md b/dev-docs/plugins/bc/bc-prebid-plugin-api.md index 1225dab7a0..d9be241b21 100644 --- a/dev-docs/plugins/bc/bc-prebid-plugin-api.md +++ b/dev-docs/plugins/bc/bc-prebid-plugin-api.md @@ -130,7 +130,7 @@ If the results of the prebid process is being determined outside of the plugin, }] }, "prebidConfigOptions": { - "cache": {"url": "https://prebid.adnxs.com/pbc/v1/cache"}, + "cache": {"url": "https://prebid.example.com/pbc/v1/cache"}, " enableSendAllBids": true }, "prebidTimeout": 700, diff --git a/dev-docs/plugins/bc/bc-prebid-plugin-integration-studio.md b/dev-docs/plugins/bc/bc-prebid-plugin-integration-studio.md index 1dd031a918..d7f53f6e03 100644 --- a/dev-docs/plugins/bc/bc-prebid-plugin-integration-studio.md +++ b/dev-docs/plugins/bc/bc-prebid-plugin-integration-studio.md @@ -150,7 +150,7 @@ var adOptions = }] }, "prebidConfigOptions": { - "cache": {"url": "https://prebid.adnxs.com/pbc/v1/cache"}, + "cache": {"url": "https://prebid.example.com/pbc/v1/cache"}, "enableSendAllBids": true }, "prebidTimeout": 700, @@ -353,7 +353,7 @@ None }, "prebidConfigOptions": { "cache": { - "url": "https://prebid.adnxs.com/pbc/v1/cache" + "url": "https://prebid.example.com/pbc/v1/cache" }, "enableSendAllBids": true }, diff --git a/dev-docs/plugins/bc/bc-prebid-plugin-multiad-options.md b/dev-docs/plugins/bc/bc-prebid-plugin-multiad-options.md index f4ea87f6aa..7edbfcf383 100644 --- a/dev-docs/plugins/bc/bc-prebid-plugin-multiad-options.md +++ b/dev-docs/plugins/bc/bc-prebid-plugin-multiad-options.md @@ -109,7 +109,7 @@ The following is a sample JSON definition of the plugin configuration defining c }, "prebidConfigOptions" : { "cache": { - "url": "https://prebid.adnxs.com/pbc/v1/cache" + "url": "https://prebid.example.com/pbc/v1/cache" }, "enableSendAllBids" : true }, @@ -204,7 +204,7 @@ The following is a sample JSON definition of the plugin configuration defining c }, "prebidConfigOptions" : { "cache": { - "url": "https://prebid.adnxs.com/pbc/v1/cache" + "url": "https://prebid.example.com/pbc/v1/cache" }, "enableSendAllBids" : true }, @@ -310,7 +310,7 @@ The following is a sample JSON definition of the plugin configuration defining c }, "prebidConfigOptions" : { "cache": { - "url": "https://prebid.adnxs.com/pbc/v1/cache" + "url": "https://prebid.example.com/pbc/v1/cache" }, "enableSendAllBids" : true }, @@ -406,7 +406,7 @@ The following is a sample JSON definition of the plugin configuration defining c }, "prebidConfigOptions" : { "cache": { - "url": "https://prebid.adnxs.com/pbc/v1/cache" + "url": "https://prebid.example.com/pbc/v1/cache" }, "enableSendAllBids" : true }, @@ -502,7 +502,7 @@ The following is a sample JSON definition of the plugin configuration defining c }, "prebidConfigOptions" : { "cache": { - "url": "https://prebid.adnxs.com/pbc/v1/cache" + "url": "https://prebid.example.com/pbc/v1/cache" }, "enableSendAllBids" : true }, diff --git a/dev-docs/plugins/bc/bc-prebid-plugin-render-options.md b/dev-docs/plugins/bc/bc-prebid-plugin-render-options.md index 57f5c104e7..4a60a60c3b 100644 --- a/dev-docs/plugins/bc/bc-prebid-plugin-render-options.md +++ b/dev-docs/plugins/bc/bc-prebid-plugin-render-options.md @@ -321,7 +321,7 @@ String that can be one of the following: * `'start'` (for preroll) * `'end'` (for postroll) * `'hh:mm:ss'` (to specify a midroll at a specific time) -* `'hh:mm:ss.mmm'` (to specify a midroll at a specfic time, including millseconds) +* `'hh:mm:ss.mmm'` (to specify a midroll at a specific time, including milliseconds) * `'n%'` (to specify a midroll to play after the specified percentage of the content video has played) **Required?** diff --git a/dev-docs/plugins/bc/bc-prebid-plugin-sample-studio-integration-general-method.md b/dev-docs/plugins/bc/bc-prebid-plugin-sample-studio-integration-general-method.md index 38f81618fd..6f6ca02132 100644 --- a/dev-docs/plugins/bc/bc-prebid-plugin-sample-studio-integration-general-method.md +++ b/dev-docs/plugins/bc/bc-prebid-plugin-sample-studio-integration-general-method.md @@ -72,7 +72,7 @@ This page presents a sample publisher page using the General Integration Method }] }, "prebidConfigOptions": { - "cache": {"url": "https://prebid.adnxs.com/pbc/v1/cache"}, + "cache": {"url": "https://prebid.example.com/pbc/v1/cache"}, "enableSendAllBids": true }, "prebidTimeout": 700, diff --git a/dev-docs/publisher-api-reference/adServers.dfp.buildAdpodVideoUrl.md b/dev-docs/publisher-api-reference/adServers.dfp.buildAdpodVideoUrl.md index 02adfbb293..2622837b3c 100644 --- a/dev-docs/publisher-api-reference/adServers.dfp.buildAdpodVideoUrl.md +++ b/dev-docs/publisher-api-reference/adServers.dfp.buildAdpodVideoUrl.md @@ -30,7 +30,7 @@ pbjs.que.push(function(){ pbjs.addAdUnits(videoAdUnit); pbjs.setConfig({ cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' + url: 'https://my-pbs.example.com/cache' }, adpod: { brandCategoryExclusion: true diff --git a/dev-docs/publisher-api-reference/adServers.gam.getVastXml.md b/dev-docs/publisher-api-reference/adServers.gam.getVastXml.md new file mode 100644 index 0000000000..9a45bd6d96 --- /dev/null +++ b/dev-docs/publisher-api-reference/adServers.gam.getVastXml.md @@ -0,0 +1,75 @@ +--- +layout: api_prebidjs +title: pbjs.adServers.gam.getVastXml(options) +description: adServers.gam.getVastXml API +sidebarType: 1 +--- + + +{: .alert.alert-info :} +The Google Ad Manager implementation of this function requires including the dfpAdServerVideo module in your Prebid.js build. + +This method extends the behavior of `buildVideoUrl` by not only constructing the Google Ad Manager video ad tag URL, but also fetching and processing the resulting VAST wrapper returned by GAM. + +If the `cache.useLocal` flag is set to true, the function scans the received GAM VAST wrapper for the bid’s cached asset URL that corresponds to a locally stored blob in Prebid.js. When such a match is found, it replaces the contents of the GAM wrapper with the contents of the locally cached VAST XML blob, effectively inlining the ad markup instead of referencing it remotely. + +#### Argument Reference + +##### The `options` object + +{: .table .table-bordered .table-striped } +| Field | Type | Description | +|----------+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `adUnit` | object | *Required*. The Prebid ad unit to which the returned URL will map. | +| `params` | object | *Optional*. Querystring parameters that will be used to construct the Google Ad Manager video ad tag URL. Publisher-supplied values will override values set by Prebid.js. See below for fields. | +| `url` | string | *Optional*. The video ad server URL. When given alongside params, the parsed URL will be overwritten with any matching components of params. | +| `bid` | object | *Optional*. The Prebid bid for which targeting will be set. If this is not defined, Prebid will use the bid with the highest CPM for the adUnit. | + +{: .alert.alert-warning :} +One or both of options.params and options.url is required. In other words, you may pass in one, the other, or both, but not neither. + +##### The `options.params` object + +{: .table .table-bordered .table-striped } +| Field | Type | Description | Example | +|-------------------+--------+-----------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------| +| `iu` | string | *Required*. Google Ad Manager ad unit ID. | `/19968336/prebid_cache_video_adunit` | +| `cust_params` | object | *Optional*. Key-value pairs merged with Prebid's targeting values and sent to Google Ad Manager on the video ad tag URL. | `{section: "blog", anotherKey: "anotherValue"}` | +| `description_url` | string | *Optional*. Describes the video. Required for Ad Exchange. Prebid.js will build this for you unless you pass it explicitly. | `https://www.example.com` | + +For more information on any of these params, see [the Google Ad Manager video tag documentation](https://support.google.com/admanager/answer/1068325). + +#### Example + +```javascript +pbjs.requestBids({ + bidsBackHandler: async function(bidResponses) { + const bidResponse = bidResponses['div-gpt-ad-51545-0']; + if (!bidResponse) { + return; + } + const bid = bidResponse.bids[0]; + const vastXml = await pbjs.adServers.gam.getVastXml({ + bid, + adUnit: 'div-gpt-ad-51545-0', + params: { + iu: '/41758329/localcache', + url: "https://pubads.g.doubleclick.net/gampad/ads?iu=/41758329/localcache&sz=640x480&gdfp_req=1&output=vast&env=vp", + } + }); + jwplayer("player").setup({ + playlist: "https://cdn.jwplayer.com/v2/media/hWF9vG66", + autostart: "viewable", + advertising: { + client: "vast", + schedule: [ + { + vastxml: vastXml, + offset: 'pre' + } + ] + } + }); + } +}); +``` diff --git a/dev-docs/publisher-api-reference/adServers.targetVideo.buildVideoUrl.md b/dev-docs/publisher-api-reference/adServers.targetVideo.buildVideoUrl.md new file mode 100644 index 0000000000..7f4893b45e --- /dev/null +++ b/dev-docs/publisher-api-reference/adServers.targetVideo.buildVideoUrl.md @@ -0,0 +1,78 @@ +--- +layout: api_prebidjs +title: pbjs.adServers.targetVideo.buildVideoUrl(options) +description: adServers.targetVideo.buildVideoUrl API +sidebarType: 1 +--- + + +{: .alert.alert-info :} +TargetVideo Ad Server implementation of this function requires including the `targetVideoAdServerVideo` module in your Prebid.js build. + +This method combines publisher-provided parameters with Prebid.js targeting parameters to build a TargetVideo Ad Server video ad tag URL that can be used by a video player. + +#### Argument Reference + +##### The `options` object + +{: .table .table-bordered .table-striped } +| Field | Type | Description | +|----------+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `adUnit` | object | *Optional*. The Prebid ad unit to which the returned URL will map. | +| `params` | object | *Required*. Querystring parameters that will be used to construct the TargetVideo Ad Server video ad tag URL. See below for fields. | +| `bid` | object | *Optional*. The Prebid bid for which targeting will be set. If this is not defined, Prebid will use the bid with the highest CPM for the adUnit. | + +{: .alert.alert-warning :} +One or both of options.adUnit and options.bid is required. In other words, you may pass in one, the other, or both, but not neither. + +##### The `options.params` object + +{: .table .table-bordered .table-striped } +| Field | Type | Description | Example | +|-------------------+--------+-----------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------| +| `iu` | string | *Required*. TargetVideo Ad Server ad unit ID or link. | `/19968336/prebid_cache_video_adunit` | +| `cust_params` | object | *Optional*. Key-value pairs merged with Prebid's targeting values and sent to TargetVideo Ad Server on the video ad tag URL. | `{section: "blog", anotherKey: "anotherValue"}` | + +#### Examples + +There are several different ways to build up your video URL, as shown in the examples below: + +Using `options.params.iu` as ad unit id: + +```javascript +pbjs.requestBids({ + bidsBackHandler: function(bids) { + var videoUrl = pbjs.adServers.targetVideo.buildVideoUrl({ + adUnit: videoAdUnit, + params: { + iu: "/19968336/prebid_cache_video_adunit", + cust_params: { + section: "blog", + anotherKey: "anotherValue" + }, + } + }); + invokeVideoPlayer(videoUrl); + } +}); +``` + +Using `options.params.iu` as ad link: + +```javascript +pbjs.requestBids({ + bidsBackHandler: function(bids) { + var videoUrl = pbjs.adServers.targetVideo.buildVideoUrl({ + adUnit: videoAdUnit, + params: { + iu: "https://vid.tvserve.io/ads/bid?iu=/19968336/prebid_cache_video_adunit", + cust_params: { + section: "blog", + anotherKey: "anotherValue" + }, + } + }); + invokeVideoPlayer(videoUrl); + } +}); +``` diff --git a/dev-docs/publisher-api-reference/aliasBidder.md b/dev-docs/publisher-api-reference/aliasBidder.md index fd0a7248ef..590cfc3584 100644 --- a/dev-docs/publisher-api-reference/aliasBidder.md +++ b/dev-docs/publisher-api-reference/aliasBidder.md @@ -9,7 +9,7 @@ To define an alias for a bidder adapter, call this method at runtime: ```javascript -pbjs.aliasBidder('appnexus', 'newAlias', optionsObject ); +pbjs.aliasBidder('appnexus', 'newAlias', optionsObject); ``` @@ -25,9 +25,10 @@ If you define an alias and are using `pbjs.sendAllBids`, you must also set up ad The options object supports these parameters: {: .table .table-bordered .table-striped } -| Option Parameter | Type | Description | -|------------|---------|---------------------------------| -| gvlid | integer | IAB Global Vendor List ID for this alias for use with the [GDPR Enforcement module](/dev-docs/modules/gdprEnforcement.html). | +| Option Parameter | Scope | Type | Description | +|------------|---------|---------|---------------------------------| +| gvlid | optional | integer | IAB Global Vendor List ID for this alias for use with the [TCF control module](/dev-docs/modules/tcfControl.html). | +| useBaseGvlid | optional | boolean | Flag determining if the GVL ID of the original adapter should be re-used. (PBJS 9.14+) | {: .alert.alert-info :} Creating an alias for a Prebid Server adapter is done differently. See 'extPrebid' diff --git a/dev-docs/publisher-api-reference/bidderSettings.md b/dev-docs/publisher-api-reference/bidderSettings.md index f40399cd2e..a39d866c98 100644 --- a/dev-docs/publisher-api-reference/bidderSettings.md +++ b/dev-docs/publisher-api-reference/bidderSettings.md @@ -213,7 +213,10 @@ In the above example, the AOL bidder will inherit from "standard" adserverTarget When using [price floors](/dev-docs/modules/floors.html), Prebid attempts to calculate the inverse of `bidCpmAdjustment`, so that the floor values it requests from SSPs take into account how the bid will be adjusted. For example, if the adjustment is `bidCpm * .85` as above, floors are adjusted by `bidFloor * 1 / .85`. -The automatically derived inverse function is correct only when `bidCpmAdjustment` is a simple multiplication. If it isn't, the inverse should also be provided through `inverseBidAdjustment`. For example: +The automatically derived inverse function is correct only when `bidCpmAdjustment` is a simple multiplication. +If it isn't, the inverse should also be provided, as a function taking 3 arguments: `inverseBidAdjustment(cpm, bidRequest, floorRequest)`, where `floorRequest` is an object containing `{mediaType, size}`, both of which can be null if calculating non-specific floors. + +For example: ```javascript pbjs.bidderSettings = { diff --git a/dev-docs/publisher-api-reference/clearAllAuctions.md b/dev-docs/publisher-api-reference/clearAllAuctions.md new file mode 100644 index 0000000000..3a545e5b29 --- /dev/null +++ b/dev-docs/publisher-api-reference/clearAllAuctions.md @@ -0,0 +1,31 @@ +--- +layout: api_prebidjs +title: pbjs.clearAllAuctions +description: +sidebarType: 1 +--- + + +Utility to clear all ad units of bids. This is useful for testing or to clear caches in a single page application. + +```javascript +// Function to call when the URL changes +function onUrlChange() { + pbjs.clearAllAuctions(); +} + +// Function to initialize the URL change listener +function initUrlChangeListener() { + // Listen for changes to the history state + window.addEventListener('popstate', onUrlChange); + + // Optionally, you might want to handle the initial load as well + onUrlChange(); +} + +// Call the function to set up the listener +initUrlChangeListener(); + +``` + +
      diff --git a/dev-docs/publisher-api-reference/getAdserverTargetingForAdUnitCodeStr.md b/dev-docs/publisher-api-reference/getAdserverTargetingForAdUnitCodeStr.md new file mode 100644 index 0000000000..bd4fe3627a --- /dev/null +++ b/dev-docs/publisher-api-reference/getAdserverTargetingForAdUnitCodeStr.md @@ -0,0 +1,27 @@ +--- +layout: api_prebidjs +title: pbjs.getAdserverTargetingForAdUnitCodeStr(adunitCode) +description: getAdserverTargetingForAdUnitCodeStr API +sidebarType: 1 +--- + +Returns the query string targeting parameters available at the moment for the specified ad unit. + +**Kind**: static method of `pbjs`. + +**Returns**: `Array` - list of targeting key-value strings. + +**Request Params:** + +{: .table .table-bordered .table-striped } + +| Param | Type | Description | +| --- | --- | --- | +| `adunitCode` | `string` | adUnitCode to get the bid responses for | + +**Example** + +```javascript +const targetingStrings = pbjs.getAdserverTargetingForAdUnitCodeStr('div-1'); +// ["hb_bidder=appnexus", "hb_adid=233bcbee889d46d", ...] +``` diff --git a/dev-docs/publisher-api-reference/getAllPrebidWinningBids.md b/dev-docs/publisher-api-reference/getAllPrebidWinningBids.md index 9d9bb09271..251f4f760b 100644 --- a/dev-docs/publisher-api-reference/getAllPrebidWinningBids.md +++ b/dev-docs/publisher-api-reference/getAllPrebidWinningBids.md @@ -6,6 +6,6 @@ sidebarType: 1 --- -Use this method to get all of the bids that have won their respective auctions but not rendered on the page. Useful for [troubleshooting your integration]({{site.baseurl}}/dev-docs/prebid-troubleshooting-guide.html). +Use this method to get all the bids that have been used to generate targeting but have not yet been rendered on the page. It matches winning bids only after targeting has been applied and before the ad is rendered. Useful for [troubleshooting your integration]({{site.baseurl}}/dev-docs/prebid-troubleshooting-guide.html). -* `pbjs.getAllPrebidWinningBids()`: returns an array of bid objects that have won their respective auctions but not rendered on the page. +* `pbjs.getAllPrebidWinningBids()`: returns an array of bid objects that have been used to generate targeting and have not yet been rendered on the page. diff --git a/dev-docs/publisher-api-reference/getEvents.md b/dev-docs/publisher-api-reference/getEvents.md index ccf5c2711f..1dd6744d91 100644 --- a/dev-docs/publisher-api-reference/getEvents.md +++ b/dev-docs/publisher-api-reference/getEvents.md @@ -31,7 +31,8 @@ The available events are: | beforeBidderHttp | bidder network request is about be triggered | Array of Bid request objects | | bidRequested | A bid was requested from a specific bidder | Bid request object | | bidResponse | A bid response has arrived | Bid response object | -| seatNonBid | Prebid Server has returned nonbid information. Must be enabled in s2sConfig.extPrebid | None | +| pbsAnalytics | Prebid Server has returned extra information for analytics adapters. | { [seatnonbid](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#seat-non-bid), auctionId, [atag](/prebid-server/developers/module-atags.html) } | +| seatNonBid | DEPRECATED - use pbsAnalytics instead. Prebid Server has returned nonbid information. Must be enabled in s2sConfig.extPrebid | None | | bidRejected | A bid was rejected | Bid response object | | bidAdjustment | A bid was adjusted | Bid response object | | bidWon | A bid has won | Bid response object | @@ -46,6 +47,7 @@ The available events are: | bidderError | A bidder responded with an error | Object with the XMLHttpRequest error and the bid request object `{ error, bidderRequest }` | | tcf2Enforcement | There was a TCF2 enforcement action taken | `{ storageBlocked: ['moduleA', 'moduleB'], biddersBlocked: ['moduleB'], analyticsBlocked: ['moduleC'] }` | | bidAccepted | A bid was accepted and is about to be added to auction | Bid response object | +| browserIntervention | The browser reported an intervention affecting a rendered creative (e.g., heavy-ad unload). | `{ bid, adId, intervention }` | The example below shows how these events can be used. diff --git a/dev-docs/publisher-api-reference/getPAAPIBids.md b/dev-docs/publisher-api-reference/getPAAPIBids.md new file mode 100644 index 0000000000..aa6cdb5365 --- /dev/null +++ b/dev-docs/publisher-api-reference/getPAAPIBids.md @@ -0,0 +1,93 @@ +--- +layout: api_prebidjs +title: pbjs.getPAAPIBids(options) +description: getPAAPIBids API +sidebarType: 1 +--- + +Returns a promise of the latest PAAPI bid for each ad unit, optionally filtered by auction or ad unit. + +**Kind**: static method of pbjs API. Only available when the [topLevelPaapi module](/dev-docs/modules/topLevelPaapi.html) is installed. + +**Returns**: `Promise` - Promise to a map from ad unit code to the PAAPI winner for that ad unit, if available. + +**Parameters**: + +{: .table .table-bordered .table-striped } +| Param | Scope | Type | Description | +| --- | --- | --- | --- | +| options | Optional | `Object` | | +| options.adUnitCode | Optional | `String` | Ad unit filter; if provided, only return the PAAPI winner for this ad unit | +| options.auctionId | Optional | `String` | Auction filter; if provided, only return PAAPI winners for this auction | + +**Result**: + +The return value is a map where each value is either `null` (when there is no PAAPI winner), or an object with this format: + +{: .table .table-bordered .table-stripped :} +| Param | Type | Description | +| --- | --- | --- | +| adId | String | Ad ID. can be used with [renderAd](/dev-docs/publisher-api-reference/renderAd.html) | +| auctionId | String | Auction ID tied to this bid | +| adUnitCode | String | Ad unit code tied to this bid | +| source | String | Always `"paapi"` | +| urn | String | Creative URN (only set if `paapi.topLevelSeller.auctionConfig.resolveToConfig` is `false`| +| frameConfig | Object | Creative fenced frame config (only set if `paapi.topLevelSeller.auctionConfig.resolveToConfig` is `true`| +| auctionConfig | Object | The auction config object that was passed to `navigator.runAdAuction` and generated this bid | +| width | Number | Creative width | +| height | Number | Creative height | + +**Example**: + +```js +pbjs.getPAAPIBids({adUnitCode: 'test-slot'}) +``` + +```json +{ + "test-slot": { + "source": "paapi", + "adId": "paapi:/0c00694d-958d-4250-98b3-5fe15cb019ab/:/test-slot", + "width": 300, + "height": 250, + "adUnitCode": "test-slot", + "auctionId": "0c00694d-958d-4250-98b3-5fe15cb019ab", + "urn": "urn:uuid:81005931-5726-4fb4-8bec-9ae74248e1ef", + "auctionConfig": { + "auctionSignals": { + "prebid": { + "bidfloor": 1, + "bidfloorcur": "USD" + } + }, + "requestedSize": { + "width": 300, + "height": 250 + }, + "componentAuctions": [ + { + "requestedSize": { + "width": "300px", + "height": "250px" + }, + "seller": "https://ads.optable.co", + "decisionLogicURL": "https://ads.optable.co/ca/paapi/v1/ssp/decision-logic.js?origin=daa30ba1-5613-4a2c-b7f0-34e2c033202a", + "interestGroupBuyers": [ + "https://ads.optable.co" + ], + "sellerCurrency": "USD", + "perBuyerCurrencies": { + "https://ads.optable.co": "USD" + }, + "perBuyerMultiBidLimits": { + "https://ads.optable.co": 100 + } + } + ], + "resolveToConfig": false, + "seller": "https://publisher.com", + "decisionLogicURL": "https://publisher.com/decisionLogic.js" + } + } +} +``` diff --git a/dev-docs/publisher-api-reference/markWinningBidAsUsed.md b/dev-docs/publisher-api-reference/markWinningBidAsUsed.md index 45dfbdd629..5a17d7f69d 100644 --- a/dev-docs/publisher-api-reference/markWinningBidAsUsed.md +++ b/dev-docs/publisher-api-reference/markWinningBidAsUsed.md @@ -6,7 +6,8 @@ sidebarType: 1 --- -This function can be used to mark the winning bid as used. This is useful when running multiple video advertisements on the page, since these are not automatically marked as “rendered”. +This function can be used to mark the winning bid as used, removing it from the bid cache. This is useful when running multiple video advertisements on the page, since these are not automatically marked as “rendered”. + If you know the adId, then be specific, otherwise Prebid will retrieve the winning bid for the adUnitCode and mark it accordingly. #### Argument Reference @@ -18,3 +19,4 @@ If you know the adId, then be specific, otherwise Prebid will retrieve the winni | --- | --- | --- | | adUnitCode | `string` | (Optional) The ad unit code | | adId | `string` | (Optional) The id representing the ad we want to mark | +| events | `boolean` | (Optional) if true, triggers the 'bidWon' event and tracking pixels for the marked bid | diff --git a/dev-docs/publisher-api-reference/offEvent.md b/dev-docs/publisher-api-reference/offEvent.md index 603b168032..e39872e19a 100644 --- a/dev-docs/publisher-api-reference/offEvent.md +++ b/dev-docs/publisher-api-reference/offEvent.md @@ -16,7 +16,7 @@ Turns off an event callback defined with [onEvent](/dev-docs/publisher-api-refer See the [getEvents](/dev-docs/publisher-api-reference/getEvents.html) function for the full list of eventTypes supported. Causes PBJS to search through registered event callbacks and remove the -supplied callbackFunction for the specifc eventType. +supplied callbackFunction for the specific eventType. The optional `id` parameter provides more finely-grained event callback de-registration. This makes it possible to de-register callback diff --git a/dev-docs/publisher-api-reference/processQueue.md b/dev-docs/publisher-api-reference/processQueue.md new file mode 100644 index 0000000000..28c3968357 --- /dev/null +++ b/dev-docs/publisher-api-reference/processQueue.md @@ -0,0 +1,18 @@ +--- +layout: api_prebidjs +title: pbjs.processQueue() +description: processQueue API +sidebarType: 1 +--- + +Processes commands that were pushed onto `pbjs.cmd` or `pbjs.que` before Prebid.js finished loading. + +**Kind**: static method of `pbjs`. + +Calling this method manually is rarely necessary because Prebid.js runs it automatically when the library loads. + +**Example** + +```javascript +pbjs.processQueue(); +``` diff --git a/dev-docs/publisher-api-reference/registerAnalyticsAdapter.md b/dev-docs/publisher-api-reference/registerAnalyticsAdapter.md new file mode 100644 index 0000000000..884453e986 --- /dev/null +++ b/dev-docs/publisher-api-reference/registerAnalyticsAdapter.md @@ -0,0 +1,28 @@ +--- +layout: api_prebidjs +title: pbjs.registerAnalyticsAdapter(options) +description: registerAnalyticsAdapter API +sidebarType: 1 +--- + +Registers an analytics adapter so it can listen to auction events. + +**Kind**: static method of `pbjs`. + +**Request Params:** + +{: .table .table-bordered .table-striped } + +| Param | Type | Description | +| --- | --- | --- | +| `options` | `object` | Object containing the adapter instance and code | + +**Example** + +```javascript +pbjs.registerAnalyticsAdapter({ + adapter: myAnalyticsAdapter, + code: 'myAnalytics', + gvlid: 1 +}); +``` diff --git a/dev-docs/publisher-api-reference/registerBidAdapter.md b/dev-docs/publisher-api-reference/registerBidAdapter.md new file mode 100644 index 0000000000..0b7e53c1d3 --- /dev/null +++ b/dev-docs/publisher-api-reference/registerBidAdapter.md @@ -0,0 +1,28 @@ +--- +layout: api_prebidjs +title: pbjs.registerBidAdapter(bidderAdapter, bidderCode) +description: registerBidAdapter API +sidebarType: 1 +--- + +Registers a custom bid adapter for use within Prebid.js. + +**Kind**: static method of `pbjs`. + +**Request Params:** + +{: .table .table-bordered .table-striped } + +| Param | Type | Description | +| --- | --- | --- | +| `bidderAdapter` | `function` | Adapter instance that returns a `callBids` function | +| `bidderCode` | `string` | Code that identifies the adapter | + +**Example** + +```javascript +function myAdapter() { + return { callBids: function() { /* ... */ } }; +} +pbjs.registerBidAdapter(myAdapter, 'my'); +``` diff --git a/dev-docs/publisher-api-reference/setConfig.md b/dev-docs/publisher-api-reference/setConfig.md index 73ad3d0643..dfc0f2a5aa 100644 --- a/dev-docs/publisher-api-reference/setConfig.md +++ b/dev-docs/publisher-api-reference/setConfig.md @@ -5,57 +5,30 @@ description: setConfig API sidebarType: 1 --- -`setConfig` supports a number of configuration options. Every -call to setConfig overwrites supplied values at the top level. e.g. if `ortb2` is provided as a value, any previously-supplied `ortb2` values will disappear. +* TOC +{:toc} + +## Overview + +`setConfig()` is the main way to tell Prebid.js how you want to run the header bidding auction. Every +call to `setConfig()` overwrites supplied values at the top level. e.g. if `ortb2` is provided as a value, any previously-supplied `ortb2` values will disappear. If this is not the desired behavior, there is a [`mergeConfig()`](mergeConfig.html) function that will preserve previous values to do not conflict with the newly supplied values. -See below for usage examples. - -Core config: - -* [Debugging](#setConfig-Debugging) -* [Device Access](#setConfig-deviceAccess) -* [Bidder Timeouts](#setConfig-Bidder-Timeouts) -* [Enable sharing of transaction IDs](#setConfig-enableTIDs) -* [Max Requests Per Origin](#setConfig-Max-Requests-Per-Origin) -* [Disable Ajax Timeout](#setConfig-Disable-Ajax-Timeout) -* [Set Timeout Buffer](#setConfig-timeoutBuffer) -* [Set TTL Buffer](#setConfig-ttlBuffer) -* [Turn on send all bids mode](#setConfig-Send-All-Bids) -* [Configure send bids control](#setConfig-Send-Bids-Control) -* [Bid cache](#setConfig-Use-Bid-Cache) -* [Minimum bid cache TTL](#setConfig-minBidCacheTTL) -* [Event history TTL](#setConfig-eventHistoryTTL) -* [Set the order in which bidders are called](#setConfig-Bidder-Order) -* [Set the page URL](#setConfig-Page-URL) -* [Set price granularity](#setConfig-Price-Granularity) -* [Set media type price granularity](#setConfig-MediaType-Price-Granularity) -* [Set custom cpm rounding](#setConfig-Cpm-Rounding) -* [Configure server-to-server header bidding](#setConfig-Server-to-Server) -* [Configure user syncing](#setConfig-Configure-User-Syncing) -* [Configure targeting controls](#setConfig-targetingControls) -* [Configure responsive ad units with `sizeConfig` and `labels`](#setConfig-Configure-Responsive-Ads) -* [COPPA](#setConfig-coppa) -* [First Party Data](#setConfig-fpd) -* [Video Module to integrate with Video Players](#video-module) -* [Caching VAST XML](#setConfig-vast-cache) -* [Site Metadata](#setConfig-site) -* [Disable performance metrics](#setConfig-performanceMetrics) -* [Setting alias registry to private](#setConfig-aliasRegistry) -* [Generic Configuration](#setConfig-Generic-Configuration) -* [Troubleshooting configuration](#setConfig-Troubleshooting-your-configuration) - -Module config: other options to `setConfig()` are available if the relevant module is included in the Prebid.js build. +This page covers the setConfig() values supported by the core of Prebid.js. There are other options available if certain modules are included in the Prebid.js build: + +Module-specific configuration: * [Currency module](/dev-docs/modules/currency.html) -* [Consent Management](/dev-docs/modules/consentManagement.html#page-integration) +* [Consent Management](/dev-docs/modules/consentManagementTcf.html#page-integration) * [User ID module](/dev-docs/modules/userId.html#configuration) * [Adpod](/dev-docs/modules/adpod.html) * [IAB Category Translation](/dev-docs/modules/categoryTranslation.html) -#### Debugging +## PBJS Core Configuration + +### Debugging Debug mode can be enabled permanently in a page if desired. In debug mode, Prebid.js will post additional messages to the browser console and cause Prebid Server to @@ -74,7 +47,7 @@ Note that turning on debugging for Prebid Server causes most server-side adapter -#### Device Access +### Device Access You can prevent Prebid.js from reading or writing cookies or HTML localstorage by setting this flag: @@ -88,7 +61,7 @@ Note that bid adapters are normally denied access to device storage even when `d -#### Bidder Timeouts +### Bidder Timeouts Set a global bidder timeout: @@ -104,15 +77,27 @@ For more information about the asynchronous event loop and `setTimeout`, see [Ho -#### Enable sharing of transaction IDs - +### Enable sharing of transaction IDs Prebid generates unique IDs for both auctions and ad units within auctions; these can be used by DSPs to correlate requests from different sources, which is useful for many applications but also a potential privacy concern. Since version 8 they are disabled by default (see [release notes](/dev-docs/pb8-notes.html)), and can be re-enabled with `enableTIDs`: ```javascript pbjs.setConfig({ enableTIDs: true }); ``` -#### Max Requests Per Origin +{: .alert.alert-warning :} +From version 10.9.0 - 10.13.0 transaction IDs are unique for each bidder and cannot be used to correlate requests from different sources, even when `enableTIDs` is set. + +{: .alert.alert-warning :} +From version 10.14.0+ when `enableTIDs` is set you can also pass `consistentTIDs` set to true to get transaction IDs behavior prior to version 10.9.0 (global vs bidder specific TIDs) + +```javascript +pbjs.setConfig({ + enableTIDs: true, + consistentTIDs : true +}); +``` + +### Max Requests Per Origin @@ -130,7 +115,7 @@ pbjs.setConfig({ maxRequestsPerOrigin: 6 }); pbjs.setConfig({ maxRequestsPerOrigin: 1 }); ``` -#### Disable Ajax Timeout +### Disable Ajax Timeout @@ -140,29 +125,39 @@ Prebid core adds a timeout on XMLHttpRequest request to terminate the request on pbjs.setConfig({ disableAjaxTimeout: true }); ``` -#### Set Timeout Buffer +### Set TTL Buffer - + -Prebid core adds a timeout buffer to extend the time that bidders have to return a bid after the auction closes. This buffer is used to offset the "time slippage" of the setTimeout behavior in browsers. Prebid.js sets the default value to 400ms. You can change this value by setting `timeoutBuffer` to the amount of time you want to use. The following example sets the buffer to 300ms. +When an adapter bids, it provides a TTL (time-to-live); the bid is considered expired and unusuable after that time has elapsed. Core subtracts from it a buffer of 1 second; that is, a bid with TTL of 30 seconds is considered expired after 29 seconds. You can adjust this buffer with: ```javascript -pbjs.setConfig({ timeoutBuffer: 300 }); +pbjs.setConfig({ + ttlBuffer: 10 // TTL buffer in seconds +}); ``` -#### Set TTL Buffer +### Change prerendering behavior - +When a page is [prerendered](https://developer.chrome.com/docs/web-platform/prerender-pages), by default Prebid will delay auctions until it is activated. -When an adapter bids, it provides a TTL (time-to-live); the bid is considered expired and unusuable after that time has elapsed. Core subtracts from it a buffer of 1 second; that is, a bid with TTL of 30 seconds is considered expired after 29 seconds. You can adjust this buffer with: +You can disable this behavior and allow auctions to run during prerendering with `allowPrerendering`: ```javascript -pbjs.setConfig({ - ttlBuffer: 10 // TTL buffer in seconds -}); +pbjs.setConfig({ + allowPrerendering: true +}) +``` + +Alternatively you may delay execution of the entire command queue (not just auctions) until the page is activated, using `delayPrerendering`: + +```javascript +pbjs.delayPrerendering = true; ``` -#### Send All Bids +Note that `delayPrerendering` is a property of the `pbjs` global and not a normal setting; this is because it takes effect before (and delays) any call to `setConfig`. + +### Send All Bids @@ -179,7 +174,8 @@ There are several ways to address the issue of sending too much data to the ad s Note that targeting config must be set before either `pbjs.setTargetingForGPTAsync()` or `pbjs.getAdserverTargeting()` is called. -##### Example results where enableSendAllBids is true +#### Example results where enableSendAllBids is true +{: .no_toc} ```bash { @@ -218,6 +214,7 @@ The Prebid recommendation is to leave `enableSendAllBids` as **true** when ad se {% include alerts/alert_note.html content=noteAlert %} ##### Example of setting enableSendAllBids to false +{: .no_toc} Turning off `enableSendAllBids` will cause the system to return only the winning bid. However, this could be a problem if you need to support [deals](/adops/deals.html), as often a deal may be chosen to win over an open market bid. @@ -235,7 +232,7 @@ pbjs.setConfig({ -#### Configure Send Bids Control +### Configure Send Bids Control @@ -247,7 +244,8 @@ The `sendBidsControl` object passed to `pbjs.setConfig` provides the publisher w | `bidLimit` | integer | The maximum number of bids the system can add to ad server targeting. | | `dealPrioritization` | boolean | When `true`, bids with deals are prioritized before bids without deals. | -##### Details on the bidLimit setting +#### Details on the bidLimit setting +{: .no_toc} Below is an example config containing `bidLimit`: @@ -264,7 +262,7 @@ When this property is set, the value assigned to `bidLimit` is the maximum numbe {: .alert.alert-info :} Note that this feature overlaps and can be used in conjunction with [targetingControls.auctionKeyMaxChars](#setConfig-targetingControls). Please see that section for tips on controlling the number of characters being sent to the ad server. -#### Use Bid Cache +### Use Bid Cache @@ -280,7 +278,7 @@ feature in 2.0 and later, you'll need to set the value to true. pbjs.setConfig({ useBidCache: true }) ``` -#### Bid Cache Filter Function +### Bid Cache Filter Function @@ -293,7 +291,7 @@ pbjs.setConfig({ }); ``` -#### Minimum bid cache TTL +### Minimum bid cache TTL @@ -309,7 +307,7 @@ When set, bids are only kept in memory for the duration of their actual TTL life Put another way, this setting doesn't define each bid's TTL, but rather controls how long it's kept around in memory for analytics purposes. -#### Event history TTL +### Event history TTL @@ -322,7 +320,7 @@ pbjs.setConfig({ }) ``` -#### Bidder Order +### Bidder Order Set the order in which bidders are called: @@ -332,7 +330,7 @@ pbjs.setConfig({ bidderSequence: "fixed" }) /* default is "random" */ -#### Page URL +### Page URL Override the Prebid.js page referrer for some bidders. @@ -342,7 +340,7 @@ pbjs.setConfig({ pageUrl: "https://example.com/index.html" }) -#### Price Granularity +### Price Granularity This configuration defines the price bucket granularity setting that will be used for the `hb_pb` keyword. @@ -361,7 +359,7 @@ Standard values: -##### Auto Granularity +#### Auto Granularity {: .table .table-bordered .table-striped } | CPM | Granularity | Example | @@ -373,7 +371,7 @@ Standard values: -##### Dense Granularity +#### Dense Granularity {: .table .table-bordered .table-striped } | CPM | Granularity | Example | @@ -385,7 +383,7 @@ Standard values: -##### Custom CPM Bucket Sizing +#### Custom CPM Bucket Sizing To set up your own custom CPM buckets, create an object like the following, and pass it into `setConfig`: @@ -434,7 +432,7 @@ This implies that ranges should have max values that are really the min value of -#### Media Type Price Granularity +### Media Type Price Granularity The standard [Prebid price granularities](#setConfig-Price-Granularity) cap out at 20, which isn't always convenient for video ads, which can command more than that. One solution is to set up a custom price granularity as described above. Another approach is to use @@ -481,7 +479,7 @@ a price granularity override. If it doesn't find 'video-outstream' defined, it w -#### Custom CPM Rounding +### Custom CPM Rounding Prebid defaults to rounding down all bids to the nearest increment, which may cause lower CPM ads to be selected. While this can be addressed through higher [price granularity](#setConfig-Price-Granularity), Prebid also allows setting a custom rounding function. @@ -513,13 +511,13 @@ pbjs.setConfig({'cpmRoundingFunction': roundToNearestEvenIncrement}); -#### Server to Server +### Server to Server See the [Prebid Server module](/dev-docs/modules/prebidServer.html). -#### Mobile App Post-Bid +### Mobile App Post-Bid To support [post-bid](/overview/what-is-post-bid.html) scenarios on mobile apps, the prebidServerBidAdapter module will accept `ortb2.app` config to @@ -541,7 +539,7 @@ In PBJS 4.29 and earlier, don't add the `ortb2` level here -- just `app` directl -#### Configure User Syncing +### Configure User Syncing The user sync configuration options described in this section give publishers control over how adapters behave with respect to dropping pixels or scripts to cookie users with IDs. This practice is called "user syncing" because the aim is to let the bidders match IDs between their cookie space and the DSP's cookie space. @@ -564,7 +562,7 @@ For more information, see the sections below. -##### User Sync Properties +#### User Sync Properties For descriptions of all the properties that control user syncs, see the table below. @@ -581,7 +579,7 @@ For descriptions of all the properties that control user syncs, see the table be -##### User Sync Examples +#### User Sync Examples For examples of configurations that will change the default behavior, see below. @@ -698,7 +696,7 @@ pbjs.triggerUserSyncs(); -##### How User Syncing Works +#### How User Syncing Works The [userSync.registerSync()]({{site.baseurl}}/dev-docs/bidder-adaptor.html#bidder-adaptor-Registering-User-Syncs) function called by the adapter keeps a queue of valid userSync requests. It prevents unwanted sync entries from being placed on the queue: @@ -710,23 +708,28 @@ When user syncs are run, regardless of whether they are invoked by the platform -#### Configure Targeting Controls +### Configure Targeting Controls The `targetingControls` object passed to `pbjs.setConfig` provides some options to influence how an auction's targeting keys are generated and managed. {: .table .table-bordered .table-striped } | Attribute | Type | Description | |------------+---------+---------------------------------| -| auctionKeyMaxChars | integer | Specifies the maximum number of characters the system can add to ad server targeting. | -| alwaysIncludeDeals | boolean | If [enableSendAllBids](#setConfig-Send-All-Bids) is false, set this value to `true` to ensure that deals are sent along with the winning bid | +| auctionKeyMaxChars | Integer | Specifies the maximum number of characters the system can add to ad server targeting. | +| alwaysIncludeDeals | Boolean | If [enableSendAllBids](#setConfig-Send-All-Bids) is false, set this value to `true` to ensure that deals are sent along with the winning bid | | allowTargetingKeys | Array of Strings | Selects supported default targeting keys. | | addTargetingKeys | Array of Strings | Selects targeting keys to be supported in addition to the default ones | | allowSendAllBidsTargetingKeys | Array of Strings | Selects supported default targeting keys. | +| allBidsCustomTargeting | Boolean | Set to true to prevent custom targeting values from being set for non-winning bids | +| lock | Array of Strings | Targeting keys to lock | +| lockTimeout | Integer | Lock timeout in milliseconds | +| version | String | Value to set in the `hb_ver` targeting key | {: .alert.alert-info :} Note that this feature overlaps and can be used in conjunction with [sendBidsControl.bidLimit](#setConfig-Send-Bids-Control). -##### Details on the auctionKeyMaxChars setting +#### Details on the auctionKeyMaxChars setting +{: .no_toc} Below is an example config containing `auctionKeyMaxChars`: @@ -752,7 +755,8 @@ Specifically, Prebid will go through the following steps with this feature: If you want to review the particular details about which sets of keys are passed/rejected, you can find them in the Prebid console debug log. -##### Finding the right value +#### Finding the right value +{: .no_toc} Given the varying nature of how sites are set up for advertising and the varying mechanics and data-points needed by ad servers, providing a generic threshold setting is tricky. If you plan to enable this setting, it's recommended you review your own setup to determine the ideal value. The following steps provide some guidance on how to start this process: @@ -768,7 +772,8 @@ Between this feature and the overlapping [sendBidsControl.bidLimit](/dev-docs/pu -##### Details on the allowTargetingKeys setting +#### Details on the allowTargetingKeys setting +{: .no_toc} The `allowTargetingKeys` config creates a targeting key mask based on the default targeting keys defined in CONSTANTS.TARGETING_KEYS and CONSTANTS.NATIVE_KEYS. Any default keys that do not match the mask will not be sent to the adserver. This setting can be helpful if you find that your default Prebid.js implementation is sending key values that your adserver isn't configured to process; extraneous key values may lead to the ad server request being truncated, which can cause potential issues with the delivery or rendering ads. @@ -843,7 +848,8 @@ config.setConfig({ -##### Details on the addTargetingKeys setting +#### Details on the addTargetingKeys setting +{: .no_toc} The `addTargetingKeys` config is similar to `allowTargetingKeys`, except it adds to the keys in CONSTANTS.DEFAULT_TARGETING_KEYS instead of replacing them. This is useful if you need Prebid.js to generate targeting for some keys that are not allowed by default without removing any of the default ones (see [allowTargetingKeys](#targetingControls-allowTargetingKeys) for details on how targeting is generated). @@ -899,7 +905,8 @@ config.setConfig({ }); ``` -##### Details on the allowSendAllBidsTargetingKeys setting +#### Details on the allowSendAllBidsTargetingKeys setting +{: .no_toc} The `allowSendAllBidsTargetingKeys` is similar to `allowTargetingKeys` except it limits any default bidder specific keys sent to the adserver when sendAllBids is enabled. Any default bidder specific keys that do not match the mask will not be sent to the adserver. This setting can be helpful if you find that your default Prebid.js implementation is sending key values that your adserver isn't configured to process; extraneous key values may lead to the ad server request being truncated, which can cause potential issues with the delivery or rendering ads. An example of an extraneous key value many publishers may find redundant and want to remove is `hb_bidder_biddercode = biddercode`. @@ -913,15 +920,66 @@ config.setConfig({ }); ``` +#### Details on the allBidsCustomTargeting setting +{: .no_toc} + +By default, non winning bids will have custom tageting values concatenated to the winning bid's custom targeting for the same key. The `allBidsCustomTargeting` setting is a boolean that, when set to `false`, prevents custom targeting values from being set for non-winning bids. This can be useful if you want to ensure that only the winning bid has custom targeting values set. + +#### Details on the lock and lockTimeout settings +{: .no_toc } + +When `lock` is set, targeting set through `setTargetingForGPTAsync` or `setTargetingForAst` +will prevent bids with the same targeting on any of the given keys from being used again until rendering is complete or +`lockTimeout` milliseconds have passed. + +For example, with the following: + +```javascript +pbjs.setConfig({ + targetingControls: { + lock: ['hb_adid'], + lockTimeout: 2000 + } +}); +``` + +calling `pbjs.setTargetingForGPTAsync()` will "lock" the targeted `hb_adid` until its slot renders or 2 seconds have passed, preventing subsequent calls to `setTargetingForGPTAsync` from using bids with the same `hb_adid` in the meanwhile. +If using standard targeting `hb_adid` is unique for each bid, so this would have the effect of preventing the same bid from being used for multiple slots at the same time. + -#### Configure Responsive Ads +#### Details on the version setting +{: .no_toc } + +Since version 10.11.0, Prebid populates the `hb_ver` targeting key with a recommended version of Prebid Universal Creative. This should be used in ad server creatives to fetch that particular version of PUC (see for example [general prebid ad server setup](/adops/adops-general-sbs.html#create-creatives)). + +You may set a different value for `hb_ver` using `version`: + +```javascript +pbjs.setConfig({ + targetingControls: { + version: '1.17.2' + } +}) +``` + +Or disable it by setting `false`: { + +```javascript +pbjs.setConfig({ + targetingControls: { + version: false + } +}) +``` + +### Configure Responsive Ads See the [size mapping](/dev-docs/modules/sizeMapping.html) or [advanced size mapping](/dev-docs/modules/sizeMappingV2.html) modules. -#### COPPA +### COPPA Bidder adapters that support the Child Online Privacy Protection Act (COPPA) read the `coppa` configuration. Publishers with content falling under the scope of this regulation should consult with their legal teams. @@ -933,7 +991,7 @@ pbjs.setConfig({coppa: true}); -#### First Party Data +### First Party Data The First Party Data feature allows publishers to specify key/value data in one place where each compatible bid adapter can read it. See the [First Party Data Feature](/features/firstPartyData.html) for more detailed examples. @@ -979,12 +1037,13 @@ See [Prebid Server First Party Data](/prebid-server/features/pbs-fpd.html) for d -#### Video Module to integrate with Video Players +### Video Module to integrate with Video Players The Prebid Video Module allows Prebid to directly integrate with a Video Player, allowing Prebid to automatically load the winning ad into the player, mark bids as won, fill the video and content oRTB params in the bid request, surface video analytics, and more. For more information please visit the [Video Module docs]({{site.github.url}}/prebid-video/video-module.html). To register a video player with Prebid, you must use `setConfig` to set a `video` config compliant with the following structure: {: .table .table-bordered .table-striped } + | Field | Required? | Type | Description | |---|---|---|---| | video.providers[] | yes | array of objects | List of Provider configurations. You must define a provider configuration for each player instance that you would like integrate with. | @@ -1009,7 +1068,8 @@ To register a video player with Prebid, you must use `setConfig` to set a `video **Note:** You can integrate with different Player vendors. For this to work, you must ensure that the right Video Submodules are included in your build, and that the providers have the right `vendorCode`s and `divId`s. -##### Player Integration Example +#### Player Integration Example +{: .no_toc} Assuming your page has 2 JW Player video players, 1 video.js video player, and your ad server is GAM. @@ -1053,22 +1113,25 @@ pbjs.setConfig({ -#### Client-side Caching of VAST XML +### Client-side Caching of VAST XML -When serving video ads, VAST XML creatives must be cached on the network so the +When serving video ads, VAST XML creatives must be cached so the video player can retrieve them when it's ready. Players don't obtain the VAST XML from the JavaScript DOM in Prebid.js, but rather expect to be given a URL where it can -be retrieved. There are two different flows possible with Prebid.js around VAST XML caching: +be retrieved. There are three different flows possible with Prebid.js around VAST XML caching: * Server-side caching: Some video bidders (e.g. Rubicon Project) always cache the VAST XML on their servers as part of the bid. They provide a 'videoCacheKey', which is used in conjunction with the VAST URL in the ad server to retrieve the correct VAST XML when needed. In this case, Prebid.js has nothing else to do. As of Prebid.js 4.28, a publisher may specify the `ignoreBidderCacheKey` flag to re-cache these bids somewhere else using a VAST wrapper. * Client-side caching: Video bidders that don't cache on their servers return the entire VAST XML body. In this scenario, Prebid.js needs to copy the VAST XML to a publisher-defined cache location on the network. Prebid.js POSTs the VAST XML to the named Prebid Cache URL. It then sets the 'videoCacheKey' to the key that's returned in the response. +* Local client-side caching (Blob URL): + To reduce network traffic to the publisher-defined remote cache location, Prebid allows publishers to locally store the VAST XML of a bid as a blob in the browser's memory. When the `cache.useLocal` option is enabled, Prebid sets the bid’s `videoCacheKey` to the key assigned to the locally stored blob. In this scenario, `bid.vastUrl` becomes a blob URL. {: .table .table-bordered .table-striped } | Cache Attribute | Required? | Type | Description | |----+--------+-----+-------| | cache.url | yes | string | The URL of the Prebid Cache server endpoint where VAST creatives will be sent. | +| cache.useLocal | no | boolean | Flag determining whether to locally save VAST XML as a blob | | cache.timeout | no | number | Timeout (in milliseconds) for network requests to the cache | | cache.vasttrack | no | boolean | Passes additional data to the url, used for additional event tracking data. Defaults to `false`. | | cache.ignoreBidderCacheKey | no | boolean | If the bidder supplied their own cache key, setting this value to true adds a VAST wrapper around that URL, stores it in the cache defined by the `url` parameter, and replaces the original video cache key with the new one. This can dramatically simplify ad server setup because it means all VAST creatives reside behind a single URL. The tradeoff: this approach requires the video player to unwrap one extra level of VAST. Defaults to `false`. | @@ -1080,7 +1143,7 @@ Here's an example of basic client-side caching. Substitute your Prebid Cache URL ```javascript pbjs.setConfig({ cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' + url: 'https://my-pbs.example.com/cache' } }); ``` @@ -1125,7 +1188,7 @@ Optionally, `batchSize` and `batchTimeout` can be utlilized as illustrated with ```javascript pbjs.setConfig({ cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache', + url: 'https://my-pbs.example.com/cache', batchSize: 4, batchTimeout: 50 } @@ -1142,7 +1205,30 @@ If a batchSize is set to 2 and 5 video responses arrive (within the timeframe sp -#### Instream tracking +As of Prebid.js 9.37.0, you can save VAST XML as blob in browser's memory. Here's how to leverage local caching to reduce network traffic while working with an ad server. Using Google Ad Manager (GAM) as an example, no additional configuration of VAST creatives is required within GAM. The existing process of building the GAM VAST ad tag URL and retrieving the VAST wrapper from GAM remains unchanged - except for one key difference. + +Consider the following Prebid configuration: + +```javascript +pbjs.setConfig({ + cache: { + url: 'https://my-pbs.example.com/cache', + useLocal: true + } +}); +``` + +When `useLocal` is set to true, the remote cache URL endpoint is never called. However, existing GAM creatives configured with a VAST ad tag URL, such as: + +`` +https://my-pbs.example.com/cache?uuid=%%PATTERN:hb_uuid%% +`` + +will continue to function correctly. `hb_uuid` is set to locally assigned blob UUID. If the bid wins the GAM auction and it's `videoCacheKey` (`hb_uuid`) is included in a GAM wrapper VAST XML, Prebid will update the VAST ad tag URL with the locally cached blob URL after receiving a response from Google Ad Manager. + +When using the local cache feature without the video module, you’ll need to retrieve the VAST XML directly by calling [getVastXml](/dev-docs/publisher-api-reference/adServers.gam.getVastXml.html). + +### Instream tracking {: .alert.alert-info :} To enable this tracking, include the `instreamTracking` module in your Prebid.js build. @@ -1159,6 +1245,7 @@ This configuration will allow Analytics Adapters and Bid Adapters to track `BID_ | `instreamTracking.urlPattern` | Optional | RegExp | Regex for cache url patterns, to avoid false positives. | #### Instream Tracking Example +{: .no_toc} ```javascript pbjs.setConfig({ @@ -1168,11 +1255,11 @@ pbjs.setConfig({ }); ``` -More examples [here](/dev-docs/modules/instreamTracking.html#example-with-urlpattern). +More examples can be found in [the instream tracking module documentation](/dev-docs/modules/instreamTracking.html#example-with-urlpattern). -#### Site Configuration +### Site Configuration Adapters, including Prebid Server adapters, can support taking site parameters like language. Just set the `ortb2.site` object as First Party Data to make it available to client- and server-side adapters. @@ -1194,7 +1281,7 @@ In PBJS 4.29 and earlier, don't add the `ortb2` level here -- just `site` direct -#### Auction Options +### Auction Options The `auctionOptions` object controls aspects related to auctions. @@ -1202,9 +1289,11 @@ The `auctionOptions` object controls aspects related to auctions. | Field | Scope | Type | Description | |----------+---------+--------+---------------------------------------------------------------------------------------| | `secondaryBidders` | Optional | Array of Strings | Specifies bidders that the Prebid auction will no longer wait for before determining the auction has completed. This may be helpful if you find there are a number of low performing and/or high timeout bidders in your page's rotation. | -| `suppressStaleRender` | Optional | Boolean | When true, prevents `banner` bids from being rendered more than once. It should only be enabled after auto-refreshing is implemented correctly. Default is false. +| `suppressStaleRender` | Optional | Boolean | When true, prevents `banner` bids from being rendered more than once. It should only be enabled after auto-refreshing is implemented correctly. Default is false. | +| `suppressExpiredRender` | Optional | Boolean | When true, prevent bids from being rendered if TTL is reached. Default is false. -##### Examples +#### Examples +{: .no_toc} Exclude status of bidder *doNotWaitForMe* when checking auction completion. @@ -1226,7 +1315,8 @@ pbjs.setConfig({ }); ``` -##### More on Stale Rendering +#### More on Stale Rendering +{: .no_toc} When auto-refreshing is done incorrectly, it could cause the same bids to be rendered repeatedly. For instance, when googletag.pubads.refresh() is called directly without removing the PBJS targeting, the same hb_ variables get re-sent to GAM, re-chosen, and re-rendered. Over and over without ever asking PBJS for updated targeting variables. @@ -1237,9 +1327,31 @@ PBJS performs following actions when stale rendering is detected. Stale winning bids will continue to be rendered unless `suppressStaleRender` is set to true. Events including `STALE_RENDER` and `BID_WON` are unaffected by this option. +Render only non-expired bids. + +```javascript +pbjs.setConfig({ + 'auctionOptions': { + 'suppressExpiredRender': true + } +}); +``` + +#### More on Expired Rendering +{: .no_toc} + +We are validating the `ttl` property before rendering an ad. If the ad has exceeded its ttl value and the `suppressExpiredRender` property is enabled, the system will suppress the rendering of the expired ad. + +PBJS performs the following actions when expired rendering is detected. + +* Log a warning in the browser console if pbjs_debug=true. +* Emit a `EXPIRED_RENDER` event before `BID_WON` event. + +Expired winning bids will continue to be rendered unless `suppressExpiredRender` is set to true. Events including `STALE_RENDER` and `BID_WON` are unaffected by this option. + -#### maxNestedIframes +### maxNestedIframes Prebid.js will loop upward through nested iframes to find the top-most referrer. This setting limits how many iterations it will attempt before giving up and not setting referrer. @@ -1251,7 +1363,7 @@ pbjs.setConfig({ -#### Real-Time Data Modules +### Real-Time Data Modules All of the modules that fall under the [Real-Time Data (RTD) category](/dev-docs/modules/index.html#real-time-data-providers) conform to a consistent set of publisher controls. The pub can choose to run multiple @@ -1263,7 +1375,7 @@ than others. pbjs.setConfig({ // ..., realTimeData: { - auctionDelay: 100, // REQUIRED: applies to all RTD modules + auctionDelay: 100, // OPTIONAL: applies to all RTD modules. dataProviders: [{ name: "RTD-MODULE-1", waitForIt: true, // OPTIONAL: flag this module as important @@ -1285,6 +1397,7 @@ pbjs.setConfig({ The controls publishers have over the RTD modules: {: .table .table-bordered .table-striped } + | Field | Required? | Type | Description | |---|---|---|---| | realTimeData.auctionDelay | no | integer | Defines the maximum amount of time, in milliseconds, the header bidding auction will be delayed while waiting for a response from the RTD modules as a whole group. The default is 0 ms delay, which means that RTD modules need to obtain their data when the page initializes. | @@ -1307,7 +1420,7 @@ Notes: -#### Topics Iframe Configuration +### Topics Iframe Configuration Topics iframe implementation is the enhancements of existing module under topicsFpdModule.js where different bidders will call the topic API under their domain to fetch the topics for respective domain and the segment data will be part of ORTB request under user.data object. Default config is maintained in the module itself. Below are the configuration which can be used to configure and override the default config maintained in the module. @@ -1338,6 +1451,7 @@ pbjs.setConfig({ ``` {: .table .table-bordered .table-striped } + | Field | Required? | Type | Description | |---|---|---|---| | topics.maxTopicCaller | no | integer | Defines the maximum numbers of Bidders Iframe which needs to be loaded on the publisher page. Default is 1 which is hardcoded in Module. Eg: topics.maxTopicCaller is set to 3. If there are 10 bidders configured along with their iframe URLS, random 3 bidders iframe URL is loaded which will call TOPICS API. If topics.maxTopicCaller is set to 0, it will load random 1(default) bidder iframe atleast. | @@ -1348,7 +1462,7 @@ pbjs.setConfig({ -#### Disable performance metrics +### Disable performance metrics Since version 7.17, Prebid collects fine-grained performance metrics and attaches them to several events for the purpose of analytics. If you find that this generates too much data for your analytics provider you may disable this feature with: @@ -1358,7 +1472,7 @@ pbjs.setConfig({performanceMetrics: false}) -#### Setting alias registry to private +### Setting alias registry to private The alias registry is made public by default during an auction. It can be referenced in the following way: @@ -1372,9 +1486,38 @@ Inversely, if you wish for the alias registry to be private you can do so by usi pbjs.setConfig({aliasRegistry: 'private'}) ``` + + +### Map modules to Global Vendor IDs + +Prebid modules sometimes need to know the [IAB Global Vendor List](https://iabeurope.eu/tcf-for-vendors/) (GVL) ID associated with a bidder alias or other module. The optional `gvlMapping` object lets publishers specify these IDs or override the ones declared by the module itself. + +```javascript +pbjs.setConfig({ + gvlMapping: { + appnexus: 4, + someModule: 123 + } +}); +``` + +Prebid Server uses this mapping when it sends `ext.prebid.aliasgvlids` for bidder aliases, and the [TCF Control Module](/dev-docs/modules/tcfControl.html) references it when enforcing consent. + +### Set Max Bid + + + +Prebid ensures that the bid response price doesn't exceed the maximum bid. If the CPM (after currency conversion) is higher than the maxBid, the bid is rejected. The default maxBid value is 5000. You can adjust maxBid with: + +```javascript +pbjs.setConfig({ + maxBid: 10 +}); +``` + -#### Generic setConfig Configuration +### General adapter Configuration Some adapters may support other options, as defined in their documentation. To set arbitrary configuration values: @@ -1384,7 +1527,7 @@ pbjs.setConfig({ : }); -#### Troubleshooting your configuration +### Troubleshooting your configuration Towards catching syntax errors, one tip is to call `pbjs.setConfig` without an object, e.g., @@ -1400,8 +1543,4 @@ ERROR: setConfig options must be an object If you don't see that message, you can assume the config object is valid. -
      - -## Related Reading - -* [Prebid.js and Ad Server Key Values](/features/adServerKvps.html) +
      diff --git a/dev-docs/publisher-api-reference/setPAAPIConfigForGPT.md b/dev-docs/publisher-api-reference/setPAAPIConfigForGPT.md index cf47f90a4c..e1b882cffc 100644 --- a/dev-docs/publisher-api-reference/setPAAPIConfigForGPT.md +++ b/dev-docs/publisher-api-reference/setPAAPIConfigForGPT.md @@ -7,7 +7,7 @@ sidebarType: 1 Configure GPT slots to use PAAPI. -**Kind**: static method of pbjs API. Only available when the [fledgeForGpt module](/dev-docs/modules/fledgeForGpt.html) is installed. +**Kind**: static method of pbjs API. Only available when the [paapiForGpt module](/dev-docs/modules/paapiForGpt.html) is installed. **Parameters**: @@ -17,6 +17,7 @@ Configure GPT slots to use PAAPI. | options | Optional | `Object` | | | options.adUnitCode | Optional | `String` | Ad unit filter; if provided, only configure the GPT slot that matches this ad unit | | options.auctionId | Optional | `String` | Auction filter; if provided, only configure GPT slots with PAAPI configs from this auction | +| customSlotMatching | Optional | `Function` | Custom slot matching function - of the same type used by [setTargetingForGPTAsync](/dev-docs/publisher-api-reference/setTargetingForGPTAsync.html) | **Example**: diff --git a/dev-docs/publisher-api-reference/triggerUserSyncs.md b/dev-docs/publisher-api-reference/triggerUserSyncs.md new file mode 100644 index 0000000000..f70d0f6a29 --- /dev/null +++ b/dev-docs/publisher-api-reference/triggerUserSyncs.md @@ -0,0 +1,16 @@ +--- +layout: api_prebidjs +title: pbjs.triggerUserSyncs() +description: triggerUserSyncs API +sidebarType: 1 +--- + +Manually initiates user syncs when the `userSync.enableOverride` setting is enabled. + +**Kind**: static method of `pbjs`. + +**Example** + +```javascript +pbjs.triggerUserSyncs(); +``` diff --git a/dev-docs/release-notes.md b/dev-docs/release-notes.md index e85e26c54f..19e49c530f 100644 --- a/dev-docs/release-notes.md +++ b/dev-docs/release-notes.md @@ -15,6 +15,8 @@ This page has links to release notes for each of the projects associated with Pr ## Prebid.js + [Release notes on GitHub](https://github.com/prebid/Prebid.js/releases) ++ [Prebid.js 10 Release Notes](/dev-docs/pb10-notes.html) ++ [Prebid.js 9 Release Notes](/dev-docs/pb9-notes.html) + [Prebid.js 8 Release Notes](/dev-docs/pb8-notes.html) + [Prebid.js 7 Release Notes](/dev-docs/pb7-notes.html) + [Prebid.js 6 Blog Post](https://prebid.org/blog/prebid-6-0-release/) diff --git a/dev-docs/renderer.md b/dev-docs/renderer.md new file mode 100644 index 0000000000..30cd9155bf --- /dev/null +++ b/dev-docs/renderer.md @@ -0,0 +1,203 @@ +--- +layout: page_v2 +title: Renderer +description: Renderer Reference +sidebarType: 1 +--- + +# Renderer + +## What is a Renderer? + +A renderer provides publishers with precise control over how ads are displayed on their pages. It's especially valuable for video ads in non-video placements (such as outstream/in-renderer), but can be used with any media type. + +In simple terms, a renderer offers publishers: + +- The ability to customize how ads appear and behave +- A way to introduce new ad formats without disrupting user experience +- Control over maintaining design consistency between ads and site content + +## Renderer Object + +{: .table .table-bordered .table-striped } +| Name | Scope | Type | Description | +|--------------+----------+---------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `url` | Required | String | URL to the renderer script that will be loaded. This script should create a renderer object in the global scope. | +| `render` | Required | Function | Function that tells Prebid.js how to invoke the renderer script to render a bid. The function receives the bid object as a parameter. | +| `backupOnly` | Optional | Boolean | if set to true, buyer or adapter renderer will be preferred | + +## Renderer Implementation Levels + +Renderers can be specified at multiple levels: + +1. MediaType Level (adUnit.mediaTypes.video\|banner\|native.renderer): If a renderer is associated with a specific mediaType (video, banner, or native), it will be used to display any demand associated with that mediaType. This is the preferred method for all ad types. +2. AdUnit Level (adUnit.renderer): Applied to all bids for this ad unit that don't override it. This is a legacy approach; using the mediaType-level renderer is preferred. +3. Bidder Level (adUnit.bids[].renderer): Applied only to this bidder, overriding adUnit renderer if both exist. +4. Default: If no renderer is specified at any level, Prebid will use the default renderer for the media type, if one exists. For banner and native ads, Prebid.js has built-in default rendering capabilities. + +### Priority Order + +When multiple renderers are defined, the following priority is used: + +1. MediaType Level renderer +2. AdUnit Level renderer +3. Bidder Level renderer +4. Default renderer + +## Special Cases + +### Banner with Custom Renderer + +Although renderers are commonly associated with video ads, they can also be used with banner ads to create custom rendering experiences: + +```javascript +pbjs.addAdUnits({ + code: "custom-banner-container", + mediaTypes: { + banner: { + sizes: [[300, 250]], + renderer: { + url: "https://cdn.example.com/banner-renderer.js", + render: function (bid) { + // Create an enhanced banner experience + const bannerRenderer = new window.BannerRenderer({ + adUnitCode: bid.adUnitCode, + adHtml: bid.ad, + width: bid.width, + height: bid.height, + // Add animation effects + effects: { + fadeIn: true, + duration: 300, + onViewable: true, + }, + }); + bannerRenderer.render(); + }, + }, + }, + }, + bids: [ + { + bidder: "appnexus", + params: { + placementId: 13144370, + }, + }, + ], +}); +``` + +A banner renderer might be used to: + +1. Add entrance/exit animations to standard banner ads +2. Implement viewability-triggered rendering +3. Create interactive enhancements to standard banner creatives +4. Apply custom styling or containers to maintain site design aesthetics +5. Implement fallback scenarios for different devices or browsers + +## Renderer Implementation Example + +```javascript +// Example of a secure custom banner renderer implementation +window.BannerRenderer = function (config) { + return { + render: function (bid) { + // Get the container element + const container = document.getElementById(config.adUnitCode); + if (!container) return; + + // Create iframe to provide a secure environment + const iframe = document.createElement("iframe"); + iframe.width = `${config.width}px`; + iframe.height = `${config.height}px`; + iframe.style.border = "none"; + iframe.style.transition = `opacity ${config.effects.duration}ms ease-in-out`; + iframe.style.opacity = "0"; + iframe.title = "Advertisement"; + iframe.setAttribute("scrolling", "no"); + + // Add iframe to container + container.appendChild(iframe); + + // Set iframe content + const iframeDoc = iframe.contentWindow.document; + iframeDoc.open(); + iframeDoc.write(` + + + + + + + + +
      ${bid.ad || ""}
      + + + `); + iframeDoc.close(); + + if (config.effects.onViewable) { + // Set up IntersectionObserver for viewability-triggered effects + const observer = new IntersectionObserver( + (entries) => { + entries.forEach((entry) => { + if (entry.isIntersecting) { + // Apply fade-in when ad comes into view + iframe.style.opacity = "1"; + observer.disconnect(); // Only need to trigger once + } + }); + }, + { threshold: 0.5 } + ); + + observer.observe(container); + } else { + // Immediate fade-in + setTimeout(() => { + iframe.style.opacity = "1"; + }, 10); + } + + // Cleanup function + return { + destroy: function () { + if (container && iframe) { + container.removeChild(iframe); + } + }, + }; + }, + }; +}; +``` + +## Common Renderer Properties + +Here are commonly used properties from the bid object that can be accessed in the renderer: + +{: .table .table-bordered .table-striped } +| Property | Description | +|--------------+------------------------------------------------------- | +| `adId` | Unique identifier for the bid | +| `adUnitCode` | The code for the ad unit | +| `vastUrl` | URL to the VAST XML for video ads | +| `vastXml` | The VAST XML content (if available instead of vastUrl) | +| `width` | Width of the creative | +| `height` | Height of the creative | +| `playerWidth` | Width of the video player | +| `playerHeight` | Height of the video player | +| `mediaType` | Type of media ('video', 'banner', etc.) | +| `cpm` | The bid's CPM | +| `ad` | Ad markup | +| `adUrl` | Ad markup url | diff --git a/dev-docs/show-long-form-video-with-gam.md b/dev-docs/show-long-form-video-with-gam.md index 7f9d4ef178..573d25680d 100644 --- a/dev-docs/show-long-form-video-with-gam.md +++ b/dev-docs/show-long-form-video-with-gam.md @@ -175,7 +175,7 @@ For instructions on setting custom price buckets, view the [Custom Price Granula ### 5. Send request for bids and build video URL -The `dfpAdServerVideo` module provides a method, `buildAdpodVideoUrl`, that combines publisher-provided parameters with Prebid.js targeting key values to build a GAM video ad tag URL that can be used by a video player. +The `dfpAdpod` module provides a method, `buildAdpodVideoUrl`, that combines publisher-provided parameters with Prebid.js targeting key values to build a GAM video ad tag URL that can be used by a video player. In the example below the callback in the `bidsBackHandler` returns the video ad tag needed by the video player. @@ -184,7 +184,7 @@ pbjs.que.push(function(){ pbjs.addAdUnits(videoAdUnit); pbjs.setConfig({ cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' + url: 'https://my-pbs.example.com/cache' }, adpod: { brandCategoryExclusion: true @@ -196,7 +196,7 @@ pbjs.que.push(function(){ pbjs.requestBids({ bidsBackHandler: function(bids) { - pbjs.adServers.dfp. buildAdpodVideoUrl({ + pbjs.adServers.dfp.buildAdpodVideoUrl({ codes: ['sample-code'], params: { iu: '/123456/testing/prebid.org/adunit1', diff --git a/dev-docs/show-outstream-video-ads.md b/dev-docs/show-outstream-video-ads.md index 0f6c066454..5446854e22 100644 --- a/dev-docs/show-outstream-video-ads.md +++ b/dev-docs/show-outstream-video-ads.md @@ -80,9 +80,9 @@ Renderers can be attached to adUnits in three ways; Prebid will pick the first t A renderer is an object containing these properties: -1. `url` -- Points to a file containing the renderer script. -2. `render` -- A function that tells Prebid.js how to invoke the renderer script. -3. `backupOnly` -- Optional field, if set to true, buyer or adapter renderer will be preferred +1. `render` -- A function that tells Prebid.js how to render a given bid. +2. `url` -- Optional, URL to a javascript file. If provided, Prebid.js will load it before invoking `render`. +3. `backupOnly` -- Optional, if set to true, buyer or adapter renderer will be preferred In a multiFormat adUnit, you might want the renderer to only apply to only one of the mediaTypes. You can do this by defining the renderer on the media type itself. diff --git a/dev-docs/show-prebid-ads-on-amp-pages.md b/dev-docs/show-prebid-ads-on-amp-pages.md index 555b42648b..78fdedc434 100644 --- a/dev-docs/show-prebid-ads-on-amp-pages.md +++ b/dev-docs/show-prebid-ads-on-amp-pages.md @@ -6,7 +6,6 @@ sidebarType: 2 --- # Prebid AMP Implementation Guide - {: .no_toc} This page has instructions for showing ads on Accelerated Mobile Pages (AMP) using Prebid.js. @@ -15,11 +14,11 @@ Through this implementation, [Prebid Server][PBS] fetches demand and returns key For more information about AMP RTC, see: -* [Prebid Server and AMP](/prebid-server/use-cases/pbs-amp.html) -* [Prebid Server AMP Endpoint Technical Documentation](/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.html) -* [Prebid Server Stored Bid Requests](https://github.com/prebid/prebid-server/blob/master/docs/developers/stored-requests.md#stored-bidrequests) -* [AMP RTC Overview](https://github.com/ampproject/amphtml/blob/master/extensions/amp-a4a/rtc-documentation.md) -* [AMP RTC Publisher Integration Guide](https://github.com/ampproject/amphtml/blob/master/extensions/amp-a4a/rtc-publisher-implementation-guide.md) +- [Prebid Server and AMP](/prebid-server/use-cases/pbs-amp.html) +- [Prebid Server AMP Endpoint Technical Documentation](/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.html) +- [Prebid Server Stored Bid Requests](https://github.com/prebid/prebid-server/blob/master/docs/developers/stored-requests.md#stored-bidrequests) +- [AMP RTC Overview](https://github.com/ampproject/amphtml/blob/master/extensions/amp-a4a/rtc-documentation.md) +- [AMP RTC Publisher Integration Guide](https://github.com/ampproject/amphtml/blob/master/extensions/amp-a4a/rtc-publisher-implementation-guide.md) {% capture tipNote %} For ad ops setup instructions, see [Google Ad Manager with Prebid Step by Step](/adops/step-by-step.html). @@ -27,25 +26,25 @@ For ad ops setup instructions, see [Google Ad Manager with Prebid Step by Step]( {% include alerts/alert_note.html content=tipNote %} -* TOC +- TOC {:toc } ## Prerequisites To set up Prebid to serve ads into your AMP pages, you'll need: -* An account with a [Prebid Server][PBS] instance -* One or more Prebid Server Stored Bid Requests. A Stored Bid Request is a partial OpenRTB JSON request which: - * Specifies properties like currency, schain, price granularity, etc. - * Contains a list of demand partners and their respective parameters -* An AMP page containing at least one amp-ad element for an AMP ad network that supports Fast Fetch and AMP RTC +- An account with a [Prebid Server][PBS] instance +- One or more Prebid Server Stored Bid Requests. A Stored Bid Request is a partial OpenRTB JSON request which: + - Specifies properties like currency, schain, price granularity, etc. + - Contains a list of demand partners and their respective parameters +- An AMP page containing at least one amp-ad element for an AMP ad network that supports Fast Fetch and AMP RTC ## Implementation -* [Prebid Server Stored Request](#prebid-server-stored-request): This is the Prebid Server Stored Bid Request. -* [AMP content page](#amp-content-page): This is where your content lives. -* [HTML Creative](#html-creative): This is the creative your Ad Ops team puts in your ad server. -* [User Sync in AMP](#user-sync): This is the `amp-iframe` pixel that must be added to your AMP page to sync users with Prebid Server. +- [Prebid Server Stored Request](#prebid-server-stored-request): This is the Prebid Server Stored Bid Request. +- [AMP content page](#amp-content-page): This is where your content lives. +- [HTML Creative](#html-creative): This is the creative your Ad Ops team puts in your ad server. +- [User Sync in AMP](#user-sync): This is the `amp-iframe` pixel that must be added to your AMP page to sync users with Prebid Server. ### Prebid Server Stored Request @@ -54,22 +53,20 @@ You will have to create at least one Stored Request for Prebid Server. Valid St An example Stored Request is given below. You'll see that the Stored Request contains some important info that doesn't come from /amp parameters: -* cur -* schain -* ext.prebid.cache.bids - needed to let Prebid Server know that you want it to store the result in PBC -* ext.prebid.targeting.pricegranularity - needed to let Prebid Server know how to calculate the price bucket -* ext.prebid.aliases -* bidders and their parameters +- cur +- schain +- ext.prebid.cache.bids - needed to let Prebid Server know that you want it to store the result in PBC +- ext.prebid.targeting.pricegranularity - needed to let Prebid Server know how to calculate the price bucket +- ext.prebid.aliases +- bidders and their parameters ```json { "id": "some-request-id", "cur": ["USD"], "source": { - "ext": { - "schain": { - ... - } + "schain": { + ... } }, "site": { @@ -129,10 +126,10 @@ This script provides code libraries that will convert `` properties to t The `amp-ad` elements in the page body need to be set up as shown below, especially the following attributes: -* `data-slot`: Identifies the ad slot for the auction. -* `rtc-config`: Used to pass JSON configuration data to [Prebid Server][PBS], which handles the communication with AMP RTC. - * `vendors` is an object that defines any vendors that will be receiving RTC callouts (including Prebid Server) up to a maximum of five. The list of supported RTC vendors is maintained in [callout-vendors.js](https://github.com/ampproject/amphtml/blob/master/src/service/real-time-config/callout-vendors.js). We recommend working with your Prebid Server hosting company to set up which bidders and parameters should be involved for each AMP ad unit. - * `timeoutMillis` is an optional integer that defines the timeout in milliseconds for each individual RTC callout. The configured timeout must be greater than 0 and less than 1000ms. If omitted, the timeout value defaults to 1000ms. +- `data-slot`: Identifies the ad slot for the auction. +- `rtc-config`: Used to pass JSON configuration data to [Prebid Server][PBS], which handles the communication with AMP RTC. + - `vendors` is an object that defines any vendors that will be receiving RTC callouts (including Prebid Server) up to a maximum of five. The list of supported RTC vendors is maintained in [callout-vendors.js](https://github.com/ampproject/amphtml/blob/master/src/service/real-time-config/callout-vendors.js). We recommend working with your Prebid Server hosting company to set up which bidders and parameters should be involved for each AMP ad unit. + - `timeoutMillis` is an optional integer that defines the timeout in milliseconds for each individual RTC callout. The configured timeout must be greater than 0 and less than 1000ms. If omitted, the timeout value defaults to 1000ms. e.g. for the AppNexus cluster of Prebid Servers: @@ -222,15 +219,15 @@ Replace `MACRO` in the preceding example with the appropriate macro for the ad s ### User Sync -To sync user IDs with Prebid Server, the `amp-iframe` below may be added to your AMP pages referring to `load-cookie.html` or if you're running an IAB-compliant AMP CMP you can use `load-cookie-with-consent.html`. +To sync user IDs with Prebid Server, the `amp-iframe` below may be added to your AMP pages referring to `load-cookie.html`. -Note that AMP constrains syncing as described in the [amp-iframe](https://amp.dev/documentation/components/amp-iframe) documentation. You may only have *one* amp-iframe on your page that is small, e.g. 1x1. Many publishers already have some kind of analytics or tracking frame on their page, so they may find it difficult to manage this. Several hacks are possible, including building a 'frankenstein' script that combines all of your required tracking into one or tying the sync to an image that's large enough to be visible. +AMP constrains syncing as described in the [amp-iframe](https://amp.dev/documentation/components/amp-iframe) documentation. You may only have *one* amp-iframe on your page that is small, e.g. 1x1. Many publishers already have some kind of analytics or tracking frame on their page, so they may find it difficult to manage this. Several hacks are possible, including building a 'frankenstein' script that combines all of your required tracking into one or tying the sync to an image that's large enough to be visible. Notes: -* The following examples include a transparent image as a placeholder which will allow you to place the example at the top within the HTML body. If this is not included the iFrame must be either 600px away from the top or not within the first 75% of the viewport when scrolled to the top – whichever is smaller. For more information on this, see [amp-iframe](https://amp.dev/documentation/components/amp-iframe/) -* Note that the `sandbox` parameter to the amp-iframe must include both "allow-scripts" and "allow-same-origin". -* The load-cookie-with-consent.html file has the same argument syntax as load-cookie.html. It's a different file because it's larger and depends on the existence of an AMP Consent Management Platform. +- The following examples include a transparent image as a placeholder which will allow you to place the example at the top within the HTML body. If this is not included the iFrame must be either 600px away from the top or not within the first 75% of the viewport when scrolled to the top – whichever is smaller. For more information on this, see [amp-iframe](https://amp.dev/documentation/components/amp-iframe/) +- The `sandbox` parameter to the amp-iframe must include both "allow-scripts" and "allow-same-origin". +- If your PBS host company is using a version of `load-cookie.html` older than July of 2024 and if your AMP page is using a CMP, you should consider using `load-cookie-with-consent.html` instead. It's the same functionality, but older versions of `load-cookie.html` cannot read from CMPs. If you're using AppNexus' managed service, you would enter something like this: @@ -268,44 +265,44 @@ Or you can specify a full URL to another Prebid Server location (including a QA ``` -See [manually initiating a sync](/prebid-server/developers/pbs-cookie-sync.html#manually-initiating-a-sync) for more information about the available parameters. +See [manually initiating a sync](/prebid-server/developers/pbs-cookie-sync.html#manually-initiating-a-sync) for more information about the available parameters and for how to host the load-cookie script. ### AMP RTC If you're using a custom RTC callout rather than one of the pre-defined [vendor callouts](https://github.com/ampproject/amphtml/blob/main/src/service/real-time-config/callout-vendors.js), here are the parameters that can be passed through the RTC string: -* tag_id (this correspondes to the Prebid Server stored request ID) -* w=ATTR(width) -* h=ATTR(height) -* ow=ATTR(data-override-width) -* oh=ATTR(data-override-height) -* ms=ATTR(data-multi-size) -* slot=ATTR(data-slot) -* targeting=TGT -* curl=CANONICAL_URL -* timeout=TIMEOUT -* adc=ADCID -* purl=HREF -* gdpr_consent=CONSENT_STRING -* consent_type=CONSENT_METADATA(consentStringType) -* gdpr_applies=CONSENT_METADATA(gdprApplies) -* attl_consent=CONSENT_METADATA(additionalConsent) +- tag_id (this correspondes to the Prebid Server stored request ID) +- w=ATTR(width) +- h=ATTR(height) +- ow=ATTR(data-override-width) +- oh=ATTR(data-override-height) +- ms=ATTR(data-multi-size) +- slot=ATTR(data-slot) +- targeting=TGT +- curl=CANONICAL_URL +- timeout=TIMEOUT +- adc=ADCID +- purl=HREF +- gdpr_consent=CONSENT_STRING +- consent_type=CONSENT_METADATA(consentStringType) +- gdpr_applies=CONSENT_METADATA(gdprApplies) +- attl_consent=CONSENT_METADATA(additionalConsent) ## Debugging Tips To review that Prebid on AMP is working properly the following aspects can be looked at: -* Include `#development=1` to the URL to review AMP specifc debug messages in the browser console. -* Look for the Prebid server call in the network panel. You can open this URL in a new tab to view additional debugging information relating to the Prebid Server Stored Bid Request. If working properly, Prebid server will display the targeting JSON for AMP to use. -* Look for the network call from the Ad Server to ensure that key values are being passed. (For Google Ad Manager these are in the `scp` query string parameter in the network request) -* Most of the debugging information is omitted from the Prebid Server response unless the `debug=1` parameter is present in the Prebid Server query string. AMP won't add this parameter, so you'll need to grab the Prebid Server URL and manually add it to see the additional information provided. +- Include `#development=1` to the URL to review AMP specific debug messages in the browser console. +- Look for the Prebid server call in the network panel. You can open this URL in a new tab to view additional debugging information relating to the Prebid Server Stored Bid Request. If working properly, Prebid server will display the targeting JSON for AMP to use. +- Look for the network call from the Ad Server to ensure that key values are being passed. (For Google Ad Manager these are in the `scp` query string parameter in the network request) +- Most of the debugging information is omitted from the Prebid Server response unless the `debug=1` parameter is present in the Prebid Server query string. AMP won't add this parameter, so you'll need to grab the Prebid Server URL and manually add it to see the additional information provided. ## Further Reading -* [Prebid Server and AMP](/prebid-server/use-cases/pbs-amp.html) -* [Google Ad Manager with Prebid Step by Step](/adops/step-by-step.html) (Ad Ops Setup) -* [AMP RTC Overview](https://github.com/ampproject/amphtml/blob/master/extensions/amp-a4a/rtc-documentation.md) -* [callout-vendors.js] +- [Prebid Server and AMP](/prebid-server/use-cases/pbs-amp.html) +- [Google Ad Manager with Prebid Step by Step](/adops/step-by-step.html) (Ad Ops Setup) +- [AMP RTC Overview](https://github.com/ampproject/amphtml/blob/master/extensions/amp-a4a/rtc-documentation.md) +- [callout-vendors.js] diff --git a/dev-docs/show-video-with-a-dfp-video-tag.md b/dev-docs/show-video-with-a-dfp-video-tag.md index b14353a036..36f72fc8ae 100644 --- a/dev-docs/show-video-with-a-dfp-video-tag.md +++ b/dev-docs/show-video-with-a-dfp-video-tag.md @@ -100,7 +100,7 @@ pbjs.que.push(function() { pbjs.setConfig({ /* Or whatever your preferred video cache URL is */ cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' + url: 'https://my-pbs.example.com/cache' } }); diff --git a/dev-docs/userId-module.md b/dev-docs/userId-module.md new file mode 100644 index 0000000000..2e766d6137 --- /dev/null +++ b/dev-docs/userId-module.md @@ -0,0 +1,221 @@ +--- +layout: page_v2 +title: How to Add a New Prebid.js User ID Module +description: Documentation on how to add a Prebid.js new user ID module +top_nav_section: dev_docs +nav_section: adapters +sidebarType: 1 +--- + +# How to Add a New Prebid.js User ID Module +{: .no_toc } + +* TOC +{:toc} + +## Overview + +A user ID module is responsible for providing user ID data to Prebid.js. The flow is as follows: + +1. The publisher includes and configures your module as described in [Module - User ID](/dev-docs/modules/userId.html); +2. Prebid.js determines whether your ID should be included, depending on [consent management](/support/privacy-resources.html) or other [activity controls](/dev-docs/activity-controls.html); +3. If it is, it invokes your module's `getId` and `decode` methods to obtain an ID, and uses your `eids` configuration to transform it into an ORTB [EID](https://github.com/InteractiveAdvertisingBureau/openrtb2.x/blob/main/2.6.md#objecteid) object; +4. Prebid.js then stores your ID (optionally and depending on the publisher's [storage configuration](/dev-docs/modules/userId.html#basic-configuration)) and injects it into the bid stream; +5. On subsequent sessions, Prebid.js retrieves your ID from storage (if applicable) and repeats this flow using `extendId` instead of `getId`. + +## Module interface + +A user ID module is a javascript file in the [modules](https://github.com/prebid/Prebid.js/tree/master/modules) folder that: + +* has a file name that ends with 'IdSystem.js'; +* is listed as a userID submodule in [.submodules.json](https://github.com/prebid/Prebid.js/blob/master/modules/.submodules.json); +* registers a module object using `submodule('userId', userIdSpec)`. + +`userIdSpec` has the following properties: + +{: .table .table-bordered .table-striped } +| Property | Scope | Type | Description | +|------------|------------------------------------|--------|---------------------------------------------------------------------------------------------------------------| +| `name` | Required | String | Name of your ID provider, used to match your module with the publisher's [userIds configuration](/dev-docs/modules/userId.html#basic-configuration) | +| `gvlid` | Optional | Number | GVL ID to use for TCF. If omitted your module may be be excluded when TCF is in scope. | +| `getId` | Required | Function | Retrieve serializable ID data, see [`getId`](#getId) | +| `extendId` | Optional | Function | Update previously stored ID data, see [`extendId`](#extendId) | +| `decode` | Required | Function | Decode result from `getId` or `extendId`, see [`decode`](#decode) | +| `eids` | Optional, but strongly recommended | Object | One or more [EID configurations](#eidConfig) used to translate the result from `decode` into ORTB EID Objects | + +See [SharedIdSystem](https://github.com/prebid/Prebid.js/blob/master/modules/sharedIdSystem.js) for an example. + + + +### `getId(config, consentData, storedId)` + +Invoked when: + +* Prebid.js did not previously store your ID, or +* your previously stored ID has expired (depending on the publisher's `expires` and/or `refreshInSeconds`[storage configuration](/dev-docs/modules/userId.html#basic-configuration)), or +* consent data has changed since the last time it was stored, or +* the publisher explicitly asked for a refresh using [`refreshUserIds`](/dev-docs/publisher-api-reference/refreshUserIds.html). + +#### Arguments + +{: .table .table-bordered .table-striped } + | Name | Type | Description | + |---------------------|--------|-------------------------------------------------------------------------------------------------------------------------------| + | `config` | Object | Configuration for your module as provided by the publisher | + | `consentData` | Object | | + | `consentData.gdpr` | Object | TCF consent data when [consentManagementTcf](/dev-docs/modules/consentManagementTcf.html) is included, or null otherwise | + | `consentData.gpp` | Object | GPP consent data when [consentManagementGpp](/dev-docs/modules/consentManagementGpp.html) is included, or null otherwise | + | `consentData.usp` | String | US Privacy string when [consentManagementUsp](/dev-docs/modules/consentManagementUsp.html) is included, or null otherwise | + | `consentData.coppa` | Boolean | COPPA flag as set by [publisher configuration](https://docs.prebid.org/dev-docs/publisher-api-reference/setConfig.html#coppa) | + | `storedId` | String or Object | Your previously stored ID data, if any, as was returned by `getId` or `extendId` | + +#### Return value + +`getId` should return an object containing one or both of: + +{: .table .table-bordered .table-striped } +| Property | Type | Description | +|-------------|------|-----------------------------------------------------------------------------------| +| `id` | String or Object | Serializable ID data. Objects will be passed through `JSON.stringify` | +| `callback` | Function | Invoked at a later point with another callback function `setId` as first argument | + +If your module can provide ID data synchronously it should set `id` directly; +otherwise it should provide a `callback` that calls its first argument `setId` passing it ID data. + +In both cases ID data should be a string or a plain, serializable JS object; this data is what may then get stored, passed to [`decode`](#decode) and, on later sessions, to `getId` or `extendId` as the `storedId` argument. + +#### Example: synchronous ID generation + +```javascript +function getId(config, consentData, storedId) { + return {id: storedId || generateUUID()} +} +``` + +#### Example: aynschronous ID retrieval + +```javascript +function getId(config, consentData, storedId) { + return { + callback: function(setId) { + fetch(ENDPOINT_URL, { + body: JSON.stringify({ + params: config.params, + consentData + }) + }).then(async function(response) { + if (reponse.ok) { + setId((await response.json()).id); + } + }); + } + } +} +``` + + + +### `extendId(config, consentData, storedId)` + +If provided, it's invoked when `getId` is not; namely: + +* Prebid.js previously stored your ID, and +* the stored ID has not expired, and +* consent data has not changed since it was stored, and +* the publisher is not asking for a refresh. + +Takes the same arguments and should return an object in the same format as [getId](#getId). + + + +### `decode(data, config)` + +Decode ID data. Invoked every time data from your module is available, either from storage or `getId` / `extendId`. + +Arguments are: + +{: .table .table-bordered .table-striped } +| Name | Type | Description | +|----------|--------------------|------------------------------------------------| +| `data` | String or Object | ID data as provided by `getId` / `extendId` | +| `config` | Object | Configuration for your module as provided by the publisher | + +Should return an object with at least one entry where the key is an identifier for your ID provider and the value is the ID (which can have any type or structure). + +The return value is what's made available to publishers through [`getUserIds()`](/dev-docs/publisher-api-reference/getUserIds.html) and to bid adapters in `bidRequest.userId`; it's also used to generate EIDs using your [EID configuration](#eidConfig). + +For example: + +```javascript +function decode(data, config) { + return {exampleId: data}; +} +``` + +would populate `bidRequest.userId.exampleId` and `pbjs.getUserIds().exampleId` with the ID as provided by `getId`; and would be used to generate EIDs your module's `eids.exampleId` configuration. + + + +### EID configuration + +For each `key` and `idValue` entry in the object returned by `decode`, Prebid.js will: + +* Normalize `idValue` into an array `idValues`, which is either the same as `idValue` if that's already an array, or an array containing a single member `idValue`; +* look for a matching `key` in `eids` and, if present, use the corresponding value `eidConfig` to translate `idValues` into EID Objects; + +`eidConfig` can be either a function or an object. + +#### EID translation functions + +If a function, `eidConfig` is invoked with: + +{: .table .table-bordered .table-striped } +| Name | Type | Description | +|------------|------|--------------------------------------------------------------------| +| `idValues` | Array | ID values from `decode`, normalized to an array as described above | +| `config` | Object | Configuration for your module as provided by the publisher | + +It should return an object or array of objects in the [ORTB EID](https://github.com/InteractiveAdvertisingBureau/openrtb2.x/blob/main/2.6.md#objecteid) format. + +Example: + +```javascript +exampleIdSpec.eids = { + exampleId: function(idValues, config) { + return { + source: 'exampleId.com', + uid: idValues.map(value => ({ + id: value, + atype: 1 + })) + }; + } +} +``` + +#### EID configuration objects + +If an object, `eidConfig` should contain: + +{: .table .table-bordered .table-striped } +| Property | Scope | Type | Description | +|-------------|-----------------------------------------|----------|--------------------------------------------------------------------------------------------------------------------------| +| `source` | Required if `getSource` is not provided | String | Value for `eid.source` | +| `getSource` | Required if `source` is not provided | Function | Returns a string to use for `eid.source` | +| `getEidExt` | Optional | Function | Returns an object to use for `eid.ext` | +| `getValue` | Optional | Function | Returns a string to use for `eid.uid.id`. If not provided, members of `idValues` must be strings, and will be used as-is | +| `atype` | Optional, but recommended | Number | Value for `eid.uid.atype` | +| `getUidExt` | Optional | Function | Returns an object to use for `eids.uid.ext` | + +All functions are invoked once for - and passed as an argument - each element in `idValues`. + +Example: + +```javascript +exampleIdSpec.eids = { + exampleId: { + source: 'exampleId.com', + atype: 1 + } +} +``` diff --git a/docs-examples/tab-example.md b/docs-examples/tab-example.md index 6b92f6bc4f..67bbc88e1a 100644 --- a/docs-examples/tab-example.md +++ b/docs-examples/tab-example.md @@ -10,7 +10,8 @@ The prebid documentation uses bootstrap for styling. Bootstrap offers a [tab com ## Example -{% capture iosCode %}struct Player { +{% capture iosCode %} +struct Player { var name: String var highScore: Int = 0 var history: [Int] = [] @@ -20,18 +21,17 @@ The prebid documentation uses bootstrap for styling. Bootstrap offers a [tab com } } -var player = Player("Tomas") -{% endcapture %} +var player = Player("Tomas"){% endcapture %} -{% capture androidCode %}fun main() { +{% capture androidCode %} +fun main() { val name = "stranger" // Declare your first variable println("Hi, $name!") // ...and use it! print("Current count:") for (i in 0..10) { // Loop over a range from 0 to 10 print(" $i") } -} -{% endcapture %} +}{% endcapture %} {% include code/mobile-sdk.html id="hello-world" kotlin=androidCode swift=iosCode %} diff --git a/docs-examples/web-example.md b/docs-examples/web-example.md new file mode 100644 index 0000000000..79c5246494 --- /dev/null +++ b/docs-examples/web-example.md @@ -0,0 +1,161 @@ +--- +layout: page_v2 +title: Web Code Example +description: How web code examples can be written +--- + +# How to implement code examples for web + +The prebid documentation uses bootstrap for styling. Bootstrap offers a [tab component](https://getbootstrap.com/docs/4.6/components/navs/#javascript-behavior). + +## Example #1 + +{% capture htmlCode %}

      Hello world

      +
      Ad Slot
      + + +{% endcapture %} + +{% capture jsCode %}console.log('hello world'); +function exampleFunction() { + alert('hey there'); +} +{% endcapture %} + +{% include code/web-example.html id="hello-world" html=htmlCode js=jsCode %} + +## Basic Prebid Example + +{% include prebidjs-non-prod.html %} +{% include gptjs.html %} + +{% capture htmlCodePrebid %}

      Basic Prebid.js Example

      +
      Div-1
      +
      + +
      +{% endcapture %} + +{% capture jsCode %}var sizes = [ + [300, 250] +]; +var PREBID_TIMEOUT = 700; + +var adUnits = [{ + code: '/19968336/header-bid-tag-1', + mediaTypes: { + banner: { + sizes: sizes + } + }, + bids: [{ + bidder: 'appnexus', + params: { + placementId: 13144370 + } + }] +}]; + +// ======== DO NOT EDIT BELOW THIS LINE =========== // +var googletag = googletag || {}; +googletag.cmd = googletag.cmd || []; +googletag.cmd.push(function() { + googletag.pubads().disableInitialLoad(); +}); + +var pbjs = pbjs || {}; +pbjs.que = pbjs.que || []; + +pbjs.que.push(function() { + pbjs.addAdUnits(adUnits); + pbjs.requestBids({ + bidsBackHandler: initAdserver + }); +}); + +function initAdserver() { + if (pbjs.initAdserverSet) return; + pbjs.initAdserverSet = true; + googletag.cmd.push(function() { + if (pbjs.libLoaded) { + pbjs.que.push(function() { + pbjs.setTargetingForGPTAsync(); + googletag.pubads().refresh(); + }); + } else { + googletag.pubads().refresh(); + } + }); +} + +setTimeout(function() { + initAdserver(); +}, PREBID_TIMEOUT); + +googletag.cmd.push(function() { + googletag.defineSlot('/19968336/header-bid-tag-1', sizes, 'div-1') + .addService(googletag.pubads()); + googletag.pubads().enableSingleRequest(); + googletag.enableServices(); +}); +{% endcapture %} + +{% include code/web-example.html id="basic-prebid-example" html=htmlCodePrebid js=jsCode %} + +## Instructions + +The code you need to for this looks like this + +{% raw %} + +```liquid + +{% include prebidjs-non-prod.html %} +{% include gptjs.html %} + + +{% capture htmlCode %}
      + +
      +{% endcapture %} + +{% capture jsCode %}var googletag = googletag || {}; +googletag.cmd = googletag.cmd || []; +googletag.cmd.push(function() { + googletag.pubads().disableInitialLoad(); +}); + +var pbjs = pbjs || {}; +pbjs.que = pbjs.que || []; + + +// ... and all the prebid and google initializing code + +{% endcapture %} + +{% include code/web-example.html id="hello-world" html=htmlCode js=jsCode %} +``` + +{% endraw %} + +There are few things to understand here + +1. The `include` directive requires a unique `id` for the page. Otherwise the tabs won't work properly +2. Capturing the code into a variable makes everything a lot more readable + +## More information + +- [jekyll includes](https://jekyllrb.com/docs/includes/) +- [jekyll includes with parameters](https://jekyllrb.com/docs/includes/#passing-parameter-variables-to-includes) +- [bootstrap tabs](https://getbootstrap.com/docs/4.6/components/navs/#javascript-behavior) diff --git a/download.md b/download.md index 9c6f6fcacd..9226c1d162 100644 --- a/download.md +++ b/download.md @@ -64,6 +64,9 @@ Prebid.js is open source software that is offered for free as a convenience. Whi

      Select Prebid Version

      +
      + +

      Select Bidder Adapters

      diff --git a/examples/video/index.md b/examples/video/index.md index b2d5210f38..b039798231 100644 --- a/examples/video/index.md +++ b/examples/video/index.md @@ -25,11 +25,8 @@ The following examples are available: ## Instream -- [Brightcove](/examples/video/instream/brightcove/pb-ve-brightcove.html) -- [Flowplayer](/examples/video/instream/flowplayer/pb-ve-flowplayer.html) - [JW Player](/examples/video/instream/jwplayer/pb-ve-jwplayer-platform.html) - [JW Player (Self-Hosted)](/examples/video/instream/jwplayer/pb-ve-jwplayer-hosted.html) -- [Kaltura](/examples/video/instream/kaltura/pb-ve-kaltura.html) - [VideoJS](/examples/video/instream/videojs/pb-ve-videojs.html) ## Instream and Banner Mixed Page diff --git a/examples/video/instream/jwplayer/pb-ve-jwplayer-hosted.html b/examples/video/instream/jwplayer/pb-ve-jwplayer-hosted.html index ee2caebd3a..67ab3e318d 100644 --- a/examples/video/instream/jwplayer/pb-ve-jwplayer-hosted.html +++ b/examples/video/instream/jwplayer/pb-ve-jwplayer-hosted.html @@ -86,7 +86,7 @@

      Place this code in the page header.

      pbjs.setConfig({ debug: true, cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' + url: 'https://prebid.example.com/pbc/v1/cache' } }); diff --git a/examples/video/instream/jwplayer/pb-ve-jwplayer-platform.html b/examples/video/instream/jwplayer/pb-ve-jwplayer-platform.html index 693aea6b2f..64f06968ec 100644 --- a/examples/video/instream/jwplayer/pb-ve-jwplayer-platform.html +++ b/examples/video/instream/jwplayer/pb-ve-jwplayer-platform.html @@ -88,7 +88,7 @@

      Place this code in the page header.

      pbjs.setConfig({ debug: true, cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' + url: 'https://prebid.example.com/pbc/v1/cache' } }); diff --git a/examples/video/instream/videoModule/videojs/video-module-videojs.html b/examples/video/instream/videoModule/videojs/video-module-videojs.html index 739c783568..bcfd598fc0 100644 --- a/examples/video/instream/videoModule/videojs/video-module-videojs.html +++ b/examples/video/instream/videoModule/videojs/video-module-videojs.html @@ -114,7 +114,7 @@

      Place this code in the page header.

      },] }, cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' + url: 'https://prebid.example.com/pbc/v1/cache' }, targetingControls: { allowTargetingKeys: ['BIDDER', 'AD_ID', 'PRICE_BUCKET', 'SIZE', 'DEAL', 'SOURCE', 'FORMAT', 'UUID', 'CACHE_ID', 'CACHE_HOST', 'ADOMAIN'] @@ -227,7 +227,7 @@

      Place this code in the page body.

      ], }, cache: { - url: "https://prebid.adnxs.com/pbc/v1/cache", + url: "https://prebid.example.com/pbc/v1/cache", }, targetingControls: { allowTargetingKeys: [ diff --git a/examples/video/instream/videojs/pb-ve-videojs.html b/examples/video/instream/videojs/pb-ve-videojs.html index 9d9daa2c4e..24ded8fe3b 100644 --- a/examples/video/instream/videojs/pb-ve-videojs.html +++ b/examples/video/instream/videojs/pb-ve-videojs.html @@ -97,7 +97,7 @@

      Place this code in the page header.

      pbjs.setConfig({ debug: true, cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' + url: 'https://prebid.example.com/pbc/v1/cache' } }); diff --git a/examples/video/long-form/long-form-video-with-freewheel.html b/examples/video/long-form/long-form-video-with-freewheel.html index 5d9324187d..28f5e06c6b 100644 --- a/examples/video/long-form/long-form-video-with-freewheel.html +++ b/examples/video/long-form/long-form-video-with-freewheel.html @@ -81,7 +81,7 @@ pbjs.setConfig({ debug: true, cache: { - url: 'https://prebid.adnxs.com/pbc/v1/cache' + url: 'https://prebid.example.com/pbc/v1/cache' }, adpod: { brandCategoryExclusion: true diff --git a/examples/video/outstream/pb-ve-outstream-dfp.html b/examples/video/outstream/pb-ve-outstream-dfp.html index 25f2130937..803e067576 100644 --- a/examples/video/outstream/pb-ve-outstream-dfp.html +++ b/examples/video/outstream/pb-ve-outstream-dfp.html @@ -75,7 +75,7 @@

      Place this code in the page header.

         
      -  <script async src="//securepubads.g.doubleclick.net/tag/js/gpt.js"></script>
      +  <script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script>
       
         <script>
       
      @@ -120,10 +120,14 @@ 

      Place this code in the page header.

      if (pbjs.initAdserverSet) return; pbjs.initAdserverSet = true; googletag.cmd.push(function() { - pbjs.que.push(function() { - pbjs.setTargetingForGPTAsync(); + if (pbjs.libLoaded) { + pbjs.que.push(function() { + pbjs.setTargetingForGPTAsync(); + googletag.pubads().refresh(); + }); + } else { googletag.pubads().refresh(); - }); + } }); } diff --git a/examples/video/outstream/pb-ve-outstream-no-server.html b/examples/video/outstream/pb-ve-outstream-no-server.html index f33601f3d3..79dc2ed304 100644 --- a/examples/video/outstream/pb-ve-outstream-no-server.html +++ b/examples/video/outstream/pb-ve-outstream-no-server.html @@ -12,9 +12,8 @@

      {{ page.title }}

      {{page.description }}

      -
      +
      -

      Important: This example uses a test version of Prebid.js hosted @@ -24,106 +23,61 @@

      {{ page.title }}

      necessary bidder adapters are included.

      + +
      + {% capture htmlCodePrebid %} +

      Out-stream Example

      + +
      + {% endcapture %} + + {% capture jsCode %}var pbjs = pbjs || {}; + pbjs.que = pbjs.que || []; + + var adUnit = { + code: "ad-unit-1", + mediaTypes: { + video: { + context: "outstream", + playerSize: [640, 360], + mimes: ["video/mp4", "video/webm", "video/ogg"], + protocols: [2, 3, 5, 6, 7, 8], + api: [2], + } + }, + bids: [ + { + bidder: "michao", + params: { + placement: "inbanner", + site: 1, + test: true + }, + }, + ], + renderer: { + url: `https://cdn.jsdelivr.net/npm/in-renderer-js@1/dist/in-renderer.umd.min.js`, + render: (bid) => { + var inRenderer = new window.InRenderer(); + inRenderer.render("ad-unit-1", bid); + }, + }, + }; + + pbjs.que.push(function() { + pbjs.addAdUnits(adUnit); + pbjs.requestBids({ + timeout: 5000, + bidsBackHandler: function () { + const highestCpmBids = pbjs.getHighestCpmBids("ad-unit-1"); + pbjs.renderAd('ad-unit-1', highestCpmBids[0].adId); + }, + }); + }) + {% endcapture %} + + {% include code/web-example.html id="basic-prebid-example" html=htmlCodePrebid js=jsCode %} +
      -
      -
      -

      - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do - eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad - minim veniam, quis nostrud exercitation ullamco laboris nisi ut - aliquip ex ea commodo consequat. Duis aute irure dolor in - reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla - pariatur. Excepteur sint occaecat cupidatat non proident, sunt in - culpa qui officia deserunt mollit anim id est laborum. -

      -
      - -
      -

      Prebid Outstream Video Ad

      -
      - -
      -

      - Sed ut perspiciatis unde omnis iste natus error sit voluptatem - accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae - ab illo inventore veritatis et quasi architecto beatae vitae dicta - sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit - aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos - qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui - dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed - quia non numquam eius modi tempora incidunt ut labore et dolore magnam - aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum - exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex - ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in - ea voluptate velit esse quam nihil molestiae consequatur, vel illum - qui dolorem eum fugiat quo voluptas nulla pariatur? -

      -
      -
      - - - - -
      -

      - Warning: Do not forget to exchange the placementId in the code - examples with your own placementId! -

      -
      - -

      Place this code in the page header.

      -
      -
      -  
      -  <script>
      -      var pbjs = pbjs || {};
      -      pbjs.que = pbjs.que || [];
      -
      -      var adUnits = [{
      -          code: 'video1',
      -          mediaTypes: {
      -              video: {
      -                  context: 'outstream',
      -                  playerSize: [640, 480],
      -                  mimes: ['video/mp4'],
      -                  protocols: [1, 2, 3, 4, 5, 6, 7, 8],
      -                  playbackmethod: [2],
      -                  skip: 1
      -              }
      -          },
      -          bids: [{
      -              bidder: 'appnexus',
      -              params: {
      -                  placementId: 13232385
      -              }
      -          }]
      -      }];
      -
      -      pbjs.que.push(function() {
      -          pbjs.addAdUnits(adUnits);
      -          pbjs.requestBids({
      -              timeout: 1000,
      -              bidsBackHandler: function(bids) {
      -                  var highestCpmBids = pbjs.getHighestCpmBids('video1');
      -                  pbjs.renderAd(document, highestCpmBids[0].adId);
      -              }
      -          });
      -      });
      -
      -  </script>
      -
      -        
      -
      - -

      Place this code in the page body.

      -
      - -
      -  
      -  <div id='video1'>
      -    <p>Prebid Outstream Video Ad</p>
      -  </div>
      -          
      -
      - + \ No newline at end of file diff --git a/faq/prebid-mobile-faq.md b/faq/prebid-mobile-faq.md index 95e6a33d77..208ebbce10 100644 --- a/faq/prebid-mobile-faq.md +++ b/faq/prebid-mobile-faq.md @@ -72,7 +72,7 @@ More details available at: - [IAB OM SDK](https://iabtechlab.com/standards/open-measurement-sdk/) - [Prebid iOS OM SDK](/prebid-mobile/pbm-api/ios/pbm-targeting-ios.html#open-measurement-sdk-omsdk-api) -- [Prebid Android OM SDK](/prebid-mobile/pbm-api/android/pbm-targeting-params-android.html#open-measurement-sdk-omsdk-api) +- [Prebid Android OM SDK](/prebid-mobile/pbm-api/android/pbm-targeting-android.html#open-measurement-sdk-omsdk-api) ### Does it have external dependencies? @@ -132,7 +132,7 @@ Yes. ### Does the SDK store any data locally on the device? If so, what is it? If the developer calls certain functions, the SDK will store the results for future auctions. See the "Local Storage" section of - + In all other cases SDK plays a transport role. It collects information from API (if it’s allowed by privacy settings) and sends it in the bid requests to the server. SDK uses the following datasources: @@ -165,7 +165,8 @@ However, here is the list of items that the app developer can add to the applica - `NSPrivacyTracking` - true. Because Prebid SDK collects IDFA. - `NSPrivacyTrackingDomains` - the tracking domain for the PBS. -Pay attention - if `NSPrivacyTracking` is true, the tracking domain is provided, and the user doesn't allow the app to track him or her, iOS will block the bid requests. Prebid SDK doesn't support tracking and non-tracking endpoints yet. Follow the [issue](https://github.com/prebid/prebid-mobile-ios/issues/954) for the details. +Pay attention - if `NSPrivacyTracking` is true, the tracking domain is provided, and the user doesn't allow the app to track him or her, iOS will block the bid requests. +Prebid SDK supports tracking and non-tracking endpoints. See [SDK initialization](/prebid-mobile/pbm-api/ios/code-integration-ios.html#handling-tracking-domains) for more details details. - `NSPrivacyCollectedDataTypes` array should contain the following `NSPrivacyCollectedDataType` items: `NSPrivacyCollectedDataTypePreciseLocation`, `NSPrivacyCollectedDataTypeCoarseLocation`,`NSPrivacyCollectedDataTypeDeviceID`, `NSPrivacyCollectedDataTypeProductInteraction`, `NSPrivacyCollectedDataTypeAdvertisingData`. diff --git a/faq/prebid-server-faq.md b/faq/prebid-server-faq.md index 26d7946c36..dd67a6b3db 100644 --- a/faq/prebid-server-faq.md +++ b/faq/prebid-server-faq.md @@ -248,16 +248,26 @@ In the long run, if you'd prefer to change the filenames too, that's ok - but ou 1. Submit a PR that changes the filenames and makes the old name a hard-coded alias. 2. Keep both bidder documentation files. +## May I build a server that calls Prebid Server? + +Sure. The main endpoint you're going to utilize is the [auction endpoint](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html). Basically, it's just OpenRTB 2.6, but with quite a few Prebid-specific extensions. See the [auction request example](/prebid-server/endpoints/openrtb2/auction-request-example.html). + ## Should Prebid bidders be in ads.txt? Publishers should be careful to list all their bidding partners in their ads.txt file. Bidders without an entry in ads.txt may be perceived by DSPs as unauthorized sources of your inventory. The domain for any ads.txt [inventory partners](https://github.com/InteractiveAdvertisingBureau/openrtb2.x/blob/dc71586842e648e89c1bbe6c666ffac8ff010a96/2.6.md?plain=1#L1752), if one exists, should be specified with a `setConfig({ortb2.site.inventorypartnerdomain})` call. For details of the specification of ads.txt entries, see [ads.txt v1.1](https://iabtechlab.com/wp-content/uploads/2022/04/Ads.txt-1.1.pdf) +## Does Prebid Server count as a hop in the supply chain? + +That depends on how Prebid Server is set up. In general, no, PBS does not add an entry to the `schain`. But a PBS [managed service](https://prebid.org/managed-services/) could be configured to add to the schain. + +The supply chain is meant to track financial arrangements, and PBS is basically a simple proxy server that does not insert itself into the money flow by default. Most PBS managed services require the publisher to have a direct financial relationship with each bidder, but there may be managed services that handle the money. + ## How can I help with Prebid Server? Generally, people and companies will work on features and bug fixes that directly affect them. The process is: -1. If there's not already an issue tracking the work, create an issue in the PBS-Go repo [here](https://github.com/prebid/prebid-server/issues/new). Note: we track enhancement requests in the PBS-Go repo. If it's a bug that affects PBS-Java only, then you can open the issue [here](https://github.com/prebid/prebid-server-java/issues/new). +1. If there's not already an issue tracking the work, create an issue in the PBS-Go repo [the PBS-Go issue tracker](https://github.com/prebid/prebid-server/issues/new). Note: we track enhancement requests in the PBS-Go repo. If it's a bug that affects PBS-Java only, then you can open the issue [the PBS-Java issue tracker](https://github.com/prebid/prebid-server-java/issues/new). 2. The issue should describe what you're planning to build/fix. We'll want to review any interfaces, config options, or metrics for consistency. 3. After getting approval (if needed), you'll make a Pull Request against the appropriate repo, whether PBS-Go or PBS-Java. Be sure to have read the contribution guidelines for [PBS-Go](https://github.com/prebid/prebid-server/tree/master/docs/developers) or [PBS-Java](https://github.com/prebid/prebid-server-java/tree/master/docs/developers). 4. The core team will review your PR. diff --git a/features/ac-quebec.md b/features/ac-quebec.md index 7a76f77f07..f8555e3530 100644 --- a/features/ac-quebec.md +++ b/features/ac-quebec.md @@ -101,9 +101,6 @@ bidders are in such alignment. An alternate solution would utilize the Prebid Server version of the [Activity Control system](/prebid-server/features/pbs-activitycontrols.html). -{: .alert.alert-info :} -Only the Java version of Prebid Server currently supports targeting Activity Controls to geographic regions. - Here's an example account configuration that utilizes the user's geographic region to determine whether to allow or deny the named activities. Publishers will need to confirm the details with their Prebid Server host company. diff --git a/features/firstPartyData.md b/features/firstPartyData.md index 135f78e363..e4eea093ee 100644 --- a/features/firstPartyData.md +++ b/features/firstPartyData.md @@ -57,12 +57,14 @@ If not specified through any of the methods above, Prebid.js attempts to automat | `site.domain` | Domain portion of `site.page` | | | `site.keywords` | Contents of ``, if such a tag is present on the page | | | `site.publisher.domain` | Second level domain portion of `site.domain` | The second-level domain portion of `sub.example.publisher.com` is `publisher.com`| -| `device.w` | Viewport width | -| `device.h` | Viewport height | +| `device.w` | Width of the screen in pixels | +| `device.h` | Height of the screen in pixels | | `device.dnt` | Do Not Track setting | [Navigator.doNotTrack](https://developer.mozilla.org/en-US/docs/Web/API/Navigator/doNotTrack) | | `device.language` | User's language | [Navigator.language](https://developer.mozilla.org/en-US/docs/Web/API/Navigator/language) | | `device.ua` | User agent | [Navigator.userAgent](https://developer.mozilla.org/en-US/docs/Web/API/Navigator/userAgent) | | `device.sua` | User agent client hints | [uaHints config](#uaHints) | +| `device.ext.vpw` | Viewport width in pixels | +| `device.ext.vph` | Viewport height in pixels | | `device.ext.webdriver`| `true` if the browser declares to be an automation tool | [Navigator.webdriver](https://developer.mozilla.org/en-US/docs/Web/API/Navigator/webdriver) | | `device.ext.cdep`| Google Chrome cookie deprecation label | [Chrome-facilitated testing](https://developers.google.com/privacy-sandbox/setup/web/chrome-facilitated-testing) | | `regs.coppa` | COPPA Regulation flag | [COPPA config](/dev-docs/publisher-api-reference/setConfig.html#setConfig-coppa) @@ -188,7 +190,7 @@ pbjs.setConfig({ {: .alert.alert-warning :} Note that supplying first party **user** data may require special -consent in certain regions. By default, Prebid's [gdprEnforcement](/dev-docs/modules/gdprEnforcement.html) module does **not** police the passing +consent in certain regions. By default, Prebid's [tcfControl](/dev-docs/modules/tcfControl.html) module does **not** police the passing of user data, but can optionally do so if the `personalizedAds` rule is enabled. {: .alert.alert-warning :} @@ -270,24 +272,6 @@ pbjs.addAdUnits({ }); ``` -You may also specify adUnit-specific transaction IDs using `ortb2Imp.ext.tid`, and Prebid will use them instead of generating random new ones. This is useful if you are auctioning the same slots through multiple header bidding libraries. Note: you must take care to not re-use the same transaction IDs across different ad units or auctions. Here's a simplified example passing a tid through the [requestBids](/dev-docs/publisher-api-reference/requestBids.html) function: - -```javascript -const tid = crypto.randomUUID(); -pbjs.requestBids({ - adUnits: [{ - code: 'test-div', - // ... - ortb2Imp: { - ext: { - tid: tid - } - } - }] -}); -// reuse `tid` when auctioning `test-div` through some other header bidding wrapper -``` - {: .alert.alert-info :} Prebid does not support AdUnit-specific **user** data, nor does it support bidder-specific AdUnit First Party Data. You could implement either of diff --git a/features/mspa-usnat.md b/features/mspa-usnat.md index f488fd3a06..aec0269dac 100644 --- a/features/mspa-usnat.md +++ b/features/mspa-usnat.md @@ -1,11 +1,11 @@ --- layout: page_v2 -title: Prebid MSPA Support -description: Prebid MSPA Support +title: Prebid US Compliance Support +description: Prebid US Compliance Support sidebarType: 7 --- -# Prebid Multi-State Privacy Agreement Support +# Prebid US Compliance Support {: .no_toc} - TOC @@ -17,24 +17,27 @@ sidebarType: 7 Starting July 1st 2023, several US states started enforcing new privacy regulations. -The IAB released the "Multi-State Privacy Agreement" (MSPA) as its proposal for how the advertising ecosystem can support these and future US State regulations. References: +As a result, the IAB released the "Multi-State Privacy Agreement" (MSPA), the Global Privacy Protocol (GPP), and several "sections" of the GPP dedicated to these US states. References: - [IAB's MSPA](https://www.iab.com/news/multi-state-privacy-agreement-mspa/) - IAB Guidance on the [MSPA Decision Tree](https://www.iab.com/wp-content/uploads/2022/12/IAB_MSPA_Decision_Tree.pdf) - IAB's [US National technical protocols](https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/tree/main/Sections) +Prebid refers to GPP Sections 7-12 as "US Compliance", which is distinct from the original [US Privacy](https://github.com/InteractiveAdvertisingBureau/USPrivacy/blob/master/CCPA/US%20Privacy%20String.md) approach which has been deprecated. + ### Glossary 1. **Global Privacy Platform (GPP)** - A technical IAB framework that defines a container format for communicating multiple privacy protocols. e.g. GPP can contain existing Transparency and Consent Framework (TCF) strings, various US privacy string formats, and other future implementations. 1. **GPP Section ID (SID)** - the GPP container may contain multiple encoded privacy protocol strings. Each protocol gets its own SID in the overall GPP container. e.g. TCF-EU is assigned SID 2. -1. **Multi-State Privacy Agreement (MSPA)** - the IAB's contractual framework for publishers to manage various US state privacy laws. +1. **Multi-State Privacy Agreement (MSPA)** - the IAB's contractual framework for publishers to manage various US state privacy laws. Note that there are high profile companies in the industry that have not signed the MSPA, but are still able to process the IAB's technical protocol to consider user preferences. 1. **MSPA Covered Transaction** - Whether a given ad auction falls legally under the MSPA's privacy requirements. For MSPA-covered 'transactions' (ad auctions), publishers must declare themselves in one of two modes: "Service Provider Mode" or "Opt-Out Mode". 1. **MSPA Service Provider Mode** - "Service Provider Mode is for First Parties who do not Sell or Share Personal Information, and do not Process Personal Information for Targeted Advertising". This means that personal information is never sent to downstream entities. 1. **MSPA Opt-Out Mode** - For First Parties that may engage in targeted advertising activities or disclose personal information for such purposes. This means that user consent is gathered before privacy-sensitive data is sent to downstream entities. 1. **US National Privacy Technical Specification (USNat)** - the IAB's technical framework for encoding MSPA publisher policies and user consents. Stored in the GPP container as SID 7. 1. **US State Privacy Technical Specifications** - the IAB has defined technical frameworks for 5 states based on their interpretation of state privacy laws. These protocols are similar to the US National protocol and are stored in the GPP container as SIDs 8 through 12. +1. **US Compliance** - the term Prebid uses to encompass both US National Privacy Technical Specification and the US State Privacy Technical Specifications. 1. **Global Privacy Control (GPC)** - a browser-level control for end users. Some US states have referred to a global control so that users don't have to state their preferences on each website they visit. The USNat protocol strings also contain the GPC flag. -1. **US Privacy** - this is the IAB's original version of a US privacy protocol, meant to address CCPA only. It's active during a transition period until September 30, 2023. +1. **US Privacy** - this is the IAB's original, now deprecated, version of a US privacy protocol, meant to address older California laws. 1. **Prebid Activity Controls** - Prebid.js and Prebid Server have identified a set of behaviors for activities that may be in scope for privacy concerns such as transmitting user IDs. These activities may be allowed or suppressed with flexible conditions and exceptions as defined by the publisher. - [Prebid.js Activity Controls](/dev-docs/activity-controls.html) were released with PBJS 7.52 - [Prebid Server Activity Controls](/prebid-server/features/pbs-activitycontrols.html) were released with PBS-Java 1.118 @@ -50,29 +53,29 @@ Prebid's assumptions about the MSPA and the US National Privacy specification: 1. For requests that are in-scope for SIDs 7 through 12 that are not "covered" by MSPA, Prebid treats them as being in "Opt-Out Mode". This implies that CMPs have prompted users for consent and encoded the results in the relevant section of the GPP container. 1. Prebid never changes the GPP string. This means that all downstream vendors will see whatever the CMP set. 1. Prebid has implemented a default way to interpret the US National string (SID 7) in the context of each Prebid Activity. -1. US state privacy rules do not mandate the cancellation of contextual advertising, but rather are focused on protecting user privacy. Therefore, Prebid's MSPA module may anonymize different aspects of a header bidding auction, but will never outright cancel an auction. +1. US state privacy rules do not mandate the cancellation of contextual advertising, but rather are focused on protecting user privacy. Therefore, Prebid's US compliance modules may anonymize different aspects of a header bidding auction, but will never outright cancel an auction. 1. There are differences in the US state-level protocols and the US National protocol as defined by the IAB. (e.g. child consent for targeted advertising is somewhat different across SIDs 7 through 12.) 1. Rather than implementing several very similar modules and forcing publishers to include separate modules for each US state, Prebid handles state differences through a normalization process. The differences for each state are mapped onto the US National (SID 7) string, and that string is interpreted for which activities are allowed or suppressed. As with the rest of Prebid’s approach, this is a default intended to ease publishers’ ability to comply with the state laws, but publishers should make their own determinations about state law obligations and consult legal counsel to ensure that they feel comfortable that this approach allows them to meet their legal obligations. 1. Publishers that do not agree with Prebid's default behavior may override the behavior. This includes the interpretation of the USNat string as well as the normalization of state protocols. 1. The Global Privacy Control (GPC) flag is interpreted as a strong user signal that ad requests should be anonymized. 1. There's no need to support a data-deletion activity for MSPA. -1. Prebid doesn't need to explicitly support mapping US National Privacy SID 6 (legacy US Privacy) for anonymization activities. This is covered by a feature on Prebid Server where SID 6 is pulled out into regs.us_privacy and is covered by documentation in Prebid.js. +1. Prebid doesn't need to explicitly support mapping GPP SID 6 (legacy US Privacy) for anonymization activities. This is covered by a feature on Prebid Server where SID 6 is pulled out into regs.us_privacy and is covered by documentation in Prebid.js. -## USNat Support in Prebid Products +## US Compliance Support in Prebid Products ### Prebid.js Here's a summary of the privacy features in Prebid.js that publishers may use to align with the guidance of their legal counsel: {: .table .table-bordered .table-striped } -| Prebid.js Version | USNat-Related Features | Notes | +| Prebid.js Version | US Compliance-Related Features | Notes | | ----------------- | ---------------------- | ----- | | before 7.30 | None | If you operate in the US, you should consider upgrading. | -| 7.30-7.51 | **GPP module** | The [GPP module](/dev-docs/modules/consentManagementGpp.html) reads the GPP string from a compliant CMP and passes to compliant bid adapters. Not many bid adapters supported GPP in earlier versions. | -| 7.52-8.1 | GPP module
      **Activity Controls** | [Activity Controls](/dev-docs/activity-controls.html) provide the ability for publishers to allow or restrict certain privacy-sensitive activities for particular bidders and modules. See examples in that document for supporting CCPA directly. | -| 8.2-8.x | GPP module
      Activity Controls
      **USNat module** | The [USNat module](/dev-docs/modules/gppControl_usnat.html) processes SID 7. | -| After 8.x | GPP module
      Activity Controls
      USNat module
      **US State module** | The US State module processes SIDs 8 through 12 after normalizing protocol differences. | -| After 8.10 | **GPP Module** | The [GPP module](/dev-docs/modules/consentManagementGpp.html) now understands GPP 1.1 which makes it incompatible with GPP 1.0. Publishers **MUST** upgrade for continued GPP support. | +| 7.30-7.51 | **Consent Mgmt GPP module** | The [GPP module](/dev-docs/modules/consentManagementGpp.html) reads the GPP string from a compliant CMP and passes to compliant bid adapters. Not many bid adapters supported GPP in earlier versions. | +| 7.52-8.1 | Consent Mgmt GPP module
      **Activity Controls** | [Activity Controls](/dev-docs/activity-controls.html) provide the ability for publishers to allow or restrict certain privacy-sensitive activities for particular bidders and modules. See examples in that document for supporting CCPA directly. | +| 8.2-8.9 | Consent Mgmt GPP module
      Activity Controls
      **GPP USNat module** | The [GPP USNat module](/dev-docs/modules/gppControl_usnat.html) processes SID 7. | +| 8.10+ | Consent Mgmt GPP module
      Activity Controls
      USNat module
      **GPP US State module** | The [GPP US State module](/dev-docs/modules/gppControl_usstates.html) processes SIDs 8 through 12 after normalizing protocol differences. | +| 8.10+ | **Consent Mgmt GPP module** | The [GPP module](/dev-docs/modules/consentManagementGpp.html) now understands GPP 1.1 which makes it incompatible with GPP 1.0. Publishers **MUST** upgrade for continued GPP support. | ### Prebid Server @@ -190,7 +193,7 @@ This table documents the default blocks of boolean logic that indicate whether a | transmitPreciseGeo | MspaServiceProviderMode=1 OR
      GPC=1 OR
      SensitiveDataProcessingOptOutNotice=2 OR
      SensitiveDataLimitUseNotice=2 OR
      ((SensitiveDataProcessingOptOutNotice=0 OR SensitiveDataLimitUseNotice=0) AND SensitiveDataProcessing[8]=2)
      SensitiveDataProcessing[8]=1 OR
      KnownChildSensitiveDataConsents[2]==1 OR
      KnownChildSensitiveDataConsents[2]==2 OR
      KnownChildSensitiveDataConsents[1]=1 OR
      PersonalDataConsents=2 | Round IP address and lat/long in both device.geo and user.geo when the activity is not allowed.

      The difference in this logic is that it includes "sensitive data 8" (geo) and does not include the UFPD- and ID-related fields. | | transmitTid | n/a | Sending transaction IDs is not an aspect of USNat. | -NOTE -- Here's what the numbers in the logic above indicate in the [IAB GPP USNat specification](https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Sections/US-National/IAB%20Privacy%E2%80%99s%20National%20Privacy%20Technical%20Specification.md): +NOTE -- Here's what the numbers in the logic above indicate in the [IAB GPP USNat specification](https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Sections/US-National/IAB%20Privacy%E2%80%99s%20Multi-State%20Privacy%20Agreement%20(MSPA)%20US%20National%20Technical%20Specification.md: MspaServiceProviderMode: diff --git a/features/pbAdSlot.md b/features/pbAdSlot.md index c67054b0c1..fe244c8626 100644 --- a/features/pbAdSlot.md +++ b/features/pbAdSlot.md @@ -74,7 +74,7 @@ pbjs.addAdUnits({ ortb2Imp: { ext: { gpid: "/1111/homepage-leftnav", - data: { + data: { pbadslot: "/1111/homepage-leftnav" } } @@ -95,7 +95,7 @@ pbjs.addAdUnits({ ortb2Imp: { ext: { gpid: "/1111/homepage#div-leftnav", - data: { + data: { pbadslot: "/1111/homepage#div-leftnav" } } @@ -113,31 +113,34 @@ In this example, the publisher utilizes the same 'slotname' in the page for mult - defineSlot('/1111/homepage', [[728,90]], 'div-j98s9u9usj987665da'); ```javascript -pbjs.addAdUnits({ - code: 'div-293rj893p9wje9we9fj', - ortb2Imp: { - ext: { - gpid: "/1111/homepage#300x250", - data: { - pbadslot: "/1111/homepage#300x250" +pbjs.addAdUnits([ + { + code: 'div-293rj893p9wje9we9fj', + ortb2Imp: { + ext: { + gpid: "/1111/homepage#300x250", + data: { + pbadslot: "/1111/homepage#300x250" + } } - } + }, + mediaTypes: ... + bids: ... }, - mediaTypes: ... - bids: ... -},{ - code: 'div-j98s9u9usj987665da', - ortb2Imp: { - ext: { - gpid: "/1111/homepage#728x90", - data: { - pbadslot: "/1111/homepage#728x90" + { + code: 'div-j98s9u9usj987665da', + ortb2Imp: { + ext: { + gpid: "/1111/homepage#728x90", + data: { + pbadslot: "/1111/homepage#728x90" + } } - } - }, - mediaTypes: ... - bids: ... -}); + }, + mediaTypes: ... + bids: ... + } +]); ``` ## Prebid Server diff --git a/features/timeouts-video.md b/features/timeouts-video.md new file mode 100644 index 0000000000..a73c6c3457 --- /dev/null +++ b/features/timeouts-video.md @@ -0,0 +1,84 @@ +--- +layout: page_v2 +title: Video Intro to Timeouts in Prebid.js +description: A video overview of Prebid.js Timeouts +sidebarType: 1 +--- + +# A Video Overview of Timeouts in Prebid.js + +{% include vimeo-iframe.html id="1014195522" title="1014195522" %} + +Further Content: + +- [Prebid.js Timeouts](/features/timeouts.html) +- [All videos](/overview/all-videos.html) + +Related Videos + +- [Prebid.js Impression Flow](/prebid/prebidjs-flow-video.html) +- [Introduction to Server-Side Header Bidding](/dev-docs/pbsBidAdapter-video-overview.html) + +## Transcript + +This video covers the topic of bidder timeouts in Prebid auctions. + +We’ll explain how and why timeouts occur in Prebid auctions, how they can affect your monetization, and what strategies you can use to minimize timeouts and maximize performance in Prebid.js and Prebid Server. + +This video will be most useful to those with a strong understanding of the Prebid auction process. If you need a refresher, we recommend watching the Prebid.js Impression Flow and the Introduction to Server-Side Header bidding videos. These videos are detailed step-by-step walkthroughs of a Prebid auction. + +Bidder timeouts are important to track because they affect your monetization. Timeouts represent lost bids, which means less competition for your ad impressions and weaker monetization than the scenario in which there are fewer timeouts. Later in this video, we’ll discuss strategies for optimizing monetization and bidder timeouts. + +There are five general factors that influence whether or not a bidder's response will be time out. We’ll walk through each of these. + +First make sure that you have solid measurement in place before beginning to optimize. Prebid’s robust analytics framework can be used to measure timeout rate, response time, and other critical metrics. + +Optimizing a Prebid auction should always start with a clear understanding of what you are trying to achieve. Optimization is about finding the best balance in a tradeoff for you and your business. In this section, we’ll outline some basic principles and best practices to remember as you work to optimize your own auctions. + +Next, understand what you are able to control to influence timeouts. You can make Prebid run more efficiently by fine-tuning your pre-auction processes and by optimizing the web page itself. You can also directly influence timeout rates by adjusting the timeout duration. This is the amount of time that you allow Prebid to execute its auction before concluding the auction and proceeding without timed out bids. + +Timeout duration affects timeout rates: shorter timeout durations give bidders less time to respond and result in more timeouts. Longer durations are the opposite, resulting in lower timeouts and higher bid density. + +However, it’s important to remember that there’s a tradeoff here. Timeout duration also affects the total auction time, and there are costs to longer auctions. The longer your timeout duration, the longer it will take on average for Prebid.js to complete its auction, call the primary ad server, and, ultimately, deliver ads to the website. Waiting too long to serve ads can result in lost impressions, which hurts monetization and creates a bad experience for demand partners. Slow-to-load ads can also contribute to poor user experience. + +Therefore, timeout duration optimization is about striking a balance. It is rarely optimal to completely eliminate bidder timeouts, because this will result in costly tradeoffs. So you’ll want to determine a panel of metrics that allow you to measure performance holistically, then test variations on timeout duration and bidder selection continually to discover optimal setup. + +Continual testing can be labor intensive, so many publishers use automated optimization tools. Some companies that offer analytics and Prebid management solutions also offer automated optimization services. + +Make sure that the analytics solution you choose can measure the bidder timeout rate, which is the percentage of total bid requests to the bidder that timed out. Ideally, this metric is available for a variety of user locations and page types. It’s also helpful but not essential to be able to see the average response time for each bidder. + +Check the video description for links to other videos and documentation about Prebid analytics. + +If you’re unfamiliar with this type of hybrid setup, you can find the necessary context in our video on Server-Side Auctions with Prebid.js. The link is in the video description below. + +The first is the timeout duration set in Prebid.js or Prebid Server. The more time that these auction systems give bidders to respond, the less likely those bidders are to time out. As a publisher, you have control over this setting for your auctions, and this setting is perhaps the most powerful tool you have for managing timeouts. + +The second is the time that Prebid.js sometimes spends retrieving or processing data before sending bid requests. For example, Prebid.js might make requests to set user ID cookies, to gather first-party data, or to interact with a consent management platform. + +Depending on your Prebid.js configuration settings, these pre-auction processes may delay the sending of bid requests, leaving bidders less time to respond and making timeouts more likely. Usually, these processes don’t occur on every auction, and are more likely to occur on the first page view of a user’s session within the domain. + +Publishers also have lots of control: in the Prebid.js configuration, you’re able to set the amount of time that you will allow these processes, and you can also decide whether or not they should delay bid requests. + +The third factor affecting timeouts is the speed of the bidder’s own internal processes for generating a bid. Some bidders are able to receive a bid request, determine their bid, and respond quite quickly, while others respond more slowly. A bidder’s average response time is an important metric to consider when you evaluate its performance. + +The fourth factor is the network latency, which refers to the amount of time that the request and response messages spend traveling between the user’s device and the demand source’s server. This includes the user’s internet connection speed, their physical distance from the server that is receiving the request, and other factors. While you can’t always control these factors directly, you can fine-tune auction settings like the timeout duration and bidder selection according to the user’s location or connection type. + +The fifth and final factor affecting timeouts is the web page itself. User’s devices are limited in their ability to perform processes and request data from server-side sources, and Prebid is just one of many components that need resources on a modern webpage. A busier page can result in more timeouts by slowing Prebid’s ability to run its auction. + +Thanks for watching this video on timeouts in Prebid.js. Check out the link in the description below for more resources. + +Let’s start with the basics: what is a timeout, and why is it important? + +In this section, we’ll explain why timeouts happen. + +Next we’ll discuss how to optimize timeouts in a Prebid auction. + +We’d like to share one final best practice that relates to auctions on websites that include server-side bidders. + +Each time the Prebid auction sends bid requests, it starts a timer and expects to receive responses from the bidders before the timer is finished. + +A timeout occurs when a bidder fails to respond before the end of the timer. + +When bidders are set up server side, Prebid.js will make a request to Prebid Server, which in turn makes server-side requests to bidders. Prebid.js and Prebid Server have independent bidder timeout settings, and it’s important to make sure that these are closely coordinated. If they aren’t, you can inadvertently cause your Prebid Server’s response to Prebid.js to time out and lose valuable server-side bids. + +Thanks for watching this video on timeouts in Prebid.js. Check out the link in the description below for more resources. diff --git a/features/timeouts.md b/features/timeouts.md index 35e55b4d51..d34b540059 100644 --- a/features/timeouts.md +++ b/features/timeouts.md @@ -6,13 +6,28 @@ sidebarType: 1 --- # Prebid Timeouts +{: .no_toc} -Header bidding needs some time to collect bids. Publishers update their +- TOC +{:toc} + +## How it Works + +Header bidding needs time to collect bids. Publishers update their pages to delay the ad server call for just long enough to get bids, but not so long as to reduce overall revenue. This delay is controlled by a number of timeouts and adjustments. -The following diagram summarizes the timeouts in Prebid.js and Prebid Server. +{% include vimeo-iframe.html id="1014195522" title="1014195522" %} + +Related content: + +- [Transcript of this video](/features/timeouts-video.html) +- [Prebid.js Impression Flow](/prebid/prebidjs-flow-video.html) + +## Different kinds of timeouts + +This diagram summarizes timeouts in Prebid.js and Prebid Server: ![Timeout](/assets/images/dev-docs/prebid-timeouts.png){:class="pb-xlg-img"} @@ -21,41 +36,52 @@ JavaScript setTimeout() that publishers should consider establishing after the Prebid.js code is loaded. It's a safety net that invokes the ad server callback in case something goes wrong. In all regular scenarios, Prebid.js will have already invoked the callback before this timeout is reached. This value should be much larger than the auction timeout. -2. **Auction Timeout** - This value defines the amount of time the page has to coordinate the +2. **Auction Timeout** - This value defines the amount of time the Prebid is allowed to coordinate header bidding activities. Determining this value is a delicate balance: too short, and header bidding won't have enough time to take place; too long, and revenue may go down due to delaying the ad server call to the point where users have left the page. Publishers must determine the value that works for them, considering a balance of factors: average user time on page, direct sellthrough, value of different ad channels, and average user network delay. -3. **Timeout Buffer** - The JavaScript timer environment is not perfectly accurate -because competing JavaScript on the page can delay the header bidding auction -or the recognition that auction results have returned. By default, Prebid.js adds a 400ms buffer to the Auction Timeout to account for the noisy environment. Publishers can -change this default value with the [`timeoutBuffer`](/dev-docs/publisher-api-reference/setConfig.html#setConfig-timeoutBuffer) configuration. -4. **Prebid Server s2sConfig Timeout** - In order to make sure that Prebid Server +3. **Prebid Server s2sConfig Timeout** - In order to make sure that Prebid Server bids can get back to the client in time for the ad server call, publishers should consider setting [s2sConfig.timeout](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Server-to-Server) to a value lower than the Auction Timeout. How much lower depends on average user network delay, but should probably be within the range of 50%-75% of the Auction Timeout. This value is sent in the Prebid Server OpenRTB as `tmax`. -5. **Timeout Adjustment** - In order to minimize the chance of missing the client-side -ad server call, Prebid Server shaves off a safety buffer and responds to the client a little before the `tmax` value time is up. The Prebid Server host company sets two -configurable values (`auction.timeout-adjustment-ms` and `auction.cache.expected-request-time-ms`), which can be expected to shave 30-100ms off of `tmax`. For example, if tmax=1000 and the Prebid Server host company has 40ms of safety margin configured, -bidders will actually timeout at 960ms. +4. **Timeout Adjustment** - In order to minimize the chance of missing the client-side +ad server call, Prebid Server shaves off a safety buffer and responds to Prebid.js before the original `tmax` value time is up. See the [Prebid Server timeout reference](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#timeout) for details. + +## Troubleshooting Timeouts + +In general, your [analytics reports](/overview/analytics.html) will alert you to the existence of timeouts. + +Engineers can get more insight into details by following [this process](/troubleshooting/troubleshooting-guide.html#configure-auction-options-with-logging) + +Below are tips for tackling different scenarios. + +### If a few bid adapters regularly timeout + +Analytics reports would show this scenario as timeouts for a subset of adapters. -## Prebid SDK Timeouts +1. It could be caused by geographic distribution. Try looking at timeout data by geographic region for patterns. Work with your contact at those bidders to understand their service areas and service level agreements. Remedies might include: not calling certain bidders in particular geographic regions, moving those bidders first, raising the overall timeout +2. Or you might consider using the [secondaryBidders](/dev-docs/publisher-api-reference/setConfig.html#auction-options) feature. This will cause Prebid to not wait for the named bidders. -The SDK `setTimeoutMillis()` function is a "failsafe" timeout on the app side. +### If all bid adapters have regular timeouts or if the failsafe timeout fires often -The Prebid Server timeout value comes from `tmax` in the top level stored request. +If analytics reports show a concerning level of timeouts across all bidders: -There is no "Timeout Buffer" in the SDK scenario, but Prebid Server will shave -off the Timeout Adjustment. +1. Again, geographic distribution is worth checking. For example, publishers with many users in the southern hemisphere might see longer network delays if all of their bidders are hosted in the northern hemisphere. And again, working with major bidder partners might be helpful here. +2. Timeouts can also be caused by waiting too long in the pre-auction. Use analytics to measure the amount of time that elapses between the start of the auction and when the bids are actually sent out. If that's a sizeable portion of the overall timeout period, check how long you're allowing the Consent Management Platform, User ID modules, and Real Time Data modules to take. You may need to scale back how long each of them is allowed. Many vendors request prioritization and long pre-auction periods, but you may want to A/B test to determine where the performance-revenue balance lies for your site. +3. Check if there are other resource-intensive javascripts running on the page. If Prebid.js cannot get attention from the browser to process bid responses, the timeout may fire more often. Work with your Product and Engineering teams to determine if some of these scripts could be moved to happen later after page load. +4. Check that the [usersync delay](/dev-docs/publisher-api-reference/setConfig.html#configure-user-syncing) is long enough to let the first auction run. Many vendors will want to usersync as soon as possible so the first auction carries their ID, but vendor cookie syncing can create quite a few network requests. -## AMP Timeouts +### If Prebid Server is timing out -AMP pages may pass a timeout attribute on the query string. This value will override the default that's set in the stored request. +If PBS takes too long to get back, then no server-side bidder will be able to submit a bid. -There is no "Timeout Buffer" in the AMP scenario, but Prebid Server will shave -off the Timeout Adjustment. +1. Check that [s2sConfig](/dev-docs/modules/prebidServer.html).timeout is lower than the timeout given to Prebid.js. This accounts for the time it takes to get the PBS request there and back. The default value for s2sConfig.timeout is 75% of the PBJS timeout. +2. If you have server-side analytics available, check to see whether a subset of bidders may be causing the auctions to be delayed. + 1. If so, there may be geography issues. Check the reports to see if the bidder's performance is better in certain regions and work with them to determine if there are different bidding endpoints. + 2. Note that there's no server-side equivalent of 'secondaryBidders'. +3. Check the Prebid Server [timeout adjustment](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#timeout) features. These can be used to lower the tmax value sent to bidders so they'll respond faster. -# Related Resources +## Related Resources -- [Prebid.js timeoutBuffer](/dev-docs/publisher-api-reference/setConfig.html#setConfig-timeoutBuffer) - [FAQ: What should I set my timeouts to?](/dev-docs/faq.html#what-should-my-timeouts-be) -- [Prebid.js s2sConfig](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Server-to-Server) +- [Prebid.js s2sConfig](/dev-docs/modules/prebidServer.html) diff --git a/formats/ctv.md b/formats/ctv.md new file mode 100644 index 0000000000..9f6dc9dce7 --- /dev/null +++ b/formats/ctv.md @@ -0,0 +1,33 @@ +--- +layout: page_v2 +title: Prebid Connected TV +description: Prebid Connected TV +sidebarType: 6 +--- + +# Prebid Connected TV + +Prebid for CTV is a Prebid-based unified auction solution designed for CTV long-form video programmatic needs. + +Prebid aims to create a flexible solution that allows publishers to plug in 160+ video capable adapters for the demand sources either in publishers’ existing stack or as a stand-alone Prebid Server based programmatic demand source. + +Prebid can be the best way to serve programmatic ads into long-form video content, both for remnant inventory as well as the primary demand source. It can be used for both client side and server side ad insertion, and can integrate with the publisher’s ad server of choice. + +Server side ad insertion dominates CTV ad serving ecosystem mainly due to the following reasons: + +- A multitude of CTV device platforms and the complexities of implementing and managing client side ad insertions for all such platforms. +- Superior end user experience with smooth transition between content and the ads with matching video playback quality. + +Prebid Server is the most commonly used methodology for accessing programmatic demand for the server side ad insertion use cases. + +{: .alert.alert-success :} +Prebid has published our CTV GET and VAST unwrapping requirements, which are now open for public feedback until Friday, October 10th. The document can be [found here](https://docs.google.com/document/d/1KrEQk7gOZj0pUJHwVb7850awbQdiE8EfzciwlfvtSQQ). + +We encourage the community to review the draft and share feedback directly as comments in the Google Doc. The Prebid team will actively monitor and respond to comments throughout the feedback period to ensure that all perspectives are considered. + +Your input is critical in shaping these requirements, and our goal is to incorporate community insights before we begin development in Q4. + +## Further Reading + +- [Ad Server Integration with Prebid Server Architecture and Interface Recommendation](/prebid-server/use-cases/pbs-lfv.html) +- [Prebid for CTV-OTT: Use Cases, Common Integration Architectures, Challenges, Solutions](https://files.prebid.org/docs/Prebid_for_CTV-OTT.pdf) diff --git a/formats/video.md b/formats/video.md index 13bac2ce47..9434356410 100644 --- a/formats/video.md +++ b/formats/video.md @@ -11,25 +11,40 @@ Welcome to Prebid video ad support. This is a collection of resources covering how Prebid can help you monetize video. If you're new to Prebid video, a good place to start would be the [Prebid.js-focused training video overview](/prebid-video/video-overview-video.html). -## Instream +## Mapping Out Prebid Integration with the IAB Use Cases/Video Placement Types -Instream ads are for short-form video content within a player generally has simple video ad requirements, e.g. a single pre-roll ad. +The IAB has identified the [four types of video placements](https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/main/AdCOM%20v1.0%20FINAL.md#list_plcmtsubtypesvideo) for the introduced `plcmt` attribute in `Object:Video`, in accordance with the IAB Digital Video Guidelines: -1. [Prebid.js instream video overview](/prebid-video/video-overview.html#instream-video) -1. [Prebid.js: Getting started with Prebid video](/prebid-video/video-getting-started.html) -1. [Prebid Server video ad support](/prebid-server/use-cases/pbs-pbjs.html) +1. **Instream:** pre-roll, mid-roll and post-roll ads that are played before, during or after the streaming video content, which the viewer has requested. Instream video must be set to “sound on” by default at player start, or have explicitly clear user intent to watch the video content. While there may be other content surrounding the player, the video content must be the focus of the user’s visit. -## Outstream +2. **Accompanying Content:** the video player loads and plays before, between, or after paragraphs of text or graphical content. -'Outstream' ads are packaged with a separate player, or the publisher provides a special player for them. They aren't embedded within video content, but rather exist as standalone video players somewhere on the page. +3. **Interstitial:** video ads that are played without video content. During playback, the video ad must be the primary focus of the page, take up the majority of the viewport and cannot be scrolled out of view. -1. [Prebid.js outstream video overview](/prebid-video/video-overview.html#outstream-video) -1. [Prebid.js: Getting started with Prebid video](/prebid-video/video-getting-started.html) -1. [Prebid Server video ad support](/prebid-server/use-cases/pbs-pbjs.html) +4. **No Content/Standalone:** video ads that are played without the streaming video content. -## CTV-OTT +However, for the described four use cases/placement types, there are only two types of integration from the Prebid perspective: + +1. [**In-player.**](/prebid-video/video-overview#in-player-integration) There's already a video player on the page. The publisher has to use the [Video Module](/prebid-video/video-module) or implement a javascript function that passes bid responses to the player. In this scenario, Prebid handles video bid caching server-side, then maps it to a unique cache ID, which will be passed to the ad server via key-value targeting. + + The player calls the ad server, and the latter matches Prebid.js key-value pairs to a pre-configured line item, followed by the player’s rendering of the video ad from the winning bidder. + +2. [**In-renderer.**](/prebid-video/video-overview#in-renderer-integration) In this scenario, the Demand partner’s response to bid requests includes a [renderer](/overview/glossary#renderer) script, followed by Prebid’s handling of the following: -Connected TV and 'Over-The-Top' video ads are for long-form video content. They have stronger requirements for ad-podding and category exclusion. + (a) Prebid communicates with the ad server as normal. + (b) If it wins the auction and needs to render the ad, there is special rendering activity required. + (c) Prebid needs to create an `iframe` and do the appropriate thing to load and invoke the renderer. + +**Here’s how Prebid implementation types are mapped out with the IAB use cases:** + +{: .table .table-bordered .table-striped } +| IAB Use Case | Prebid Implementation | +| ------------- | ------------- | +| Instream | In-player | +| Accompanying Content | In-player | +| Interstitial | In-player or in-renderer depending on implementation | +| No Content/Standalone | In-player or in-renderer depending on implementation | + +## CTV-OTT -1. [Prebid CTV+OTT white paper](https://files.prebid.org/docs/Prebid_for_CTV-OTT.pdf) -1. [Prebid Server long-form video ad support](/prebid-server/use-cases/pbs-lfv.html) +See the [Connected TV landing page](/formats/ctv.html). diff --git a/guide.md b/guide.md index aae389fadb..e19f691cbb 100644 --- a/guide.md +++ b/guide.md @@ -3,7 +3,6 @@ layout: page_v2 title: prebid.org website guide description: details about how the site works isNew: false - sidebarType: 0 --- @@ -21,16 +20,14 @@ Updated Feb 9, 2023 The easiest way to setup an environment to contribute to the docs or review pull requests is [Github Codespaces](https://github.com/features/codespaces). 1. Open [github.com/prebid/prebid.github.io](https://github.com/prebid/prebid.github.io) -2. Click on the `Code` drop down menu and select "create new codespace from master". If you have no access to prebid.github.io, then you should do this on your fork of the repository -3. Install the [markdownlint extension](https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint) - 1. go to _Extensions_ - 2. search for _markdownlint_ and hit install - 3. now you get direct feedback on linting errors -4. Start the jekyll build as described in the `TERMINAL` of your codespace - 1. `bundle install` - 2. `JEKYLL_ENV=production bundle exec jekyll serve --watch --incremental` - 3. Codespaces will display a notification to open the running instance in the browser. -5. In the `PORTS` tab you find the running instance +2. Click on the `Code` drop down menu and select "create new codespace from master" by clicking on the + icon. + If you have no access to prebid.github.io, then you should do this on your fork of the repository +3. Start the jekyll build as described in the `TERMINAL` of your codespace + 1. `JEKYLL_ENV=production bundle exec jekyll serve --watch --incremental` + 2. Codespaces will display a notification to open the running instance in the browser. +4. In the `PORTS` tab you find the running instance + +This repository contains a [devcontainer.json](.devcontainer/devcontainer.json) that setups the codespace or your favourite IDE. It includes the [markdownlint extension](https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint), ruby and installs all dependency on setup through `bundle install`. ## Reviewing Pull Requests and Issues @@ -39,16 +36,21 @@ Being a reviewer means you're in weekly rotation where you keep an eye on pull r ### PR Review Guidelines 1. Make sure no inappropriate changes are made. This covers obvious things like bad language and content, but we also don't allow overt marketing language on the site. Phrases like "we're the best BLAH" or "number one FOOZIT" need to be toned down. -2. Make sure competitors aren't messing with each other's docs. This can be hard to tell because we don't know which github handles belong to which companies, but in general, if a destructive or suspicious change is being made to a doc, check on the Prebid Slack channel to confirm that the affected company approves the change. +2. Make sure competitors aren't messing with each other's docs. This can be hard to tell because we don't know which github handles belong to which companies, but in general, if a destructive or suspicious change is being made to a doc, check on the Prebid Slack channel or the original github author to confirm that the affected company approves the change. 3. Make sure the change doesn't break formatting. It's not always necessary to preview locally, but for large changes, it's worthwhile verifying visually because markdown can be cranky. 4. Help the author with basic readability - if you as a reviewer don't understand a sentence, probably others will have trouble too. Push back and ask questions about what they're really trying to say. -5. We don't generally merge a docs PR until the related code is released. Prebid.js releases happen on Weds or Thurs, and people really like to have their docs PRs merged shortly after the code is released. For Prebid Server, it's ok to merge the docs after the code is merged. +5. We don't generally merge a docs PR until the related code is released. Prebid.js releases happen on Weds or Thurs, and people really like to have their docs PRs merged shortly after the code is released. For Prebid Server, it's ok to merge the docs after the code is merged. If they don't link a code PR, you can go search for it or just ask them to provide a link. 6. Fix broken or out-of-date things you run across. At least flag it in the team slack channel so we can fix it someday. 7. Bid Adapter Guidelines - 1. Check the front-matter: required fields are title and either pbjs or pbs. + 1. Check the metadata (aka front-matter): required fields are title and either pbjs or pbs, but in general, the adapter should supply at least half of the available fields. If they don't you should add a "request changes" note like "This document is missing quite a few pieces of adapter metadata. Please fill out the metadata as documented at [https://docs.prebid.org/dev-docs/bidder-adaptor.html#submitting-your-adapter](https://docs.prebid.org/dev-docs/bidder-adaptor.html#submitting-your-adapter)" 2. Every adapter needs a parameters table that contains exactly 5 columns in this order: Name, Scope, Description, Example, Type. 3. Discourage full-page HTML examples. Better to have just the bidder-specific logic and a pointer to a standard Prebid.js example. 4. All headers must be level 3, 4, or 5. + 5. As for the `media_types` metadata, if they don't support display, then the need to define "no-display". This is because the default metadata table in pbs-bidders.md assumes everyone supports display. + 6. If they claim `tcfeu_support: true`, they must also supply a `gvl_id`. You should check on the [TCF vendor list](https://vendor-list.consensu.org/v3/vendor-list.json) that the GVL ID supplied makes sense. If it's an alias they may define the GVL ID like this: `gvl_id: 14 (adkernel)` + 7. Don't let them claim both pbjs and pbs if they don't have both a Prebid.js and Prebid Server adapter. It's ok to have either a PBS-Go or PBS-Java adapter. + 8. They cannot claim `fpd_supported` unless the body of their documentation has a section describing how exactly they support First Party Data. You can reject this with a note like "Sorry - you can't claim FPD support unless the document has a description of what kind of First Party data. See the [http://docs.prebid.org/dev-docs/bidder-adaptor.html#submitting-your-adapter](http://docs.prebid.org/dev-docs/bidder-adaptor.html#submitting-your-adapter). We recommend looking at how other adapters have done this. e.g. you can declare that you support site first party data, user first party data, impression-level data, seller-define audience, etc." + 9. If they claim to be a `prebid_member`, you can check that on the [prebid.org membership page](https://prebid.org/member-directory/) ## Core Technologies @@ -185,7 +187,7 @@ Each menu item is represented in the YML map as a collection of key value pairs The collection with the title property "What Is Prebid?" is a child of the collection directly above it with the sectionName "Overview" **Top Nav Menu Collection Properties** -*Note: A collection does not have to contain all properties. For Bools 1 = true, 0 = false* +_Note: A collection does not have to contain all properties. For Bools 1 = true, 0 = false_ | Key | Type | Example | Use | | ------ | ------ | ------ | ------ | @@ -243,7 +245,7 @@ Each menu item is represented in the YML map as a collection of key value pairs ``` **Side Nav Menu Collection Properties** -*Note: A collection does not have to contain all properties. For bools 1 = true, 0 = false** +_Note: A collection does not have to contain all properties. For bools 1 = true, 0 = false_* | Key | Type | Example | Use | | ----- | ----- | ----- | ----- | @@ -272,6 +274,74 @@ In certain cases, it is helpful to the user to highlight a page in the left navi This has been done for both bidders pages (pages with `layout: bidder`) and the Publisher API Reference (`layout: api_prebidjs` and highlighting Prebid.js > Reference > Publish API Reference in the left nav), but can be extended to other pages as needed. +### Disclosure Includes + +The docs offer a set of predefined disclosures that should be used where appropriate. + +#### Module does fingerprinting + +{% include dev-docs/fingerprinting.md %} + +```liquid +{%raw%}{% include dev-docs/fingerprinting.md %}{%endraw%} +``` + +### Module loads external javascript + +{% include dev-docs/loads-external-javascript.md %} + +```liquid +{%raw%}{% include dev-docs/loads-external-javascript.md %}{%endraw%} +``` + +#### Prebid Server works only with client-side adapter available + +{% include dev-docs/pbjs-adapter-required-for-pbs.md %} + +```liquid +{%raw%}{% include dev-docs/pbjs-adapter-required-for-pbs.md %}{%endraw%} +``` + +#### Example uses build from source + +{% include dev-docs/build-from-source-warning.md %} + +```liquid +{%raw%}{% include dev-docs/build-from-source-warning.md %}{%endraw%} +``` + +#### Example uses not for production assets + +{% include dev-docs/not-for-production-warning.md %} + +```liquid +{%raw%}{% include dev-docs/not-for-production-warning.md %}{%endraw%} +``` + +#### Legal disclosure + +{% include legal-warning.html %} + +```liquid +{%raw%}{% include legal-warning.html %}{%endraw%} +``` + +#### Vendor exception disclosure + +{% include dev-docs/vendor-exception.md %} + +```liquid +{%raw%}{% include dev-docs/vendor-exception.md %}{%endraw%} +``` + +You can also add a `gvlId` parameter if the vendor has in fact an ID. + +{% include dev-docs/vendor-exception.md gvlId="123" %} + +```liquid +{%raw%}{% include dev-docs/vendor-exception.md gvlId="123" %}{%endraw%} +``` + ## Partners TBD @@ -285,6 +355,8 @@ There are 200+ bidder files in the /dev-docs/bidders directory describing the pa The attributes in the Jekyll 'front matter' drive various behaviors and dynamic tables elsewhere on the site. +{: .table .table-bordered .table-striped } + | Key | Required? | Values | Use | | ----- | ------ | ------ | ------ | | layout | yes | bidder | Links this file to the bidder.html layout | diff --git a/guide/pb-guide-alerts.md b/guide/pb-guide-alerts.md index 50f7b5a2fe..321bd5497e 100644 --- a/guide/pb-guide-alerts.md +++ b/guide/pb-guide-alerts.md @@ -134,4 +134,4 @@ For example, if you had content such as "The adpod unit is only available for lo {% include alerts/alert_note.html content="The adpod unit is only available for long-form video." %} -Use the Liquid `capture` command when you are creating an alert that is very long or contains HTML formating. +Use the Liquid `capture` command when you are creating an alert that is very long or contains HTML formatting. diff --git a/identity/sharedid.md b/identity/sharedid.md index cd25557eac..80cab18f7d 100644 --- a/identity/sharedid.md +++ b/identity/sharedid.md @@ -6,11 +6,10 @@ sidebarType: 9 --- # Prebid SharedID - {: .no_toc} - TOC - {:toc} +{:toc} {: .alert.alert-warning :} As of Prebid.js 5.0, PubCommon ID is no longer supported -- it's been merged into SharedId. Also, SharedId no longer syncs to sharedid.org like it did in Prebid.js 4.x. @@ -22,6 +21,7 @@ SharedId is a convenient Prebid-owned first party identifier within the [Prebid There are multiple ways to integrate SharedId on your site. See the table below for a breakout of options, and the rest of this document for detailed integration instructions. {: .table .table-bordered .table-striped } + | Implementation | Description | Cookie Lifetime | Safari Cookie Lifetime | Technical Difficulty | Revenue Benefit | | --- | --- | --- | --- | --- | --- | | 3rd Party Cookie Only | No first party cookie solution. | Some Blocked | Blocked | None | Low | @@ -150,14 +150,14 @@ removed in Prebid.js 5.0. ### Configuration -You can find available configuration options for the SharedID module [here](https://docs.prebid.org/dev-docs/modules/userid-submodules/sharedid.html) +You can find available configuration options for the SharedID module [in the SharedId user ID submodule documentation](https://docs.prebid.org/dev-docs/modules/userid-submodules/sharedid.html) ### Privacy Discussion There are several privacy scenarios in which a user ID is not created or read: 1. The User ID module suppresses all cookie reading and setting activity - when the [GDPR Enforcement Module](/dev-docs/modules/gdprEnforcement.html) is in place and there's no consent for Purpose 1. + when the [TCF Control Module](/dev-docs/modules/tcfControl.html) is in place and there's no consent for Purpose 1. 2. The User ID module infrastructure supports a first-party opt-out, by setting the `_pbjs_id_optout` cookie or local storage to any value. No other cookies will be set if this one is set. 3. The SharedId module will suppress the ID when the COPPA flag is set. @@ -212,13 +212,15 @@ If custom configurations are needed, define the pubcid_options object before inc Below are the available configuration options for the PubCID script. {: .table .table-bordered .table-striped } + | Parameter Name | Type | Description | | Example | | --- | --- | --- | --- | --- | | create | boolean | If true, then an id is created automatically by the script if it's missing. Default is true. If your server has a component that generates the id instead, then this should be set to false | | `true` | | expInterval | decimal | Expiration interval in minutes. Default is 525600, or 1 year | | `525600` | | extend | boolean | If true, the the expiration time is automatically extended whenever the script is executed even if the id exists already. Default is true. If false, then the id expires from the time it was initially created. | For publisher server support only. If true, the publisher's server will create the (pubcid) cookie. Default is true. | `true` | -| pixelUrl | string (optional) | For publisher server support only. Where to call out to for a server cookie. | | `/wp-json/pubcid/v1/extend/` +| pixelUrl | string (optional) | For publisher server support only. Where to call out to for a server cookie. | | `/wp-json/pubcid/v1/extend/` | | type | string | Type of storage. It's possible to specify one of the following: 'html5', 'cookie'. Default is 'html5' priority, aka local storage, and fall back to cookie if local storage is unavailable. | If true, the expiration time of the stored IDs will be refreshed during each page load. Default is false. | `cookie` | +| inserter | string (optional) | Adds this value into the EID object `inserter` field. | | `myPartner` | #### Example Configurations diff --git a/overview/all-videos.md b/overview/all-videos.md index 0f1aace48c..ea808cb303 100644 --- a/overview/all-videos.md +++ b/overview/all-videos.md @@ -19,7 +19,10 @@ Multimedia overviews covering various aspect of Header Bidding and Prebid. 1. [Prebid.js Impression Flow](/prebid/prebidjs-flow-video.html) - A step-by-step walkthrough of a typical Prebid.js auction. 1. [Components of Prebid.js](/prebid/prebidjs-components-video.html) - An explanation of Prebid.js’ components and a guide to using Prebid.js reference documentation. 1. [Prebid.js and The Video Ad Format](/prebid-video/video-overview-video.html) - An introduction to how video works with Prebid.js. +1. [Analytics in Prebid.js](/overview/analytics-video.html) - An introduction for how to utilize reporting with Prebid.js. +1. [Prebid.js timeouts](/features/timeouts-video.html) - An overview of Timeouts in Prebid.js. 1. [Prebid and Ad Operations](/adops/adops-overview-video.html) - An overview of the process of planning a Prebid integration for ad operations. 1. [Floors in Prebid.js and Prebid Server](/dev-docs/floors-video-overview.html) - An overview of the Prebid.js and Prebid Server price floor features. 1. [Prebid Mobile Impression Flow](/prebid-mobile/prebid-mobile-video-flow.html) - A step-by-step walkthrough of a typical Prebid Mobile auction. 1. [Prebid Mobile Planning Guide](/prebid-mobile/prebid-mobile-video-planning.html) - A video guide to planning your first Prebid Mobile integration. +1. [Professor Prebid Browser Extension](/tools/prof-prebid-video.html) - A video overview of the Professor Prebid browser extension. diff --git a/overview/analytics-video.md b/overview/analytics-video.md new file mode 100644 index 0000000000..7f58b62c37 --- /dev/null +++ b/overview/analytics-video.md @@ -0,0 +1,100 @@ +--- +layout: page_v2 +title: Video Intro to Prebid.js Analytics +description: Video Intro to Prebid.js Analytics +sidebarType: 1 +--- + +# Video Intro to Prebid.js Analytics + +How to utilize reporting with Prebid.js. + +{% include vimeo-iframe.html id="957374949" title="957374949" %} + +Further Content: + +- [Prebid.js Events](/dev-docs/publisher-api-reference/getEvents.html) +- [Prebid.js Analytics Solutions](/overview/analytics.html) +- [All videos](/overview/all-videos.html) + +Related Videos: + +- [Prebid.js Impression Flow](/prebid/prebidjs-flow-video.html) + +## Transcript + +This video is an overview for publishers interested in learning about analytics in Prebid.js. We’ll explain why you might want to use analytics for Prebid, how it works, and how to get started. We’ll also share some best practices for maximizing the value of the insights you gather through Prebid analytics. + +This video will focus on how to use analytics with Prebid.js for header bidding on websites. It is possible to work with analytics via Prebid Server for mobile apps and other use cases. +### Why Analytics for Prebid? + +We’ll start off with a discussion of why you might want to use analytics with Prebid.js. + +There are three basic purposes that analytics serves: + +First, analytics allow your business to track basic key performance indicators like revenue, fill rate, and CPMs for your Prebid auctions. These statistics are critical to running any type of advertising-supported media property. + +Second, a powerful analytics solution allows you to fine-tune the settings of your Prebid auctions to maximize performance. In other videos, we’ve touched upon the ways in which you can improve performance by optimizing bidder selection, bidder timeouts, and price floors. Analytics gives you the data you would need to make these optimizations. + +Third, analytics helps you monitor the health of your Prebid installation. Checking analytics regularly with allow you to catch issues with bidders or the Prebid auction itself quickly, minimizing the impact they have on your business. + +### How Analytics Works + +Next, let’s discuss how analytics works at a high level in Prebid.js. + +Prebid.js does not include an analytics feature by default. Instead, it uses a modular, open-source approach that allows publishers to plug in the solution that meets their needs best. + +A Prebid.js analytics solution has two components: an analytics adapter for Prebid.js and an analytics data pipeline. + +The analytics adapter is a Prebid.js module that gathers data about each Prebid auction. Many analytics adapters are open-source and are housed in the Prebid.js repository. + +Prebid.js allows analytics adapters to gather data about many events during the Prebid.js auction process. An 'event' is the coding mechanism by which Prebid.js informs other modules about the Prebid load, bid requests and responses, ad server requests, and much more. + +A full list of events that analytics adapters are able to gather can be found at the link in the description below. + +Besides the analytics adapter, the other major component of an analytics solution is the data pipeline. The pipeline is responsible for receiving notifications about Prebid events from the analytics adapter and for processing and packaging the data for storage in a database that is accessible to reporting interfaces and APIs. + +Prebid.org does not offer data pipeline solutions, and data pipeline technologies aren’t part of Prebid’s open-source repositories. Companies building analytics solutions will usually build an analytics pipeline by connecting together data processing and storage technologies from other open-source communities like Apache. + +For each Prebid.js auction, the analytics adapter gathers the event data and transmits it to the analytics pipeline, which is responsible for processing and aggregating the data. Connected to the data pipeline will be an interface that allows you to view the data in the form of reports or dashboards. + +Any auction that occurs on a website using Prebid.js will rely on the Prebid.js analytics adapter to handle analytics. This includes mixed auctions where some bidders are running client-side and others are running server-side with Prebid Server. + +### Getting Started with Prebid.js Analytics + +Next, you’ll learn how to get your own analytics solution for Prebid.js up and running. + +You can develop your own Prebid Analytics solution or use an analytics product from a company in the Prebid community. + +If you choose to build your own solution, you can write your own analytics adapter or use Prebid’s generic analytics adapter, which is built to be able to gather all the events you need from the Prebid auction and interface with any analytics data pipeline. You’ll also need to develop your own methods in your data pipeline for processing analytics data and storing it somewhere. + +There are also many plug-and-play analytics solutions from companies in the Prebid community. For a list of existing Prebid solutions, check out the analytics adapters page at docs.prebid.org. This link can be found in the notes below. + +When you’re ready to set up analytics, you’ll work with your analytics or server provider to set up a data pipeline and reporting interface on the server side, then you’ll add the analytics adapter to your Prebid.js build and set it up in the configuration. + +The analytics configuration allows you to limit the events that the analytics adapter has access to using an allowlist or blocklist. You can also configure the adapter to report only on a randomized sample of your auctions, which might be helpful for reducing data storage and processing costs. + +You can install multiple analytics solutions for Prebid.js by simply including multiple analytics adapters in your Prebid.js build. Many publishers use multiple solutions for different purposes. For example, you may use one module for everyday reporting, while another powers a dynamic price floor optimization algorithm. + +### Choosing an Analytics Solution + +With these requirements in mind, let’s explore the variables to consider as you select an analytics solution for yourself. You can think of this section as a checklist of points to consider as you choose an analytics partner from the thriving Prebid ecosystem. + +The first thing to consider is the data collected. For instance, the set of events the analytics adapter tracks, how it converts the log-level events into metrics, and the dimensions, such as site or country, that you can use to filter or group the data. The goal is to ensure that the questions you’ll be asking can be answered with the data available to you. + +For example, let’s say you want to optimize your auctions performance by minimizing bidder timeouts. To do so, you’ll need to be able to track bidder timeout rates and, ideally, bidder response times across a variety of pages, geographic locations, and device types. + +The next thing to consider is the time frame over which the analytics will be available. Many publishers need to be able to analyze their current performance compared to a past time period. It’s typical to track performance trends over multiple years, which means that multiple years’ data will need to be stored. Also, keep in mind that many analytics providers will include less detail in older data, so the dimensions and metrics that are available to you for auctions that occurred this week may not be available for auctions that occurred further in the past. + +The third aspect of analytics to consider is data access. What is the process for viewing data and pulling reports like? Some analytics solutions offer robust web applications that allow you to explore the data on your own using customizable dashboards, analytics query builders, alerting, scheduled reports, and API access. Others are more basic and require you to submit a request for data through an account manager. Again, understanding your needs is important. Let’s consider for example a large publisher with multiple business units and stakeholders who each need to be able to see a tailored view of the data. A publisher like this one may want a solution that offers high quality dashboards or emailed scheduled reports. + +The fourth dimension to consider is privacy regulation support. You'll want to work with your lawyers to understand the data rules your company requires in different geographic regions. For instance, some regulations consider IP addresses private information, so the analytics system you choose or build should not store IP addresses in those regions. + +The final variable is cost. Does the provider charge for analytics, how does the pricing work, and, most importantly, how much will analytics cost you each month? Some providers charge a flat fee for their services, while others charge fees that are proportional to the volume of data they need to store. Some providers have one complete product that they offer to all customers, while others offer various packages that include different sets of features and services. + +That’s all for this video on Prebid analytics. Thanks for watching. + +## Related Reading + +- [Intro to Header Bidding](/overview/intro-to-header-bidding.html) +- [All video overviews](/overview/all-videos.html) diff --git a/overview/analytics.md b/overview/analytics.md index a3d683777b..39b940802e 100644 --- a/overview/analytics.md +++ b/overview/analytics.md @@ -9,6 +9,16 @@ sidebarType: 1 There are many analytics adapter plugins available to track header bidding performance for your site. +## Video Overview + +{% include vimeo-iframe.html id="957374949" title="957374949" %} + +Further Content: + +- [Transcript of this video](/overview/analytics-video.html) +- [Prebid.js Events](https://docs.prebid.org/dev-docs/publisher-api-reference/getEvents.html) +- [All videos](/overview/all-videos.html) + ## How to Integrate an Analytics Adapter Each analytics provider has specific instructions for using their system, but these are the general steps: @@ -40,30 +50,112 @@ pbjs.que.push(function() { {% assign analytics_pages = site.pages | where: "layout", "analytics" %} -
        +## Search for analytics adapters + + + + + +
        + +## Full List + +### #-A +
          +{% for page in analytics_pages %} + {% assign firstletter = page.title | slice:0 | downcase %} + {% unless firstletter == "0" or firstletter == "1" or firstletter == "2" or firstletter == "3" or firstletter == "4" or firstletter == "5" or firstletter == "6" or firstletter == "7" or firstletter == "8" or firstletter == "9" or firstletter == "a" %}{% continue %}{% endunless %} +
        • + {{ page.title }} +
        • +{% endfor %} +
        + +### B-C + +
          +{% for page in analytics_pages %} + {% assign firstletter = page.title | slice:0 | downcase %} + {% unless firstletter == "b" or firstletter == "c" %}{% continue %}{% endunless %} +
        • + {{ page.title }} +
        • +{% endfor %} +
        + +### D-G + +
          +{% for page in analytics_pages %} + {% assign firstletter = page.title | slice:0 | downcase %} + {% unless firstletter == "d" or firstletter == "e" or firstletter == "f" or firstletter == "g" %}{% continue %}{% endunless %} +
        • + {{ page.title }} +
        • +{% endfor %} +
        + +### H-L + +
          +{% for page in analytics_pages %} + {% assign firstletter = page.title | slice:0 | downcase %} + {% unless firstletter == "h" or firstletter == "i" or firstletter == "j" or firstletter == "k" or firstletter == "l" %}{% continue %}{% endunless %} +
        • + {{ page.title }} +
        • +{% endfor %} +
        + +### M-O + +
          {% for page in analytics_pages %} -
        • -{{ page.title }} -
        • + {% assign firstletter = page.title | slice:0 | downcase %} + {% unless firstletter == "m" or firstletter == "n" or firstletter == "o" %}{% continue %}{% endunless %} +
        • + {{ page.title }} +
        • {% endfor %}
        -## Analytics Adapter Documentation +### P-R +
          {% for page in analytics_pages %} -
          - -

          {{ page.title }}

          -

          Features

          - -{: .table .table-bordered .table-striped } -| **Module Code** | {{ page.modulecode }} | **Prebid.org Member** | {% if page.prebid_member == true %}yes{% else %}no{% endif %} | -| **GDPR Support** | {% if page.tcfeu_supported == true %}yes{% elsif page.tcfeu_supported == false %}no{% else %}Check with vendor{% endif %} | **USP/CCPA Support** | {% if page.usp_supported == true %}yes{% elsif page.usp_supported == false %}no{% else %}Check with vendor{% endif %} | -| **IAB GVL ID** | {% if page.gvl_id %}{{page.gvl_id}}{% else %}Check with vendor{% endif %} | **COPPA Support** | {% if page.coppa_supported == true %}yes{% elsif page.coppa_supported == false %}no{% else %}Check with vendor{% endif %} | - -{{ page.content }} -
          + {% assign firstletter = page.title | slice:0 | downcase %} + {% unless firstletter == "p" or firstletter == "q" or firstletter == "r" %}{% continue %}{% endunless %} +
        • + {{ page.title }} +
        • {% endfor %} +
        + +### S-T + +
          +{% for page in analytics_pages %} + {% assign firstletter = page.title | slice:0 | downcase %} + {% unless firstletter == "s" or firstletter == "t" %}{% continue %}{% endunless %} +
        • + {{ page.title }} +
        • +{% endfor %} +
        + +### U-Z + +
          +{% for page in analytics_pages %} + {% assign firstletter = page.title | slice:0 | downcase %} + {% unless firstletter == "u" or firstletter == "v" or firstletter == "w" or firstletter == "x" or firstletter == "y" or firstletter == "z" %}{% continue %}{% endunless %} +
        • + {{ page.title }} +
        • +{% endfor %} +
        ## Related Topics diff --git a/overview/glossary.md b/overview/glossary.md index 9045329b89..0a5bbeb6a2 100644 --- a/overview/glossary.md +++ b/overview/glossary.md @@ -150,7 +150,7 @@ A URL provided by a bidder requesting to be notified when their bid did not win ### Notice URL (nurl) -A URL provided by a bidder as an alternate source of the creative. See the [nurl FAQ entry](/faq/prebid-server-faq.html#how-does-the-notice-url-work-for-prebid-server) for Prebid-specfic details. +A URL provided by a bidder as an alternate source of the creative. See the [nurl FAQ entry](/faq/prebid-server-faq.html#how-does-the-notice-url-work-for-prebid-server) for Prebid-specific details. ## Prebid Mobile diff --git a/overview/prebid-universal-creative.md b/overview/prebid-universal-creative.md index 522bd1b2b7..9a1c5c8e7f 100644 --- a/overview/prebid-universal-creative.md +++ b/overview/prebid-universal-creative.md @@ -24,28 +24,32 @@ when a Prebid ad has won the auction. There are a number of use cases: {: .table .table-bordered .table-striped } | Use Case | PUC file | Alternate Approach | | --- | --- | --- | -| web banner: iframe | banner.js (or creative.js) | [Dynamic creatives](#alt-dyn), [Banner and Outstream Video iframes](#alt-iframes) | -| web banner: safeframe | banner.js (or creative.js) | [Dynamic creatives](#alt-dyn), [Banner Safeframes](#alt-safeframes) | -| web outstream video: iframe | video.js (or creative.js) | [Dynamic creatives](#alt-dyn), [Banner and Outstream Video iframes](#alt-iframes) | -| web outstream video: safeframe | n/a | Outstream renderers each choose where to render differently, but none writes to the safeframe. | -| AMP banner: always safeframe | amp.js (or creative.js) | n/a | +| Web Banner: iframe | banner.js (or creative.js) | [Dynamic creatives](#alt-dyn), [Banner and In-Renderer Video iframes](#alt-iframes) | +| Web Banner: safeframe | banner.js (or creative.js) | [Dynamic creatives](#alt-dyn), [Banner Safeframes](#alt-safeframes) | +| Web In-Renderer Video: iframe | video.js (or creative.js) | [Dynamic creatives](#alt-dyn), [Banner and In-Renderer Video iframes](#alt-iframes) | +| Web In-Renderer Video: safeframe | n/a | Renderers each choose where to render differently, but none writes to the safeframe. | +| AMP Banner: always safeframe | amp.js (or creative.js) | n/a | | native: iframe | native.js (or native-render.js) | [Dynamic creatives](#alt-dyn) | | native: safeframe | native.js (or native-render.js) | [Dynamic creatives](#alt-dyn) | Note that as of PUC v1.15, the recommended way of loading the creative -in the ad server involves using the `hb_format` ad server key-value. Before 1.15, the ad server needed to load creative.js which covered banner and outstream video, or native-render.js for native. 1.15 simplifies this +in the ad server involves using the `hb_format` ad server key-value. Before 1.15, the ad server needed to load creative.js which covered banner and in-renderer video, or native-render.js for native. 1.15 simplifies this by allowing the ad server creative to load banner.js, video.js, or native.js, which can be done programmatically using ad server macros. e.g. +Since version 10.11.0, Prebid.js populates the `hb_ver` ad server key-value which is recommended for selecting a specific PUC version. + ```html - + ``` This loads the PUC from the Prebid-maintained location. Your managed service provider may have a different location. +To see specific examples of how to use the PUC within your ad server, see the guides for [GAM](/adops/gam-creative-banner-sbs.html), [Microsoft](/adops/setting-up-prebid-with-the-appnexus-ad-server.html), or [other ad servers](/adops/adops-general-sbs.html). + ## Features of the PUC -### What the PUC does for Web iframe Banners/Outstream +### What the PUC does for Web iframe Banners/In-Renderer 1. Simply calls the Prebid.js renderAd function @@ -60,7 +64,7 @@ service provider may have a different location. 1. Retrieves the body of the creative from Prebid Cache based on the UUID 1. If the 'burl' parameter is present, creates a tracking pixel. Includes special support for triggering the viewable billing url for mobile MRAID creatives. 1. If the 'nurl' parameter is present, creates the appropriate HTML to fire the notice URL. -1. If the 'wurl' parameter is present, creates a tracking pixel. This is needed for [Programmatic Guaranteed](/prebid-server/features/pg/pbs-pg-idx.html) support. +1. If the Prebid Server 'wurl' (win URL) parameter is present, creates a tracking pixel. 1. Resolves any `${AUCTION_PRICE}` macro in the creative body. ### What the PUC does for Native @@ -87,9 +91,9 @@ by using [Prebid.js dynamic creatives](/adops/js-dynamic-creative.html). -### Alternate methods for Banner and Outstream Video iframes +### Alternate methods for Banner and In-Renderer Video iframes -If you only ever need to display non-safeframed banner and outstream-video creatives, there are several ways to replace the `jsdelivr` call in your ad server creative: +If you only ever need to display non-safeframed banner and in-renderer-video creatives, there are several ways to replace the `jsdelivr` call in your ad server creative: 1. Copy the contents of `https://cdn.jsdelivr.net/npm/prebid-universal-creative@latest/dist/creative.js` into each creative. 1. Directly call the Prebid.js `renderAd` function: diff --git a/overview/statement-on-sustainability.md b/overview/statement-on-sustainability.md new file mode 100644 index 0000000000..6a621159f2 --- /dev/null +++ b/overview/statement-on-sustainability.md @@ -0,0 +1,36 @@ +--- +layout: page_v2 +title: Prebid Statement on Sustainability +description: Prebid Statement on Sustainability +sidebarType: 0 +--- + +# Prebid Statement on Sustainability + +Digital advertising plays a vital role in the modern economy, connecting businesses with audiences worldwide. However, this connection comes with an environmental cost - from the energy consumed by ad servers to the computational resources required for real-time bidding. As our industry continues to grow, so does our responsibility to address its environmental impact. + +Sustainability in advertising technology isn't just about reducing carbon emissions - it's about creating more efficient systems that benefit both the environment and business operations. This involves examining everything from how we handle bid requests to how we optimize our server infrastructure. While the challenges are complex, they also present opportunities for innovation and collaboration across the digital advertising ecosystem. + +## No Standard Currently + +In the absence of standardized sustainability metrics and protocols, conducting transactions through OpenRTB and similar programmatic systems presents significant challenges. The decentralized nature of programmatic advertising, where multiple parties interact through complex bid streams, makes it particularly difficult to track, measure, and optimize for environmental impact. Currently, there exists no industry standard definition of sustainability. + +This lack of standards means each participant in the supply chain - from publishers to SSPs, DSPs, and advertisers - defines and measures sustainability differently. This fragmentation creates obstacles when attempting to make informed decisions about sustainable advertising practices. For instance, one platform might focus on reducing server calls, while another prioritizes energy-efficient data centers, making it challenging to compare and evaluate partners effectively. + +## The Industry Will Evolve + +The current OpenRTB specification, while robust for traditional trading parameters, lacks standardized fields or mechanisms for communicating sustainability-related information between parties. This absence of common sustainability signals means that even environmentally conscious organizations struggle to automate and scale their green advertising initiatives within existing programmatic frameworks. + +As the digital advertising industry evolves toward more transparent and eco-friendly practices, we expect buying platforms to adopt various methodologies that will continue to evolve. In this context, Prebid.org is positioned to play an essential role in supporting the ecosystem's transition to more sustainable practices. Initially, our focus is on providing comprehensive documentation and guidance to help organizations navigate and implement emerging sustainability approaches. + +## Prebid Will Evolve Too + +This educational and supportive role will naturally evolve as industry standards take shape. When concrete sustainability standards emerge, Prebid.org will expand its involvement to include developing and maintaining specific technical implementations, adapting its open-source solutions to support standardized sustainability measures across the programmatic landscape. + +To begin this journey, we're proud to introduce the Prebid.org [Sustainability Portal](/support/sustainability-portal.html). This resource serves as a crucial first step - a central hub where members of the advertising ecosystem can access information about configuration best practices, monitoring approaches, and optimization techniques. The portal is designed to help organizations start taking meaningful action today while preparing for the standardized sustainability frameworks of tomorrow. + +The Sustainability Portal represents our commitment to supporting the ecosystem's environmental initiatives, providing practical guidance that organizations can implement now, while remaining flexible enough to adapt as industry standards develop and mature. + +## Related Reading + +- [Prebid Sustainability Portal](/support/sustainability-portal.html) diff --git a/policies/privacy.md b/policies/privacy.md index 28ea7c1c71..07a9993f65 100644 --- a/policies/privacy.md +++ b/policies/privacy.md @@ -117,7 +117,7 @@ In addition, if you are a resident of the European Economic Area, you have the f * You may object to processing of your personal information, ask us to restrict processing of your personal information or request portability or correction of your personal information. Again, you can exercise these rights by contacting us using the contact details provided under the ["How to contact us"](#contact) heading below. * If we have collected and processed your personal information with your consent, then you can withdraw your consent at any time. Withdrawing your consent will not affect the lawfulness of any processing we conducted prior to your withdrawal, nor will it affect processing of your personal information conducted in reliance on lawful processing grounds other than consent. -* You have the right to complain to a data protection authority about our collection and use of your personal information. For more information, please contact your local data protection authority. Contact details for data protection authorities in the European Economic Area are available [here](https://ec.europa.eu/justice/data-protection/article-29/structure/data-protection-authorities/index_en.htm). +* You have the right to complain to a data protection authority about our collection and use of your personal information. For more information, please contact your local data protection authority. Contact details for data protection authorities in the European Economic Area are available on [the EU data protection authorities website](https://ec.europa.eu/justice/data-protection/article-29/structure/data-protection-authorities/index_en.htm). Everyone has the right to opt-out of marketing communications we send you at any time. You can exercise this right by clicking on the "unsubscribe" or diff --git a/prebid-mobile/docs/Prebid_Mobile_3_0_0.pdf b/prebid-mobile/docs/Prebid_Mobile_3_0_0.pdf index a476e0faa8..a584c2cf86 100644 Binary files a/prebid-mobile/docs/Prebid_Mobile_3_0_0.pdf and b/prebid-mobile/docs/Prebid_Mobile_3_0_0.pdf differ diff --git a/prebid-mobile/modules/rendering/android-sdk-integration-admob.md b/prebid-mobile/modules/rendering/android-sdk-integration-admob.md index 6730e44c5e..03d84b06d3 100644 --- a/prebid-mobile/modules/rendering/android-sdk-integration-admob.md +++ b/prebid-mobile/modules/rendering/android-sdk-integration-admob.md @@ -1,38 +1,21 @@ --- layout: page_v2 -title: Prebid Mobile Rendering GAM Line Item Setup -description: Prebid Mobile Rendering Modules GAM line item setup +title: Integrating Prebid SDK Android with AdMob +description: Integrating Prebid SDK Android with AdMob sidebarType: 2 --- -# AdMob Integration - +# Prebid SDK Android with AdMob Integration Method {:.no_toc} -The integration of Prebid Mobile with Google AdMob assumes that the publisher has an AdMob account and has already integrated the Google Mobile Ads SDK (GMA SDK) into the app. - -See the [Google's integration documentation](https://developers.google.com/admob/android/quick-start) for the AdMob integration details. - -Prebid is integrated into the AdMob monetization via adapters. - -* TOC +- TOC {:toc} -## AdMob Integration Overview - -![Rendering with GAM as the Primary Ad Server](/assets/images/prebid-mobile/modules/rendering/prebid-in-app-bidding-overview-admob.png) +{% include mobile/intro-admob.md platform="android" %} -**Steps 1-2** Prebid SDK makes a bid request. Prebid server runs an auction and returns the winning bid. - -**Step 3** GMA SDK makes an ad request. AdMob returns the mediation chain with respective ad sources. - -**Step 4** For each prebid's ad source, the GMA SDK sequentially instantiates an adapter. - -**Step 5** The adapter verifies the targeting keywords of the winning bid and the server properties of the given ad source. If they match the adapter will render the winning bid. Otherwise, it will immediately fail with a "no ad" error and the next ad source will instantiate the same adapter but for another set of server params. - -## Integrate Prebid Adapters +## Setup To integrate Prebid Adapters for AdMob just add the following lines into your build.gradle files: @@ -54,7 +37,9 @@ App module build.gradle: implementation('org.prebid:prebid-mobile-sdk-admob-adapters:x.x.x') ``` -## Banner API +## Adunit Specific Instructions + +### Banners Integration example: @@ -92,37 +77,32 @@ adUnit?.fetchDemand { result -> } ``` -### Step 1: Create AdView and AdRequest - +#### Step 1: Create AdView and AdRequest {:.no_toc} This step is the same as for the original [AdMob integration](https://developers.google.com/admob/android/banner). You don't have to make any modifications here. -### Step 2: Create AdMobMediationBannerUtils - +#### Step 2: Create AdMobMediationBannerUtils {:.no_toc} -The `AdMobBannerMediationUtils` is a helper class, which performs certain utilty work for the `MediationBannerAdUnit`, like passing the targeting keywords to the adapters and checking the visibility of the ad view. - -### Step 3: Create MediationBannerAdUnit +The `AdMobBannerMediationUtils` is a helper class, which performs certain utility work for the `MediationBannerAdUnit`, like passing the targeting keywords to the adapters and checking the visibility of the ad view. +#### Step 3: Create MediationBannerAdUnit {:.no_toc} The `MediationBannerAdUnit` is part of the prebid mediation API. This class is responsible for making the bid request and providing the winning bid and targeting keywords to the mediating SDKs. -### Step 4: Make a bid request - +#### Step 4: Make a bid request {:.no_toc} The `fetchDemand` method makes a bid request to the prebid server and provides a result in a completion handler. -### Step 5: Make an Ad Request - +#### Step 5: Make an Ad Request {:.no_toc} Now you should just make a regular AdMob's ad request. Everything else will be handled by GMA SDK and prebid adapters. -## Interstitial API +### Interstitials Integration example: @@ -165,25 +145,22 @@ adUnit?.fetchDemand { result -> } ``` -### Step 1: Create AdRequest - +#### Step 1: Create AdRequest {:.no_toc} This step is the same as for original [AdMob integration](https://developers.google.com/admob/android/interstitial). You don't have to make any modifications here. -### Step 2: Create AdMobInterstitialMediationUtils - +#### Step 2: Create AdMobInterstitialMediationUtils {:.no_toc} -The `AdMobInterstitialMediationUtils` is a helper class, which performs certain utilty work for the `MediationInterstitialAdUnit`, like passing the targeting keywords to adapters. - -### Step 3: Create MediationInterstitialAdUnit +The `AdMobInterstitialMediationUtils` is a helper class, which performs certain utility work for the `MediationInterstitialAdUnit`, like passing the targeting keywords to adapters. +#### Step 3: Create MediationInterstitialAdUnit {:.no_toc} The `MediationInterstitialAdUnit` is part of the prebid mediation API. This class is responsible for making a bid request and providing the winning bid and targeting keywords to mediating SDKs. -The **default** ad format for interstitial is **DISPLAY**. In order to make a `multiformat bid request`, set the respective values into the `adUnitFormats` parameter. +In order to make a `multiformat bid request`, set the respective values into the `adUnitFormats` parameter. ```kotlin adUnit = MediationInterstitialAdUnit( @@ -194,27 +171,26 @@ adUnit = MediationInterstitialAdUnit( ) ``` -### Step 4: Make a bid request - +#### Step 4: Make a bid request {:.no_toc} The `fetchDemand` method makes a bid request to the prebid server and provides a result in a completion handler. -### Step 5: Make an ad request - +#### Step 5: Make an ad request {:.no_toc} Now you should just make a regular AdMob's ad request. Evetything else will be handled by GMA SDK and prebid adapters. -### Step 6: Display an ad - +#### Step 6: Display an ad {:.no_toc} Once you receive the ad it will be ready for display. You can show interstitial right in the listener or later according to the app logic. -## Rewarded API +### Rewarded -Integration example: +{% include mobile/rewarded-server-side-configuration.md %} + +#### Integration example ```kotlin // 1. Create AsRequest @@ -256,43 +232,37 @@ adUnit?.fetchDemand { result -> } ``` -### Step 1: Create AdRequest - +##### Step 1: Create AdRequest {:.no_toc} This step is the same as for the original [AdMob integration](https://developers.google.com/admob/android/rewarded). You don't have to make any modifications here. -### Step 2: Create AdMobRewardedMediationUtils - +##### Step 2: Create AdMobRewardedMediationUtils {:.no_toc} -The `AdMobRewardedMediationUtils` is a helper class, which performs certain utilty work for the `MediationInterstitialAdUnit`, like passing the targeting keywords to adapters. - -### Step 3: Create MediationRewardedVideoAdUnit +The `AdMobRewardedMediationUtils` is a helper class, which performs certain utility work for the `MediationInterstitialAdUnit`, like passing the targeting keywords to adapters. +##### Step 3: Create MediationRewardedVideoAdUnit {:.no_toc} The `MediationRewardedVideoAdUnit` is part of the prebid mediation API. This class is responsible for making bid request and managing the winning bid. -### Step 4: Make a bid request - +##### Step 4: Make a bid request {:.no_toc} The `fetchDemand` method makes a bid request to the prebid server and provides a result in a completion handler. -### Step 5: Make an ad request - +##### Step 5: Make an ad request {:.no_toc} Now you should just make a regular AdMob's ad request. Evetything else will be handled by GMA SDK and prebid adapters. -### Step 6: Display an ad - +##### Step 6: Display an ad {:.no_toc} Once you receive the ad it will be ready for display. You can show interstitial right in the listener or later according to the app logic. -## Native API +### Native Integration example: @@ -337,20 +307,17 @@ nativeAdUnit.fetchDemand(extras) { resultCode -> } ``` -### Step 1: Create AdRequest - +#### Step 1: Create AdRequest {:.no_toc} Prepare the `AdLoader` and `AdRequest` objects before you make the bid request. They are needed for prebid mediation utils. Follow the [AdMob integration instructions](https://developers.google.com/admob/android/native/start) for this step. -### Step 2: Create NativeAdUnit - +#### Step 2: Create NativeAdUnit {:.no_toc} -The `NativeAdUnit` is responsible for making bid requests. Once the bid responce is received you can load an ad from AdMob. - -### Step 3: Configure NativeAdUnit +The `NativeAdUnit` is responsible for making bid requests. Once the bid response is received you can load an ad from AdMob. +#### Step 3: Configure NativeAdUnit {:.no_toc} The bid request for native ad should have a description of expected assets. The full spec for the Native template can be found in the [Native Ad Specification from IAB](https://www.iab.com/wp-content/uploads/2018/03/OpenRTB-Native-Ads-Specification-Final-1.2.pdf). @@ -371,17 +338,13 @@ private fun configureNativeAdUnit(nativeAdUnit: NativeAdUnit) { title.isRequired = true nativeAdUnit.addAsset(title) - val icon = NativeImageAsset() + val icon = NativeImageAsset(20, 20, 20, 20) icon.imageType = NativeImageAsset.IMAGE_TYPE.ICON - icon.wMin = 20 - icon.hMin = 20 icon.isRequired = true nativeAdUnit.addAsset(icon) - val image = NativeImageAsset() + val image = NativeImageAsset(200, 200, 200, 200) image.imageType = NativeImageAsset.IMAGE_TYPE.MAIN - image.hMin = 200 - image.wMin = 200 image.isRequired = true nativeAdUnit.addAsset(image) @@ -414,14 +377,22 @@ private fun configureNativeAdUnit(nativeAdUnit: NativeAdUnit) { } ``` -### Step 4: Make a bid request - +#### Step 4: Make a bid request {:.no_toc} The `fetchDemand` method makes a bid request to the prebid server and provides a result in a completion handler. -### Step 5: make an ad request - +#### Step 5: make an ad request {:.no_toc} Now load an native ad from AdMob according to the [AdMob instructions](https://developers.google.com/admob/android/native/start). Everything else will be handled by GMA SDK and prebid adapters. + +## Additional Ad Unit Configuration + +{% include mobile/rendering-adunit-config-android.md %} + +## Further Reading + +- [Prebid Mobile Overview](/prebid-mobile/prebid-mobile.html) +- [Prebid SDK Android Integration](/prebid-mobile/pbm-api/android/code-integration-android.html) +- [Prebid SDK Android Global Parameters](/prebid-mobile/pbm-api/android/pbm-targeting-android.html) diff --git a/prebid-mobile/modules/rendering/android-sdk-integration-gam-native.md b/prebid-mobile/modules/rendering/android-sdk-integration-gam-native.md index 2211345625..091c282435 100644 --- a/prebid-mobile/modules/rendering/android-sdk-integration-gam-native.md +++ b/prebid-mobile/modules/rendering/android-sdk-integration-gam-native.md @@ -157,7 +157,7 @@ private fun createNativeAdConfiguration(): NativeAdConfiguration { } ``` -See more NativeAdConfiguration options [here](rendering-native-ad-configuration.html). +See more NativeAdConfiguration options in the [NativeAdConfiguration guide](rendering-native-ad-configuration.html). ### Step 4: Load the Ad diff --git a/prebid-mobile/modules/rendering/android-sdk-integration-gam.md b/prebid-mobile/modules/rendering/android-sdk-integration-gam.md index 2093dbbc11..b676bc9725 100644 --- a/prebid-mobile/modules/rendering/android-sdk-integration-gam.md +++ b/prebid-mobile/modules/rendering/android-sdk-integration-gam.md @@ -7,41 +7,25 @@ sidebarType: 2 --- -# Google Ad Manager Integration +# Prebid SDK Android with the GAM Prebid-Rendered Integration Method {:.no_toc} -The integration of Prebid Rendering API with Google Ad Manager (GAM) assumes that the publisher has an account on GAM and has already integrated the Google Mobile Ads SDK (GMA SDK) into the app project. - - -If you do not have the GAM SDK in the app yet, refer to the [Google Integration Documentation](https://developers.google.com/ad-manager/mobile-ads-sdk/android/quick-start). - -* TOC +- TOC {:toc} -## GAM Integration Overview - -![Rendering with GAM as the Primary Ad Server](/assets/images/prebid-mobile/modules/rendering/Prebid-In-App-Bidding-Overview-GAM.png) - -**Steps 1-2** Prebid SDK makes a bid request. Prebid Server runs an auction and returns the winning bid. - -**Step 3** The Prebid Rendering Module, through the GAM Event Handler, sets up the targeting keywords into the GAM's ad unit. - -**Step 4** The GMA SDK makes an ad request. GAM returns the winning line item. +{% include mobile/intro-prebid-rendered.md platform="android" %} -**Step 5** Based on the ad response, Prebid GAM Event Handler defines which line item has won in GAM - Prebid's or another ad source. +## Event Handlers -**Step 6** The winner is displayed in the app with the respective rendering engine. - +First, a little bit of setup is needed. -## Integrate Event Handlers +### Integrate Event Handlers -Prebid SDK provides rendering integration into GAM setup via [app events ](https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#app_events) mechanism. To integrate Prebid Event Handlers into your app, add the following line to your Podfile: - -GAM Event Handlers is a set of classes that wrap the GAM Ad Units and manage them respectively to the In-App Bidding flow. These classes are provided in the form of library that could be added to the app via Gradle: +The Prebid SDK supples a set of classes called the 'GAM Event Handlers' that wrap the GAM Ad Units and manage them in the In-App Bidding flow. These classes are provided in the form of library that could be added to the app via Gradle: Root build.gradle -``` +```text allprojects { repositories { ... @@ -53,14 +37,19 @@ allprojects { App module build.gradle: -``` +```text implementation('org.prebid:prebid-mobile-sdk-gam-event-handlers:x.x.x') ``` -## Banner API +## AdUnit-Specific instructions -To integrate the banner ad you need to implement three easy steps: +This section covers integration details for different ad formats. In each scenario, you'll be asked for a `configId` - this is a key worked out with your Prebid Server provider. It's used at runtime to pull in the bidders and parameters specific to this adunit. Depending on your Prebid Server partner, it may be a UUID or constructed out of parts like an account number and adunit name. +### Banners + +#### Display Banners + +To integrate the banner ad you need to implement three easy steps: ```kotlin // 1. Create a banner custom event handler for GAM ad server. @@ -83,16 +72,16 @@ Pay attention that the `loadAd()` should be called on the main thread. {% endcapture %} {% include /alerts/alert_warning.html content=warning_note %} -#### Step 1: Create Event Handler +##### Step 1: Create Event Handler {:.no_toc} -GAM's event handlers are special containers that wrap GAM Ad Views and help to manage collaboration between GAM and Prebid views. +Prebid SDK's GAM event handlers are special containers that wrap GAM Ad Views and help to manage collaboration between GAM and Prebid views. **Important:** you should create and use a unique event handler for each ad view. To create the event handler you should provide a GAM Ad Unit Id and the list of available sizes for this ad unit. -#### Step 2: Create Ad View +##### Step 2: Create Ad View {:.no_toc} **BannerView** - is the view that will display a particular ad. It should be added to the UI. To create it you should provide: @@ -104,40 +93,39 @@ Also, you should add the instance of `BannerView` to the UI. And assign the listeners for processing ad events. -#### Step 3: Load the Ad +##### Step 3: Load the Ad {:.no_toc} Call the `loadAd()` method to make a bid request. -### Outstream Video +#### Non-Instream Video {:.no_toc} -For **Outstream Video** you also need to specify video placement type of the expected ad: +For **Non-Instream Video** you also need to specify video placement type of the expected ad: ```kotlin bannerView.videoPlacementType = PlacementType.IN_BANNER // or any other available type ``` -### Migration from the original API -{:.no_toc} +#### Migrating banners from a Bidding-Only integration GAM setup: + 1. Leave the original order and ad units as is. They are not relevant for the rendering approach but they will serve ads for released applications. 2. Create new GAM ad unit. 3. Setup new [GAM Order](/adops/mobile-rendering-gam-line-item-setup.html) for rendering approach. Integration: -1. Replace the `AdManagerAdView` with `BannerView` in the UI. -3. Implement the interface `BannerViewListener`. -4. Remove both `AdManagerAdView` and `AdManagerAdRequest` and implement an`AdListener`. -5. Remove the original `BannerAdUnit`. -6. Follow the instructions to integrate [Banner API](#banner-api). - -## Interstitial API +1. Replace the `AdManagerAdView` with `BannerView` in the UI. +2. Implement the interface `BannerViewListener`. +3. Remove both `AdManagerAdView` and `AdManagerAdRequest` and implement an`AdListener`. +4. Remove the original `BannerAdUnit`. +5. Follow the instructions to integrate [Banner API](#banners). -To integrate interstitial ad follow these steps: +### Interstitials +To integrate an interstitial ad follow these steps: ```kotlin // 1. Create an interstitial custom event handler for GAM ad server. @@ -163,9 +151,9 @@ Pay attention that the `loadAd()` should be called on the main thread. {% endcapture %} {% include /alerts/alert_warning.html content=warning_note %} -The **default** ad format for an interstitial ad is **DISPLAY**. In order to make a `multiformat bid request`, set the respective values into the `adUnitFormats` parameter. +In order to make a `multiformat bid request`, set the respective values into the `adUnitFormats` parameter. -``` +```kotlin interstitialAdUnit = InterstitialAdUnit( requireContext(), configId, @@ -173,7 +161,6 @@ interstitialAdUnit = InterstitialAdUnit( eventHandler) ``` - #### Step 1: Create Event Handler {:.no_toc} @@ -201,7 +188,6 @@ Also, you can assign the listeners for processing ad events. Call the `loadAd()` method make a bid request. The ad unit will load an ad and will wait for explicit instructions to display the Interstitial Ad. - #### Step 4: Show the Ad when it is ready {:.no_toc} @@ -213,26 +199,29 @@ override fun onAdLoaded(interstitialAdUnit: InterstitialAdUnit) { } ``` -### Migration from the original API -{:.no_toc} +#### Migrating interstitials from a Bidding-Only integration GAM setup: + 1. Leave the original order and ad units as is. They are not relevant for the rendering approach but they will serve ads for released applications. 2. Create a new GAM ad unit. -3. Setup a new [GAM Order](rendering-gam-line-item-setup.html) for rendering approach. +3. Setup a new [GAM Order](/adops/mobile-rendering-gam-line-item-setup.html) for rendering approach. Integration: + 1. Replace the `AdManagerInterstitialAd` with `InterstitialRenderingAdUnit`. -3. Implement the interface for `InterstitialEventListener`. -4. Remove both `AdManagerInterstitialAd` and `AdManagerAdRequest`. -5. Remove the original `InterstitialAdUnit`. -6. Follow the instructions to integrate [Interstitial API](#interstitial-api). +2. Implement the interface for `InterstitialEventListener`. +3. Remove both `AdManagerInterstitialAd` and `AdManagerAdRequest`. +4. Remove the original `InterstitialAdUnit`. +5. Follow the instructions to integrate [Interstitial API](#interstitials). +### Rewarded -## Rewarded API +{% include mobile/rewarded-server-side-configuration.md %} -To display a Rewarded Ad follow these steps: +#### Integration example +Displaying the **Rewarded Ad** is the same as displaying an Interstitial Ad, but it adds ability to handle reward. To display a Rewarded Ad follow these steps: ```kotlin // 1. Create a rewarded custom event handler for GAM ad server. @@ -258,22 +247,7 @@ Pay attention that the `loadAd()` should be called on the main thread. {% endcapture %} {% include /alerts/alert_warning.html content=warning_note %} -Displaying the **Rewarded Ad** is the same as displaying an Interstitial Ad. The type of ad can be customized to: - - -Be notified when user earns a reward - implement `RewardedAdUnitListener` interface: - -```kotlin - fun onUserEarnedReward(rewardedAdUnit: RewardedAdUnit) -``` - -When the actual reward object is stored in the `RewardedAdUnit`: - -```kotlin -val reward = rewardedAdUnit.getUserReward() -``` - -#### Step 1: Create Event Handler +##### Step 1: Create Event Handler {:.no_toc} GAM's event handlers are special containers that wrap the GAM Ad Views and help to manage collaboration between GAM and Prebid views. @@ -282,7 +256,7 @@ GAM's event handlers are special containers that wrap the GAM Ad Views and help To create an event handler you should provide a GAM Ad Unit. -#### Step 2: Create Rewarded Ad Unit +##### Step 2: Create Rewarded Ad Unit {:.no_toc} **RewardedAdUnit** - is an object that will load and display the particular ad. To create it you should provide @@ -292,12 +266,12 @@ To create an event handler you should provide a GAM Ad Unit. You can also assign the listener for processing ad events. -#### Step 3: Load the Ad +##### Step 3: Load the Ad {:.no_toc} Call the `loadAd()` method to make a bid request. The ad unit will load an ad and will wait for explicit instructions to display the Rewarded Ad. -#### Step 4: Display the Ad when it is ready +##### Step 4: Display the Ad when it is ready {:.no_toc} The most convenient way to determine if the ad is ready for displaying is to listen for the listener method: @@ -308,16 +282,44 @@ override fun onAdLoaded(rewardedAdUnit: RewardedAdUnit) { } ``` -### Migration from the original API +##### Step 5: Handle a reward +{:.no_toc} + +Handle earning the reward in the appropriate method. Important: a reward can be null. + +```kotlin +override fun onUserEarnedReward(rewardedAdUnit: RewardedAdUnit?, reward: Reward?) { + if (reward != null) { + val rewardType = reward.type + val rewardCount = reward.count + val rewardExt = reward.ext + // Process the reward + } +} +``` + +#### Migrating rewarded video from a Bidding-Only integration {:.no_toc} GAM setup: + 1. Leave the original order and ad units as is. They are not relevant for the rendering approach but they will serve ads for released applications. 2. Create a new GAM ad unit. -3. Setup a new [GAM Order](rendering-gam-line-item-setup.html) for rendering approach. +3. Setup a new [GAM Order](/adops/mobile-rendering-gam-line-item-setup.html) for rendering approach. Integration: -1. Replace the `RewardedAd` with `RewardedAdUnit`. + +1. Replace the `RewardedAd` with `RewardedAdUnit`. 2. Implement the interface for `RewardedAdUnitListener`. 3. Remove the original `RewardedVideoAdUnit`. -4. Follow the instructions to integrate [Rewarded API](#rewarded-api). +4. Follow the instructions to integrate [Rewarded API](#rewarded). + +## Additional Ad Unit Configuration + +{% include mobile/rendering-adunit-config-android.md %} + +## Further Reading + +- [Prebid Mobile Overview](/prebid-mobile/prebid-mobile.html) +- [Prebid SDK Android Integration](/prebid-mobile/pbm-api/android/code-integration-android.html) +- [Prebid SDK Android Global Parameters](/prebid-mobile/pbm-api/android/pbm-targeting-android.html) diff --git a/prebid-mobile/modules/rendering/android-sdk-integration-max.md b/prebid-mobile/modules/rendering/android-sdk-integration-max.md index 1da49c21df..8c2c5c7724 100644 --- a/prebid-mobile/modules/rendering/android-sdk-integration-max.md +++ b/prebid-mobile/modules/rendering/android-sdk-integration-max.md @@ -1,40 +1,25 @@ --- layout: page_v2 -title: AppLovin MAX Integration -description: Integration of Prebid Rendering module whith AppLovin MAX +title: Integrating Prebid SDK Android with AppLovin MAX +description: Integrating Prebid SDK Android with AppLovin MAX sidebarType: 2 --- -# AppLovin MAX Integration +# Prebid SDK Android with AppLovin MAX Integration Method {:.no_toc} -The integration of Prebid Mobile with AppLovin MAX assumes that publisher has MAX account and has already integrated the AppLovin MAX SDK into the app. - -See the [AppLovin MAX Documentation](https://dash.applovin.com/documentation/mediation/android/getting-started/integration) for the MAX integration details. - -* TOC +- TOC {:toc} -## MAX Integration Overview - -![Rendering with MAX](/assets/images/prebid-mobile/modules/rendering/prebid-in-app-bidding-overview-max.png) - -**Steps 1-2** Prebid SDK makes a bid request. Prebid server runs an auction and returns the winning bid. +{% include mobile/intro-applovin.md platform="android" %} -**Step 3** MAX SDK makes an ad request. MAX returns the waterfall with respective placements. - -**Step 4** For each prebid's placement, the MAX SDK sequentially instantiates an adapter. - -**Step 5** The adapter verifies the targeting keywords of the winning bid and the custom properties of the given placement. If they match the adapter will render the winning bid. Otherwise, adpater will fail with "no ad" immediately and the next placement will instantiate the same adapter but for another custom properties. - - -## Integrate Prebid Adapters +## Setup Prebid SDK is integrated into AppLovin MAX setup via custom adapters. To integrate Prebid Adapters into your app, add the following lines into your build.gradle files: Root build.gradle -``` +```json allprojects { repositories { ... @@ -46,11 +31,13 @@ allprojects { App module build.gradle: -``` +```kotlin implementation('org.prebid:prebid-mobile-sdk-max-adapters:x.x.x') ``` -## Banner API +## Adunit Specific Instructions + +### Banners Integration example: @@ -84,11 +71,10 @@ adUnit?.fetchDemand { This step is totally the same as for original [MAX integration](https://dash.applovin.com/documentation/mediation/android/getting-started/banners#loading-and-showing-banners-programmatically). You don't have to make any modifications here. - #### Step 2: Create MaxMediationBannerUtils {:.no_toc} -The `MaxMediationBannerUtils` is a helper class, which performs certain utilty work for the `MediationBannerAdUnit`, like passing the targeting keywords to the adapters and checking the visibility of the ad view. +The `MaxMediationBannerUtils` is a helper class, which performs certain utility work for the `MediationBannerAdUnit`, like passing the targeting keywords to the adapters and checking the visibility of the ad view. #### Step 3: Create MediationBannerAdUnit {:.no_toc} @@ -105,7 +91,7 @@ The `fetchDemand` method makes a bid request to prebid server and provides a res Now you should make a regular MAX's ad request. Everything else will be handled by prebid adapters. -## Interstitial API +### Interstitials Integration example: @@ -134,9 +120,9 @@ adUnit?.fetchDemand { ``` -The **default** ad format for interstitial is **DISPLAY**. In order to make a `multiformat bid request`, set the respective values into the `adUnitFormats` parameter. +In order to make a `multiformat bid request`, set the respective values into the `adUnitFormats` parameter. -``` +```kotlin adUnit = MediationInterstitialAdUnit( activity, configId, @@ -150,11 +136,10 @@ adUnit = MediationInterstitialAdUnit( This step is totally the same as for original [MAX integration](https://dash.applovin.com/documentation/mediation/android/getting-started/interstitials). You don't have to make any modifications here. - #### Step 2: Create MaxMediationInterstitialUtils {:.no_toc} -The `MaxMediationInterstitialUtils` is a helper class, which performs certain utilty work for the `MediationInterstitialAdUnit`, like passing the targeting keywords to the adapters and checking the visibility of the ad view. +The `MaxMediationInterstitialUtils` is a helper class, which performs certain utility work for the `MediationInterstitialAdUnit`, like passing the targeting keywords to the adapters and checking the visibility of the ad view. #### Step 3: Create MediationInterstitialAdUnit {:.no_toc} @@ -176,11 +161,13 @@ Now you should make a regular MAX's ad request. Everything else will be handled Once you receive the ad it will be ready for display. Folow the [MAX instructions](https://dash.applovin.com/documentation/mediation/android/getting-started/interstitials#showing-an-interstitial-ad) about how to do it. -## Rewarded API +### Rewarded -Integration example: +{% include mobile/rewarded-server-side-configuration.md %} -```swift +#### Integration example + +```kotlin // 1. Get an instance of MaxRewardedAd maxRewardedAd = MaxRewardedAd.getInstance(adUnitId, activity) maxRewardedAd?.setListener(createListener()) @@ -207,41 +194,41 @@ The way of displaying the rewarded ad is the same as for the Interstitial Ad. To be notified when user earns a reward follow the [MAX intructions](https://dash.applovin.com/documentation/mediation/android/getting-started/rewarded-ads#accessing-the-amount-and-currency-for-a-rewarded-ad). -#### Step 1: Get an instance of MaxRewardedAd +##### Step 1: Get an instance of MaxRewardedAd {:.no_toc} This step is totally the same as for original [MAX integration](https://dash.applovin.com/documentation/mediation/android/getting-started/rewarded-ads). You don't have to make any modifications here. -#### Step 2: Create MaxMediationRewardedUtils +##### Step 2: Create MaxMediationRewardedUtils {:.no_toc} -The `MaxMediationRewardedUtils` is a helper class, which performs certain utilty work for the `MediationRewardedVideoAdUnit`, like passing the targeting keywords to the adapters. +The `MaxMediationRewardedUtils` is a helper class, which performs certain utility work for the `MediationRewardedVideoAdUnit`, like passing the targeting keywords to the adapters. -#### Step 3: Create MediationRewardedVideoAdUnit +##### Step 3: Create MediationRewardedVideoAdUnit {:.no_toc} The `MediationRewardeVideoAdUnit` is part of the prebid mediation API. This class is responsible for making a bid request and providing a winning bid and targeting keywords to the adapters. -#### Step 4: Make bid request +##### Step 4: Make bid request {:.no_toc} The `fetchDemand` method makes a bid request to the prebid server and provides a result in a completion handler. -#### Step 5: Make an Ad Reuest +##### Step 5: Make an Ad Reuest {:.no_toc} Now you should make a regular MAX's ad request. Everything else will be handled by GMA SDK and prebid adapters. -#### Steps 6: Display an ad +##### Steps 6: Display an ad {:.no_toc} Once the rewarded ad is received you can display it. Folow the [MAX instructions](https://dash.applovin.com/documentation/mediation/android/getting-started/rewarded-ads#showing-a-rewarded-ad) for the details. -## Native Ads +### Native Ads Integration example: -``` +```kotlin // 1. Create MaxNativeAdLoader nativeAdLoader = MaxNativeAdLoader(adUnitId, requireActivity()) nativeAdLoader.setNativeAdListener(createNativeAdListener(viewContainer)) @@ -275,7 +262,7 @@ Prepare the `MaxNativeAdLoader` object before you make a bid request. It will be #### Step 2: Create and configure NativeAdUnit {:.no_toc} -The `NativeAdUnit` class is responsible for making a bid request and providing a winning bid and targeting keywords. Fot the better targetting you should provide additional properties like `conteaxtType` and `placemantType`. +The `NativeAdUnit` class is responsible for making a bid request and providing a winning bid and targeting keywords. For better targeting you should provide additional properties like `contextType` and `placementType`. #### Step 3: Set up assets for bid request {:.no_toc} @@ -284,7 +271,7 @@ The bid request for native ads should have the description of expected assets. T The example of creating the assets array: -``` +```kotlin val title = NativeTitleAsset() title.setLength(90) title.isRequired = true @@ -324,7 +311,7 @@ The bid request for mative ads may have a descrition of expected event trackers. The example of creating the event trackers array: -``` +```kotlin val methods: ArrayList = ArrayList() methods.add(NativeEventTracker.EVENT_TRACKING_METHOD.IMAGE) methods.add(NativeEventTracker.EVENT_TRACKING_METHOD.JS) @@ -345,3 +332,13 @@ The `fetchDemand` method makes a bid request to prebid server and provides a res {:.no_toc} Now just load a native ad from MAX according to the [MAX instructions](https://dash.applovin.com/documentation/mediation/android/getting-started/native-manual#load-the-native-ad). + +## Additional Ad Unit Configuration + +{% include mobile/rendering-adunit-config-android.md %} + +## Further Reading + +- [Prebid Mobile Overview](/prebid-mobile/prebid-mobile.html) +- [Prebid SDK Android Integration](/prebid-mobile/pbm-api/android/code-integration-android.html) +- [Prebid SDK Android Global Parameters](/prebid-mobile/pbm-api/android/pbm-targeting-android.html) diff --git a/prebid-mobile/modules/rendering/android-sdk-integration-pb.md b/prebid-mobile/modules/rendering/android-sdk-integration-pb.md index 231aa81caa..e5764f6952 100644 --- a/prebid-mobile/modules/rendering/android-sdk-integration-pb.md +++ b/prebid-mobile/modules/rendering/android-sdk-integration-pb.md @@ -1,42 +1,49 @@ --- layout: page_v2 -title: Custom or No mediation -description: Integration of Prebid SDK withou primaty Ad Server +title: Prebid SDK Android with a Custom Bidding Integration +description: Integration of Android Prebid SDK in a special scenario sidebarType: 2 --- -# Custom Bidding Integration +# Prebid SDK Android with a Custom Bidding Integration Method {:.no_toc} -You can use Prebid SDK to monetize your app with a custom ad server or even without it. Use the `Transport API` to obtain the targeting keywords for following usage with the custom ad server. Use the `Rendering API` to display the winning bid without primary ad server and its SDK. - -* TOC +- TOC {:toc} -## Transport API +{% include mobile/intro-custom.md platform='android' %} + +## Rendering Approaches + +The code implementation details depend on which rendering approach you've chosen: + +- [Bidding Only](#bidding-only) +- [Prebid Rendered](#prebid-rendered) + +### Bidding Only -The default ad server for Prebid's Mobile SDK is GAM. The SDK can be expanded to include support for 3rd party ad servers through the fetchDemand function. This function returns the Prebid Server bidder key/values (targeting keys), which can then be passed to the ad server of choice. +While the default ad server for Prebid's Mobile SDK is GAM, it can be expanded to include support for 3rd party ad servers through the fetchDemand function. This function returns the Prebid Server bidder key/values (targeting keys), which can then be passed to the ad server of choice. -In this mode, the publisher will be responsible for the following actions: +In this mode, the developer is responsible for the following actions: -* Call fetchDemand with extended targetingDict callback -* Retrieve targeting keys from the extended fetchDemand function -* Convert targeting keys into the format for your ad server -* Pass converted keys to your ad server -* Render ad with Prebid Universal Creative or custom renderer +- Call `fetchDemand()` with extended targetingDict callback (The method has been removed in the PrebidMobile `3.0.0`. Use the `fetchDemand()` with extended BidInfo callback instead) +- Retrieve targeting keys from the extended fetchDemand function +- Convert targeting keys into the format for your ad server +- Pass converted keys to your ad server +- Render ad with Prebid Universal Creative or custom renderer This approach is available for the following ad formats: -* Display Banner via `BannerAdUnit` -* Video Banner and Instream Video via `VideoAdUnit` -* Display Interstitial via `InterstitialAdUnit` -* Video Interstitial via `VideoInterstitialAdUnit` -* Rewarded Video via `RewardedVideoAdUnit` -* Native Styles via `NativeRequest` +- Display Banner via `BannerAdUnit` +- Video Banner and Instream Video via `VideoAdUnit` (The class has been removed in the PrebidMobile `3.0.0`. Use the `InStreamVideoAdUnit` instead) +- Display Interstitial via `InterstitialAdUnit` +- Video Interstitial via `VideoInterstitialAdUnit` (The class has been removed in the PrebidMobile `3.0.0`. Use the `InterstitialAdUnit` with video ad format instead) +- Rewarded Video via `RewardedVideoAdUnit` +- Native Styles via `NativeRequest` -The basic integration steps for these ad units you can find on the page for integration using [Original API](/prebid-mobile/pbm-api/android/android-sdk-integration-gam-original-api.html). The difference is that you should use the `fetchDemand` function with the following signature: +The basic steps for these ad units you can find on the page for [GAM Bidding Only integration](/prebid-mobile/pbm-api/android/android-sdk-integration-gam-original-api.html). The difference is that you should use the `fetchDemand` function with the following signature: ```kotlin public void fetchDemand(OnFetchDemandResult listener) { ... } @@ -60,13 +67,13 @@ adUnit?.fetchDemand { bidInfo -> The `BidInfo` provides the following properties: -* `resultCode` - the object of type `ResultCode` describing the status of the bid request. -* `targetingKeywords` - the targeting keywords of the winning bid -* `exp` - the number of seconds that may elapse between the auction and the actual impression. In this case, it indicates the approximate TTL of the bid in the Prebid Cache. Note that the actual expiration time of the bid will be less than this number due to the network and operational overhead. The Prebid SDK doesn't make any adjustments to this value. -* `nativeAdCacheId` - the local cache ID of the winning bid. Applied only to the `native` ad format. -* `events` - the map of some publically available event URLs attached to the bid. These can be used to enable Prebid Server-based analytics when the Prebid Universal Creative (PUC) is not involved in the rendering process. If the PUC is used for rendering, it will take care of hitting these events. These are the available event URLs: - * **EVENT_WIN** - this bid was chosen by the ad server as the one to display. This is the main metric for banner and native. This returns the OpenRTB `seatbid.bid.ext.prebid.events.win` field. (requires SDK v2.1.6) - * **EVENT_IMP** - the ad creative for this bid was actually displayed. This is often the main metric for video ads. This returns the OpenRTB `seatbid.bid.ext.prebid.events.imp` field. (requires SDK v2.1.6) +- `resultCode` - the object of type `ResultCode` describing the status of the bid response. +- `targetingKeywords` - the targeting keywords of the winning bid +- `exp` - the number of seconds that may elapse between the auction and the actual impression. In this case, it indicates the approximate TTL of the bid in the Prebid Cache. Note that the actual expiration time of the bid will be less than this number due to the network and operational overhead. The Prebid SDK doesn't make any adjustments to this value. +- `nativeAdCacheId` - the local cache ID of the winning bid. Applied only to the `native` ad format. +- `events` - the map of some publically available event URLs attached to the bid. These can be used to enable Prebid Server-based analytics when the Prebid Universal Creative (PUC) is not involved in the rendering process. If the PUC is used for rendering, it will take care of hitting these events. These are the available event URLs: + - **EVENT_WIN** - this bid was chosen by the ad server as the one to display. This is the main metric for banner and native. This returns the OpenRTB `seatbid.bid.ext.prebid.events.win` field. (requires SDK v2.1.6) + - **EVENT_IMP** - the ad creative for this bid was actually displayed. This is often the main metric for video ads. This returns the OpenRTB `seatbid.bid.ext.prebid.events.imp` field. (requires SDK v2.1.6) Code sample to extract the events: @@ -75,13 +82,13 @@ val win = bidInfo.events.get(BidInfo.EVENT_WIN) val imp = bidInfo.get(BidInfo.EVENT_IMP) ``` -## Rendering API +### Prebid Rendered -The integration and usage of the Rendering API is similar to any other Ad SDK. It sends the bid requests to the Prebid Server and renders the winning bid. +The integration and usage of the Rendering API is similar to any other ad SDK. It sends the bid requests to the Prebid Server and renders the winning bid. ![Rendering with GAM as the Primary Ad Server](/assets/images/prebid-mobile/modules/rendering/Prebid-In-App-Bidding-Overview-Pure-Prebid.png) -### Banner API +#### HTML Banner Integration example: @@ -102,32 +109,31 @@ Pay attention that the `loadAd()` should be called on the main thread. {% endcapture %} {% include /alerts/alert_warning.html content=warning_note %} -#### Step 1: Create Ad View +##### Step 1: Create Ad View {:.no_toc} Initialize the `BannerAdView` with properties: -* `configId` - an ID of a [Stored Impression](/prebid-server/features/pbs-storedreqs.html) on the Prebid server -* `size` - the size of the ad unit which will be used in the bid request. +- `configId` - an ID of a [Stored Impression](/prebid-server/features/pbs-storedreqs.html) on the Prebid server +- `size` - the size of the ad unit which will be used in the bid request. -#### Step 2: Load the Ad +##### Step 2: Load the Ad {:.no_toc} Call `loadAd()` and SDK will: -* make bid request to Prebid -* render the winning bid on display +- make bid request to Prebid +- render the winning bid on display -#### Outstream Video -{:.no_toc} +#### Banner Video (non-instream) -For **Banner Video** you will also need to specify the `bannerView.videoPlacementType`: +**Banner Video** is the same as HTML banner, but you will also need to specify the `bannerView.videoPlacementType`: ``` kotlin bannerView.videoPlacementType = PlacementType.IN_BANNER // or any other available type ``` -### Interstitial API +#### Interstitials Integration example: @@ -149,7 +155,7 @@ Pay attention that the `loadAd()` should be called on the main thread. {% endcapture %} {% include /alerts/alert_warning.html content=warning_note %} -The **default** ad format for interstitial is **DISPLAY**. In order to make a `multiformat bid request`, set the respective values into the `adUnitFormats` parameter. +In order to make a `multiformat bid request`, set the respective values into the `adUnitFormats` parameter. ``` kotlin interstitialAdUnit = InterstitialAdUnit( @@ -158,24 +164,24 @@ interstitialAdUnit = InterstitialAdUnit( EnumSet.of(AdUnitFormat.BANNER, AdUnitFormat.VIDEO)) ``` -#### Step 1: Create an Ad Unit +##### Step 1: Create an Ad Unit {:.no_toc} Initialize the `InterstitialAdUnit` with properties: -* `configId` - an ID of a [Stored Impression](/prebid-server/features/pbs-storedreqs.html) on the Prebid server -* `minSizePercentage` - specifies the minimum width and height percent an ad may occupy of a device’s real estate. +- `configId` - an ID of a [Stored Impression](/prebid-server/features/pbs-storedreqs.html) on the Prebid server +- `minSizePercentage` - specifies the minimum width and height percent an ad may occupy of a device’s real estate. You can also assign the listener to process ad events. > **NOTE:** the `minSizePercentage` - plays an important role in the bidding process for display ads. If the provided space is not enough demand partners won't respond with bids. -#### Step 2: Load the Ad +##### Step 2: Load the Ad {:.no_toc} Call the `loadAd()` to make a bid request. -#### Step 3: Show the Ad when it is ready +##### Step 3: Show the Ad when it is ready {:.no_toc} Wait until the ad is loaded and present it to the user in any suitable time. @@ -186,9 +192,11 @@ override fun onAdLoaded(interstitialAdUnit: InterstitialAdUnit) { } ``` -### Rewarded API +#### Rewarded -Integration example: +{% include mobile/rewarded-server-side-configuration.md %} + +##### Integration example ``` kotlin // 1. Create an Ad Unit @@ -209,19 +217,19 @@ Pay attention that the `loadAd()` should be called on the main thread. {% endcapture %} {% include /alerts/alert_warning.html content=warning_note %} -#### Step 1: Create a Rewarded Ad Unit +###### Step 1: Create a Rewarded Ad Unit {:.no_toc} Create the `RewardedAdUnit` object with parameters: -* `adUnitId` - an ID of Stored Impression on the Prebid server. +- `adUnitId` - an ID of Stored Impression on the Prebid server. -#### Step 2: Load the Ad +###### Step 2: Load the Ad {:.no_toc} Call the `loadAd()` to make a bid request. -#### Step 3: Show the Ad when it is ready +###### Step 3: Show the Ad when it is ready {:.no_toc} Wait until the ad is loaded and present it to the user in any suitable time. @@ -231,3 +239,29 @@ override fun onAdLoaded(rewardedAdUnit: RewardedAdUnit) { //Ad is ready for display } ``` + +##### Step 4: Handle a reward +{:.no_toc} + +Handle earning a reward in the appropriate method. Important: a reward can be null. + +```kotlin +override fun onUserEarnedReward(rewardedAdUnit: RewardedAdUnit?, reward: Reward?) { + if (reward != null) { + val rewardType = reward.type + val rewardCount = reward.count + val rewardExt = reward.ext + // Process the reward + } +} +``` + +## Additional Ad Unit Configuration + +{% include mobile/rendering-adunit-config-android.md %} + +## Further Reading + +- [Prebid Mobile Overview](/prebid-mobile/prebid-mobile) +- [Prebid SDK Android Integration](/prebid-mobile/pbm-api/android/code-integration-android) +- [Prebid SDK Android Global Parameters](/prebid-mobile/pbm-api/android/pbm-targeting-android) diff --git a/prebid-mobile/modules/rendering/combined-ui-ux-policy.md b/prebid-mobile/modules/rendering/combined-ui-ux-policy.md new file mode 100644 index 0000000000..9d0b857e87 --- /dev/null +++ b/prebid-mobile/modules/rendering/combined-ui-ux-policy.md @@ -0,0 +1,79 @@ +--- + +layout: page_v2 +title: Ad Experience Specification +description: Ad Experience Specification +sidebarType: 2 + +--- + +# Prebid SDK Ad Experience +{:.no_toc} + +If you use the Prebid SDK to render the winning bid, be aware of how the SDK implements ad experiences and how you can modify them. + +This specification does not apply to the Bidding-Only API, where the Google Mobile Ads SDK or any other rendering engine performs rendering. In such integration scenarios, the ad experience is defined by the third-party SDK, and the Prebid SDK is not able to influence this. + +* TOC +{:toc} + +## Banner + +Prebid SDK renders the banner ad in the OS-specific WebView. The publisher is responsible for integrating `BannerAdView` into the application layout and providing the screen space according to the supported ad sizes. + +The following table describes the ad experience properties of the banner ad and how they can be changed. + + {: .table .table-bordered .table-striped } +| Policy | Behavior | Customization | +|--------|-----------|---------------| +|`Autorefresh`| **Prebid SDK** refreshes the banner ad every **60 seconds**. SDK makes the bid request and changes the current creative in the ad slot if the refresh has a bid. If there is no bid, the SDK will remove the current creative from the internal ad slot and notify the publisher using the respective delegate methods.

        **Publisher** is responsible for removing or collapsing the ad slot in the application layout. |**iOS**: you can change the refresh interval using [refreshInterval](/prebid-mobile-ios/Classes/BannerView.html#/c:@M@PrebidMobile@objc(cs)BannerView(py)refreshInterval) property.

        **Android**: you can change the refresh interval using the [setAutoRefreshDelay](/prebid-mobile-android/org/prebid/mobile/api/rendering/BannerView.html#setAutoRefreshDelay(int)) property.| +|`Content Resizing`|**Prebid SDK** changes the size of WebView according to the size of the creative received in the bid response.

        **Publisher** is responsible for adopting the application layout for different ad sizes.|To support multisize ads, publishers should implement a dynamic layout for the banner ad place. Prebid SDK will change the size of the `BannerAdView` according to the content. However, the publisher is responsible for adapting the application layout for different ad sizes.

        Currently, the SDK doesn't notify publishers about the change in banner size. Open an issue or PR to add this functionality.| +|`Clickthrough`|**Prebid SDK**: Opens the click URL in the default browser of the device. The SDK calls the respective ad delegate and listeners' methods to notify the publisher that the application is being left.

        **Publisher** is responsible for processing SDK events and managing the application state, respectively. |Currently, customization is not available. Open an issue or PR for the alternative approach. | + +## Outstream Video (in-banner) + +Prebid SDK renders the outstream video ad in the OS-specific video player. The publisher is responsible for integrating the `BannerAdView` into the application layout and providing the needed space according to the supported ad sizes. + + {: .table .table-bordered .table-striped } +| Policy | Behavior | Customization | +|--------|-----------|---------------| +|`Autoplay`| **Prebid SDK** starts playback only when the ad appears on the app screen. Once the ad is removed or scrolled off the screen, the playback will be stopped.

        **Publisher** is responsible for removing or collapsing the ad slot in the application layout. |Currently, there is no public API to customize this behavior. Open an issue or PR for the alternative approach.| +|`Sound`| **Prebid SDK** Prebid SDK plays out-stream video with sound enabled. | Currently, there is no way to mute the outstream video. Open an issue or PR for the alternative approach.| + +## Interstitial Video + +The Prebid SDK renders the interstitial video ad in the OS-specific video player, within the special full-screen controller. The publisher is responsible for integrating the `Interstitial` controller into the application flow and managing the app's behavior in response to ad signals. + + {: .table .table-bordered .table-striped } +| Policy | Behavior | Customization | +|--------|-----------|---------------| +| `Fullscreen` | **Prebid SDK** opens the interstitial ad in the fullscreen controller that overlaps all other application content. The iOS SDK support the SKOverlay format to show the interstitial ad for the bid with respective [configuration](https://github.com/InteractiveAdvertisingBureau/openrtb/blob/main/extensions/community_extensions/skadnetwork.md#bid-request).

        **Publisher** is responsible for implementing the callbacks for interstitial ads and managing the app state according to the ad behavior. | Currently, there is no way to customize the appearance of the interstitial ads. Open an issue or PR for the alternative approach. | +| `Rotation` | **Prebid SDK** allows the rotation of the screen for the interstitial ads. The ad content is rotated according to the screen position. SDK changes the layout of the ad control elements according to the screen orientation.

        **Publisher** has nothing to do in this operation, SDK doesn't provide any events to subscribe. | Currently, there is no way to customize the rotation behavior of the interstitial ads. Open an issue or PR for the alternative approach.| +| `Close Button` | **Prebid SDK** adds a close button to the interstitial ad, providing a way for users to dismiss the fullscreen ad. Depending on the ad format, the button can appear from the very beginning of the ad or with some delay.

        **Publisher** is responsible for subscribing to the ad flow events and managing the app flow, accordingly. | **Publisher** can customize the default SDK behavior using the [Ad Experience Controls](/prebid-mobile/modules/rendering/combined-ad-experience-controls.html) feature.| +| `Learn More Button` | **Prebid SDK** adds a close button to the interstitial ad, providing a way for users to dismiss the fullscreen ad. Depending on the ad format, the button can appear from the very beginning of the ad or with some delay.

        **Publisher** is responsible for subscribing to the ad flow events and managing the app flow, accordingly. |**Publisher** can customize the default SDK behavior using [Ad Experience Controls](/prebid-mobile/modules/rendering/combined-ad-experience-controls.html)| +| `Tap` | **Prebid SDK** processes the clicks, actually taps, in different ways, respectively, depending on the type of the ad.
        **The publisher** is responsible for handling [interstitialDidClickAd](/prebid-mobile-ios/Protocols/InterstitialAdUnitDelegate.html#/c:@M@PrebidMobile@objc(pl)InterstitialAdUnitDelegate(im)interstitialDidClickAd:) delegate method on iOS or [onAdClicked](/prebid-mobile-android/org/prebid/mobile/api/rendering/listeners/InterstitialAdUnitListener.html#onAdClicked(org.prebid.mobile.api.rendering.InterstitialAdUnit)) listener method on Android. |Currently, there is no way to customize the way of processing the taps on the ad. Open an issue or PR for the alternative approach.| +| `Clickthrough` | **Prebid SDK** opens a click URL in the external browser on the platform. Typically, it is the default browser for a particular user's device.
        **Publisher** is responsible for processing SDK events and managing the application state, respectively. |Currently, customization is not available. Open an issue or PR for the alternative approach.| +| `Learn More Button` | **Prebid SDK** adds a close button to the interstitial ad, providing a way for users to dismiss the fullscreen ad. Depending on the ad format, the button can appear from the very beginning of the ad or with some delay.

        **Publisher** is responsible for subscribing to the ad flow events and managing the app flow, accordingly. |**Publisher** can customize the default SDK behavior using [Ad Experience Controls](/prebid-mobile/modules/rendering/combined-ad-experience-controls.html)| +| `Tap` | **Prebid SDK** processes the clicks, actually taps, in different ways, respectively, depending on the type of the ad.
        **The publisher** is responsible for handling [interstitialDidClickAd](/prebid-mobile-ios/Protocols/InterstitialAdUnitDelegate.html#/c:@M@PrebidMobile@objc(pl)InterstitialAdUnitDelegate(im)interstitialDidClickAd:) delegate method on iOS or [onAdClicked](/prebid-mobile-android/org/prebid/mobile/api/rendering/listeners/InterstitialAdUnitListener.html#onAdClicked(org.prebid.mobile.api.rendering.InterstitialAdUnit)) listener method on Android. |Currently, there is no way to customize the way of processing the taps on the ad. Open an issue or PR for the alternative approach.| +| `Clickthrough` | **Prebid SDK** opens a click URL in the external browser on the platform. Typically, it is the default browser for a particular user's device.
        **Publisher** is responsible for processing SDK events and managing the application state, respectively. |Currently, customization is not available. Open an issue or PR for the alternative approach.| +|`Playback`| **Prebid SDK** starts playback only when the ad appears on the app screen. Once the ad is removed or scrolled off the screen, the playback will be stopped.

        **Publisher** is responsible for removing or collapsing the ad slot in the application layout. |Currently, there is no public API to customize this behavior. Open an issue or PR for the alternative approach.| +|`Sound`| **Prebid SDK** Prebid SDK plays instream video with sound enabled. | **Publisher** can customize the default SDK behavior using [Ad Experience Controls](/prebid-mobile/modules/rendering/combined-ad-experience-controls.html) | + +## Rewarded Ad + +**Prebid SDK** implements a special ad unit for Rewarded ads, maintaining the OS-specific video player, WebView, and rewarding engine under the hood. The publisher should integrate the `RewardedAdUnit` into the application flow and manage app behavior in response to ad signals. + +The following table, based on the `RewardedAdUnit` [specification](https://github.com/prebid/prebid-mobile-ios/issues/1056), describes how publishers can change their behavior: + + {: .table .table-bordered .table-striped } +| Policy | Behavior | Customization | +|--------|-----------|---------------| +|`Reward`|**Prebid SDK** can signal the publisher about the type and quantity of reward coins.

        If the `rwdd` or `reward` object is absent in the response, by **default,** SDK will send an empty object into the respective delegate method. |**Publisher** can set the type and number of coins in the `rwdd.reward` object.| +|`Completion`|**Prebid SDK** will inform the application once the reward time has come.

        If the `rwdd` or `reward` object is absent in the response, by **default,**

        - **banner:** SDK triggers the completion of the banner rewarded ad after **120 seconds** on the screen.

        - **video:** SDK triggers the completion of the rewarded ad once the video playback is completed. But only if the ad doesn’t have an end card. | **Publisher** can set the rule when the SDK should inform the app about the reward time. Depending on the ad format, the publisher can set different rules using `rwdd.completion.banner` and `rwdd.completion.video` objects respectively.| +|`Close`|**Prebid SDK** will close the interstitial controller with rewarded ad according to the configuration passed in the response.

        If the `rwdd` or `reward` object is absent in the response, by **default,** SDK will display the **close button** on the interstitial once the completion criteria are met.| **Publisher** can set the rule on how the SDK should behave once the user earns the reward, and the interstitial ad can be dismissed from the app screen.

        The `rwdd.close.postrewardtime` describes how much time the SDK should wait until performing the `action`.

        The action itself is described in `rwdd.close.action` object. Currently, two actions are supported:

        - `autoclose` means that the ad will be dismissed without user interaction.

        - `closebutton` means that the SDK will display the close button on top of the ad, and the user will have to tap on it to dismiss the ad.| + +Note: [Ad Experience Controls](/prebid-mobile/modules/rendering/combined-ad-experience-controls.html) of the rewarded ad can be configured in the same way as for the interstitial ad. + +## Native Ads + +The Prebid SDK supplies the content for native ad assets such as titles, images, and custom data, but does not control how these assets are presented within the application. Publishers are responsible for designing the ad layout and integrating it into their app’s user interface. Consequently, the overall user experience of native ads depends on the publisher’s implementation. diff --git a/prebid-mobile/modules/rendering/ios-sdk-integration-admob.md b/prebid-mobile/modules/rendering/ios-sdk-integration-admob.md index b61fe4517b..3651f316f3 100644 --- a/prebid-mobile/modules/rendering/ios-sdk-integration-admob.md +++ b/prebid-mobile/modules/rendering/ios-sdk-integration-admob.md @@ -1,33 +1,21 @@ --- layout: page_v2 -title: Google Ad Manager Integration -description: Integration of Prebid Rendering module whith Google Ad Manager +title: Integrating Prebid SDK iOS with AdMob +description: Integrating Prebid SDK iOS with AdMob sidebarType: 2 --- -# AdMob Integration -{:.no_toc} - -The integration of Prebid Mobile with Google AdMob assumes that the publisher has an AdMob account and has already integrated the Google Mobile Ads SDK (GMA SDK) into the app. + -See the [Google Integration Documentation](https://developers.google.com/admob/ios/quick-start) for the AdMob integration details. +# Prebid SDK iOS with AdMob Integration Method +{:.no_toc} -* TOC +- TOC {:toc} -## AdMob Integration Overview - -![Rendering with GAM as the Primary Ad Server](/assets/images/prebid-mobile/modules/rendering/prebid-in-app-bidding-overview-admob.png) - -**Steps 1-2** Prebid SDK makes a bid request. Prebid server runs an auction and returns the winning bid. +{% include mobile/intro-admob.md platform="ios" %} -**Step 3** GMA SDK makes an ad request. AdMob returns the mediation chain with respective ad sources. - -**Step 4** For each prebid's ad source, the GMA SDK sequentially instantiates an adapter. - -**Step 5** The adapter verifies the targeting keywords of the winning bid and the server properties of the given ad source. If they match the adapter will render the winning bid. Otherwise, it will immediately fail with an error of "no ad" and the next ad source will instantiate the same adapter but for another set of server params. - -## Adapters Integration +## Setup Prebid SDK is integrated into AdMob setup thru custom adapters. To integrate Prebid Adapters into your app, add the following line to your Podfile: @@ -35,7 +23,7 @@ Prebid SDK is integrated into AdMob setup thru custom adapters. To integrate Pre pod 'PrebidMobileAdMobAdapters' ``` -## Adapters Initialization +### Initialization {: .alert.alert-warning :} **Warning:** The `GADMobileAds.sharedInstance().start()` should be called in the adapters bundle, otherwise, GMA SDK won't load the ads with error: `adView:didFailToReceiveAdWithError: SDK tried to perform a networking task before being initialized.` @@ -46,27 +34,57 @@ To avoid the error add the following line to your app right after initialization AdMobUtils.initializeGAD() ``` -## Banner API +## Adunit Specific Instructions -Integration example: +### Banners -```swift -// 1. Create GADRequest and GADBannerView +**Integration example(Swift)**: + +{% capture gma12 %}// 1. Create a GADRequest +let gadRequest = Request() + +// 2. Create a BannerView +gadBanner = GoogleMobileAds.BannerView(adSize: adSizeFor(cgSize: AD_SIZE)) +gadBanner.adUnitID = AD_UNIT_ID +gadBanner.delegate = self +gadBanner.rootViewController = self + +// Add GMA SDK banner view to the app UI +bannerView.addSubview(gadBanner) + +// 3. Create an AdMobMediationBannerUtils +mediationDelegate = AdMobMediationBannerUtils(gadRequest: gadRequest, bannerView: gadBanner) + +// 4. Create a MediationBannerAdUnit +prebidAdMobMediaitonAdUnit = MediationBannerAdUnit( + configID: CONFIG_ID, + size: AD_SIZE, + mediationDelegate: mediationDelegate +) + +// 5. Make a bid request to Prebid Server +prebidAdMobMediaitonAdUnit.fetchDemand { [weak self] result in + PrebidDemoLogger.shared.info("Prebid demand fetch for AdMob \(result.name())") + + // 6. Load ad + self?.gadBanner.load(gadRequest) +} +{% endcapture %} +{% capture gma11 %}// 1. Create GADRequest and GADBannerView gadRequest = GADRequest() -gadBanner = GADBannerView(adSize: size) +gadBanner = GADBannerView(adSize: AD_SIZE) gadBanner.delegate = self gadBanner.rootViewController = self -gadBanner.adUnitID = adUnitId +gadBanner.adUnitID = AD_UNIT_ID // 2. Create an AdMobMediationBannerUtils -mediationDelegate = AdMobMediationBannerUtils(gadRequest: gadRequest, - bannerView: gadBanner) +mediationDelegate = AdMobMediationBannerUtils(gadRequest: gadRequest, bannerView: gadBanner) // 3. Create the MediationBannerAdUnit -prebidAdMobMediaitonAdUnit = MediationBannerAdUnit(configID: configID, - size: CGSize(width: 320, height: 50), +prebidAdMobMediaitonAdUnit = MediationBannerAdUnit(configID: CONFIG_ID, + size: AD_SIZE, mediationDelegate: mediationDelegate) // 4. Make a bid request @@ -75,53 +93,89 @@ prebidAdMobMediaitonAdUnit.fetchDemand { [weak self] result in // 5. Make an ad request to AdMob self?.gadBanner.load(self?.gadRequest) } -``` +{% endcapture %} -### Step 1: Create GADRequest and GADBannerView +{% include code/gma-versions-tabs.html id="admob-banner" gma11=gma11 gma12=gma12 %} + +#### Step 1: Create Request and BannerView {:.no_toc} This step is the same as for the original [AdMob integration](https://developers.google.com/admob/ios/banner). You don't have to make any modifications here. -### Step 2: Create AdMobMediationBannerUtils +#### Step 2: Create AdMobMediationBannerUtils {:.no_toc} -The `AdMobMediationBannerUtils` is a helper class, which performs certain utilty work for the `MediationBannerAdUnit`, such as passing the targeting keywords to the adapters and checking the visibility of the ad view. +The `AdMobMediationBannerUtils` is a helper class, which performs certain utility work for the `MediationBannerAdUnit`, such as passing the targeting keywords to the adapters and checking the visibility of the ad view. -### Step 3: Create MediationBannerAdUnit +#### Step 3: Create MediationBannerAdUnit {:.no_toc} The `MediationBannerAdUnit` is part of Prebid mediation API. This class is responsible for making a bid request and providing the winning bid and targeting keywords to mediating SDKs. -### Step 4: Make bid request +#### Step 4: Make bid request {:.no_toc} The `fetchDemand` method makes a bid request to a Prebid server and returns a result in a completion handler. -### Step 5: Make an Ad Request +#### Step 5: Make an Ad Request {:.no_toc} Make a regular AdMob's ad request. Everything else will be handled by Prebid adapters. -## Interstitial API +### Interstitials -Integration example: +**Integration example(Swift)**: -```swift +{% capture gma12 %}// 1. Create a Request +let gadRequest = Request() + +// 2. Create an AdMobMediationInterstitialUtils +let mediationDelegate = AdMobMediationInterstitialUtils(gadRequest: gadRequest) + +// 3. Create a MediationInterstitialAdUnit +admobAdUnit = MediationInterstitialAdUnit( + configId: CONFIG_ID, + mediationDelegate: mediationDelegate +) + +// 4. Make a bid request to Prebid Server +admobAdUnit?.fetchDemand(completion: { [weak self] result in + PrebidDemoLogger.shared.info("Prebid demand fetch for AdMob \(result.name())") + + // 5. Load the interstitial ad + InterstitialAd.load( + with: AD_UNIT_ID, + request: gadRequest + ) { [weak self] ad, error in + guard let self = self else { return } + + if let error = error { + PrebidDemoLogger.shared.error("\(error.localizedDescription)") + return + } + + // 6. Present the interstitial ad + self.interstitial = ad + self.interstitial?.fullScreenContentDelegate = self + self.interstitial?.present(from: self) + } +}) +{% endcapture %} +{% capture gma11 %} // 1. Create GADRequest gadRequest = GADRequest() // 2. Create AdMobMediationInterstitialUtils -mediationDelegate = AdMobMediationInterstitialUtils(gadRequest: self.gadRequest) +let mediationDelegate = AdMobMediationInterstitialUtils(gadRequest: self.gadRequest) // 3. Create MediationInterstitialAdUnit -admobAdUnit = MediationInterstitialAdUnit(configId: configID, - mediationDelegate: mediationDelegate!) +admobAdUnit = MediationInterstitialAdUnit(configId: CONFIG_ID, mediationDelegate: mediationDelegate) // 4. Make a bid request admobAdUnit?.fetchDemand(completion: { [weak self]result in // 5. Make an ad request to AdMob -GADInterstitialAd.load(withAdUnitID: adUnitID, request: self?.gadRequest) { [weak self] ad, error in +GADInterstitialAd.load(withAdUnitID: AD_UNIT_ID, request: self?.gadRequest) { [weak self] ad, error in guard let self = self else { return } if let error = error { PBMLog.error(error.localizedDescription) @@ -134,7 +188,9 @@ GADInterstitialAd.load(withAdUnitID: adUnitID, request: self?.gadRequest) { [wea self.interstitial?.present(fromRootViewController: self) } }) -``` +{% endcapture %} + +{% include code/gma-versions-tabs.html id="admob-banner" gma11=gma11 gma12=gma12 %} The **default** ad format for interstitial is **.banner**. In order to make a `multiformat bid request`, set the respective values into the `adFormats` property. @@ -147,59 +203,99 @@ adUnit?.adFormats = [.video, .banner] // Make bid request for banner ad (default behaviour) adUnit?.adFormats = [.banner] - ``` -### Step 1: Create GADRequest +#### Step 1: Create Request {:.no_toc} This step is the same as for the original [AdMob integration](https://developers.google.com/admob/ios/interstitial#swift). You don't have to make any modifications here. -### Step 2: Create AdMobMediationInterstitialUtils +#### Step 2: Create AdMobMediationInterstitialUtils {:.no_toc} -The `AdMobMediationInterstitialUtils` is a helper class, which performs certain utilty work for the `MediationInterstitialAdUnit`, such as passing the targeting keywords to adapters and checking the visibility of the ad view. +The `AdMobMediationInterstitialUtils` is a helper class, which performs certain utility work for the `MediationInterstitialAdUnit`, such as passing the targeting keywords to adapters and checking the visibility of the ad view. -### Step 3: Create MediationInterstitialAdUnit +#### Step 3: Create MediationInterstitialAdUnit {:.no_toc} The `MediationInterstitialAdUnit` is part of the Prebid mediation API. This class is responsible for making a bid request and providing a winning bid to the mediating SDKs. -### Step 4: Make bid request +#### Step 4: Make bid request {:.no_toc} The `fetchDemand` method makes a bid request to a Prebid server and provides a result in a completion handler. -### Step 5: Make an Ad Request +#### Step 5: Make an Ad Request {:.no_toc} Make a regular AdMob's ad request. Everything else will be handled by GMA SDK and prebid adapters. -### Steps 6: Display an ad +#### Steps 6: Display an ad {:.no_toc} Once you receive the ad it will be ready for display. Follow the [AdMob instructions](https://developers.google.com/admob/ios/interstitial#swift) for displaying an ad. -## Rewarded API +### Rewarded -Integration example: +{% include mobile/rewarded-server-side-configuration.md %} -```swift -// 1. Create GADRequest +**Integration example(Swift)**: + +{% capture gma12 %}// 1. Create a Request +let request = Request() + +// 2. Create an AdMobMediationRewardedUtils +mediationDelegate = AdMobMediationRewardedUtils(gadRequest: request) + +// 3. Create a MediationRewardedAdUnit +admobRewardedAdUnit = MediationRewardedAdUnit( + configId: CONFIG_ID, + mediationDelegate: mediationDelegate +) + +// 4. Make a bid request to Prebid Server +admobRewardedAdUnit.fetchDemand { [weak self] result in + guard let self = self else { return } + PrebidDemoLogger.shared.info("Prebid demand fetch for AdMob \(result.name())") + + // 5. Load the rewarded ad + RewardedAd.load(with: AD_UNIT_ID, request: request) { [weak self] ad, error in + guard let self = self else { return } + + if let error = error { + Log.error(error.localizedDescription) + return + } + + // 6. Present the rewarded ad + self.gadRewardedAd = ad + self.gadRewardedAd?.fullScreenContentDelegate = self + DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(3)) { + self.gadRewardedAd?.present( + from: self, + userDidEarnRewardHandler: { + print("User did earn reward.") + } + ) + } + } +} +{% endcapture %} +{% capture gma11 %}// 1. Create GADRequest let request = GADRequest() // 2. Create AdMobMediationInterstitialUtils let mediationDelegate = AdMobMediationRewardedUtils(gadRequest: request) // 3. Create MediationInterstitialAdUnit -admobRewardedAdUnit = MediationRewardedAdUnit(configId: "12f58bc2-b664-4672-8d19-638bcc96fd5c", mediationDelegate: mediationDelegate) +admobRewardedAdUnit = MediationRewardedAdUnit(configId: CONFIG_ID, mediationDelegate: mediationDelegate) // 4. Make a bid request admobRewardedAdUnit.fetchDemand { [weak self] result in guard let self = self else { return } // 5. Make an ad request to AdMob -GADRewardedAd.load(withAdUnitID: self.admobPrebidAdUnitId, request: request) { [weak self] ad, error in +GADRewardedAd.load(withAdUnitID: AD_UNIT_ID, request: request) { [weak self] ad, error in guard let self = self else { return } if let error = error { PBMLog.error(error.localizedDescription) @@ -216,53 +312,91 @@ GADRewardedAd.load(withAdUnitID: self.admobPrebidAdUnitId, request: request) { [ } } } -``` +{% endcapture %} + +{% include code/gma-versions-tabs.html id="admob-rewarded" gma11=gma11 gma12=gma12 %} The process of displaying the rewarded ad is the same as for displaying an Interstitial Ad. To be notified when a user earns a reward follow the [AdMob intructions](https://developers.google.com/admob/ios/rewarded#show_the_ad). -### Step 1: Create GADRequest +#### Step 1: Create Request {:.no_toc} This step is the same as for the original [AdMob integration](https://developers.google.com/admob/ios/rewarded). You don't have to make any modifications here. -### Step 2: Create MediationRewardedAdUnit +#### Step 2: Create MediationRewardedAdUnit {:.no_toc} -The `AdMobMediationRewardedUtils` is a helper class, which performs certain utilty work for the `MediationRewardedAdUnit`, like passing the targeting keywords to the adapters. +The `AdMobMediationRewardedUtils` is a helper class, which performs certain utility work for the `MediationRewardedAdUnit`, like passing the targeting keywords to the adapters. -### Step 3: Create MediationInterstitialAdUnit +#### Step 3: Create MediationInterstitialAdUnit {:.no_toc} The `MediationRewardedAdUnit` is part of the Prebid mediation API. This class is responsible for making a bid request and providing a winning bid and targeting keywords to the adapters. -### Step 4: Make bid request +#### Step 4: Make bid request {:.no_toc} The `fetchDemand` method makes a bid request to the a Prebid server and provides a result in a completion handler. -### Step 5: Make an Ad Request +#### Step 5: Make an Ad Request {:.no_toc} Make a regular AdMob's ad request. Everything else will be handled by GMA SDK and prebid adapters. -### Steps 6: Display an ad +#### Steps 6: Display an ad {:.no_toc} Once the rewarded ad is received you can display it. Follow the [AdMob instructions](https://developers.google.com/admob/ios/rewarded#swift) for displaying an ad. -## Native Ads +### Native Ads {: .alert.alert-warning :} -**Warning:** If you use Native Ads you **must** integrate AdMob Adapters via the source files instead of cocoapods integration or standalone framework. The integration using framework leads to [runtime errors](https://github.com/prebid/prebid-mobile-ios/issues/516) related to the type casting. +**Warning:** If you use Native Ads you **must** integrate AdMob Adapters via the source files instead of cocoapods integration or standalone framework. In order to integrate AdMob adapters just add the adapters' source files to your app project. -Integration example: +**Integration example(Swift)**: -```swift -// 1. Create GAD Request +{% capture gma12 %}// 1. Create a Request +let gadRequest = Request() + +// 2. Create an AdMobMediationNativeUtils +mediationDelegate = AdMobMediationNativeUtils(gadRequest: gadRequest) + +// 3. Create a MediationNativeAdUnit +admobMediationNativeAdUnit = MediationNativeAdUnit( + configId: CONFIG_ID, + mediationDelegate: mediationDelegate +) + +// 4. Configure MediationNativeAdUnit +admobMediationNativeAdUnit.addNativeAssets(nativeRequestAssets) +admobMediationNativeAdUnit.setContextType(.Social) +admobMediationNativeAdUnit.setPlacementType(.FeedContent) +admobMediationNativeAdUnit.setContextSubType(.Social) +admobMediationNativeAdUnit.addEventTracker(eventTrackers) + +// 5. Make a bid request to Prebid Server +admobMediationNativeAdUnit.fetchDemand { [weak self] result in + guard let self = self else { return } + PrebidDemoLogger.shared.info("Prebid demand fetch for AdMob \(result.name())") + + // 6. Load the native ad + self.adLoader = AdLoader( + adUnitID: AD_UNIT_ID, + rootViewController: self, + adTypes: [ .native ], + options: nil + ) + + self.adLoader?.delegate = self + + self.adLoader?.load(gadRequest) +} +{% endcapture %} +{% capture gma11 %}// 1. Create GAD Request gadRequest = GADRequest() // 2. Create AdMobMediationNativeUtils @@ -284,36 +418,38 @@ nativeAdUnit.addEventTracker(eventTrackers) // 6. Make a bid request nativeAdUnit.fetchDemand { [weak self] result in -guard let self = self else { return } + guard let self = self else { return } -// 7. Load AdMob Native ad -self.adLoader = GADAdLoader(adUnitID: self.adMobAdUnitId!, - rootViewController: self.rootController, - adTypes: [ .native ], - options: nil) + // 7. Load AdMob Native ad + self.adLoader = GADAdLoader(adUnitID: AD_UNIT_ID, + rootViewController: self.rootController, + adTypes: [ .native ], + options: nil) -self.adLoader?.delegate = self + self.adLoader?.delegate = self -self.adLoader?.load(self.gadRequest) + self.adLoader?.load(self.gadRequest) } -``` +{% endcapture %} + +{% include code/gma-versions-tabs.html id="admob-native" gma11=gma11 gma12=gma12 %} -### Step 1: Create GAD Request +#### Step 1: Create a Request {:.no_toc} -Prepare the `GADRequest` object before you make a bid request. It will be needed for the Prebid mediation utils. +Prepare the `Request` object before you make a bid request. It will be needed for the Prebid mediation utils. -### Step 2: Create AdMobMediationNativeUtils +#### Step 2: Create AdMobMediationNativeUtils {:.no_toc} -The `AdMobMediationNativeUtils` is a helper class, which performs certain utilty work for `MediationNativeAdUnit`, like passing the targeting keywords to adapters and checking the visibility of the ad view. +The `AdMobMediationNativeUtils` is a helper class, which performs certain utility work for `MediationNativeAdUnit`, like passing the targeting keywords to adapters and checking the visibility of the ad view. -### Step 3: Create and configure MediationNativeAdUnit +#### Step 3: Create and configure MediationNativeAdUnit {:.no_toc} -The `MediationNativeAdUnit` is part of the Prebid mediation API. This class is responsible for making a bid request and providing a winning bid and targeting keywords to the adapters. For better targetting you should provide additional properties like `conteaxtType` and `placemantType`. +The `MediationNativeAdUnit` is part of the Prebid mediation API. This class is responsible for making a bid request and providing a winning bid and targeting keywords to the adapters. For better targeting you should provide additional properties like `contextType` and `placementType`. -### Step 4: Set up assets for bid request +#### Step 4: Set up assets for bid request {:.no_toc} The bid request for native ads should have the description of any expected assets. The full spec for the native template can be found in the [Native Ad Specification from IAB](https://www.iab.com/wp-content/uploads/2018/03/OpenRTB-Native-Ads-Specification-Final-1.2.pdf). @@ -338,7 +474,7 @@ let sponsored = NativeAssetData(type: DataAsset.sponsored, required: true) return [icon, title, image, body, cta, sponsored] ``` -### Step 5: Set up event tracker for bid request +#### Step 5: Set up event tracker for bid request {:.no_toc} The bid request for mative ads may have a description of expected event trackers. The full spec for the Native template can be found in the [Native Ad Specification from IAB](https://www.iab.com/wp-content/uploads/2018/03/OpenRTB-Native-Ads-Specification-Final-1.2.pdf). @@ -347,17 +483,26 @@ The example of creating the event trackers array: ```swift let eventTrackers = [ - NativeEventTracker(event: EventType.Impression, - methods: [EventTracking.Image,EventTracking.js]) + NativeEventTracker(event: EventType.Impression, methods: [EventTracking.Image,EventTracking.js]) ] ``` -### Step 6: Make a bid request +#### Step 6: Make a bid request {:.no_toc} The `fetchDemand` method makes a bid request to Prebid server and provides a result in a completion handler. -### Step 7: Load AdMob Native ad +#### Step 7: Load AdMob Native ad {:.no_toc} Now just load a native ad from AdMob according to the [AdMob instructions](https://developers.google.com/admob/ios/native/start). + +## Additional Ad Unit Configuration + +{% include mobile/rendering-adunit-config-ios.md %} + +## Further Reading + +- [Prebid Mobile Overview](/prebid-mobile/prebid-mobile) +- [Prebid SDK iOS Integration](/prebid-mobile/pbm-api/ios/code-integration-ios) +- [Prebid SDK iOS Global Parameters](/prebid-mobile/pbm-api/ios/pbm-targeting-ios) diff --git a/prebid-mobile/modules/rendering/ios-sdk-integration-gam-native.md b/prebid-mobile/modules/rendering/ios-sdk-integration-gam-native.md index 1b378f87d3..7f99f2ac6f 100644 --- a/prebid-mobile/modules/rendering/ios-sdk-integration-gam-native.md +++ b/prebid-mobile/modules/rendering/ios-sdk-integration-gam-native.md @@ -173,7 +173,7 @@ let assets = [ ] ``` -See the full description of NativeAdConfiguration options [here](rendering-native-ad-configuration.md). +See the full description of NativeAdConfiguration options in the [NativeAdConfiguration guide](rendering-native-ad-configuration.md). ### Step 4: Load the Ad diff --git a/prebid-mobile/modules/rendering/ios-sdk-integration-gam.md b/prebid-mobile/modules/rendering/ios-sdk-integration-gam.md index 26cdd8eb3f..1075aa4747 100644 --- a/prebid-mobile/modules/rendering/ios-sdk-integration-gam.md +++ b/prebid-mobile/modules/rendering/ios-sdk-integration-gam.md @@ -5,39 +5,29 @@ description: Integration of Prebid Rendering module whith Google Ad Manager sidebarType: 2 --- -# GAM with Prebid Rendering -{:.no_toc} - -The integration of Prebid Rendering API with Google Ad Manager (GAM) assumes that the publisher has an account on GAM and has already integrated the Google Mobile Ads SDK (GMA SDK) into the app project. + -If you do not have GMA SDK in the app yet, refer to the [Google Integration Documentation](https://developers.google.com/ad-manager/mobile-ads-sdk/ios/quick-start). +# Prebid SDK iOS with the GAM Prebid-Rendered Integration Method +{:.no_toc} - TOC {:toc} -## GAM Integration Overview - -![Rendering with GAM as the Primary Ad Server](/assets/images/prebid-mobile/modules/rendering/Prebid-In-App-Bidding-Overview-GAM.png) - -**Steps 1-2** Prebid SDK makes a bid request. Prebid server runs an auction and returns the winning bid. - -**Step 3** Prebid SDK using Prebid GAM Event Handler sets up the targeting keywords into the GAM's ad unit. +{% include mobile/intro-prebid-rendered.md platform="ios" %} -**Step 4** GMA SDK makes an ad request. GAM returns the winner of the waterfall. +## Event Handlers -**Step 5** Based on the ad response Prebid GAM Event Handler decides who has won on GAM - the Prebid bid or another ad source on GAM. +First, a little bit of setup is needed. -**Step 6** The winner is displayed in the App with the respective rendering engine. The winning bid will be renderd by Prebid SDK. Other winners will be rendered by GMA SDK. The GAM Event Handler manages this process. - -## Integrate Event Handlers +### Integrate Event Handlers -Prebid SDK provides rendering integration into GAM setup thru [app events](https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#app_events) mechanism. To integrate Prebid Event Handlers into your app, add the following line to your Podfile: +Prebid SDK provides rendering integration into the GMA SDK setup with the [app events](https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner#app_events) mechanism. To integrate Prebid Event Handlers into your app, add the following line to your Podfile: ```pod -pod 'PrebidMobileAdMobAdapters' +pod 'PrebidMobileGAMEventHandlers' ``` -## Event Handlers Initialization +### Event Handlers Initialization {: .alert.alert-warning :} **Warning:** GMA SDK is a closed library that sometimes works in unexpected ways. The `GADMobileAds.sharedInstance().start()` should be called in all bundles where it is used. Otherwise, GMA SDK won't load the ads with an error of: `adView:didFailToReceiveAdWithError: SDK tried to perform a networking task before being initialized.` @@ -48,7 +38,13 @@ To avoid this error add the following line to your app right after initializatio GAMUtils.shared.initializeGAM() ``` -## Banner API +## AdUnit-Specific instructions + +This section covers integration details for different ad formats. In each scenario, you'll be asked for a `configId` - this is a key worked out with your Prebid Server provider. It's used at runtime to pull in the bidders and parameters specific to this adunit. Depending on your Prebid Server partner, it may be a UUID or constructed out of parts like an account number and adunit name. + +### Banners + +#### Display Banners Integration example: @@ -69,8 +65,7 @@ addBannerToUI(banner: banner) banner.loadAd() ``` -### Step 1: Create Event Handler - +##### Step 1: Create Event Handler {:.no_toc} To create the `GAMBannerEventHandler` you should provide: @@ -78,8 +73,7 @@ To create the `GAMBannerEventHandler` you should provide: - a **GAM Ad Unit Id** - the list of available **sizes** for this ad unit. -### Step 2: Create Ad View - +##### Step 2: Create Ad View {:.no_toc} `BannerView` - is a view that will display the particular ad. It should be added to the UI. To create a BannerView you should provide: @@ -89,8 +83,7 @@ To create the `GAMBannerEventHandler` you should provide: You should also add the instance of `BannerView` to the UI. -### Step 3: Load the Ad - +##### Step 3: Load the Ad {:.no_toc} Call the method `loadAd()` which will: @@ -98,11 +91,9 @@ Call the method `loadAd()` which will: - make a bid request to Prebid Server. - render the winning bid on display. -## Banner Video +#### Banner Video (non-instream) -{:.no_toc} - -For **Banner Video** you also need to specify the ad format: +For non-instream **Banner Video** you also need to specify the ad format: ```swift banner.adFormat = .video @@ -110,9 +101,7 @@ banner.adFormat = .video The rest of the code will be the same as for integration of Display Banner. -### Migration from the original API - -{:.no_toc} +#### Migrating banners from a Bidding-Only integration GAM setup: @@ -122,13 +111,13 @@ GAM setup: Integration: -1. Replace the `GAMBannerView` with `BannerView` in the UI. +1. Replace the `AdManagerBannerView` with `BannerView` in the UI. 2. Implement the protocol `BannerViewDelegate` in the ViewController. -3. Remove usage of `GAMBannerView`, `GAMRequest`, and implementation of the `GADBannerViewDelegate`. +3. Remove usage of `AdManagerBannerView`, `AdManagerRequest`, and implementation of the `GoogleMobileAds.BannerViewDelegate`. 4. Remove original `BannerAdUnit`. -5. Follow the instructions to integrate [Banner API](#banner-api). +5. Follow the instructions to integrate [Banner API](#banners). -## Interstitial API +### Interstitials Integration example: @@ -137,9 +126,9 @@ Integration example: let eventHandler = GAMInterstitialEventHandler(adUnitID: GAM_AD_UNIT_ID) // 2. Create Interstitial Ad Unit -interstitial = InterstitialRenderingAdUnit (configID: CONFIG_ID, - minSizePercentage: CGSize(width: 30, height: 30), - eventHandler: eventHandler) +interstitial = InterstitialRenderingAdUnit(configID: CONFIG_ID, + minSizePercentage: MIN_SIZE_PERC, + eventHandler: eventHandler) interstitial.delegate = self @@ -169,14 +158,12 @@ adUnit?.adFormats = [.banner] ``` -### Step 1: Create Event Handler - +#### Step 1: Create Event Handler {:.no_toc} To create an event handler you should provide a **GAM Ad Unit**. -### Step 2: Create Interstitial Ad Unit - +#### Step 2: Create Interstitial Ad Unit {:.no_toc} Initialize the `InterstitialRenderingAdUnit` with properties: @@ -187,55 +174,52 @@ Initialize the `InterstitialRenderingAdUnit` with properties: > **NOTE:** the `minSizePercentage` - plays an important role in the bidding process for display ads. If provided space is not enough demand partners won't respond with bids. -### Step 3: Load the Ad - +#### Step 3: Load the Ad {:.no_toc} Call the method `loadAd()` which will make a bid request to Prebid Server. -### Step 4: Show the Ad when it is ready - +#### Step 4: Show the Ad when it is ready {:.no_toc} Wait for the Prebid Server to return an ad and show it to the user in any suitable time. ```swift -// MARK: InterstitialRenderingAdUnitDelegate +// MARK: InterstitialAdUnitDelegate func interstitialDidReceiveAd(_ interstitial: InterstitialAdUnit) { // Now the ad is ready for display } ``` -### Migration from the original API - -{:.no_toc} +#### Migrating interstitials from a Bidding-Only integration GAM setup: 1. Leave the original order and ad units as is. They are not relevant for the rendering approach but they will serve ads for released applications. 2. Create a new GAM ad unit. -3. Setup the new [GAM Order](prebid-mobile/modules/rendering/ios-sdk-integration-gam.html) for rendering approach. +3. Setup the new [GAM Order](/prebid-mobile/modules/rendering/ios-sdk-integration-gam.html) for rendering approach. Integration: -1. Replace the `GAMInterstitialAd` with `InterstitialRenderingAdUnit` in the View Controller. +1. Replace the `AdManagerInterstitialAd` with `InterstitialRenderingAdUnit` in the View Controller. 2. Implement the protocol `InterstitialAdUnitDelegate` in the View Controller. -3. Remove usage of `GAMInterstitialAd`, `GAMRequest`. +3. Remove usage of `AdManagerInterstitialAd`, `AdManagerRequest`. 4. Remove original `InterstitialAdUnit`. -5. Follow the instructions to integrate [Interstitial API](#interstitial-api). +5. Follow the instructions to integrate [Interstitial API](#interstitials). -## Rewarded API +### Rewarded -Integration example: +{% include mobile/rewarded-server-side-configuration.md %} + +#### Integration example ```swift // 1. Create an Event Handler let eventHandler = GAMRewardedEventHandler(adUnitID: GAM_AD_UNIT_ID) // 2. Create an Ad Unit -rewardedAd = RewardedAdUnit(configID: CONFIG_ID, - eventHandler: eventHandler) +rewardedAd = RewardedAdUnit(configID: CONFIG_ID, eventHandler: eventHandler) rewardedAd.delegate = self @@ -256,25 +240,28 @@ The proccess for displaying the Rewarded Ad is the same as for the Interstitial To be notified when a user earns a reward - implement the method of `RewardedAdUnitDelegate`: ```swift -- (void)rewardedAdUserDidEarnReward:(RewardedAdUnit *)rewardedAd; +func rewardedAdUserDidEarnReward(_ rewardedAd: RewardedAdUnit, reward: PrebidReward) {} ``` +##### Step 1: Create Event Handler +{:.no_toc} + The reward object is stored in the `RewardedAdUnit`: -```swift -if let reward = rewardedAd.reward as? GADAdReward { +{% capture gma12 %}if let reward = rewardedAd.reward as? GoogleMobileAds.AdReward { // ... } -``` - -### Step 1: Create Event Handler +{% endcapture %} +{% capture gma11 %}if let reward = rewardedAd.reward as? GADAdReward { + // ... +} +{% endcapture %} -{:.no_toc} +{% include code/gma-versions-tabs.html id="gam-reward" gma11=gma11 gma12=gma12 %} To create an event handler you should provide a **GAM Ad Unit ID**. -### Step 2: Create Rewarded Ad Unit - +##### Step 2: Create Rewarded Ad Unit {:.no_toc} Create the `RewardedAdUnit` object with parameters: @@ -282,14 +269,12 @@ Create the `RewardedAdUnit` object with parameters: - `configID` - an ID of Stored Impression on the Prebid server - `eventHandler` - the instance of rewarded event handler -### Step 3: Load the Ad - +##### Step 3: Load the Ad {:.no_toc} Call the `loadAd()` method which will make a bid request to Prebid server. -### Step 4: Show the Ad when it is ready - +##### Step 4: Show the Ad when it is ready {:.no_toc} Wait for the ad to load and display it to the user in any suitable time. @@ -302,20 +287,45 @@ func rewardedAdDidReceiveAd(_ rewardedAd: RewardedAdUnit) { } ``` -### Migration from the original API - +###### Step 4: Handle the reward {:.no_toc} +Handle the reward in the appropriate method. + +``` swift +// MARK: RewardedAdUnitDelegate + +func rewardedAdUserDidEarnReward(_ rewardedAd: RewardedAdUnit, reward: PrebidReward) { + let type = reward.type + let count = reward.count + let ext = reward.ext + + // Process the reward +} +``` + +#### Migrating Rewarded Video from a Bidding-Only integration + GAM setup: 1. Leave the original order and ad units as is. They are not relevant for the rendering approach but they will serve ads for released applications. 2. Create a new GAM ad unit. -3. Setup the new [GAM Order](prebid-mobile/modules/rendering/ios-sdk-integration-gam.html) for rendering approach. +3. Setup the new [GAM Order](/prebid-mobile/modules/rendering/ios-sdk-integration-gam.html) for rendering approach. Integration: -1. Replace the `GADRewardedAd` with `RewardedAdUnit` in the View Controller. +1. Replace the `RewardedAd` with `RewardedAdUnit` in the View Controller. 2. Implement the protocol `RewardedAdUnitDelegate` in the View Controller. -3. Remove usage of `GAMRequest`. +3. Remove usage of `AdManagerRequest`. 4. Remove original `RewardedVideoAdUnit`. -5. Follow the instructions to integrate [Rewarded API](#rewarded-api). +5. Follow the instructions to integrate [Rewarded API](#rewarded). + +## Additional Ad Unit Configuration + +{% include mobile/rendering-adunit-config-ios.md %} + +## Further Reading + +- [Prebid Mobile Overview](/prebid-mobile/prebid-mobile.html) +- [Prebid SDK iOS Integration](/prebid-mobile/pbm-api/ios/code-integration-ios.html) +- [Prebid SDK iOS Global Parameters](/prebid-mobile/pbm-api/ios/pbm-targeting-ios.html) diff --git a/prebid-mobile/modules/rendering/ios-sdk-integration-max.md b/prebid-mobile/modules/rendering/ios-sdk-integration-max.md index db1974d534..d8940e627c 100644 --- a/prebid-mobile/modules/rendering/ios-sdk-integration-max.md +++ b/prebid-mobile/modules/rendering/ios-sdk-integration-max.md @@ -1,41 +1,29 @@ --- layout: page_v2 -title: AppLovin MAX Integration -description: Integration of Prebid Rendering module whith AppLovin MAX +title: Integrating Prebid SDK iOS with AppLovin MAX +description: Integrating Prebid SDK iOS with AppLovin MAX sidebarType: 2 --- -# AppLovin MAX Integration +# Prebid SDK iOS with AppLovin MAX Integration Method {:.no_toc} -The integration of Prebid Mobile with AppLovin MAX assumes that publisher has a MAX account and has integrated the AppLovin MAX SDK into the app. - -See the [AppLovin MAX Documentation](https://dash.applovin.com/documentation/mediation/ios/getting-started/integration) for the MAX integration details. - -* TOC +- TOC {:toc} -## MAX Integration Overview - -![Rendering with AppLovin MAX as the Primary Ad Server](/assets/images/prebid-mobile/modules/rendering/prebid-in-app-bidding-overview-max.png) - -**Steps 1-2** Prebid SDK makes a bid request. Prebid Server runs an auction and returns the winning bid. - -**Step 3** MAX SDK makes an ad request. MAX returns the waterfall with respective placements. - -**Step 4** For each Prebid placement, the MAX SDK sequentially instantiates an adapter. - -**Step 5** The adapter verifies the targeting keywords of the winning bid and the custom properties of the given placement. If they match the adapter will render the winning bid. Otherwise, the adpater will immediately fail with a "no ad" error and the next placement will instantiate the same adapter but for another custom properties. +{% include mobile/intro-applovin.md platform="ios" %} -## Integrate Prebid Adapters +## Setup Prebid SDK is integrated into AppLovin MAX setup thru custom adapters. To integrate Prebid adapters into your app add the following line to your Podfile: -``` +```swift pod 'PrebidMobileMAXAdapters' ``` -## Banner API +## Adunit Specific Instructions + +### Banners Integration example: @@ -65,11 +53,10 @@ adUnit?.fetchDemand { [weak self] result in This step is the same as for the original [MAX integration](https://dash.applovin.com/documentation/mediation/ios/getting-started/banners#loading-a-banner). You don't have to make any modifications here. - #### Step 2: Create MAXMediationBannerUtils {:.no_toc} -The `MAXMediationBannerUtils ` is a helper class, which performs certain utilty work for the `MediationBannerAdUnit`, like passing the targeting keywords to the adapters and checking the visibility of the ad view. +The `MAXMediationBannerUtils` is a helper class, which performs certain utility work for the `MediationBannerAdUnit`, like passing the targeting keywords to the adapters and checking the visibility of the ad view. #### Step 3: Create MediationBannerAdUnit {:.no_toc} @@ -86,7 +73,7 @@ The `fetchDemand` method makes a bid request to Prebid Server and provides a res Make a regular MAX's ad request. Everything else will be handled by prebid adapters. -## Interstitial API +### Interstitials Integration example: @@ -136,11 +123,10 @@ adUnit?.adFormats = [.banner] This step is the same as for the original [MAX integration](https://dash.applovin.com/documentation/mediation/ios/getting-started/interstitials). You don't have to make any modifications here. - #### Step 2: Create MAXMediationInterstitialUtils {:.no_toc} -The `MAXMediationInterstitialUtils` is a helper class, which performs certain utilty work for the `MediationInterstitialAdUnit `, like passing the targeting keywords to the adapters and checking the visibility of the ad view. +The `MAXMediationInterstitialUtils` is a helper class, which performs certain utility work for the `MediationInterstitialAdUnit`, like passing the targeting keywords to the adapters and checking the visibility of the ad view. #### Step 3: Create MediationInterstitialAdUnit {:.no_toc} @@ -162,9 +148,11 @@ Now you should make a regular MAX's ad request. Everything else will be handled Once you receive the ad it will be ready for display. Follow the [MAX instructions](https://dash.applovin.com/documentation/mediation/ios/getting-started/interstitials#showing-an-interstitial-ad) for displaying an ad. -## Rewarded API +### Rewarded -Integration example: +{% include mobile/rewarded-server-side-configuration.md %} + +#### Integration example ```swift // 1. Get an instance of MARewardedAd @@ -190,38 +178,37 @@ The process for displaying the rewarded ad is the same as for displaying the Int To be notified when a user earns a reward follow the [MAX intructions](https://dash.applovin.com/documentation/mediation/ios/getting-started/rewarded-ads#loading-a-rewarded-ad). -#### Step 1: Get an instance of MARewardedAd +##### Step 1: Get an instance of MARewardedAd {:.no_toc} This step is the same as for the original [MAX integration](https://dash.applovin.com/documentation/mediation/ios/getting-started/rewarded-ads). You don't have to make any modifications here. - -#### Step 2: Create MAXMediationRewardedUtils +##### Step 2: Create MAXMediationRewardedUtils {:.no_toc} -The `MAXMediationRewardedUtils` is a helper class, which performs certain utilty work for the `MediationRewardedAdUnit`, like passing the targeting keywords to the adapters. +The `MAXMediationRewardedUtils` is a helper class, which performs certain utility work for the `MediationRewardedAdUnit`, like passing the targeting keywords to the adapters. -#### Step 3: Create MediationRewardedAdUnit +##### Step 3: Create MediationRewardedAdUnit {:.no_toc} The `MediationRewardedAdUnit` is a part of the Prebid Mediation API. This class is responsible for making a bid request and providing a winning bid and targeting keywords to the adapters. -#### Step 4: Make bid request +##### Step 4: Make bid request {:.no_toc} The `fetchDemand` method makes a bid request to the Prebid Server and provides a result in a completion handler. -#### Step 5: Make an Ad Reuest +##### Step 5: Make an Ad Reuest {:.no_toc} Make a regular MAX's ad request. Everything else will be handled by GMA SDK and prebid adapters. -#### Steps 6: Display an ad +##### Steps 6: Display an ad {:.no_toc} Once the rewarded ad is received you can display it. Follow the [MAX instructions](https://dash.applovin.com/documentation/mediation/ios/getting-started/rewarded-ads#showing-a-rewarded-ad) for the details. -## Native Ads +### Native Ads Integration example: @@ -263,12 +250,12 @@ Prepare the `MANativeAdLoader` object before you make a bid request. It will be #### Step 2: Create MAXMediationNativeUtils {:.no_toc} -The `MAXMediationNativeUtils` is a helper class, which performs certain utilty work for `MediationNativeAdUnit`, like passing the targeting keywords to adapters and checking the visibility of the ad view. +The `MAXMediationNativeUtils` is a helper class, which performs certain utility work for `MediationNativeAdUnit`, like passing the targeting keywords to adapters and checking the visibility of the ad view. #### Step 3: Create and configure MediationNativeAdUnit {:.no_toc} -The `MediationNativeAdUnit` is a part of the Prebid Mediation API. This class is responsible for making a bid request and providing a winning bid and targeting keywords to the adapters. Fot the better targetting you should provide additional properties like `conteaxtType` and `placemantType`. +The `MediationNativeAdUnit` is a part of the Prebid Mediation API. This class is responsible for making a bid request and providing a winning bid and targeting keywords to the adapters. For better targeting you should provide additional properties like `contextType` and `placementType`. #### Step 4: Set up assets for bid request {:.no_toc} @@ -277,7 +264,7 @@ The bid request for native ads should have the description of expected assets. T The example of creating the assets array: -``` +```swift let image = NativeAssetImage(minimumWidth: 200, minimumHeight: 50, required: true) image.type = ImageAsset.Main @@ -302,7 +289,7 @@ The bid request for mative ads may have a descrition of expected event trackers. The example of creating the event trackers array: -``` +```swift let eventTrackers = [ NativeEventTracker(event: EventType.Impression, methods: [EventTracking.Image,EventTracking.js]) @@ -318,3 +305,13 @@ The `fetchDemand` method makes a bid request to Prebid Server and provides a res {:.no_toc} Load a native ad from MAX according to the [MAX instructions](https://dash.applovin.com/documentation/mediation/ios/getting-started/native-manual#load-the-native-ad). + +## Additional Ad Unit Configuration + +{% include mobile/rendering-adunit-config-ios.md %} + +## Further Reading + +- [Prebid Mobile Overview](/prebid-mobile/prebid-mobile) +- [Prebid SDK iOS Integration](/prebid-mobile/pbm-api/ios/code-integration-ios) +- [Prebid SDK iOS Global Parameters](/prebid-mobile/pbm-api/ios/pbm-targeting-ios) diff --git a/prebid-mobile/modules/rendering/ios-sdk-integration-pb.md b/prebid-mobile/modules/rendering/ios-sdk-integration-pb.md index 16ce40ef90..84551144a7 100644 --- a/prebid-mobile/modules/rendering/ios-sdk-integration-pb.md +++ b/prebid-mobile/modules/rendering/ios-sdk-integration-pb.md @@ -1,43 +1,50 @@ --- layout: page_v2 -title: Custom or No mediation -description: Integration of Prebid SDK without Primary Ad Server SDK +title: Prebid SDK iOS with a Custom Bidding Integration +description: Integration of iOS Prebid SDK in a special scenario sidebarType: 2 --- -# Custom Bidding Integration +# Prebid SDK iOS with a Custom Bidding Integration Method {:.no_toc} -You can use Prebid SDK to monetize your app with a custom ad server or even without it. Use the `Transport API` to obtain the targeting keywords for following usage with the custom ad server. Use the `Rendering API` to display the winning bid without primary ad server and its SDK. - -* TOC +- TOC {:toc} -## Transport API +{% include mobile/intro-custom.md platform='ios' %} + +## Rendering Approaches + +The code implementation details depend on which rendering approach you've chosen: + +- [Bidding Only](#bidding-only) +- [Prebid Rendered](#prebid-rendered) -The default ad server for Prebid's Mobile SDK is GAM. The SDK can be expanded to include support for 3rd party ad servers through the fetchDemand function. This function returns additional bid information like Prebid Server bidder key/values (targeting keys), which can then be passed to the ad server of choice. +### Bidding Only -In this mode, the publisher will be responsible for the following actions: +While the default ad server for Prebid's Mobile SDK is GAM, it can be expanded to include support for 3rd party ad servers through the fetchDemand function. This function returns the Prebid Server bidder key/values (targeting keys), which can then be passed to the ad server of choice. -* Call the `fetchDemand` method with specific callback -* Retrieve targeting keys from the `BidInfo` callback parameter -* Convert targeting keys into the format for your ad server -* Pass converted keys to your ad server -* Render ad with Prebid Universal Creative or custom renderer +In this mode, the developer is responsible for the following actions: + +- Call the `fetchDemand()` method with specific callback +- Retrieve targeting keys from the `BidInfo` callback parameter +- Convert targeting keys into the format for your ad server +- Pass converted keys to your ad server +- Render ad with Prebid Universal Creative or custom renderer This approach is available for the following ad formats: -* Display Banner via `BannerAdUnit` -* Video Banner and Instream Video via `VideoAdUnit` -* Display Interstitial via `InterstitialAdUnit` -* Video Interstitial via `VideoInterstitialAdUnit` -* Rewarded Video via `RewardedVideoAdUnit` -* Native Styles via `NativeRequest` -* Multiformat ad unit via `PrebidAdUnit` +- Display Banner via `BannerAdUnit` +- Video Banner and Instream Video via `VideoAdUnit` (The class has been removed in the PrebidMobile `3.0.0`. Use the `InStreamVideoAdUnit` instead) +- Display Interstitial via `InterstitialAdUnit` +- Video Interstitial via `VideoInterstitialAdUnit` (The class has been removed in the PrebidMobile `3.0.0`. Use the `InterstitialAdUnit` with video ad format instead) +- Rewarded Video via `RewardedVideoAdUnit` +- Native Styles via `NativeRequest` +- Multiformat ad unit via `PrebidAdUnit` -The basic integration steps for these ad units you can find at the page for integration using [Original API](/prebid-mobile/pbm-api/ios/ios-sdk-integration-gam-original-api.html). The diference is that you should use the `fetchDemand` function with following signature: +The basic steps for these ad units you can find at the page for [GAM Bidding Only integration](/prebid-mobile/pbm-api/ios/ios-sdk-integration-gam-original-api.html). The diference is that you should use the `fetchDemand` function with following signature: ``` swift public func fetchDemand(adObject: AnyObject, request: PrebidRequest, @@ -58,13 +65,13 @@ adUnit.fetchDemand(adObject: gamRequest, request: prebidRequest) { [weak self] b The `BidInfo` provides the following properties: -* `resultCode` - the object of type `ResultCode` describing the status of the bid request. -* `targetingKeywords` - the targeting keywords of the winning bid -* `exp` - the number of seconds that may elapse between the auction and the actual impression. In this case, it indicates the approximate TTL of the bid in the Prebid Cache. Note that the actual expiration time of the bid will be less than this number due to the network and operational overhead. The Prebid SDK doesn't make any adjustments to this value. -* `nativeAdCacheId` - the local cache ID of the winning bid. Applied only to the `native` ad format. -* `events` - the map of some publically available event URLs attached to the bid. These can be used to enable Prebid Server-based analytics when the Prebid Universal Creative (PUC) is not involved in the rendering process. If the PUC is used for rendering, it will take care of hitting these events. These are the available event URLs: - * **EVENT_WIN** - this bid was chosen by the ad server as the one to display. This is the main metric for banner and native. This returns the OpenRTB `seatbid.bid.ext.prebid.events.win` field. (requires SDK v2.1.6) - * **EVENT_IMP** - the ad creative for this bid was actually displayed. This is often the main metric for video ads. This returns the OpenRTB `seatbid.bid.ext.prebid.events.imp` field. (requires SDK v2.1.6) +- `resultCode` - the object of type `ResultCode` describing the status of the bid request. +- `targetingKeywords` - the targeting keywords of the winning bid +- `exp` - the number of seconds that may elapse between the auction and the actual impression. In this case, it indicates the approximate TTL of the bid in the Prebid Cache. Note that the actual expiration time of the bid will be less than this number due to the network and operational overhead. The Prebid SDK doesn't make any adjustments to this value. +- `nativeAdCacheId` - the local cache ID of the winning bid. Applied only to the `native` ad format. +- `events` - the map of some publically available event URLs attached to the bid. These can be used to enable Prebid Server-based analytics when the Prebid Universal Creative (PUC) is not involved in the rendering process. If the PUC is used for rendering, it will take care of hitting these events. These are the available event URLs: + - **EVENT_WIN** - this bid was chosen by the ad server as the one to display. This is the main metric for banner and native. This returns the OpenRTB `seatbid.bid.ext.prebid.events.win` field. (requires SDK v2.1.6) + - **EVENT_IMP** - the ad creative for this bid was actually displayed. This is often the main metric for video ads. This returns the OpenRTB `seatbid.bid.ext.prebid.events.imp` field. (requires SDK v2.1.6) Code sample to extract the events: @@ -73,13 +80,13 @@ let win = bidInfo.events[BidInfo.EVENT_WIN] let imp = bidInfo.events[BidInfo.EVENT_IMP] ``` -## Rendering API +### Prebid Rendered -The Rendering API integration and usage are similar to any other Ad SDK. In this case, Prebid SDK sends the bid requests to the Prebid Server and renders the winning bid. +The Rendering API integration and usage are similar to any other ad SDK. In this case, Prebid SDK sends the bid requests to the Prebid Server and renders the winning bid. ![In-App Bidding with Prebid](/assets/images/prebid-mobile/modules/rendering/Prebid-In-App-Bidding-Overview-Pure-Prebid.png) -### Banner API +#### HTML Banner Integration example: @@ -95,33 +102,32 @@ banner.delegate = self banner.loadAd() ``` -#### Step 1: Create Ad View +##### Step 1: Create Ad View {:.no_toc} Initialize the `BannerAdView` with properties: -* `frame` - the frame rectangle for the view -* `configID` - an ID of the Stored Impression on the Prebid Server -* `size` - the size of the ad unit which will be used in the bid request. +- `frame` - the frame rectangle for the view +- `configID` - an ID of the Stored Impression on the Prebid Server +- `size` - the size of the ad unit which will be used in the bid request. -#### Step 2: Load the Ad +##### Step 2: Load the Ad {:.no_toc} Call the method `loadAd()` which will: -* make a bid request to the Prebid Server. -* render the winning bid on display. +- make a bid request to the Prebid Server. +- render the winning bid on display. -#### Outstream Video -{:.no_toc} +#### Banner Video (non-instream) -For **Banner Video** you also need to specify the ad format: +**Banner Video** is the same as HTML banner, but you also need to specify the ad format: ``` swift banner.adFormat = .video ``` -### Interstitial API +#### Interstitials Integration example: @@ -144,36 +150,36 @@ if interstitial.isReady { ``` -The **default** ad format for interstitial is **.banner**. In order to make a `multiformat bid request`, set the respective values into the `adFormats` property. +The **default** ad formats for interstitial are **.banner** and **video**. In order to make a banner-only or video-only request, set the respective values into the `adFormats` property. ``` swift // Make bid request for video ad adUnit?.adFormats = [.video] -// Make bid request for both video and banner ads +// Make bid request for both video and banner ads (default behaviour) adUnit?.adFormats = [.video, .banner] -// Make bid request for banner ad (default behaviour) +// Make bid request for banner ad adUnit?.adFormats = [.banner] ``` -#### Step 1: Create an Ad Unit +##### Step 1: Create an Ad Unit {:.no_toc} Initialize the Interstitial Ad Unit with properties: -* `configID` - an ID of Stored Impression on the Prebid Server -* `minSizePercentage` - specifies the minimum width and height percent an ad may occupy of a device’s real estate. +- `configID` - an ID of Stored Impression on the Prebid Server +- `minSizePercentage` - specifies the minimum width and height percent an ad may occupy of a device’s real estate. > **NOTE:** minSizePercentage - plays an important role in a bidding process for banner ads. If provided space is not enough demand partners won't respond with the bids. -#### Step 2: Load the Ad +##### Step 2: Load the Ad {:.no_toc} Call the method `loadAd()` which will make a bid request to Prebid server. -#### Step 3: Show the Ad when it is ready +##### Step 3: Show the Ad when it is ready {:.no_toc} Wait until the ad will be loaded and present it to the user in any suitable time. @@ -186,9 +192,11 @@ func interstitialDidReceiveAd(_ interstitial: InterstitialRenderingAdUnit) { } ``` -### Rewarded API +#### Rewarded -Integration example: +{% include mobile/rewarded-server-side-configuration.md %} + +##### Integration example ``` swift // 1. Create an Ad Unit @@ -206,27 +214,63 @@ if rewardedAd.isReady { } ``` -#### Step 1: Create Rewarded Ad Unit +###### Step 1: Create Rewarded Ad Unit {:.no_toc} -Create the `RewardedAdUnit` object with parameter: +Create the `RewardedAdUnit` object with the parameter: + +- `configID` - an ID of Stored Impression on the Prebid Server + +You can also customize ad unit by setting additional properties: -* `configID` - an ID of Stored Impression on the Prebid Server +- `adFormats` - the set of ad formats supported by the ad unit(the default value is `[.banner, .video]` formats); +- `bannerParameters` - the banner parameters used for configuring ad unit; +- `videoParameters` - the video parameters used for configuring ad unit. -#### Step 2: Load the Ad +###### Step 2: Load the Ad {:.no_toc} Call the `loadAd()` method which will make a bid request to Prebid server. -#### Step 3: Show the Ad when it is ready +###### Step 3: Show the Ad when it is ready {:.no_toc} -Wait until the ad will be loaded and present it to the user in any suitable time. +Wait until the ad is loaded and present it to the user at any suitable time. ``` swift // MARK: RewardedAdUnitDelegate func rewardedAdDidReceiveAd(_ rewardedAd: RewardedAdUnit) { - // Now the ad is ready for display + // Now the ad is ready for display - call `show` method. + if rewardedAd.isReady { + rewardedAd.show(from: self) + } } ``` + +###### Step 4: Handle the reward +{:.no_toc} + +Handle the reward in the appropriate method. + +``` swift +// MARK: RewardedAdUnitDelegate + +func rewardedAdUserDidEarnReward(_ rewardedAd: RewardedAdUnit, reward: PrebidReward) { + let type = reward.type + let count = reward.count + let ext = reward.ext + + // Process the reward +} +``` + +## Additional Ad Unit Configuration + +{% include mobile/rendering-adunit-config-ios.md %} + +## Further Reading + +- [Prebid Mobile Overview](/prebid-mobile/prebid-mobile) +- [Prebid SDK iOS Integration](/prebid-mobile/pbm-api/ios/code-integration-ios) +- [Prebid SDK iOS Global Parameters](/prebid-mobile/pbm-api/ios/pbm-targeting-ios) diff --git a/prebid-mobile/modules/rendering/modules-rendering.md b/prebid-mobile/modules/rendering/modules-rendering.md index 9d82a5efd6..6b1f2cab98 100644 --- a/prebid-mobile/modules/rendering/modules-rendering.md +++ b/prebid-mobile/modules/rendering/modules-rendering.md @@ -17,7 +17,6 @@ Starting with `1.14.0-beta1` Prebid mobile supports integration with **AdMob**. Starting with `2.0.0` Prebid mobile supports integration with **AppLovin MAX**. - ## Supported Ad Formats Prebid Mobile rendering supports the following ad formats: @@ -26,7 +25,5 @@ Prebid Mobile rendering supports the following ad formats: * Video Banner * Display Interstitial * Video Interstitial -* Rewarded Video - - - +* Display Rewarded +* Video Rewarded diff --git a/prebid-mobile/modules/rendering/rendering-deeplinkplus.md b/prebid-mobile/modules/rendering/rendering-deeplinkplus.md index 4b5d8c943d..b0364bfada 100644 --- a/prebid-mobile/modules/rendering/rendering-deeplinkplus.md +++ b/prebid-mobile/modules/rendering/rendering-deeplinkplus.md @@ -19,10 +19,10 @@ Deep Link+ provides a premium user experience while letting advertisers scale re The new deeplinking format enables buyers to submit: - * primary URL - * fallback URL - * primary tracking URL - * fallback tracking URL +* primary URL +* fallback URL +* primary tracking URL +* fallback tracking URL And since Deep Link+ is built into the SDK, there is no need to pop up browser windows and re-directs that deteriorate the user experience. @@ -32,12 +32,11 @@ The schema is supported for both kinds of ads - video and display. The JSTag integration is not supported yet. - ## How it works - DSPs should rely on the SDK version in the bid request: -``` + +```json "displaymanagerver": "4.11.0" ``` @@ -45,7 +44,7 @@ Starting with version 4.11.0 Android SDK supports deeplink+ To leverage the retargeting campaigns buyers use a specific scheme as click URL in the ad response. That URL describes the deep-linking and failover logic: -``` +```text deeplink+://navigate? primaryUrl=PRIMARY_DEEPLINK& primaryTrackingUrl=PRIMARY_TRACKER& @@ -59,7 +58,7 @@ The `fallbackUrl` can be any supported URI type (e.g., http, traditional deeplin For example, below is a Deep Link+ URL whose primary target is the Twitter app, with two (2) primary tracker URLs, a fallback URL directing the user to Twitter’s mobile website if the primary deeplink fails and zero (0) fallback tracker URLs: -``` +```text deeplink+://navigate? primaryUrl=twitter%3A%2F%2Ftimeline& primaryTrackingUrl=http%3A%2F%2Fmopub.com%2Fclicktracking& diff --git a/prebid-mobile/pbm-api/android/android-sdk-integration-gam-original-api.md b/prebid-mobile/pbm-api/android/android-sdk-integration-gam-original-api.md index 4484b2f197..7d2df6902c 100755 --- a/prebid-mobile/pbm-api/android/android-sdk-integration-gam-original-api.md +++ b/prebid-mobile/pbm-api/android/android-sdk-integration-gam-original-api.md @@ -1,1485 +1,70 @@ --- layout: page_v2 -title: Prebid Mobile - GAM with Original API -description: Overview of Prebid Mobile API for Android -top_nav_section: prebid-mobile -nav_section: prebid-mobile +title: Prebid Mobile - GAM Bidding-Only Integration - Android +description: Integration of Prebid SDK Android With Google Ad Manager using the 'Bidding-Only' integration sidebarType: 2 --- -# Prebid Mobile with GAM (Original API) +# Prebid SDK Android with the GAM Bidding-Only Integration Method {:.no_toc} -Prebid Mobile is an open-source library that provides an end-to-end header bidding solution for mobile app publishers. - - TOC {:toc} -## Overview - -This is the original Prebid mobile integration approach when SDK plays the transport role, and the winning bid is rendered by the Primary Ad Server SDK using PUC. You can find details of how it works and other integration approaches on the [overview page](/prebid-mobile/prebid-mobile.html#with-ad-server-original-api). - -![In-App Bidding with Prebid](/assets/images/prebid-mobile/prebid-in-app-bidding-overview-prebid-original-gam.png) - -## Banner API - -Starting with Prebid Mobile `2.1.0` you can use `BannerAdUnit` to bid over the banner and/or video demand. The default ad format is `BANNER`. To customize the bidding format, specify the ad formats in the `BannerAdUnit` constructor. - -### HTML Banner - -Integration example: - -```kotlin -private fun createAd() { - - // 1. Create BannerAdUnit - adUnit = BannerAdUnit(CONFIG_ID, WIDTH, HEIGHT) - adUnit?.setAutoRefreshInterval(refreshTimeSeconds) - - // 2. Configure banner parameters - val parameters = BannerParameters() - parameters.api = listOf(Signals.Api.MRAID_3, Signals.Api.OMID_1) - adUnit.bannerParameters = parameters - - // 3. Create AdManagerAdView - val adView = AdManagerAdView(this) - adView.adUnitId = AD_UNIT_ID - adView.setAdSizes(AdSize(WIDTH, HEIGHT)) - adView.adListener = createGAMListener(adView) - - // Add GMA SDK banner view to the app UI - adWrapperView.addView(adView) - - // 4. Make a bid request to Prebid Server - val request = AdManagerAdRequest.Builder().build() - adUnit?.fetchDemand(request) { - - // 5. Load GAM Ad - adView.loadAd(request) - } -} -``` - -GAM ad view listener: - -```kotlin -private fun createGAMListener(adView: AdManagerAdView): AdListener { - return object : AdListener() { - override fun onAdLoaded() { - super.onAdLoaded() - - // 6. Resize ad view if needed - AdViewUtils.findPrebidCreativeSize(adView, object : AdViewUtils.PbFindSizeListener { - override fun success(width: Int, height: Int) { - adView.setAdSizes(AdSize(width, height)) - } - - override fun failure(error: PbFindSizeError) {} - }) - } - } -} -``` - -#### Step 1: Create a BannerAdUnit -{:.no_toc} - -Initialize the `BannerAdUnit` with properties: - -- `configId` - an ID of the Stored Impression on the Prebid Server -- `width` - the width of the ad unit which will be used in the bid request. -- `height` - the height of the ad unit which will be used in the bid request. - -#### Step 2: Configure banner parameters -{:.no_toc} - -Using the `BannerParameters()` you can customize the bid request for BannerAdUnit. - -{: .alert.alert-warning :} -Starting from PrebidMobile `2.1.0` the `BannerBaseAdUnit.Parameters` class is deprecated. Use `BannerParameters` instead. - -The `api` property is dedicated to adding values for API Frameworks to a bid response according to the [OpenRTB 2.5](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf) spec. The supported values for GMA SDK integration are: - -- `3` or `Signals.Api.MRAID_1` : MRAID-1 support signal -- `5` or `Signals.Api.MRAID_2` : MRAID-2 support signal -- `6` or `Signals.Api.MRAID_3` : MRAID-3 support signal -- `7` or `Signals.Api.OMID_1` : signals OMSDK support - -#### Step 3: Create an AdManagerAdView -{:.no_toc} - -Follow the [GMA SDK documentation](https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner) to integrate a banner ad unit. - -#### Step 4: Make a bid request -{:.no_toc} - -The `fetchDemand` method makes a bid request to the Prebid Server. You should provide an `AdManagerAdRequest` object to this method so Prebid SDK sets the targeting keywords of the winning bid for future ad requests. - -#### Step 5: Load an Ad -{:.no_toc} - -You should now request the ad from GAM. If the `AdManagerAdRequest` contains targeting keywords, the respective Prebid line item will be returned from GAM, and GMA SDK will render its creative. - -Be sure that you make the ad request with the same `AdManagerAdRequest` object that you passed to the `fetchDemand` method. Otherwise, the ad request won't contain the targeting keywords, and Prebid's ad won't ever be displayed. - -#### Step 6: Adjust the ad view size -{:.no_toc} - -Once an app receives a signal that an ad is loaded, you should use the method `AdViewUtils.findPrebidCreativeSize` to verify whether it's Prebid's ad and resize the ad slot respectively to the creative's properties. - -### Video Banner (Outstream Video) - -Integration example: - -```kotlin -private fun createAd() { - // 1. Create VideoAdUnit - adUnit = BannerAdUnit(CONFIG_ID, WIDTH, HEIGHT, EnumSet.of(AdUnitFormat.VIDEO)) - - // 2. Configure video ad unit - adUnit?.videoParameters = configureVideoParameters() - - // 3. Create AdManagerAdView - val gamView = AdManagerAdView(this) - gamView.adUnitId = AD_UNIT_ID - gamView.setAdSizes(AdSize(WIDTH, HEIGHT)) - gamView.adListener = createListener(gamView) - - adWrapperView.addView(gamView) - - // 4. Make an ad request - val request = AdManagerAdRequest.Builder().build() - adUnit?.fetchDemand(request) { - gamView.loadAd(request) - } -} -``` - -{: .alert.alert-warning :} -Starting from PrebidMobile `2.1.0` the `VideoAdUnit` class is deprecated. Use `BannerAdUnit` class with video ad format instead. - -Configure Video parameters: - -```kotlin -private fun configureVideoParameters(): VideoParameters { - return VideoParameters(listOf("video/x-flv", "video/mp4")).apply { - api = listOf( - Signals.Api.VPAID_1, - Signals.Api.VPAID_2 - ) - - maxBitrate = 1500 - minBitrate = 300 - maxDuration = 30 - minDuration = 5 - playbackMethod = listOf(Signals.PlaybackMethod.AutoPlaySoundOn) - protocols = listOf( - Signals.Protocols.VAST_2_0 - ) - } -} -``` - -Setup ad listener: - -```kotlin -private fun createListener(gamView: AdManagerAdView): AdListener { - return object : AdListener() { - override fun onAdLoaded() { - AdViewUtils.findPrebidCreativeSize(gamView, object : PbFindSizeListener { - override fun success(width: Int, height: Int) { - gamView.setAdSizes(AdSize(width, height)) - } - - override fun failure(error: PbFindSizeError) {} - }) - } - } -} -``` - -#### Step 1: Create a BannerAdUnit with the video ad type -{:.no_toc} - -Initialize the `BannerAdUnit` with the following properties: - -- `configId` - an ID of the Stored Impression on the Prebid Server -- `adSize` - the size of the ad unit which will be used in the bid request. -- `adUnitFormats` - `AdUnitFormat.VIDEO` for a video ad - -#### Step 2: Configure video parameters -{:.no_toc} - -Using the `VideoParameters` you can customize the bid request for a `BannerAdUnit`. - -{: .alert.alert-warning :} -Starting from PrebidMobile `2.1.0` the `VideoBaseAdUnit.Parameters` class is deprecated. Use `VideoParameters` instead. - -#### placement -{:.no_toc} - -[OpenRTB 2.5](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf) Placement Type for the auction can be expressed as an integer array or can use an enum for easier readability. Option 1 (in-stream) is intentionally left out due to lack of in-stream support in Prebid SDK. - -In the context of a VideoInterstitialAdUnit, rewarded video ads are typically labeled as interstitial. As such, Prebid SDK will default to value 5 if no placement value is supplied. - -- `2` or `InBanner` : In-Banner placement exists within a web banner that leverages the banner space to deliver a video experience as opposed to another static or rich media format. The format relies on the existence of display ad inventory on the page for its delivery. -- `3` or `InArticle` : In-Article placement loads and plays dynamically between paragraphs of editorial content; existing as a standalone branded message. -- `4` or `InFeed` : In-Feed placement is found in content, social, or product feeds. -- `5` or `Slider`, `Floating` or `Interstitial` : Open RTB supports one of three values for option 5 as either Slider, Floating or Interstitial. If an enum value is supplied in placement, bidders will receive value 5 for placement type and assume to be interstitial with the instl flag set to 1. - -#### api -{:.no_toc} - -The `api` property is dedicated to adding values for API Frameworks to a bid response according to the [OpenRTB 2.5](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf) spec. The supported values for GMA SDK integration are: - -- `1` or `Signals.Api.VPAID_1` : VPAID 1.0 -- `2` or `Signals.Api.VPAID_2` : VPAID 2.0 -- `3` or `Signals.Api.MRAID_1` : MRAID-1 support signal -- `5` or `Signals.Api.MRAID_2` : MRAID-2 support signal -- `6` or `Signals.Api.MRAID_3` : MRAID-3 support signal -- `7` or `Signals.Api.OMID_1` : signals OMSDK support - -#### maxBitrate -{:.no_toc} - -Integer representing the OpenRTB 2.5 maximum bit rate in Kbps. - -#### minBitrate -{:.no_toc} - -Integer representing the OpenRTB 2.5 minimum bit rate in Kbps. - -#### maxDuration -{:.no_toc} - -Integer representing the OpenRTB 2.5 maximum video ad duration in seconds. - -#### minDuration -{:.no_toc} - -Integer representing the OpenRTB 2.5 minimum video ad duration in seconds. - -#### mimes -{:.no_toc} - -Array of strings representing the supported OpenRTB 2.5 content MIME types (e.g., “video/x-ms-wmv”, “video/mp4”). - -#### playbackMethod -{:.no_toc} - -Array of OpenRTB 2.5 playback methods. If none are specified, any method may be used. Only one method is typically used in practice. It is strongly advised to use only the first element of the array. - -- `1` or `Signals.PlaybackMethod.AutoPlaySoundOn` : Initiates on Page Load with Sound On -- `2` or `Signals.PlaybackMethod.AutoPlaySoundOff` : Initiates on Page Load with Sound Off by Default -- `3` or `Signals.PlaybackMethod.ClickToPlay` : Initiates on Click with Sound On -- `4` or `Signals.PlaybackMethod.MouseOver` : Initiates on Mouse-Over with Sound On -- `5` or `Signals.PlaybackMethod.EnterSoundOn` : Initiates on Entering Viewport with Sound On -- `6` or `Signals.PlaybackMethod.EnterSoundOff`: Initiates on Entering Viewport with Sound Off by Default - -#### protocols -{:.no_toc} - -Array or enum of OpenRTB 2.5 supported Protocols. Values can be one of: - -- `1` or `Signals.Protocols.VAST_1_0` : VAST 1.0 -- `2` or `Signals.Protocols.VAST_2_0` : VAST 2.0 -- `3` or `Signals.Protocols.VAST_3_0` : VAST 3.0 -- `4` or `Signals.Protocols.VAST_1_0_Wrapper` : VAST 1.0 Wrapper -- `5` or `Signals.Protocols.VAST_2_0_Wrapper` : VAST 2.0 Wrapper -- `6` or `Signals.Protocols.VAST_3_0_Wrapper` : VAST 3.0 Wrapper -- `7` or `Signals.Protocols.VAST_4_0` : VAST 4.0 -- `8` or `Signals.Protocols.VAST_4_0_Wrapper` : VAST 4.0 Wrapper - -#### Step 3: Create an AdManagerAdView -{:.no_toc} - -Just follow the [GMA SDK documentation](https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner) to integrate a banner ad unit. - -#### Step 4: Make a bid request -{:.no_toc} - -The `fetchDemand` method makes a bid request to the Prebid Server. You should provide an `AdManagerAdRequest` object to this method so Prebid SDK sets the targeting keywords of the winning bid for future ad requests. - -#### Step 5: Load an Ad -{:.no_toc} - -You should now request the ad from GAM. If the `AdManagerAdRequest` contains targeting keywords, the respective Prebid line item will be returned from GAM, and GMA SDK will render its creative. - -Be sure that you make the ad request with the same `AdManagerAdRequest` object that you passed to the `fetchDemand` method. Otherwise, the ad request won't contain targeting keywords, and Prebid's ad won't ever be displayed. - -### Multiformat Banner (HTML + Video) - -Integration example: - -```kotlin -// 1. Create BannerAdUnit -adUnit = BannerAdUnit(configId, WIDTH, HEIGHT, EnumSet.of(AdUnitFormat.BANNER, AdUnitFormat.VIDEO)) -adUnit?.setAutoRefreshInterval(refreshTimeSeconds) - -// 2. Configure banner and video parameters -val parameters = BannerParameters() -parameters.api = listOf(Signals.Api.MRAID_3, Signals.Api.OMID_1) -adUnit?.bannerParameters = parameters - -adUnit?.videoParameters = VideoParameters(listOf("video/mp4")) - -// 3. Create AdManagerAdView -val adView = AdManagerAdView(this) -adView.adUnitId = AD_UNIT_ID -adView.setAdSizes(AdSize(WIDTH, HEIGHT)) -adView.adListener = createGAMListener(adView) - -// Add GMA SDK banner view to the app UI -adWrapperView.addView(adView) - -// 4. Make a bid request to Prebid Server -val request = AdManagerAdRequest.Builder().build() -adUnit?.fetchDemand(request) { - - // 5. Load GAM Ad - adView.loadAd(request) -} -``` - -#### Step 1: Create a BannerAdUnit -{:.no_toc} - -Initialize the `BannerAdUnit` with properties: - -- `configId` - an ID of the Stored Impression on the Prebid Server -- `width` - the width of the ad unit which will be used in the bid request. -- `height` - the height of the ad unit which will be used in the bid request. -- `adUnitFormats` - ad unit formats for the current ad unit. +{% include mobile/intro-bidding-only.md platform='android' %} -#### Step 2-5 -{:.no_toc} - -Steps 2-5 are the same as for Display Banner. Setting up banner and video parameters can be found in Display Banner and Video Banner respectively. - -## Interstitial API - -Starting with Prebid Mobile `2.1.0` you can use `InterstitialAdUnit` to bid over the banner and/or video demand. The default ad format is `BANNER`. To customize the bidding format, specify the ad formats in the `InterstitialAdUnit` constructor. - -### HTML Interstitial - -Integration example: - -```kotlin -private fun createAd() { - // 1. Create InterstitialAdUnit - adUnit = InterstitialAdUnit(CONFIG_ID, 80, 60) - - // 2. Make a bid request to Prebid Server - val request = AdManagerAdRequest.Builder().build() - adUnit?.fetchDemand(request) { - - // 3. Load a GAM interstitial ad - AdManagerInterstitialAd.load( - this, - AD_UNIT_ID, - request, - createListner()) - } -} -``` - -You also need to implement `AdManagerInterstitialAdLoadCallback` in order to track the ad rediness: - -```kotlin -private fun createListner(): AdManagerInterstitialAdLoadCallback { - return object : AdManagerInterstitialAdLoadCallback() { - - override fun onAdLoaded(adManagerInterstitialAd: AdManagerInterstitialAd) { - super.onAdLoaded(adManagerInterstitialAd) - - // 4. Present the interstitial ad - adManagerInterstitialAd.show(this@GamOriginalApiDisplayInterstitialActivity) - } - - override fun onAdFailedToLoad(loadAdError: LoadAdError) { - super.onAdFailedToLoad(loadAdError) - Log.e("GAM", "Ad failed to load: $loadAdError") - } - } -} -``` - -#### Step 1: Create an InterstitialAdUnit -{:.no_toc} - -Initialize the Interstitial Ad Unit with properties: - -- `configId` - an ID of Stored Impression on the Prebid Server -- `minWidthPerc`: Optional parameter to specify the minimum width percent an ad may occupy of a device's screen. Support in SDK version 1.2+ -- `minHeightPrec`: Optional parameter to specify the minimum height percent an ad may occupy of a device's screen. Support in SDK version 1.2+ - -> **NOTE:** As of version 1.2+, Prebid SDK has extended the functionality of Interstitial ad monetization by using a smart ad size selection process to monetize sizes smaller than full screen ads. App developers can specify a minimum width and minimum height percentage an ad can occupy of a devices screen, with Prebid Server (PBS) deriving a limited set of ad sizes (max 10) as eligible for the auction. -> -> PBS will take the AdUnit's size (width and height) as the max size for the interstitial as size, generating a list of ad sizes, selecting the first 10 sizes that fall within the imp's max size and minimum percentage size. All the interstitial parameters will still be passed to the bidders, allowing them to use their own size matching algorithms if they prefer. -> -> Prebid Server will send the eligible size list to each bidder to solicit a bid. For a full description of the Prebid Server logic, please refer to the [Prebid Server PR 797](https://github.com/prebid/prebid-server/pull/797/files). - -#### Step 2: Make a bid request -{:.no_toc} - -The `fetchDemand` method makes a bid request to the prebid server. You should provide an `AdManagerAdRequest` object to this method so Prebid SDK sets the targeting keywords of the winning bid for future ad requests. - -#### Step 3: Load a GAM interstitial ad -{:.no_toc} - -You should now request the ad from GAM. If the `AdManagerAdRequest` contains targeting keywords, the respective Prebid line item will be returned from GAM, and GMA SDK will render its creative. - -Be sure that you make the ad request with the same `AdManagerAdRequest` object that you passed to the `fetchDemand` method. Otherwise, the ad request won't contain targeting keywords, and Prebid's ad won't ever be displayed. - -#### Step 4: Present the interstitial ad -{:.no_toc} - -Follow the [GMA SDK guide](https://developers.google.com/ad-manager/mobile-ads-sdk/android/interstitial#display_the_ad) to display an interstitial ad right after receiving it or later in a natural pauses in the flow of an app. - -### Video Interstitial - -Integration Example: - -```kotlin -private fun createAd() { - - // 1. Create InterstitialAdUnit - adUnit = InterstitialAdUnit(CONFIG_ID, EnumSet.of(AdUnitFormat.VIDEO)) - - // 2. Configure video ad unit - adUnit?.videoParameters = configureVideoParameters() - - // 3. Make a bid request to Prebid Server - val request = AdManagerAdRequest.Builder().build() - adUnit?.fetchDemand(request) { - - // 4. Load a GAM ad - AdManagerInterstitialAd.load( - this@GamOriginalApiVideoInterstitialActivity, - AD_UNIT_ID, - request, - createAdListener() - ) - } -} -``` - -{: .alert.alert-warning :} -Starting from PrebidMobile `2.1.0` the `VideoInterstitialAdUnit` class is deprecated. Use `InterstitialAdUnit` class with video ad format instead. - -Configuration function: - -```kotlin -private fun configureVideoParameters(): VideoParameters { - return VideoParameters(listOf("video/x-flv", "video/mp4")).apply { - placement = Signals.Placement.Interstitial - - api = listOf( - Signals.Api.VPAID_1, - Signals.Api.VPAID_2 - ) - - maxBitrate = 1500 - minBitrate = 300 - maxDuration = 30 - minDuration = 5 - playbackMethod = listOf(Signals.PlaybackMethod.AutoPlaySoundOn) - protocols = listOf( - Signals.Protocols.VAST_2_0 - ) - } -} -``` - -GAM Ad Listener: - -```kotlin -private fun createAdListener(): AdManagerInterstitialAdLoadCallback { - return object : AdManagerInterstitialAdLoadCallback() { - override fun onAdLoaded(interstitialAd: AdManagerInterstitialAd) { - super.onAdLoaded(interstitialAd) - - // 5. Display an interstitial ad - interstitialAd.show(this@GamOriginalApiVideoInterstitialActivity) - } - - override fun onAdFailedToLoad(loadAdError: LoadAdError) { - super.onAdFailedToLoad(loadAdError) - Log.e("GAM", "Ad failed to load: $loadAdError") - } - } -} -``` - -#### Step 1: Create an Ad Unit -{:.no_toc} - -Initialize the `InterstitialAdUnit` with the following properties: - -- `configId` - an ID of Stored Impression on the Prebid Server -- `adUnitFormats` - AdUnitFormat.VIDEO for a video ad - -#### Step 2: Configure video parameters -{:.no_toc} - -Provide configuration properties for the video ad using the [VideoParameters](#step-2-configure-video-parameters) object. - -#### Step 3: Make a bid request -{:.no_toc} - -The `fetchDemand` method makes a bid request to the Prebid Server. You should provide an `AdManagerAdRequest` object to this method so Prebid SDK sets the targeting keywords of the winning bid for future ad requests. - -#### Step 4: Load a GAM interstitial ad -{:.no_toc} +## AdUnit-Specific instructions -Now you should request the ad from GAM. If the `AdManagerAdRequest` contains targeting keywords, the respective Prebid line item will be returned from GAM, and GMA SDK will render its creative. +This section describes the integration details for different ad formats. In each scenario, you'll be asked for a `configId` - this is a key established in conjunction with your Prebid Server provider. It's used at runtime to pull in the bidders and parameters specific to this adunit. Depending on your Prebid Server partner, it may be a UUID or constructed out of parts like an account number and adunit name. -Be sure that you make the ad request with the same `AdManagerAdRequest` object that you passed to the `fetchDemand` method. Otherwise, the ad request won't contain targeting keywords, and Prebid's ad won't ever be displayed. +### [Format: HTML Banner](/prebid-mobile/recipes/subrecipes/android/gam-bidding-only-html-banner.html) -#### Step 5: Present the interstitial ad -{:.no_toc} - -Follow the [GMA SDK guide](https://developers.google.com/ad-manager/mobile-ads-sdk/android/interstitial#display_the_ad) to display an interstitial ad right after receiving it or later in a natural pauses in the flow of an app. - -### Multiformat Interstitial (HTML + Video) - -Integration example: - -```kotlin -// 1. Create InterstitialAdUnit -adUnit = InterstitialAdUnit(configId, EnumSet.of(AdUnitFormat.BANNER, AdUnitFormat.VIDEO)) -adUnit?.setMinSizePercentage(80, 60) -adUnit?.videoParameters = VideoParameters(listOf("video/mp4")) - -// 2. Make a bid request to Prebid Server -val request = AdManagerAdRequest.Builder().build() -adUnit?.fetchDemand(request) { - - // 3. Load a GAM interstitial ad - AdManagerInterstitialAd.load( - this, - AD_UNIT_ID, - request, - createListener() - ) -} -``` - -#### Step 1: Create an Ad Unit -{:.no_toc} - -Initialize the `InterstitialAdUnit` with the following properties: - -- `configId` - an ID of Stored Impression on the Prebid Server -- `adUnitFormats` - ad unit formats for the current ad unit. - -#### Steps 2-3 -{:.no_toc} - -Steps 2-3 are the same as for Display Banner. Setting up banner and video parameters can be found in Display Interstitial and Video Interstitial respectively. - -## Rewarded Video API - -Integration example: - -```kotlin -private fun createAd() { - // 1. Create RewardedVideoAdUnit - adUnit = RewardedVideoAdUnit(CONFIG_ID) - - // 2. Configure Video parameters - adUnit?.videoParameters = configureVideoParameters() - - // 3. Make a bid request to Prebid Server - val request = AdManagerAdRequest.Builder().build() - adUnit?.fetchDemand(request) { - - // 4. Load a GAM Rewarded Ad - RewardedAd.load( - this, - AD_UNIT_ID, - request, - createListener() - ) - } -} -``` - -Configure video ad unit: - -```kotlin -private fun configureVideoParameters(): VideoParameters { - return VideoParameters(listOf("video/mp4")).apply { - protocols = listOf(Signals.Protocols.VAST_2_0) - playbackMethod = listOf(Signals.PlaybackMethod.AutoPlaySoundOff) - } -} -``` - -Implement Rewarded ad listener: - -```kotlin -private fun createListener(): RewardedAdLoadCallback { - return object : RewardedAdLoadCallback() { - override fun onAdLoaded(rewardedAd: RewardedAd) { - - // 5. Display rewarded ad - rewardedAd.show( - this@GamOriginalApiVideoRewardedActivity - ) { } - } - - override fun onAdFailedToLoad(loadAdError: LoadAdError) { - Log.e("GAM", "Ad failed to load: $loadAdError") - } - } -} -``` - -### Step 1: Create an Ad Unit -{:.no_toc} - -Initialize the Rewarded Video Ad Unit with the following properties: - -- `configId` - an ID of Stored Impression on the Prebid Server - -### Step 2: Configure video parameters -{:.no_toc} - -Provide configuration properties for the video ad using the [VideoParameters](#step-2-configure-video-parameters) object. - -### Step 3: Make a bid request -{:.no_toc} +### [Format: Interstitial Banner](/prebid-mobile/recipes/subrecipes/android/gam-bidding-only-interstitial-banner.html) -The `fetchDemand` method makes a bid request to the Prebid Server. You should provide an `AdManagerAdRequest` object to this method so Prebid SDK sets the targeting keywords of the winning bid for future ad requests. +### [Format: Instream Video](/prebid-mobile/recipes/subrecipes/android/gam-bidding-only-video-instream.html) -### Step 4: Load a GAM Rewarded Ad -{:.no_toc} +### [Format: Non-Instream Video](/prebid-mobile/recipes/subrecipes/android/gam-bidding-only-video-outstream.html) -Now you should request the ad from GAM. If the `AdManagerAdRequest` contains targeting keywords, the respective Prebid line item will be returned from GAM, and GMA SDK will render its creative. +### [Format: Interstitial Video](/prebid-mobile/recipes/subrecipes/android/gam-bidding-only-interstitial-video.html) -Be sure that you make the ad request with the same `AdManagerAdRequest` object that you passed to the `fetchDemand` method. Otherwise, the ad request won't contain targeting keywords, and Prebid's ad won't ever be displayed. +### [Format: Rewarded Video Ad](/prebid-mobile/recipes/subrecipes/android/gam-bidding-only-rewarded-video.html) -### Step 5: Present the Rewarded Ad -{:.no_toc} +### [Format: Native In-App](/prebid-mobile/recipes/subrecipes/android/gam-bidding-only-native-in-app.html) -Follow the [GMA SDK guide](https://developers.google.com/ad-manager/mobile-ads-sdk/android/rewarded#show_the_ad) to display a rewarded ad right after receiving it or later in a natural pauses in the flow of an app. +### [Format: Native In-Webview](/prebid-mobile/recipes/subrecipes/android/gam-bidding-only-native-in-webview.html) -## Instream Video API +### [Format: Multiformat (Banner+Video+InApp Native)](/prebid-mobile/recipes/subrecipes/android/gam-bidding-only-multiformat.html) -Integration example: +### [Format: Multiformat Interstitial (Banner+Video)](/prebid-mobile/recipes/subrecipes/android/gam-bidding-only-multiformat-interstitial.html) -```kotlin -private fun createAd() { - // 1. Create VideoAdUnit - adUnit = InStreamVideoAdUnit(CONFIG_ID, WIDTH, HEIGHT) +## Additional Ad Unit Configuration - // 2. Configure video parameters - adUnit?.videoParameters = configureVideoParameters() +{% include mobile/adunit-config-android.md %} - // 3. Init player view - playerView = PlayerView(this) - val params = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 600) - adWrapperView.addView(playerView, params) +### Impression tracking - // 4. Make a bid request to Prebid Server - adUnit?.fetchDemand { _: ResultCode?, keysMap: Map? -> +In the Bidding Only integration scenario, PUC is responsible for tracking events for banner ads, like `burl`, `imp`, and `win`. The disadvantage of this approach is that PUC doesn't have reliable information about the viewability of the WebView. As a result, impression tracking happens at the rendering stage of the ad. Or, if MRAID is supported, once the `viewableChange` event is fired. It leads to big discrepancies since the "1 pixel in view" requirement is not met. - // 5. Prepare the creative URI - val sizes = HashSet() - sizes.add(AdSize(WIDTH, HEIGHT)) - val prebidURL = Util.generateInstreamUriForGam( - AD_UNIT_ID, - sizes, - keysMap - ) +Starting with version `2.4.0`, Prebid SDK introduced the API to track the viewability of the ad and track impression event, respectively. - adsUri = Uri.parse(prebidURL) +To activate impression tracking for the banner ad unit - use the `activatePrebidImpressionTracker(adView)` method. The `adView` parameter should be an instance of AdManagerAdView: - // 6. Init player - initializePlayer() - } -} +```java +adUnit.activatePrebidImpressionTracker(adView) +adUnit.fetchDemand(builder, resultCode -> { ... }) ``` -{: .alert.alert-warning :} -Starting from PrebidMobile `2.1.0` the `VideoAdUnit` class is deprecated. Use `InStreamVideoAdUnit` instead. - -Configure the video ad: - -```kotlin -private fun configureVideoParameters(): VideoParameters { - return VideoParameters(listOf("video/x-flv", "video/mp4")).apply { - placement = Signals.Placement.InStream +For activation for the interstitial ad unit, you should set `activatePrebidImpressionTracker()` flag: - api = listOf( - Signals.Api.VPAID_1, - Signals.Api.VPAID_2 - ) - - maxBitrate = 1500 - minBitrate = 300 - maxDuration = 30 - minDuration = 5 - playbackMethod = listOf(Signals.PlaybackMethod.AutoPlaySoundOn) - protocols = listOf( - Signals.Protocols.VAST_2_0 - ) - } -} +```java +Interstitial adUnit = InterstitialAdUnit(CONFIG_ID, WIDTH, HEIGTH); +adUnit.activatePrebidImpressionTracker(); ``` -Init and run IMA player: - -```kotlin -private fun initializePlayer() { - - adsLoader = ImaAdsLoader.Builder(this).build() - - val playerBuilder = SimpleExoPlayer.Builder(this) - player = playerBuilder.build() - playerView!!.player = player - adsLoader!!.setPlayer(player) - - val uri = Uri.parse("https://storage.googleapis.com/gvabox/media/samples/stock.mp4") - - val mediaItem = MediaItem.fromUri(uri) - val dataSourceFactory: DataSource.Factory = DefaultDataSourceFactory(this, getString(R.string.app_name)) - val mediaSourceFactory = ProgressiveMediaSource.Factory(dataSourceFactory) - val mediaSource: MediaSource = mediaSourceFactory.createMediaSource(mediaItem) - val dataSpec = DataSpec(adsUri!!) - val adsMediaSource = AdsMediaSource( - mediaSource, dataSpec, "ad", mediaSourceFactory, - adsLoader!!, playerView!! - ) - player?.setMediaSource(adsMediaSource) - player?.playWhenReady = true - player?.prepare() -} -``` - -### Step 1: Create an Ad Unit -{:.no_toc} - -Initialize the VideoAdUnit with the following properties: - -- `configId` - an ID of Stored Impression on the Prebid Server -- `width` - Width of the video ad unit. -- `height` - Height of the video ad unit - -### Step 2: Configure the video parameters -{:.no_toc} - -Provide configuration properties for the video ad using the [VideoParameters](#step-2-configure-video-parameters) object. - -### Step 3: Prepare the Player -{:.no_toc} - -Create the instance of `PlayerView` and display it in the app UI. - -### Step 4: Make a bid request -{:.no_toc} - -The `fetchDemand` method makes a bid request to the Prebid Server. Use the methods which return the targeting map in the result closure. - -### Step 5: Generate GAM Instream URI -{:.no_toc} - -Using Prebid util method, generate Google IMA URI for downloading the cached creative from the winning bid. - -### Step 6: Cretae and init IMA player -{:.no_toc} - -Follow the Google Guide for [integrating IMA with ExoPlayer](https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/exoplayer-extension) to run a video and show instream ad from the winning bid. - -## Native API - -### Native Banner - -Integration example: - -```kotlin -private fun createAd() { - // 1. Create Ad unit - nativeAdUnit = NativeAdUnit(CONFIG_ID) - nativeAdUnit?.setContextType(NativeAdUnit.CONTEXT_TYPE.SOCIAL_CENTRIC) - nativeAdUnit?.setPlacementType(NativeAdUnit.PLACEMENTTYPE.CONTENT_FEED) - nativeAdUnit?.setContextSubType(NativeAdUnit.CONTEXTSUBTYPE.GENERAL_SOCIAL) - - // 2. Configure Native Assets and Trackers - addNativeAssets(nativeAdUnit) - - // 3. Create GAM Ad View - val gamView = AdManagerAdView(this) - gamView.adUnitId = AD_UNIT_ID - gamView.setAdSizes(AdSize.FLUID) - adWrapperView.addView(gamView) - - // 4. Make a bid request to Prebid Server - val request = AdManagerAdRequest.Builder().build() - nativeAdUnit?.fetchDemand(request) { - - // 5. Load a GAM Ad - gamView.loadAd(request) - } -} -``` - -Add native assets: - -```kotlin -private fun addNativeAssets(adUnit: NativeAdUnit?) { - // ADD ASSETS - - val title = NativeTitleAsset() - title.setLength(90) - title.isRequired = true - adUnit?.addAsset(title) - - val icon = NativeImageAsset(20, 20, 20, 20) - icon.imageType = NativeImageAsset.IMAGE_TYPE.ICON - icon.isRequired = true - adUnit?.addAsset(icon) - - val image = NativeImageAsset(200, 200, 200, 200) - image.imageType = NativeImageAsset.IMAGE_TYPE.MAIN - image.isRequired = true - adUnit?.addAsset(image) - - val data = NativeDataAsset() - data.len = 90 - data.dataType = NativeDataAsset.DATA_TYPE.SPONSORED - data.isRequired = true - adUnit?.addAsset(data) - - val body = NativeDataAsset() - body.isRequired = true - body.dataType = NativeDataAsset.DATA_TYPE.DESC - adUnit?.addAsset(body) - - val cta = NativeDataAsset() - cta.isRequired = true - cta.dataType = NativeDataAsset.DATA_TYPE.CTATEXT - adUnit?.addAsset(cta) - - // ADD EVENT TRACKERS - - val methods = ArrayList() - methods.add(NativeEventTracker.EVENT_TRACKING_METHOD.IMAGE) - - try { - val tracker = NativeEventTracker(NativeEventTracker.EVENT_TYPE.IMPRESSION, methods) - adUnit?.addEventTracker(tracker) - } catch (e: Exception) { - e.printStackTrace() - } -} -``` - -#### Step 1: Create a NativeAdUnit -{:.no_toc} - -Initialize the `NativeAdUnit` with properties: - -- `configId` - an ID of the Stored Impression on the Prebid Server - -#### Step 2: Add Native Assets and Event Trackers -{:.no_toc} - -In order to make a bid request for the native ads you should provide a description of native assets that should be present in the native bid response. Prebid SDK supports the following set of assets to request. - -- `NativeImageAsset` -- `NativeDataAsset` -- `NativeTitleAsset` - -#### Step 3: Create an AdManagerAdView -{:.no_toc} - -Follow the [GMA SDK documentation](https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner) to integrate a banner ad unit. - -#### Step 3: Make a bid request -{:.no_toc} - -The `fetchDemand` method makes a bid request to the Prebid Server. You should provide an `AdManagerAdRequest` object to this method so Prebid SDK sets the targeting keywords of the winning bid for future ad requests. - -#### Step 4: Load an Ad -{:.no_toc} - -Now you should request the ad from GAM. If the `AdManagerAdRequest` contains targeting keywords, the respective Prebid line item will be returned from GAM, and GMA SDK will render its creative. - -Be sure that you make the ad request with the same `AdManagerAdRequest` object that you passed to the `fetchDemand` method. Otherwise, the ad request won't contain targeting keywords, and Prebid's ad won't ever be displayed. - -### In-App Native - -Visit the [AdOps guide](/adops/gam-native.html#create-mobile-in-app-creative) for instructions on setting up the In-App creatives on GAM. - -At a high level, the in-app workflow is happening the following way: - -1. The publisher prepares the ad layout and provides the native ad configuration to the SDK's ad unit. -2. Prebid SDK fetches native demand. However, instead of caching the native assets on the server, the assets are cached locally in the SDK. -3. Ad request are made to Google Ad Manager. -4. Upon receiving results from Google Ad Manager, the SDK determines if any of the received items are from Prebid Server. -5. If there are Prebid ads, the cached assets are then rendered. - -{% capture importantNote %} -The cached assets might expire. If this occurs the publisher will receive a notification and they will have to fetch the assets again. -{% endcapture %} - -#### Integration Example -{:.no_toc} - -```kotlin -private fun createAd() { - // 1. Create NativeAdUnit - adUnit = NativeAdUnit(CONFIG_ID); - adUnit?.setContextType(NativeAdUnit.CONTEXT_TYPE.SOCIAL_CENTRIC) - adUnit?.setPlacementType(NativeAdUnit.PLACEMENTTYPE.CONTENT_FEED) - adUnit?.setContextSubType(NativeAdUnit.CONTEXTSUBTYPE.GENERAL_SOCIAL) - - // 2. Add native assets and trackers - addNativeAssets(adUnit) - - // 3. Make a bid request to Prebid Server - val adRequest = AdManagerAdRequest.Builder().build() - adUnit?.fetchDemand(adRequest) { - - // 4. Load a GAM Native Ad - adLoader = createAdLoader(adWrapperView) - adLoader?.loadAd(adRequest) - } -} -``` - -Add native assets: - -```kotlin -private fun addNativeAssets(adUnit: NativeAdUnit?) { - // ADD NATIVE ASSETS - - val title = NativeTitleAsset() - title.setLength(90) - title.isRequired = true - adUnit?.addAsset(title) - - val icon = NativeImageAsset(20, 20, 20, 20) - icon.imageType = NativeImageAsset.IMAGE_TYPE.ICON - icon.isRequired = true - adUnit?.addAsset(icon) - - val image = NativeImageAsset(200, 200, 200, 200) - image.imageType = NativeImageAsset.IMAGE_TYPE.MAIN - image.isRequired = true - adUnit?.addAsset(image) - - val data = NativeDataAsset() - data.len = 90 - data.dataType = NativeDataAsset.DATA_TYPE.SPONSORED - data.isRequired = true - adUnit?.addAsset(data) - - val body = NativeDataAsset() - body.isRequired = true - body.dataType = NativeDataAsset.DATA_TYPE.DESC - adUnit?.addAsset(body) - - val cta = NativeDataAsset() - cta.isRequired = true - cta.dataType = NativeDataAsset.DATA_TYPE.CTATEXT - adUnit?.addAsset(cta) - - // ADD NATIVE EVENT TRACKERS - val methods = ArrayList() - methods.add(EVENT_TRACKING_METHOD.IMAGE) - methods.add(EVENT_TRACKING_METHOD.JS) - try { - val tracker = NativeEventTracker(NativeEventTracker.EVENT_TYPE.IMPRESSION, methods) - adUnit?.addEventTracker(tracker) - } catch (e: Exception) { - e.printStackTrace() - } -} -``` - -Prepare Native Ad Loader - -```kotlin -private fun createAdLoader(wrapper: ViewGroup): AdLoader? { - val onGamAdLoaded = OnAdManagerAdViewLoadedListener { adManagerAdView: AdManagerAdView -> - Log.d(TAG, "Gam loaded") - adView = adManagerAdView - wrapper.addView(adManagerAdView) - } - - val onUnifiedAdLoaded = OnNativeAdLoadedListener { unifiedNativeAd: NativeAd? -> - Log.d(TAG, "Unified native loaded") - this.unifiedNativeAd = unifiedNativeAd - } - - val onCustomAdLoaded = OnCustomFormatAdLoadedListener { nativeCustomTemplateAd: NativeCustomFormatAd? -> - Log.d(TAG, "Custom ad loaded") - - // 5. Find Prebid Native Ad - AdViewUtils.findNative(nativeCustomTemplateAd!!, object : PrebidNativeAdListener { - override fun onPrebidNativeLoaded(ad: PrebidNativeAd) { - - // 6. Render native ad - inflatePrebidNativeAd(ad, wrapper) - } - - override fun onPrebidNativeNotFound() { - Log.e(TAG, "onPrebidNativeNotFound") - } - - override fun onPrebidNativeNotValid() { - Log.e(TAG, "onPrebidNativeNotValid") - } - }) - } - - return AdLoader.Builder(wrapper.context, AD_UNIT_ID) - .forAdManagerAdView(onGamAdLoaded, AdSize.BANNER) - .forNativeAd(onUnifiedAdLoaded) - .forCustomFormatAd( - CUSTOM_FORMAT_ID, onCustomAdLoaded - ) { customAd: NativeCustomFormatAd?, s: String? -> } - .withAdListener(object : AdListener() { - override fun onAdFailedToLoad(loadAdError: LoadAdError) { - super.onAdFailedToLoad(loadAdError) - Log.e(TAG, "DFP onAdFailedToLoad") - } - }) - .build() -} -``` - -Render a native ad: - -```kotlin -private fun inflatePrebidNativeAd(ad: PrebidNativeAd, wrapper: ViewGroup) { - val nativeContainer = View.inflate(wrapper.context, R.layout.layout_native, null) - - val icon = nativeContainer.findViewById(R.id.imgIcon) - ImageUtils.download(ad.iconUrl, icon) - - val title = nativeContainer.findViewById(R.id.tvTitle) - title.text = ad.title - - val image = nativeContainer.findViewById(R.id.imgImage) - ImageUtils.download(ad.imageUrl, image) - - val description = nativeContainer.findViewById(R.id.tvDesc) - description.text = ad.description - - val cta = nativeContainer.findViewById