---
title: "FreeWheel SSP Prebid.js Integration Guide"
canonical: "https://hub.freewheel.tv/space/RCS/115605528/FreeWheel%20SSP%20Prebid.js%20Integration%20Guide"
format: markdown
---
> ℹ️ This page is specifically written for FW SSP customers integrating via a Prebid.JS connection and should not be used for Streaming Hub customers.

> ℹ️ **For Prebid Server**
> ℹ️ 
> ℹ️ This page is for the integration of Prebid.JS connections only. For Prebid Server, please consult the [FreeWheel SSP Server Integration Guide](https://freewheel-knowledge-hub.atlassian.net/wiki/pages/createpage.action?spaceKey=RCS&title=FreeWheel%20SSP%20Server%20Integration%20Guide&linkCreation=true&fromPageId=115605528).

**Specification Support**

| **Specification** | **Version** | **Last Update Date** | **Notes** |
| --- | --- | --- | --- |
| <span style="color: #000000">Prebid.js </span> | v10.10.0+ | 7/16/2025<span style="color: #000000"> </span> | <span style="color: #323232">Starting with v10.10.0, Prebid.js supports the latest version of the </span><span style="color: #323232">***fwssp***</span><span style="color: #323232"> Prebid.js Adapter. </span><br><span style="color: #323232">When the adapter is updated, these updates have to be merged into the next Prebid.js release to be able to be used by a client. We will update here what the minimum required Prebid.js release version is to support the latest version of the </span><span style="color: #323232">***fwssp***</span><span style="color: #323232"> Prebid.js adapter. </span><br><span style="color: #323232">See here to download the latest version of Prebid.js, make sure to select </span><span style="color: #323232">***fwssp***</span><span style="color: #323232"> from the list of adapters: </span><span style="color: #323232">[https://docs.prebid.org/download.html](https://docs.prebid.org/download.html)</span><span style="color: #323232"> </span> |
| <span style="color: #000000">IAB Content Category Taxonomy</span> | <span style="color: #000000">v1</span> | 7/16/2025<span style="color: #000000"> </span> | IAB Content Categories are mapped to FreeWheel Global Industries. |

# **Guide Change Log**

### Current Guide Version

| **Guide Version** | **Date** | **Author** | **Description** |
| --- | --- | --- | --- |
| v9 | 12/11/2025<span style="color: #000000"> </span> | <span style="color: #000000">Admin</span> | <span style="color: #323232">Updated 6 - Updated the Parameters table, adRequestKeyValues row  </span> |

### Historic

---

> Macro (toc)

---

# 1. Introduction 

[Prebid.js](https://prebid.org/product-suite/prebidjs/) is an open-source header bidding solution that enables publishers to implement header bidding on their websites and applications. It serves as a crucial technology in the programmatic advertising ecosystem, particularly for video advertising.

### Core Functionality

Prebid.js functions as a client-side JavaScript library that:

1. Facilitates header bidding auctions by sending bid requests to multiple demand partners (SSPs and ad exchanges) simultaneously
2. Collects bid responses from these partners
3. Passes the winning bids to the publisher's ad server for final decision-making

### Key Features

- **Header Bidding Integration**: Allows publishers to conduct pre-auction bidding before making ad server calls
- **Adapter System**: Uses specialized adapters (like FreeWheel's `fwssp` adapter) to connect with different demand sources
- **Format Support**: Supports various ad formats, including in-banner video and instream video ads
- **Customization**: Offers extensive configuration options for publishers to control bidding behaviour

## 1.1 Integration Diagram

![image](media://b142b636-b3b0-4e8e-90f5-923165bdda62)

### Pre-requisites 

Before starting this integration, please ensure you have the following to start: 

- A working Prebid.js integration
- Expected QPS volumes (daily max and average)
- Estimated traffic per geo
- Ensure ads.txt and app ads.txt are up to date
- Must use adapter version 10.10.0 or above
- New endpoint URL - see section below
- Freewheel account team to provide:
  - Profile ID
  - Network ID
  - Custom site section ID
  - Dedicated server URL for the client's network

---

# 2. Technical Implementation

Publishers implementing FreeWheel's Prebid.js adapter need to:

1. Include the Prebid.js library along with the fwssp Bidder Adapter in their web pages
  1. First-timers setting up Prebid.js can download the Prebid.js package along with the fwssp Bidder Adapter [here](https://docs.prebid.org/download.html). Assure to select FWSSP from the list of bidder adapters
    1. For more instructions on setting up Prebid.js on your endpoints, see [this](https://docs.prebid.org/dev-docs/getting-started.html)
    2. For more information on how header bidding works, see [this](https://docs.prebid.org/overview/intro-to-header-bidding.html)
  2. For those with existing Prebid.js setups, you can find the fwssp Bidder Adapter code [here](#fwsspBidderAdaptorcode) to add to your existing Prebid.js wrapper setup
2. Configure bid parameters, including network ID, profile, site section ID, and other FreeWheel-specific parameters
3. Set up proper correlation between Prebid.js ad units and their ad server slots

---

# 3. Endpoint

Clients will be provided with a unique endpoint for which to send requests. Endpoints will have a variable prefix ID, which is the Network ID in hexadecimal format. The Endpoint Prefix ID will need to be added as a prefix within the URL:

|  |
| --- |
| https://(prefixID).v.fwmrm.net/ad/g/1 |

- Format
  - https://**prefixID**.v.fwmrm.net/ad/g/1
- Example with custom prefix ID included
  - https://**83b96**.v.fwmrm.net/ad/g/1

---

# 4. fwssp Bidder Adapter Code

If you need access to the adapter code to add the fwssp Bidder Adapter to your Prebid.js setup or for something else, you can view it on the following [GitHub repository](https://github.com/prebid/Prebid.js/blob/master/modules/fwsspBidAdapter.js), under Prebid.js/modules/fwsspBidAdapter.js

---

# 5. How to add the new FW Prebid.js Bidder Adapter to Ad Units

You can use the fwssp bidder adapter by adding an Ad Unit with bidder code "fwssp". The following is an example of an in-banner ad request in its most minimal form, which can be found on [GitHub](https://github.com/prebid/Prebid.js/blob/master/modules/fwsspBidAdapter.md).

```javascript
var adUnits = [
{
    code: 'adunit-code',
    mediaTypes: {
        banner: {
            'sizes': [[300, 250], [300, 600]]
        }
    },
    bids: [{
        bidder: 'fwssp',
        params: {
            bidfloor: 2.00,
            serverUrl: 'https://example.com/ad/g/1',
            networkId: '42015',
            profile: '42015:js_allinone_profile',
            siteSectionId: 'js_allinone_demo_site_section',
            flags: '+play',
            videoAssetId: '0',
            timePosition: 120,
            adRequestKeyValues: {
                _fw_player_width: '1920',
                _fw_player_height: '1080',
                _fw_content_programmer_brand: 'NEEDS_TO_REPLACE_BY_BRAND_NAME',
                _fw_content_programmer_brand_channel: 'NEEDS_TO_REPLACE_BY_CHANNEL_NAME',
                _fw_content_genre: 'NEEDS_TO_REPLACE_BY_CONTENT_GENRE'
				_fw_content_category: 'NEEDS_TO_REPLACE_BY_IAB_CAT'
            }
        }
    }]
}
];
```

You can find more in-depth information in the [Prebid GitHub Repository](https://github.com/prebid/prebid-server/tree/master/adapters/fwssp). 

---

# 6. Parameters

The following are parameters that are either mandatory or optionally included in the Prebid headers within ad requests.

> ❌ Failure to include any **Mandatory** parameters may mean that ad requests will not work as expected.

| **Parameter** | **Type** | **Description** | **Example** | **Scope** |
| --- | --- | --- | --- | --- |
| serverUrl | string | Clients will be provided with a unique endpoint for which to send requests. Endpoints will have a variable prefix ID, which is the Network ID in hexadecimal format. The Endpoint Prefix ID will need to be added as a prefix within the URL<br>- Format
  - https://**prefixID**.[v.fwmrm.net/ad/g/1](http://v.fwmrm.net/ad/g/1)
- Example with custom prefix included
  - https://**83b96**.[v.fwmrm.net/ad/g/1](http://v.fwmrm.net/ad/g/1) | "<span style="color: #323232">serverUrl</span>": "[https://83b96](https://83b96).[v.fwmrm.net/ad/g/1](http://v.fwmrm.net/ad/g/1)" | Mandatory |
| networkId | string | The network ID is the ID of the customer account or instance, known as a 'network'. The value to implement will be provided by your Freewheel account team. The expected format is a numerical string. | "networkId": "12345" |
| profile | string | A profile is used to determine and control what type/formats of ads can serve into a particular inventory type e.g creative specs. This is set up on the backend, and the value to implement will be provided by your Freewheel account team<br>The expected format is the name of the profile as a string and not a numerical ID | "profile": "12345:profile__name" |
| siteSectionId | string | The site section (id) determines the exact piece of inventory where the ad request is coming from as designed in your network design. You may have one or many different site sections breaking out inventory depending on what network design was agreed upon with your Freewheel account team. The value to implement will be provided by your Freewheel account team. The expected format is the tag of the site section.  Note: <span style="color: #1d1c1d">site section tags are not case sensitive.</span> | "siteSectionId": "ss_12345" |
| videoAssetId | string | Custom content Video Asset ID | "videoAssetId": "pause_ad_video"<br>> ℹ️ Note: `videoAssetId: '0', `<span style="color: #1d1c1d">represents a default or placeholder value used when there isn't a specific video asset to reference.</span> |
| bidfloorcur | string | <span style="color: #000000">Bid floor currency.</span><br><span style="color: #000000">There are two cases in how this is used</span><br>1. <span style="color: #000000">Price Floors Module is enabled for a Prebid.js instance</span>
  1. <span style="color: #323232">The fwssp Prebid.js adapter follows the priority defined by the Prebid Price Floors Module:</span>
    1. <span style="color: #000000">dynamic</span>
    2. <span style="color: #000000">setConfig</span>
    3. <span style="color: #000000">adUnit</span>
2. <span style="color: #000000">Price Floors Module is not enabled/used for a Prebid.js instance</span>
  1. <span style="color: #000000">The fwssp prebid.js adapter will pull currency from </span><span style="color: #000000">**bids.params.bidfloorcur**</span>
  2. <span style="color: #000000">Or currency can be directly called out by using the key-value pair</span>
    1. <span style="color: #000000">"bidfloorcur": "EUR"</span><br><span style="color: #000000">Default: USD</span><br><span style="color: #000000">For the latest list of FW supported currencies, please see in our hub: </span><span style="color: #000000">[Currencies](https://freewheel-knowledge-hub.atlassian.net/wiki/spaces/SHUGSTG/pages/111266810)</span> | "bidfloorcur": "EUR" | Optional/ **Mandatory if not using USD and if not using the Price Floors Module in Prebid.js integration** |
| bidfloor | float | Bid floor price.<br>> ℹ️ If bidfloor=0 or empty, the request floor is deemed invalid and FW will then use other floor prices located directly in the listing, deal instead.  Therefore <span style="color: #1d1c1d">non-empty / non-zero values should be passed through bidfloor in requests.</span> | "bidfloor": 13.2118 | Optional |
| format | string | <span style="color: #172b4d">The format to use for displaying the ad. Can be one of the following:</span><br>- <span style="color: #172b4d">instream</span>
- <span style="color: #172b4d">inbanner</span><br><span style="color: #172b4d">Default value: “instream”</span><br>> ❌ <span style="color: #172b4d">The screen-roll, intext-roll, sliderad, expand-banner and floorad formats are all outstream formats which are </span><span style="color: #172b4d">**not**</span><span style="color: #172b4d"> supported.</span> | "format": "inbanner" |
| flags | string | Optional flags to include in the ad request. | "flags": "+play-uapl" |
| mode | string | Request mode. Valid values are:<br>- "on-demand"
- "live" | "mode": live" |
| adRequestKeyValues | object | An object of ad request key-pair values.<br><span style="color: #172b4d">See </span><span style="color: #172b4d">[AdCom v1 List: Creative Subtypes - Audio/Video](https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/main/AdCOM%20v1.0%20FINAL.md#list_creativesubtypesaudiovideo)</span><span style="color: #172b4d"> for the industry standard protocol list.</span><br><span style="color: #172b4d">See </span><span style="color: #172b4d">[https://freewheel-knowledge-hub.atlassian.net/wiki/display/Resources/VAST+Integration+Guide](https://freewheel-knowledge-hub.atlassian.net/wiki/display/Resources/VAST+Integration+Guide)</span><span style="color: #172b4d"> for more details on supported ad request parameters.</span> | "adRequestKeyValues": {fw_player_width: '1920', fw_player_height: '1080'}<br>> ℹ️ Note on <span style="color: #1d1c1d">fw_gdpr</span>: <span style="color: #1d1c1d">prior to v10.20.0 we only accepted boolean ( fw_gdpr=true/False), after v10.20.0 we accept both boolean and 0/1 (fw_gdpr=true/False AND fw_gdpr=1/0) </span> |
| gdpr_consented_providers | string | List of Consented Providers. A comma separated list of ids. | "gdpr": "216, 229, 80, 359, 479" |
| tpos | number | Slot time position in seconds. Default: 0 | "tpos": 10 |
| slid | string | Slot custom ID. Any string with valid letters/digits/symbols.<br>Default: "Preroll_1" | "slid": "CustomPreroll" |
| slau | string | 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". | "slau": "pre1\|pre2" |
| listeners | object | An object of AdManager even listeners. | "listeners": {onSlotStarted: this.onSlotStarted, adEvent: this.onAdEvent, onSlotEnded: this.onSlotEnded } |
| isMuted | boolean | Controls if ad play back should start with volume muted.<br>Default: true | "isMuted": false |
| showMuteButton | boolean | Controls if a mute button should be shown during ad playback.<br>Default: false | "showMuteButton": false |
| playerParams | object | An object of AdManger player parameter values. | "playerParams": {"renderer.video.startDetectTimeout": 5000} |
| env | string | The AdManager build to use for ad playback. Valid values: "prd", "stg".<br>Default: "prd". | "env": "stg" |


---

# 7. Passing Contextual Information via Standard Attributes

In order to successfully monetize your supply and align all relevant demand, we'll require clients to correctly pass contextual information around the supply, also known as **Standard Attributes**. The page [Inventory Standardization with FreeWheel Custom Key Values](https://hub.freewheel.tv/space/SHUG/117670582/Inventory+Standardization+with+FreeWheel+Custom+Key+Values) details the fields required to pass the needed information within your ad requests. <span style="color: #1d1c1d">This document includes details of the passing of Standard Attributes such as Brand, Channel, IAB Category, Genre, Content title, etc.</span>

<span style="color: #1d1c1d">Mandatory Standard Attributes are typically Brand and IAB Category and/or Genre; however, this may change depending on your inventory. Please work with your account manager on what is required for you.</span>

---

# 8. User Syncing/Cookie Syncing 

<span style="color: #000000">***This section is only necessary for web inventory**</span>

<span style="color: #000000">User Syncing, also known as Cookie Syncing, is the process of sharing and matching HTTP cookies between various partners. The concept of Cookie Tracking is restrictive in the amount of information that can be collected and actioned upon for advertisers. This is because cookies are limited to a domain and have varying expiration dates. For Freewheel to be able to identify, target, and frequency cap across various digital properties in accordance with campaign KPI's, Freewheel needs to know how to distinguish one user from another that are sent to us in the publisher's bid request.</span>

<span style="color: #000000">User/cookie syncing with Freewheel is available for Prebid.JS clients with the expectation that the client's cookies, if passed, will be included in the HTTP headers of the ad request. When this is present, it will then be used downstream to check if we have a cookie match with the DSPs as we send outgoing bid requests.</span><span style="color: #172b4d"> </span>

---

# 9. Schain/Sellers JSON/Ads.txt/app ads.txt 

Your Freewheel account representative will provide you with the required codes to enter in your ads.txt and ensure that your new publisher IDs are added into our sellers.JSON as an onboarding step.

Since Prebid 10, schain is treated as first-party data. Publishers may provide it directly or through ortb2.source.schain.  Please see<span style="color: #172b4d"> </span>[https://docs.prebid.org/dev-docs/pb10-notes.html](https://docs.prebid.org/dev-docs/pb10-notes.html) for more information.

> ℹ️ To support Prebid 10, Freewheel has e<span style="color: #333333">xpanded schain detection to match Prebid 10+ specs</span> in our v10 f<span style="color: #172b4d">wssp prebid.js adapters. </span>  
> ℹ️ To clarify, f<span style="color: #172b4d">wssp prebid.js adapters (lower than v10.11) will only support the of </span>passing schain data via **currentBidRequest.schain, **while f<span style="color: #1d1c1d">wssp prebid.js adapters (v10.11 and above) will continue to support </span><span style="color: #1d1c1d">**currentBidRequest.schain **</span><span style="color: #1d1c1d">as well as</span><span style="color: #1d1c1d">** ortb2.source.schain**</span><span style="color: #1d1c1d"> first, then a falling back to </span><span style="color: #1d1c1d">**ortb2.source.ext.schain**</span><span style="color: #1d1c1d">.</span>

If you are a Freewheel client and need more information on:

- ads.txt setup, please refer to [https://hub.freewheel.tv/space/SHUG/117997976/ads.txt+and+app-ads.txt+setup#FreeWheel-SSP](https://hub.freewheel.tv/space/SHUG/117997976/ads.txt+and+app-ads.txt+setup#FreeWheel-SSP)
- Sellers.json, please refer to [https://hub.freewheel.tv/space/SHUG/117604939/Sellers.json](https://hub.freewheel.tv/space/SHUG/117604939/Sellers.json)

---

# 10. Troubleshooting Tips

Since integrations often break due to typos and errors in config, we highly recommend checking the format of your requests based on the samples below or the documentation housed on GitHub. Please also ensure that you use the correct adapter for JS - fwssp and not another adapter. 

The code blocks below are examples of the expected parameters as a guide and to sanity check the code 

## 10.1 Sample Ad Requests

### 10.1.1 Inbanner Ad request Config Example

<details>
<summary>Inbanner ad request config example</summary>

```javascript
{
    code: 'adunit-code',
    mediaTypes: {
        banner: {
            'sizes': [[300, 250], [300, 600]]
        }
    },
    bids: [{
        bidder: 'fwssp',
        schain: {
            ver: '1.0',
            complete: 1,
            nodes: [{
                asi: 'example.com',
                sid: '0',
                hp: 1,
                rid: 'bidrequestid',
                domain: 'example.com'
            }]
        },
        params: {
            bidfloor: 2.00,
            serverUrl: 'https://example.com/ad/g/1',
            networkId: '42015',
            profile: '42015:js_allinone_profile',
            siteSectionId: 'js_allinone_demo_site_section',
            flags: '+play',
            videoAssetId: '0',
            timePosition: 120,
            adRequestKeyValues: {
                _fw_player_width: '1920',
                _fw_player_height: '1080',
                _fw_content_programmer_brand: 'NEEDS_TO_REPLACE_BY_BRAND_NAME',
                _fw_content_programmer_brand_channel: 'NEEDS_TO_REPLACE_BY_CHANNEL_NAME',
                _fw_content_genre: 'NEEDS_TO_REPLACE_BY_CONTENT_GENRE'
			    _fw_content_category: 'NEEDS_TO_REPLACE_BY_IAB_CAT'
            }
        }
    }]
}
```
</details>

### 10.1.2 Instream Ad Request Config Example

<details>
<summary>Instream ad request config example</summary>

```javascript
{
    code: 'adunit-code',
    mediaTypes: {
        video: {
            playerSize: [300, 600],
            minduration: 30,
            maxduration: 60 
        }
    },
    bids: [{
        bidder: 'fwssp',
        schain: {
            ver: '1.0',
            complete: 1,
            nodes: [{
                asi: 'example.com',
                sid: '0',
                hp: 1,
                rid: 'bidrequestid',
                domain: 'example.com'
            }]
        },
        params: {
            bidfloor: 2.00,
            serverUrl: 'https://example.com/ad/g/1',
            networkId: '42015',
            profile: '42015:js_allinone_profile',
            siteSectionId: 'js_allinone_demo_site_section',
            flags: '+play',
            videoAssetId: '0',
            mode: 'live',
            timePosition: 120,
            tpos: 300,
            slid: 'Midroll',
            slau: 'midroll',
            adRequestKeyValues: {
                _fw_player_width: '1920',
                _fw_player_height: '1080',
                _fw_content_progrmmer_brand: 'NEEDS_TO_REPLACE_BY_BRAND_NAME',
                _fw_content_programmer_brand_channel: 'NEEDS_TO_REPLACE_BY_CHANNEL_NAME',
                _fw_content_genre: 'NEEDS_TO_REPLACE_BY_CONTENT_GENRE'
				_fw_content_category: 'NEEDS_TO_REPLACE_BY_IAB_CAT'
            },
            gdpr_consented_providers: 'test_providers'
        }
    }]
}
```
</details>

## 10.2 Troubleshooting Ad Rendering

- fwssp Prebid.js Adapter will load the MRM AdManager SDK for ad rendering.