From 54d613bb9e87258936205cf5a99da8cc158fd525 Mon Sep 17 00:00:00 2001
From: Giuseppe Cera <giuseppe@exads.com>
Date: Fri, 8 Mar 2024 11:51:57 +0000
Subject: [PATCH 1/9] feat: added exadsadserver.md for PR purposes

---
 dev-docs/bidders/exadsadserver.md | 487 ++++++++++++++++++++++++++++++
 1 file changed, 487 insertions(+)
 create mode 100644 dev-docs/bidders/exadsadserver.md

diff --git a/dev-docs/bidders/exadsadserver.md b/dev-docs/bidders/exadsadserver.md
new file mode 100644
index 0000000000..e7eb5a9c81
--- /dev/null
+++ b/dev-docs/bidders/exadsadserver.md
@@ -0,0 +1,487 @@
+---
+layout: bidder
+title: EXADS
+description: EXADS Bidder Adapter
+pbjs: true
+pbs: false ?
+biddercode: exadsadserver
+gvl_id: 1084 ? // found here https://iabeurope.eu/vendor-list-tcf/
+tcfeu_supported: true?
+usp_supported: false?
+media_types: banner, video, native
+gpp_sids: ?
+schain_supported: ?
+dchain_supported: ?
+safeframes_ok: ?
+deals_supported: ?
+floors_supported: ?
+ortb_blocking_supported: ?
+---
+
+### Note
+
+Module that connects to EXADS’ bidder for bids.
+
+### Configuration
+
+Use `setConfig` to instruct Prebid.js to initilize the exadsBidAdapter, as specified below. 
+* Set "debug" as true if you need to read logs;
+* Set "gdprApplies" as true if you need to pass gdpr consent string;
+* The tcString is the iabtcf consent string for gdpr;
+* Uncomment the cache instruction if you need to configure a cache server (e.g. for instream video)
+
+```
+pbjs.setConfig({
+    debug: false,
+    //cache: { url: "https://prebid.adnxs.com/pbc/v1/cache" },
+    consentManagement: {
+        gdpr: {
+            cmpApi: 'static',
+            timeout: 1000000,
+            defaultGdprScope: true,
+            consentData: {
+                getTCData: {
+                    tcString: consentString,
+                    gdprApplies: false // set to true to pass the gdpr consent string
+                }
+            }
+        }
+    }
+});
+```
+Add the `video` config if you need to render videos using the video module.
+For more info navigate to https://docs.prebid.org/prebid-video/video-module.html.
+```
+pbjs.setConfig({
+    video: {
+        providers: [{
+            divId: 'player', // the id related to the videojs tag in your body
+            vendorCode: 2, // videojs, 
+            playerConfig: {
+                params: {
+                    adPluginConfig: {
+                        numRedirects: 10
+                    },
+                    vendorConfig: {
+                        controls: true,
+                        autoplay: true,
+                        preload: "auto",
+                    }
+                }
+            }
+        },]
+    },
+});
+```
+
+#### RTB Banner 2.4
+
+{: .table .table-bordered .table-striped }
+| Name          | Scope    | Description           | Example   | Type      |
+|---------------|----------|-----------------------|-----------|-----------|
+| `zoneID`      | required | You can get it from the endpoint created after configuring the zones          | `12345`    | `'integer'` |
+| `fid`      | required | You can get it from the endpoint created after configuring the zones          | `'829a896f011475d50da0d82cfdd1af8d9cdb07ff'`    | `'string'` |
+| `partner`      | required | Currently we support rtb 2.4 (“ortb_2_4”) only           | `'ortb_2_4'`    | `'string'` |
+| `siteId`      | recommended |  Unique Site ID           | `'123'`    | `'string'` |
+| `siteName`      |  |  Site name            | `'test.com'`    | `'string'` |
+| `banner.sizes`      | required |  [width, height]          | `[145,256]`    | `'integer array'` |
+| `userIp`      | required |  IP address of the user, ipv4 or ipv6          | `'0.0.0.0'`    | `'string'` |
+| `userId`      | *required |  Unique user ID (string). *If you cannot generate a user ID, you can leave it empty (""). The request will get a response as long as “user” object is included in the request          | `''`    | `'string'` |
+| `country`      |  |  country ISO3          | `'IRL'`    | `'string'` |
+| `impressionId`      | required |  Unique impression ID within this bid request           | `'abcde'`    | `'string'` |
+| `keywords`      |  |  Keywords can be used to ensure ad zones get the right type of advertising. Keywords should be a string of comma-separated words           | `'lifestyle, humour'`    | `'string'` |
+| `bidfloor`      |  |  Minimum bid for this impression (CPM) / click (CPC) and account currency           | `0.00000011`    | `'float'` |
+| `bidfloorcur`      |  |  Currency for minimum bid value specified using ISO-4217 alpha codes           | `'EUR'`    | `'string'` |
+| `bcat`      |  |  Blocked advertiser categories using the IAB content categories           | `['IAB25', 'IAB7-39','IAB8-18','IAB8-5','IAB9-9']`    | `'string array'` |
+| `badv`      |  |  Block list of advertisers by their domains            | `['first.com', 'second.com']`    | `'string array'` |
+| `mimes`      |  |   List of supported mime types. We support: image/jpeg, image/jpg, image/png, image/png, image/gif, image/webp, video/mp4            | `['image/jpg']`    | `'string array'` |
+| `dsa`      |  |   DSA transparency information. To see the specific paragraph for more details.            | `{ dsarequired: 3, pubrender: 0, datatopub: 2 }`    | `object` |
+| `endpoint`      | required |   EXADS endpoint (URL)            | `https://your-ad-network.com/rtb.php`    | `string` |
+
+##### DSA
+
+{: .table .table-bordered .table-striped }
+| Name          | Scope    | Description           | Example   | Type      |
+|---------------|----------|-----------------------|-----------|-----------|
+| `dsarequired`      |  |  flag to indicate if DSA information should be made available          | `3`    | `'integer'` |
+| `pubrender`      |  | flag to indicate if the publisher will render the DSA Transparency info          | `0`    | `'integer'` |
+| `datatopub`      |  | ndependent of pubrender, the publisher may need the transparency data for audit purposes           | `2`    | `'integer'` |
+
+##### RTB Banner 2.4 (Image)
+
+```javascript
+
+adUnits = 
+    [{  code: 'postbid_iframe', // the frame where to render the creative
+        mediaTypes: {
+            banner: {
+                sizes: [300, 250]
+            }
+        },
+        bids: [{
+            bidder: 'exadsadserver',
+            params: {
+                    zoneId: 12345,
+                    fid: '829a896f011475d50da0d82cfdd1af8d9cdb07ff',
+                    partner: 'ortb_2_4',
+                    siteId: '123',
+                    siteName: 'test.com',
+                    userIp: '0.0.0.0',
+                    userId: '1234',
+                    country: 'IRL',
+                    impressionId: impression_id.toString(),
+                    keywords: 'lifestyle, humour',
+                    bidfloor: 0.00000011,
+                    bidfloorcur: 'EUR',
+                    bcat: ['IAB25', 'IAB7-39','IAB8-18','IAB8-5','IAB9-9'],
+                    badv: ['first.com', 'second.com'],
+                    mimes: ['image/jpg'],
+                    dsa: {
+                        dsarequired: 3, 
+                        pubrender: 0,
+                        datatopub: 2
+                    },
+                    endpoint: 'https://your-ad-network.com/rtb.php'
+                }
+            }]
+        }];
+```
+
+##### RTB Banner 2.4 (Video)
+
+```javascript
+adUnits = 
+    [{  code: 'postbid_iframe', // the frame where to render the creative
+        mediaTypes: {
+            banner: {
+                sizes: [900, 250]
+            }
+        },
+        bids: [{
+            bidder: 'exadsadserver',
+            params: {
+                    zoneId: 12345,
+                    fid: '829a896f011475d50da0d82cfdd1af8d9cdb07ff',
+                    partner: 'ortb_2_4',
+                    siteId: '123',
+                    siteName: 'test.com',
+                    userIp: '0.0.0.0',
+                    userId: '1234',
+                    country: 'IRL',
+                    impressionId: '1234',
+                    keywords: 'lifestyle, humour',
+                    bidfloor: 0.00000011,
+                    bidfloorcur: 'EUR',
+                    bcat: ['IAB25', 'IAB7-39','IAB8-18','IAB8-5','IAB9-9'],
+                    badv: ['first.com', 'second.com'],                      
+                    mimes: ['image/jpg'],
+                    dsa: {
+                        dsarequired: 3, 
+                        pubrender: 0,
+                        datatopub: 2
+                    },
+                    endpoint: 'https://your-ad-network.com/rtb.php'
+                }
+            }]
+        }];
+```
+
+#### RTB 2.4 Video (Instream/OutStream/Video Slider) - VAST XML or VAST TAG (url)
+
+{: .table .table-bordered .table-striped }
+| Name          | Scope    | Description           | Example   | Type      |
+|---------------|----------|-----------------------|-----------|-----------|
+| `zoneID`      | required | You can get it from the endpoint created after configuring the zones          | `12345`    | `'integer'` |
+| `fid`      | required | You can get it from the endpoint created after configuring the zones          | `'829a896f011475d50da0d82cfdd1af8d9cdb07ff'`    | `'string'` |
+| `partner`      | required | Currently we support rtb 2.4 (“ortb_2_4”) only           | `'ortb_2_4'`    | `'string'` |
+| `siteId`      | recommended |  Unique Site ID           | `'123'`    | `'string'` |
+| `siteName`      |  |  Site name            | `'test.com'`    | `'string'` |
+| `userIp`      | required |  IP address of the user, ipv4 or ipv6          | `'0.0.0.0'`    | `'string'` |
+| `userId`      | *required |  Unique user ID (string). *If you cannot generate a user ID, you can leave it empty (""). The request will get a response as long as “user” object is included in the request          | `''`    | `'string'` |
+| `country`      |  |  country ISO3          | `'IRL'`    | `'string'` |
+| `impressionId`      | required |  Unique impression ID within this bid request           | `'abcde'`    | `'string'` |
+| `keywords`      |  |  Keywords can be used to ensure ad zones get the right type of advertising. Keywords should be a string of comma-separated words           | `'lifestyle, humour'`    | `'string'` |
+| `bidfloor`      |  |  Minimum bid for this impression (CPM) / click (CPC) and account currency           | `0.00000011`    | `'float'` |
+| `bidfloorcur`      |  |  Currency for minimum bid value specified using ISO-4217 alpha codes           | `'EUR'`    | `'string'` |
+| `bcat`      |  |  Blocked advertiser categories using the IAB content categories           | `['IAB25', 'IAB7-39','IAB8-18','IAB8-5','IAB9-9']`    | `'string array'` |
+| `badv`      |  |  Block list of advertisers by their domains            | `['first.com', 'second.com']`    | `'string array'` |
+| `mediaTypes`      | required |   To see the specific paragraph for details            | `{ video: { mimes: ['video/mp4'], context: 'instream', protocols: [3, 6] }}`    | `'object'` |
+| `dsa`      |  |   DSA transparency information. To see paragraph for more info           | `{ dsarequired: 3, pubrender: 0, datatopub: 2 }`    | `object` |
+| `endpoint`      | required |   EXADS endpoint (URL)            | `https://your-ad-network.com/rtb.php`    | `string` |
+
+##### MediaTypes.video
+
+{: .table .table-bordered .table-striped }
+| Name          | Scope    | Description           | Example   | Type      |
+|---------------|----------|-----------------------|-----------|-----------|
+| `mimes`      | required | list of supported mime types          | `['video/mp4']`    | `'string array'` |
+| `protocols`      | required | list of supported video bid response protocols          | `[3, 6]`    | `'integer array'` |
+| `context`      | recommended | the video context, either ‘instream’, ‘outstream’. Defaults to ‘instream’          | `'instream'`    | `'string'` |
+
+##### DSA
+
+{: .table .table-bordered .table-striped }
+| Name          | Scope    | Description           | Example   | Type      |
+|---------------|----------|-----------------------|-----------|-----------|
+| `dsarequired`      |  |  flag to indicate if DSA information should be made available          | `3`    | `'integer'` |
+| `pubrender`      |  | flag to indicate if the publisher will render the DSA Transparency info          | `0`    | `'integer'` |
+| `datatopub`      |  | ndependent of pubrender, the publisher may need the transparency data for audit purposes           | `2`    | `'integer'` |
+
+```javascript
+adUnits = [{
+    code: 'postbid_iframe',
+    mediaTypes: {
+        video: {
+            mimes: ['video/mp4'],
+            context: 'instream',
+            protocols: [3, 6]
+        }
+    },
+    bids: [{
+        bidder: 'exadsadserver',
+        params: {
+            zoneId: 12345,
+            fid: '829a896f011475d50da0d82cfdd1af8d9cdb07ff',
+            partner: 'ortb_2_4',
+            siteId: '123',
+            siteName: 'test.com',
+            userIp: '0.0.0.0',
+            userId: '1234',
+            impressionId: '1234',
+            imp: {
+                ext: {
+                    video_cta: 0
+                }
+            },
+            dsa: {
+                dsarequired: 3, 
+                pubrender: 0,
+                datatopub: 2
+            },
+            country: 'IRL',
+            keywords: 'lifestyle, humour',
+            bidfloor: 0.00000011,
+            bidfloorcur: 'EUR',
+            bcat: ['IAB25', 'IAB7-39','IAB8-18','IAB8-5','IAB9-9'],
+            badv: ['first.com', 'second.com'],            
+            endpoint: 'https://your-ad-network.com/rtb.php'
+        }
+    }]
+}];
+```
+
+#### RTB 2.4 Native
+
+{: .table .table-bordered .table-striped }
+| Name          | Scope    | Description           | Example   | Type      |
+|---------------|----------|-----------------------|-----------|-----------|
+| `zoneID`      | required | You can get it from the endpoint created after configuring the zones          | `12345`    | `'integer'` |
+| `fid`      | required | You can get it from the endpoint created after configuring the zones          | `'829a896f011475d50da0d82cfdd1af8d9cdb07ff'`    | `'string'` |
+| `partner`      | required | Currently we support rtb 2.4 (“ortb_2_4”) only           | `'ortb_2_4'`    | `'string'` |
+| `siteId`      | recommended |  Unique Site ID           | `'123'`    | `'string'` |
+| `siteName`      |  |  Site name            | `'test.com'`    | `'string'` |
+| `userIp`      | required |  IP address of the user, ipv4 or ipv6          | `'0.0.0.0'`    | `'string'` |
+| `userId`      | *required |  Unique user ID (string). *If you cannot generate a user ID, you can leave it empty (""). The request will get a response as long as “user” object is included in the request          | `''`    | `'string'` |
+| `country`      |  |  country ISO3          | `'IRL'`    | `'string'` |
+| `impressionId`      | required |  Unique impression ID within this bid request           | `'abcde'`    | `'string'` |
+| `keywords`      |  |  Keywords can be used to ensure ad zones get the right type of advertising. Keywords should be a string of comma-separated words           | `'lifestyle, humour'`    | `'string'` |
+| `bidfloor`      |  |  Minimum bid for this impression (CPM) / click (CPC) and account currency           | `0.00000011`    | `'float'` |
+| `bidfloorcur`      |  |  Currency for minimum bid value specified using ISO-4217 alpha codes           | `'EUR'`    | `'string'` |
+| `bcat`      |  |  Blocked advertiser categories using the IAB content categories           | `['IAB25', 'IAB7-39','IAB8-18','IAB8-5','IAB9-9']`    | `'string array'` |
+| `badv`      |  |  Block list of advertisers by their domains            | `['first.com', 'second.com']`    | `'string array'` |
+| `native.plcmtcnt`      |  |   the number of identical placements in this Layout             | `4`    | `'integer'` |
+| `assets`      |  |   To see the specific paragraph for more info             | `{}`    | `'object'` |
+| `dsa`      |  |   DSA transparency information. To see paragraph for more info           | `{ dsarequired: 3, pubrender: 0, datatopub: 2 }`    | `object` |
+| `endpoint`      | required |   EXADS endpoint (URL)            | `https://your-ad-network.com/rtb.php`    | `string` |
+
+##### Assets
+
+* **assets (title)**
+    * **id** - unique asset ID, assigned by exchange. Typically a counter for the array (integer): 
+        * 1 - image asset ID
+        * 2 - title asset ID
+        * 3 - description asset ID
+    * **required** - set to 1 if asset is required or 0 if asset is optional (integer)
+    * **title**
+        * len (required) - maximum length of the text in the title element (integer)
+* **assets (data)**
+    * **id** - unique asset ID, assigned by exchange. Typically a counter for the array (integer):
+        * 1 - image asset ID
+        * 2 - title asset ID
+        * 3 - description asset ID
+    * **data**
+        * **type** - type ID of the element supported by the publisher (integer). We support: 
+            * 1 - sponsored - sponsored By message where response should contain the brand name of the sponsor
+            * 2 - desc - descriptive text associated with the product or service being advertised
+        * **len** - maximum length of the text in the element’s response (integer)
+* **assets (img)**
+    * **id** - unique asset ID, assigned by exchange. Typically a counter for the array (integer): 
+        * 1 - image asset ID
+        * 2 - title asset ID
+        * 3 - description asset ID
+    * **required** - set to 1 if asset is required or 0 if asset is optional (integer)
+    * **img**
+        * **type** - type ID of the image element supported by the publisher. We support: 
+            * 1 - icon image (integer)
+            * 3 - large image preview for the ad (integer)
+        * **w** - width of the image in pixels, optional (integer)
+        * **h** - height of the image in pixels, optional (integer)
+
+##### DSA
+
+{: .table .table-bordered .table-striped }
+| Name          | Scope    | Description           | Example   | Type      |
+|---------------|----------|-----------------------|-----------|-----------|
+| `dsarequired`      |  |  flag to indicate if DSA information should be made available          | `3`    | `'integer'` |
+| `pubrender`      |  | flag to indicate if the publisher will render the DSA Transparency info          | `0`    | `'integer'` |
+| `datatopub`      |  | ndependent of pubrender, the publisher may need the transparency data for audit purposes           | `2`    | `'integer'` |
+
+```javascript
+adUnits = [{
+    code: 'postbid_iframe',
+    mediaTypes: {
+        native: {
+            ortb: {
+                assets: [{
+                    id: 2,
+                    required: 1,
+                    title: {
+                        len: 124
+                    }
+                },
+                {
+                    id: 3,
+                    data: {
+                        type: 1,
+                        len: 50
+                    }
+                },
+                {
+                    id: 1,
+                    required: 1,
+                    img: {
+                        type: 3,
+                        w: 300,
+                        h: 300
+                    }
+                }]
+            }
+        }
+    },
+    bids: [{
+        bidder: 'exadsadserver',
+        params: {
+                zoneId: 12345,
+                fid: '829a896f011475d50da0d82cfdd1af8d9cdb07ff',
+                partner: 'ortb_2_4',
+                siteId: '123',
+                siteName: 'test.com',
+                userIp: '0.0.0.0',
+                userId: '1234',
+                impressionId: '1234',
+                native: {
+                    plcmtcnt: 4
+                },
+                dsa: {
+                    dsarequired: 3, 
+                    pubrender: 0,
+                    datatopub: 2
+                },
+                country: 'IRL',
+                keywords: 'lifestyle, humour',
+                bidfloor: 0.00000011,
+                bidfloorcur: 'EUR',
+                bcat: ['IAB25', 'IAB7-39','IAB8-18','IAB8-5','IAB9-9'],
+                badv: ['first.com', 'second.com'],                
+                endpoint: 'https://your-ad-network.com/rtb.php'
+            }
+        }]
+}];
+```
+
+# DSA Transparency
+All DSA information, returned by the ad server, can be found into the **meta** tag of the response. As:
+```
+"meta": {
+    "dsa": {
+        "behalf": "...",
+        "paid": "...",
+        "transparency": [
+            {
+                "params": [
+                    ...
+                ]
+            }
+        ],
+        "adrender": ...
+    }
+}
+```
+For more information navigate to https://docs.prebid.org/dev-docs/bidder-adaptor.html.
+
+# Tools and suggestions
+This section contains some suggestions that allow to set some parameters automatically.
+
+### User Ip / Country
+In order to detect the current user ip there are different approaches. An example is using public web services as ```https://api.ipify.org```.
+
+Example of usage (to add to the publisher websites):
+
+```
+<script>
+    let userIp = '';
+    let ip_script = document.createElement("script");
+    ip_script.type = "text/javascript";
+    ip_script.src = "https://api.ipify.org?format=jsonp&callback=userIpCallback";
+    
+    function userIpCallback(user_ip) {
+        userIp = user_ip.ip;
+    }
+</script>
+```
+
+The same service gives the possibility to detect the country as well. Check the official web page about possible limitations of the free licence. 
+
+### Impression Id
+Each advertising request has to be identified uniquely by an id.
+One possible approach is using a classical hash function.
+
+```
+<script>
+    let impression_id = hashCode(new Date().getTime().toString());
+    
+    // MurmurHash3 hash function
+    function hashCode(str, seed = 0) {
+        let h1 = 0xdeadbeef ^ seed, h2 = 0x41c6ce57 ^ seed;
+        for (let i = 0, ch; i < str.length; i++) {
+            ch = str.charCodeAt(i);
+            h1 = Math.imul(h1 ^ ch, 2654435761);
+            h2 = Math.imul(h2 ^ ch, 1597334677);
+        }
+        h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^ Math.imul(h2 ^ (h2 >>> 13), 3266489909);
+        h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^ Math.imul(h1 ^ (h1 >>> 13), 3266489909);
+        return 4294967296 * (2097151 & h2) + (h1 >>> 0);
+    }
+</script>
+```
+
+### User Id
+The approach used for impression id could be used for generating a unique user id.
+Also, it is recommended to store the id locally, e.g. by the browser localStorage.
+
+```
+<script>
+let userId = localStorage.getItem('prebidJS.user_id');
+
+if(!userId) {
+    localStorage.setItem('prebidJS.user_id', hashCode('user_id' + new Date().getTime().toString()));
+    userId =  localStorage.getItem('prebidJS.user_id');
+}
+</script>
+```
+
+### Build
+If you don't need to use the prebidJS video module, please remove the videojsVideoProvider module.
+```
+gulp build --modules=consentManagement,exadsBidAdapter,videojsVideoProvider 
+```
\ No newline at end of file

From 572721fca05ba82e90bd9f5b9e7abf5e4093e36d Mon Sep 17 00:00:00 2001
From: Giuseppe Cera <giuseppe@exads.com>
Date: Tue, 19 Mar 2024 13:15:51 +0000
Subject: [PATCH 2/9] fix: after code review

---
 dev-docs/bidders/exadsadserver.md | 598 ++++++++++++++----------------
 1 file changed, 275 insertions(+), 323 deletions(-)

diff --git a/dev-docs/bidders/exadsadserver.md b/dev-docs/bidders/exadsadserver.md
index e7eb5a9c81..042da8ac13 100644
--- a/dev-docs/bidders/exadsadserver.md
+++ b/dev-docs/bidders/exadsadserver.md
@@ -18,10 +18,6 @@ floors_supported: ?
 ortb_blocking_supported: ?
 ---
 
-### Note
-
-Module that connects to EXADS’ bidder for bids.
-
 ### Configuration
 
 Use `setConfig` to instruct Prebid.js to initilize the exadsBidAdapter, as specified below. 
@@ -32,45 +28,47 @@ Use `setConfig` to instruct Prebid.js to initilize the exadsBidAdapter, as speci
 
 ```
 pbjs.setConfig({
-    debug: false,
-    //cache: { url: "https://prebid.adnxs.com/pbc/v1/cache" },
-    consentManagement: {
-        gdpr: {
-            cmpApi: 'static',
-            timeout: 1000000,
-            defaultGdprScope: true,
-            consentData: {
-                getTCData: {
-                    tcString: consentString,
-                    gdprApplies: false // set to true to pass the gdpr consent string
-                }
-            }
-        }
-    }
+  debug: false,
+  //cache: { url: "https://prebid.adnxs.com/pbc/v1/cache" },
+  consentManagement: {
+    gdpr: {
+      cmpApi: 'static',
+      timeout: 1000000,
+      defaultGdprScope: true,
+      consentData: {
+        getTCData: {
+          tcString: consentString,
+          gdprApplies: false, // set to true to pass the gdpr consent string
+        },
+      },
+    },
+  },
 });
 ```
 Add the `video` config if you need to render videos using the video module.
 For more info navigate to https://docs.prebid.org/prebid-video/video-module.html.
 ```
 pbjs.setConfig({
-    video: {
-        providers: [{
-            divId: 'player', // the id related to the videojs tag in your body
-            vendorCode: 2, // videojs, 
-            playerConfig: {
-                params: {
-                    adPluginConfig: {
-                        numRedirects: 10
-                    },
-                    vendorConfig: {
-                        controls: true,
-                        autoplay: true,
-                        preload: "auto",
-                    }
-                }
-            }
-        },]
-    },
+  video: {
+    providers: [
+      {
+        divId: 'player', // the id related to the videojs tag in your body
+        vendorCode: 2, // videojs,
+        playerConfig: {
+          params: {
+            adPluginConfig: {
+              numRedirects: 10,
+            },
+            vendorConfig: {
+              controls: true,
+              autoplay: true,
+              preload: 'auto',
+            },
+          },
+        },
+      },
+    ],
+  },
 });
 ```
 
@@ -79,23 +77,23 @@ pbjs.setConfig({
 {: .table .table-bordered .table-striped }
 | Name          | Scope    | Description           | Example   | Type      |
 |---------------|----------|-----------------------|-----------|-----------|
-| `zoneID`      | required | You can get it from the endpoint created after configuring the zones          | `12345`    | `'integer'` |
-| `fid`      | required | You can get it from the endpoint created after configuring the zones          | `'829a896f011475d50da0d82cfdd1af8d9cdb07ff'`    | `'string'` |
-| `partner`      | required | Currently we support rtb 2.4 (“ortb_2_4”) only           | `'ortb_2_4'`    | `'string'` |
-| `siteId`      | recommended |  Unique Site ID           | `'123'`    | `'string'` |
-| `siteName`      |  |  Site name            | `'test.com'`    | `'string'` |
-| `banner.sizes`      | required |  [width, height]          | `[145,256]`    | `'integer array'` |
-| `userIp`      | required |  IP address of the user, ipv4 or ipv6          | `'0.0.0.0'`    | `'string'` |
-| `userId`      | *required |  Unique user ID (string). *If you cannot generate a user ID, you can leave it empty (""). The request will get a response as long as “user” object is included in the request          | `''`    | `'string'` |
-| `country`      |  |  country ISO3          | `'IRL'`    | `'string'` |
-| `impressionId`      | required |  Unique impression ID within this bid request           | `'abcde'`    | `'string'` |
-| `keywords`      |  |  Keywords can be used to ensure ad zones get the right type of advertising. Keywords should be a string of comma-separated words           | `'lifestyle, humour'`    | `'string'` |
-| `bidfloor`      |  |  Minimum bid for this impression (CPM) / click (CPC) and account currency           | `0.00000011`    | `'float'` |
-| `bidfloorcur`      |  |  Currency for minimum bid value specified using ISO-4217 alpha codes           | `'EUR'`    | `'string'` |
-| `bcat`      |  |  Blocked advertiser categories using the IAB content categories           | `['IAB25', 'IAB7-39','IAB8-18','IAB8-5','IAB9-9']`    | `'string array'` |
-| `badv`      |  |  Block list of advertisers by their domains            | `['first.com', 'second.com']`    | `'string array'` |
-| `mimes`      |  |   List of supported mime types. We support: image/jpeg, image/jpg, image/png, image/png, image/gif, image/webp, video/mp4            | `['image/jpg']`    | `'string array'` |
-| `dsa`      |  |   DSA transparency information. To see the specific paragraph for more details.            | `{ dsarequired: 3, pubrender: 0, datatopub: 2 }`    | `object` |
+| `zoneID`      | required | You can get it from the endpoint created after configuring the zones          | `12345`    | `integer` |
+| `fid`      | required | You can get it from the endpoint created after configuring the zones          | `'829a896f011475d50da0d82cfdd1af8d9cdb07ff'`    | `string` |
+| `partner`      | required | Currently we support rtb 2.4 (“ortb_2_4”) only           | `'ortb_2_4'`    | `string` |
+| `siteId`      | recommended |  Unique Site ID           | `'123'`    | `string` |
+| `siteName`      |  |  Site name            | `'test.com'`    | `string` |
+| `banner.sizes`      | required |  [width, height]          | `[145,256]`    | `integer array` |
+| `userIp`      | required |  IP address of the user, ipv4 or ipv6          | `'0.0.0.0'`    | `string` |
+| `userId`      | *required |  Unique user ID (string). *If you cannot generate a user ID, you can leave it empty (""). The request will get a response as long as “user” object is included in the request          | `''`    | `string` |
+| `country`      | optional |  country ISO3          | `'IRL'`    | `string` |
+| `impressionId`      | required |  Unique impression ID within this bid request           | `'abcde'`    | `string` |
+| `keywords`      | optional |  Keywords can be used to ensure ad zones get the right type of advertising. Keywords should be a string of comma-separated words           | `'lifestyle, humour'`    | `string` |
+| `bidfloor`      | optional |  Minimum bid for this impression (CPM) / click (CPC) and account currency           | `0.00000011`    | `float` |
+| `bidfloorcur`      | optional |  Currency for minimum bid value specified using ISO-4217 alpha codes           | `'EUR'`    | `string` |
+| `bcat`      | optional |  Blocked advertiser categories using the IAB content categories           | `['IAB25', 'IAB7-39','IAB8-18','IAB8-5','IAB9-9']`    | `string array` |
+| `badv`      | optional |  Block list of advertisers by their domains            | `['first.com', 'second.com']`    | `string array` |
+| `mimes`      | optional |   List of supported mime types. We support: image/jpeg, image/jpg, image/png, image/png, image/gif, image/webp, video/mp4            | `['image/jpg']`    | `string array` |
+| `dsa`      | optional |   DSA transparency information. To see the specific paragraph for more details.            | `{ dsarequired: 3, pubrender: 0, datatopub: 2 }`    | `object` |
 | `endpoint`      | required |   EXADS endpoint (URL)            | `https://your-ad-network.com/rtb.php`    | `string` |
 
 ##### DSA
@@ -103,87 +101,96 @@ pbjs.setConfig({
 {: .table .table-bordered .table-striped }
 | Name          | Scope    | Description           | Example   | Type      |
 |---------------|----------|-----------------------|-----------|-----------|
-| `dsarequired`      |  |  flag to indicate if DSA information should be made available          | `3`    | `'integer'` |
-| `pubrender`      |  | flag to indicate if the publisher will render the DSA Transparency info          | `0`    | `'integer'` |
-| `datatopub`      |  | ndependent of pubrender, the publisher may need the transparency data for audit purposes           | `2`    | `'integer'` |
+| `dsarequired`      | optional |  flag to indicate if DSA information should be made available          | `3`    | `integer` |
+| `pubrender`      | optional | flag to indicate if the publisher will render the DSA Transparency info          | `0`    | `integer` |
+| `datatopub`      | optional | ndependent of pubrender, the publisher may need the transparency data for audit purposes           | `2`    | `integer` |
 
 ##### RTB Banner 2.4 (Image)
 
 ```javascript
-
-adUnits = 
-    [{  code: 'postbid_iframe', // the frame where to render the creative
-        mediaTypes: {
-            banner: {
-                sizes: [300, 250]
-            }
+adUnits = [
+  {
+    code: 'postbid_iframe', // the frame where to render the creative
+    mediaTypes: {
+      banner: {
+        sizes: [300, 250],
+      },
+    },
+    bids: [
+      {
+        bidder: 'exadsadserver',
+        params: {
+          zoneId: 12345,
+          fid: '829a896f011475d50da0d82cfdd1af8d9cdb07ff',
+          partner: 'ortb_2_4',
+          siteId: '123',
+          siteName: 'test.com',
+          userIp: '0.0.0.0',
+          userId: '1234',
+          country: 'IRL', // optional
+          impressionId: impression_id.toString(),
+          keywords: 'lifestyle, humour', // optional
+          bidfloor: 0.00000011, // optional
+          bidfloorcur: 'EUR', // optional
+          bcat: ['IAB25', 'IAB7-39', 'IAB8-18', 'IAB8-5', 'IAB9-9'], // optional
+          badv: ['first.com', 'second.com'], // optional
+          mimes: ['image/jpg'],
+          dsa: {
+            // optional
+            dsarequired: 3,
+            pubrender: 0,
+            datatopub: 2,
+          },
+          endpoint: 'https://your-ad-network.com/rtb.php',
         },
-        bids: [{
-            bidder: 'exadsadserver',
-            params: {
-                    zoneId: 12345,
-                    fid: '829a896f011475d50da0d82cfdd1af8d9cdb07ff',
-                    partner: 'ortb_2_4',
-                    siteId: '123',
-                    siteName: 'test.com',
-                    userIp: '0.0.0.0',
-                    userId: '1234',
-                    country: 'IRL',
-                    impressionId: impression_id.toString(),
-                    keywords: 'lifestyle, humour',
-                    bidfloor: 0.00000011,
-                    bidfloorcur: 'EUR',
-                    bcat: ['IAB25', 'IAB7-39','IAB8-18','IAB8-5','IAB9-9'],
-                    badv: ['first.com', 'second.com'],
-                    mimes: ['image/jpg'],
-                    dsa: {
-                        dsarequired: 3, 
-                        pubrender: 0,
-                        datatopub: 2
-                    },
-                    endpoint: 'https://your-ad-network.com/rtb.php'
-                }
-            }]
-        }];
+      },
+    ],
+  },
+];
 ```
 
 ##### RTB Banner 2.4 (Video)
 
 ```javascript
-adUnits = 
-    [{  code: 'postbid_iframe', // the frame where to render the creative
-        mediaTypes: {
-            banner: {
-                sizes: [900, 250]
-            }
+adUnits = [
+  {
+    code: 'postbid_iframe', // the frame where to render the creative
+    mediaTypes: {
+      banner: {
+        sizes: [900, 250],
+      },
+    },
+    bids: [
+      {
+        bidder: 'exadsadserver',
+        params: {
+          zoneId: 12345,
+          fid: '829a896f011475d50da0d82cfdd1af8d9cdb07ff',
+          partner: 'ortb_2_4',
+          siteId: '123',
+          siteName: 'test.com',
+          userIp: '0.0.0.0',
+          userId: '1234',
+          country: 'IRL', // optional
+          impressionId: '1234', // optional
+          keywords: 'lifestyle, humour', // optional
+          bidfloor: 0.00000011, // optional
+          bidfloorcur: 'EUR', // optional
+          bcat: ['IAB25', 'IAB7-39', 'IAB8-18', 'IAB8-5', 'IAB9-9'], // optional
+          badv: ['first.com', 'second.com'], // optional
+          mimes: ['image/jpg'],
+          dsa: {
+            // optional
+            dsarequired: 3,
+            pubrender: 0,
+            datatopub: 2,
+          },
+          endpoint: 'https://your-ad-network.com/rtb.php',
         },
-        bids: [{
-            bidder: 'exadsadserver',
-            params: {
-                    zoneId: 12345,
-                    fid: '829a896f011475d50da0d82cfdd1af8d9cdb07ff',
-                    partner: 'ortb_2_4',
-                    siteId: '123',
-                    siteName: 'test.com',
-                    userIp: '0.0.0.0',
-                    userId: '1234',
-                    country: 'IRL',
-                    impressionId: '1234',
-                    keywords: 'lifestyle, humour',
-                    bidfloor: 0.00000011,
-                    bidfloorcur: 'EUR',
-                    bcat: ['IAB25', 'IAB7-39','IAB8-18','IAB8-5','IAB9-9'],
-                    badv: ['first.com', 'second.com'],                      
-                    mimes: ['image/jpg'],
-                    dsa: {
-                        dsarequired: 3, 
-                        pubrender: 0,
-                        datatopub: 2
-                    },
-                    endpoint: 'https://your-ad-network.com/rtb.php'
-                }
-            }]
-        }];
+      },
+    ],
+  },
+];
 ```
 
 #### RTB 2.4 Video (Instream/OutStream/Video Slider) - VAST XML or VAST TAG (url)
@@ -191,22 +198,22 @@ adUnits =
 {: .table .table-bordered .table-striped }
 | Name          | Scope    | Description           | Example   | Type      |
 |---------------|----------|-----------------------|-----------|-----------|
-| `zoneID`      | required | You can get it from the endpoint created after configuring the zones          | `12345`    | `'integer'` |
-| `fid`      | required | You can get it from the endpoint created after configuring the zones          | `'829a896f011475d50da0d82cfdd1af8d9cdb07ff'`    | `'string'` |
-| `partner`      | required | Currently we support rtb 2.4 (“ortb_2_4”) only           | `'ortb_2_4'`    | `'string'` |
-| `siteId`      | recommended |  Unique Site ID           | `'123'`    | `'string'` |
-| `siteName`      |  |  Site name            | `'test.com'`    | `'string'` |
-| `userIp`      | required |  IP address of the user, ipv4 or ipv6          | `'0.0.0.0'`    | `'string'` |
-| `userId`      | *required |  Unique user ID (string). *If you cannot generate a user ID, you can leave it empty (""). The request will get a response as long as “user” object is included in the request          | `''`    | `'string'` |
-| `country`      |  |  country ISO3          | `'IRL'`    | `'string'` |
-| `impressionId`      | required |  Unique impression ID within this bid request           | `'abcde'`    | `'string'` |
-| `keywords`      |  |  Keywords can be used to ensure ad zones get the right type of advertising. Keywords should be a string of comma-separated words           | `'lifestyle, humour'`    | `'string'` |
-| `bidfloor`      |  |  Minimum bid for this impression (CPM) / click (CPC) and account currency           | `0.00000011`    | `'float'` |
-| `bidfloorcur`      |  |  Currency for minimum bid value specified using ISO-4217 alpha codes           | `'EUR'`    | `'string'` |
-| `bcat`      |  |  Blocked advertiser categories using the IAB content categories           | `['IAB25', 'IAB7-39','IAB8-18','IAB8-5','IAB9-9']`    | `'string array'` |
-| `badv`      |  |  Block list of advertisers by their domains            | `['first.com', 'second.com']`    | `'string array'` |
-| `mediaTypes`      | required |   To see the specific paragraph for details            | `{ video: { mimes: ['video/mp4'], context: 'instream', protocols: [3, 6] }}`    | `'object'` |
-| `dsa`      |  |   DSA transparency information. To see paragraph for more info           | `{ dsarequired: 3, pubrender: 0, datatopub: 2 }`    | `object` |
+| `zoneID`      | required | You can get it from the endpoint created after configuring the zones          | `12345`    | `integer` |
+| `fid`      | required | You can get it from the endpoint created after configuring the zones          | `'829a896f011475d50da0d82cfdd1af8d9cdb07ff'`    | `string` |
+| `partner`      | required | Currently we support rtb 2.4 (“ortb_2_4”) only           | `'ortb_2_4'`    | `string` |
+| `siteId`      | recommended |  Unique Site ID           | `'123'`    | `string` |
+| `siteName`      |  |  Site name            | `'test.com'`    | `string` |
+| `userIp`      | required |  IP address of the user, ipv4 or ipv6          | `'0.0.0.0'`    | `string` |
+| `userId`      | *required |  Unique user ID (string). *If you cannot generate a user ID, you can leave it empty (""). The request will get a response as long as “user” object is included in the request          | `''`    | `string` |
+| `country`      | optional |  country ISO3          | `'IRL'`    | `string` |
+| `impressionId`      | required |  Unique impression ID within this bid request           | `'abcde'`    | `string` |
+| `keywords`      | optional |  Keywords can be used to ensure ad zones get the right type of advertising. Keywords should be a string of comma-separated words           | `'lifestyle, humour'`    | `string` |
+| `bidfloor`      | optional |  Minimum bid for this impression (CPM) / click (CPC) and account currency           | `0.00000011`    | `float` |
+| `bidfloorcur`      | optional |  Currency for minimum bid value specified using ISO-4217 alpha codes           | `'EUR'`    | `string` |
+| `bcat`      | optional |  Blocked advertiser categories using the IAB content categories           | `['IAB25', 'IAB7-39','IAB8-18','IAB8-5','IAB9-9']`    | `string array` |
+| `badv`      | optional |  Block list of advertisers by their domains            | `['first.com', 'second.com']`    | `string array` |
+| `mediaTypes`      | required |   To see the specific paragraph for details            | `{ video: { mimes: ['video/mp4'], context: 'instream', protocols: [3, 6] }}`    | `object` |
+| `dsa`      | optional |   DSA transparency information. To see paragraph for more info           | `{ dsarequired: 3, pubrender: 0, datatopub: 2 }`    | `object` |
 | `endpoint`      | required |   EXADS endpoint (URL)            | `https://your-ad-network.com/rtb.php`    | `string` |
 
 ##### MediaTypes.video
@@ -214,60 +221,65 @@ adUnits =
 {: .table .table-bordered .table-striped }
 | Name          | Scope    | Description           | Example   | Type      |
 |---------------|----------|-----------------------|-----------|-----------|
-| `mimes`      | required | list of supported mime types          | `['video/mp4']`    | `'string array'` |
-| `protocols`      | required | list of supported video bid response protocols          | `[3, 6]`    | `'integer array'` |
-| `context`      | recommended | the video context, either ‘instream’, ‘outstream’. Defaults to ‘instream’          | `'instream'`    | `'string'` |
+| `mimes`      | required | list of supported mime types          | `['video/mp4']`    | `string array` |
+| `protocols`      | required | list of supported video bid response protocols          | `[3, 6]`    | `integer array` |
+| `context`      | recommended | the video context, either ‘instream’, ‘outstream’. Defaults to ‘instream’          | `'instream'`    | `string` |
 
 ##### DSA
 
 {: .table .table-bordered .table-striped }
 | Name          | Scope    | Description           | Example   | Type      |
 |---------------|----------|-----------------------|-----------|-----------|
-| `dsarequired`      |  |  flag to indicate if DSA information should be made available          | `3`    | `'integer'` |
-| `pubrender`      |  | flag to indicate if the publisher will render the DSA Transparency info          | `0`    | `'integer'` |
-| `datatopub`      |  | ndependent of pubrender, the publisher may need the transparency data for audit purposes           | `2`    | `'integer'` |
+| `dsarequired`      | optional |  flag to indicate if DSA information should be made available          | `3`    | `integer` |
+| `pubrender`      | optional | flag to indicate if the publisher will render the DSA Transparency info          | `0`    | `integer` |
+| `datatopub`      | optional | ndependent of pubrender, the publisher may need the transparency data for audit purposes           | `2`    | `integer` |
 
 ```javascript
-adUnits = [{
+adUnits = [
+  {
     code: 'postbid_iframe',
     mediaTypes: {
-        video: {
-            mimes: ['video/mp4'],
-            context: 'instream',
-            protocols: [3, 6]
-        }
+      video: {
+        mimes: ['video/mp4'],
+        context: 'instream',
+        protocols: [3, 6],
+      },
     },
-    bids: [{
+    bids: [
+      {
         bidder: 'exadsadserver',
         params: {
-            zoneId: 12345,
-            fid: '829a896f011475d50da0d82cfdd1af8d9cdb07ff',
-            partner: 'ortb_2_4',
-            siteId: '123',
-            siteName: 'test.com',
-            userIp: '0.0.0.0',
-            userId: '1234',
-            impressionId: '1234',
-            imp: {
-                ext: {
-                    video_cta: 0
-                }
-            },
-            dsa: {
-                dsarequired: 3, 
-                pubrender: 0,
-                datatopub: 2
+          zoneId: 12345,
+          fid: '829a896f011475d50da0d82cfdd1af8d9cdb07ff',
+          partner: 'ortb_2_4',
+          siteId: '123',
+          siteName: 'test.com',
+          userIp: '0.0.0.0',
+          userId: '1234',
+          impressionId: '1234',
+          imp: {
+            ext: {
+              video_cta: 0,
             },
-            country: 'IRL',
-            keywords: 'lifestyle, humour',
-            bidfloor: 0.00000011,
-            bidfloorcur: 'EUR',
-            bcat: ['IAB25', 'IAB7-39','IAB8-18','IAB8-5','IAB9-9'],
-            badv: ['first.com', 'second.com'],            
-            endpoint: 'https://your-ad-network.com/rtb.php'
-        }
-    }]
-}];
+          },
+          dsa: {
+            // optional
+            dsarequired: 3,
+            pubrender: 0,
+            datatopub: 2,
+          },
+          country: 'IRL', // optional
+          keywords: 'lifestyle, humour', // optional
+          bidfloor: 0.00000011, // optional
+          bidfloorcur: 'EUR', // optional
+          bcat: ['IAB25', 'IAB7-39', 'IAB8-18', 'IAB8-5', 'IAB9-9'], // optional
+          badv: ['first.com', 'second.com'], // optional
+          endpoint: 'https://your-ad-network.com/rtb.php',
+        },
+      },
+    ],
+  },
+];
 ```
 
 #### RTB 2.4 Native
@@ -275,23 +287,23 @@ adUnits = [{
 {: .table .table-bordered .table-striped }
 | Name          | Scope    | Description           | Example   | Type      |
 |---------------|----------|-----------------------|-----------|-----------|
-| `zoneID`      | required | You can get it from the endpoint created after configuring the zones          | `12345`    | `'integer'` |
-| `fid`      | required | You can get it from the endpoint created after configuring the zones          | `'829a896f011475d50da0d82cfdd1af8d9cdb07ff'`    | `'string'` |
-| `partner`      | required | Currently we support rtb 2.4 (“ortb_2_4”) only           | `'ortb_2_4'`    | `'string'` |
-| `siteId`      | recommended |  Unique Site ID           | `'123'`    | `'string'` |
-| `siteName`      |  |  Site name            | `'test.com'`    | `'string'` |
-| `userIp`      | required |  IP address of the user, ipv4 or ipv6          | `'0.0.0.0'`    | `'string'` |
-| `userId`      | *required |  Unique user ID (string). *If you cannot generate a user ID, you can leave it empty (""). The request will get a response as long as “user” object is included in the request          | `''`    | `'string'` |
-| `country`      |  |  country ISO3          | `'IRL'`    | `'string'` |
-| `impressionId`      | required |  Unique impression ID within this bid request           | `'abcde'`    | `'string'` |
-| `keywords`      |  |  Keywords can be used to ensure ad zones get the right type of advertising. Keywords should be a string of comma-separated words           | `'lifestyle, humour'`    | `'string'` |
-| `bidfloor`      |  |  Minimum bid for this impression (CPM) / click (CPC) and account currency           | `0.00000011`    | `'float'` |
-| `bidfloorcur`      |  |  Currency for minimum bid value specified using ISO-4217 alpha codes           | `'EUR'`    | `'string'` |
-| `bcat`      |  |  Blocked advertiser categories using the IAB content categories           | `['IAB25', 'IAB7-39','IAB8-18','IAB8-5','IAB9-9']`    | `'string array'` |
-| `badv`      |  |  Block list of advertisers by their domains            | `['first.com', 'second.com']`    | `'string array'` |
-| `native.plcmtcnt`      |  |   the number of identical placements in this Layout             | `4`    | `'integer'` |
-| `assets`      |  |   To see the specific paragraph for more info             | `{}`    | `'object'` |
-| `dsa`      |  |   DSA transparency information. To see paragraph for more info           | `{ dsarequired: 3, pubrender: 0, datatopub: 2 }`    | `object` |
+| `zoneID`      | required | You can get it from the endpoint created after configuring the zones          | `12345`    | `integer` |
+| `fid`      | required | You can get it from the endpoint created after configuring the zones          | `'829a896f011475d50da0d82cfdd1af8d9cdb07ff'`    | `string` |
+| `partner`      | required | Currently we support rtb 2.4 (“ortb_2_4”) only           | `'ortb_2_4'`    | `string` |
+| `siteId`      | recommended |  Unique Site ID           | `'123'`    | `string` |
+| `siteName`      |  |  Site name            | `'test.com'`    | `string` |
+| `userIp`      | required |  IP address of the user, ipv4 or ipv6          | `'0.0.0.0'`    | `string` |
+| `userId`      | *required |  Unique user ID (string). *If you cannot generate a user ID, you can leave it empty (""). The request will get a response as long as “user” object is included in the request          | `''`    | `string` |
+| `country`      | optional |  country ISO3          | `'IRL'`    | `string` |
+| `impressionId`      | required |  Unique impression ID within this bid request           | `'abcde'`    | `string` |
+| `keywords`      | optional |  Keywords can be used to ensure ad zones get the right type of advertising. Keywords should be a string of comma-separated words           | `'lifestyle, humour'`    | `string` |
+| `bidfloor`      | optional |  Minimum bid for this impression (CPM) / click (CPC) and account currency           | `0.00000011`    | `float` |
+| `bidfloorcur`      | optional |  Currency for minimum bid value specified using ISO-4217 alpha codes           | `'EUR'`    | `string` |
+| `bcat`      | optional |  Blocked advertiser categories using the IAB content categories           | `['IAB25', 'IAB7-39','IAB8-18','IAB8-5','IAB9-9']`    | `string array` |
+| `badv`      | optional |  Block list of advertisers by their domains            | `['first.com', 'second.com']`    | `string array` |
+| `native.plcmtcnt`      | optional |   the number of identical placements in this Layout             | `4`    | `integer` |
+| `assets`      | required |   To see the specific paragraph for more info             | `{}`    | `object` |
+| `dsa`      | optional |   DSA transparency information. To see paragraph for more info           | `{ dsarequired: 3, pubrender: 0, datatopub: 2 }`    | `object` |
 | `endpoint`      | required |   EXADS endpoint (URL)            | `https://your-ad-network.com/rtb.php`    | `string` |
 
 ##### Assets
@@ -332,71 +344,78 @@ adUnits = [{
 {: .table .table-bordered .table-striped }
 | Name          | Scope    | Description           | Example   | Type      |
 |---------------|----------|-----------------------|-----------|-----------|
-| `dsarequired`      |  |  flag to indicate if DSA information should be made available          | `3`    | `'integer'` |
-| `pubrender`      |  | flag to indicate if the publisher will render the DSA Transparency info          | `0`    | `'integer'` |
-| `datatopub`      |  | ndependent of pubrender, the publisher may need the transparency data for audit purposes           | `2`    | `'integer'` |
+| `dsarequired`      | optional |  flag to indicate if DSA information should be made available          | `3`    | `integer` |
+| `pubrender`      | optional | flag to indicate if the publisher will render the DSA Transparency info          | `0`    | `integer` |
+| `datatopub`      | optional | ndependent of pubrender, the publisher may need the transparency data for audit purposes           | `2`    | `integer` |
 
 ```javascript
-adUnits = [{
+adUnits = [
+  {
     code: 'postbid_iframe',
     mediaTypes: {
-        native: {
-            ortb: {
-                assets: [{
-                    id: 2,
-                    required: 1,
-                    title: {
-                        len: 124
-                    }
-                },
-                {
-                    id: 3,
-                    data: {
-                        type: 1,
-                        len: 50
-                    }
-                },
-                {
-                    id: 1,
-                    required: 1,
-                    img: {
-                        type: 3,
-                        w: 300,
-                        h: 300
-                    }
-                }]
-            }
-        }
+      native: {
+        ortb: {
+          assets: [
+            {
+              id: 2,
+              required: 1,
+              title: {
+                len: 124,
+              },
+            },
+            {
+              id: 3,
+              data: {
+                type: 1,
+                len: 50,
+              },
+            },
+            {
+              id: 1,
+              required: 1,
+              img: {
+                type: 3,
+                w: 300,
+                h: 300,
+              },
+            },
+          ],
+        },
+      },
     },
-    bids: [{
+    bids: [
+      {
         bidder: 'exadsadserver',
         params: {
-                zoneId: 12345,
-                fid: '829a896f011475d50da0d82cfdd1af8d9cdb07ff',
-                partner: 'ortb_2_4',
-                siteId: '123',
-                siteName: 'test.com',
-                userIp: '0.0.0.0',
-                userId: '1234',
-                impressionId: '1234',
-                native: {
-                    plcmtcnt: 4
-                },
-                dsa: {
-                    dsarequired: 3, 
-                    pubrender: 0,
-                    datatopub: 2
-                },
-                country: 'IRL',
-                keywords: 'lifestyle, humour',
-                bidfloor: 0.00000011,
-                bidfloorcur: 'EUR',
-                bcat: ['IAB25', 'IAB7-39','IAB8-18','IAB8-5','IAB9-9'],
-                badv: ['first.com', 'second.com'],                
-                endpoint: 'https://your-ad-network.com/rtb.php'
-            }
-        }]
-}];
+          zoneId: 12345,
+          fid: '829a896f011475d50da0d82cfdd1af8d9cdb07ff',
+          partner: 'ortb_2_4',
+          siteId: '123',
+          siteName: 'test.com',
+          userIp: '0.0.0.0',
+          userId: '1234',
+          impressionId: '1234',
+          native: {
+            // optional
+            plcmtcnt: 4,
+          },
+          dsa: {
+            dsarequired: 3,
+            pubrender: 0,
+            datatopub: 2,
+          },
+          country: 'IRL', // optional
+          keywords: 'lifestyle, humour', // optional
+          bidfloor: 0.00000011, // optional
+          bidfloorcur: 'EUR', // optional
+          bcat: ['IAB25', 'IAB7-39', 'IAB8-18', 'IAB8-5', 'IAB9-9'], // optional
+          badv: ['first.com', 'second.com'], // optional
+          endpoint: 'https://your-ad-network.com/rtb.php',
+        },
+      },
+    ],
+  },
+];
 ```
 
 # DSA Transparency
@@ -417,71 +436,4 @@ All DSA information, returned by the ad server, can be found into the **meta** t
     }
 }
 ```
-For more information navigate to https://docs.prebid.org/dev-docs/bidder-adaptor.html.
-
-# Tools and suggestions
-This section contains some suggestions that allow to set some parameters automatically.
-
-### User Ip / Country
-In order to detect the current user ip there are different approaches. An example is using public web services as ```https://api.ipify.org```.
-
-Example of usage (to add to the publisher websites):
-
-```
-<script>
-    let userIp = '';
-    let ip_script = document.createElement("script");
-    ip_script.type = "text/javascript";
-    ip_script.src = "https://api.ipify.org?format=jsonp&callback=userIpCallback";
-    
-    function userIpCallback(user_ip) {
-        userIp = user_ip.ip;
-    }
-</script>
-```
-
-The same service gives the possibility to detect the country as well. Check the official web page about possible limitations of the free licence. 
-
-### Impression Id
-Each advertising request has to be identified uniquely by an id.
-One possible approach is using a classical hash function.
-
-```
-<script>
-    let impression_id = hashCode(new Date().getTime().toString());
-    
-    // MurmurHash3 hash function
-    function hashCode(str, seed = 0) {
-        let h1 = 0xdeadbeef ^ seed, h2 = 0x41c6ce57 ^ seed;
-        for (let i = 0, ch; i < str.length; i++) {
-            ch = str.charCodeAt(i);
-            h1 = Math.imul(h1 ^ ch, 2654435761);
-            h2 = Math.imul(h2 ^ ch, 1597334677);
-        }
-        h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^ Math.imul(h2 ^ (h2 >>> 13), 3266489909);
-        h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^ Math.imul(h1 ^ (h1 >>> 13), 3266489909);
-        return 4294967296 * (2097151 & h2) + (h1 >>> 0);
-    }
-</script>
-```
-
-### User Id
-The approach used for impression id could be used for generating a unique user id.
-Also, it is recommended to store the id locally, e.g. by the browser localStorage.
-
-```
-<script>
-let userId = localStorage.getItem('prebidJS.user_id');
-
-if(!userId) {
-    localStorage.setItem('prebidJS.user_id', hashCode('user_id' + new Date().getTime().toString()));
-    userId =  localStorage.getItem('prebidJS.user_id');
-}
-</script>
-```
-
-### Build
-If you don't need to use the prebidJS video module, please remove the videojsVideoProvider module.
-```
-gulp build --modules=consentManagement,exadsBidAdapter,videojsVideoProvider 
-```
\ No newline at end of file
+For more information navigate to https://docs.prebid.org/dev-docs/bidder-adaptor.html.
\ No newline at end of file

From d7cafd30bc37f1fcddb228a8dcb5af5dceb4513f Mon Sep 17 00:00:00 2001
From: Giuseppe Cera <giuseppe@exads.com>
Date: Tue, 19 Mar 2024 16:04:54 +0000
Subject: [PATCH 3/9] fix: changed main parameters

---
 dev-docs/bidders/exadsadserver.md | 18 +++++++-----------
 1 file changed, 7 insertions(+), 11 deletions(-)

diff --git a/dev-docs/bidders/exadsadserver.md b/dev-docs/bidders/exadsadserver.md
index 042da8ac13..21650f2fe6 100644
--- a/dev-docs/bidders/exadsadserver.md
+++ b/dev-docs/bidders/exadsadserver.md
@@ -3,19 +3,15 @@ layout: bidder
 title: EXADS
 description: EXADS Bidder Adapter
 pbjs: true
-pbs: false ?
 biddercode: exadsadserver
-gvl_id: 1084 ? // found here https://iabeurope.eu/vendor-list-tcf/
-tcfeu_supported: true?
-usp_supported: false?
+gvl_id: 1084 - waiting Tiago/Barry
+tcfeu_supported: true
 media_types: banner, video, native
-gpp_sids: ?
-schain_supported: ?
-dchain_supported: ?
-safeframes_ok: ?
-deals_supported: ?
-floors_supported: ?
-ortb_blocking_supported: ?
+gpp_sids: tcfeu
+safeframes_ok: false
+deals_supported: false
+floors_supported: true
+ortb_blocking_supported: true
 ---
 
 ### Configuration

From 62ae2bccbf1bb7930a8607b499237fe41befe5e3 Mon Sep 17 00:00:00 2001
From: Giuseppe Cera <giuseppe@exads.com>
Date: Tue, 19 Mar 2024 17:43:18 +0000
Subject: [PATCH 4/9] fix: from code review

---
 dev-docs/bidders/exadsadserver.md | 48 ++++++++++++++++++++++++++++---
 1 file changed, 44 insertions(+), 4 deletions(-)

diff --git a/dev-docs/bidders/exadsadserver.md b/dev-docs/bidders/exadsadserver.md
index 21650f2fe6..5175b14170 100644
--- a/dev-docs/bidders/exadsadserver.md
+++ b/dev-docs/bidders/exadsadserver.md
@@ -14,8 +14,45 @@ floors_supported: true
 ortb_blocking_supported: true
 ---
 
-### Configuration
+### Example
+
+A very minimal RTB Banner example that shows how to use the EXADS adapter.
+The most important attributes are: **endpoint**, **fid** and **zoneId**. You can get them after configuring the zones.
+For more details about ad formats and parameters, read it in the next sections.
+
+```
+adUnits = [
+  {
+    code: 'postbid_iframe', // the frame where to render the creative
+    mediaTypes: {
+      banner: {
+        sizes: [300, 250],
+      },
+    },
+    bids: [
+      {
+        bidder: 'exadsadserver',
+        params: {
+          zoneId: 12345,
+          fid: '829a896f011475d50da0d82cfdd1af8d9cdb07ff',
+          partner: 'ortb_2_4',
+          siteId: '123',
+          siteName: 'test.com',
+          country: 'IRL,
+          userIp: '0.0.0.0',
+          userId: '1234',
+          impressionId: impression_id.toString(),
+          mimes: ['image/jpg'],
+          endpoint: 'https://your-ad-network.com/rtb.php',
+        },
+      },
+    ],
+  },
+];
+```
 
+### Configuration
+##### General settings
 Use `setConfig` to instruct Prebid.js to initilize the exadsBidAdapter, as specified below. 
 * Set "debug" as true if you need to read logs;
 * Set "gdprApplies" as true if you need to pass gdpr consent string;
@@ -41,6 +78,9 @@ pbjs.setConfig({
   },
 });
 ```
+
+##### Video settings
+If you will work with video stream ad formats you could choose to use the prebidJS video module to render the video using  already supported video players as videoJS.
 Add the `video` config if you need to render videos using the video module.
 For more info navigate to https://docs.prebid.org/prebid-video/video-module.html.
 ```
@@ -81,7 +121,7 @@ pbjs.setConfig({
 | `banner.sizes`      | required |  [width, height]          | `[145,256]`    | `integer array` |
 | `userIp`      | required |  IP address of the user, ipv4 or ipv6          | `'0.0.0.0'`    | `string` |
 | `userId`      | *required |  Unique user ID (string). *If you cannot generate a user ID, you can leave it empty (""). The request will get a response as long as “user” object is included in the request          | `''`    | `string` |
-| `country`      | optional |  country ISO3          | `'IRL'`    | `string` |
+| `country`      | required |  country ISO3          | `'IRL'`    | `string` |
 | `impressionId`      | required |  Unique impression ID within this bid request           | `'abcde'`    | `string` |
 | `keywords`      | optional |  Keywords can be used to ensure ad zones get the right type of advertising. Keywords should be a string of comma-separated words           | `'lifestyle, humour'`    | `string` |
 | `bidfloor`      | optional |  Minimum bid for this impression (CPM) / click (CPC) and account currency           | `0.00000011`    | `float` |
@@ -201,7 +241,7 @@ adUnits = [
 | `siteName`      |  |  Site name            | `'test.com'`    | `string` |
 | `userIp`      | required |  IP address of the user, ipv4 or ipv6          | `'0.0.0.0'`    | `string` |
 | `userId`      | *required |  Unique user ID (string). *If you cannot generate a user ID, you can leave it empty (""). The request will get a response as long as “user” object is included in the request          | `''`    | `string` |
-| `country`      | optional |  country ISO3          | `'IRL'`    | `string` |
+| `country`      | required |  country ISO3          | `'IRL'`    | `string` |
 | `impressionId`      | required |  Unique impression ID within this bid request           | `'abcde'`    | `string` |
 | `keywords`      | optional |  Keywords can be used to ensure ad zones get the right type of advertising. Keywords should be a string of comma-separated words           | `'lifestyle, humour'`    | `string` |
 | `bidfloor`      | optional |  Minimum bid for this impression (CPM) / click (CPC) and account currency           | `0.00000011`    | `float` |
@@ -290,7 +330,7 @@ adUnits = [
 | `siteName`      |  |  Site name            | `'test.com'`    | `string` |
 | `userIp`      | required |  IP address of the user, ipv4 or ipv6          | `'0.0.0.0'`    | `string` |
 | `userId`      | *required |  Unique user ID (string). *If you cannot generate a user ID, you can leave it empty (""). The request will get a response as long as “user” object is included in the request          | `''`    | `string` |
-| `country`      | optional |  country ISO3          | `'IRL'`    | `string` |
+| `country`      | required |  country ISO3          | `'IRL'`    | `string` |
 | `impressionId`      | required |  Unique impression ID within this bid request           | `'abcde'`    | `string` |
 | `keywords`      | optional |  Keywords can be used to ensure ad zones get the right type of advertising. Keywords should be a string of comma-separated words           | `'lifestyle, humour'`    | `string` |
 | `bidfloor`      | optional |  Minimum bid for this impression (CPM) / click (CPC) and account currency           | `0.00000011`    | `float` |

From f59df54f094ebcc5e20a897ca57a08ed485f6c12 Mon Sep 17 00:00:00 2001
From: Giuseppe Cera <giuseppe@exads.com>
Date: Fri, 22 Mar 2024 17:10:04 +0100
Subject: [PATCH 5/9] fix: clear names

---
 dev-docs/bidders/exadsadserver.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/dev-docs/bidders/exadsadserver.md b/dev-docs/bidders/exadsadserver.md
index 5175b14170..8ba8935f4a 100644
--- a/dev-docs/bidders/exadsadserver.md
+++ b/dev-docs/bidders/exadsadserver.md
@@ -4,7 +4,7 @@ title: EXADS
 description: EXADS Bidder Adapter
 pbjs: true
 biddercode: exadsadserver
-gvl_id: 1084 - waiting Tiago/Barry
+gvl_id: 1084
 tcfeu_supported: true
 media_types: banner, video, native
 gpp_sids: tcfeu

From e89417ddca5627442ff91d2ccebec039d740a6c4 Mon Sep 17 00:00:00 2001
From: Giuseppe Cera <117671343+giuseppe-exads@users.noreply.github.com>
Date: Thu, 4 Apr 2024 07:45:16 +0100
Subject: [PATCH 6/9] fix: related to markdown lint validation (#3)

---
 dev-docs/bidders/exadsadserver.md | 65 ++++++++++++++++++-------------
 1 file changed, 37 insertions(+), 28 deletions(-)

diff --git a/dev-docs/bidders/exadsadserver.md b/dev-docs/bidders/exadsadserver.md
index 8ba8935f4a..87dc21c6bc 100644
--- a/dev-docs/bidders/exadsadserver.md
+++ b/dev-docs/bidders/exadsadserver.md
@@ -20,7 +20,8 @@ A very minimal RTB Banner example that shows how to use the EXADS adapter.
 The most important attributes are: **endpoint**, **fid** and **zoneId**. You can get them after configuring the zones.
 For more details about ad formats and parameters, read it in the next sections.
 
-```
+```js
+
 adUnits = [
   {
     code: 'postbid_iframe', // the frame where to render the creative
@@ -52,14 +53,17 @@ adUnits = [
 ```
 
 ### Configuration
-##### General settings
-Use `setConfig` to instruct Prebid.js to initilize the exadsBidAdapter, as specified below. 
+
+#### General settings
+
+Use `setConfig` to instruct Prebid.js to initilize the exadsBidAdapter, as specified below.
+
 * Set "debug" as true if you need to read logs;
 * Set "gdprApplies" as true if you need to pass gdpr consent string;
 * The tcString is the iabtcf consent string for gdpr;
 * Uncomment the cache instruction if you need to configure a cache server (e.g. for instream video)
 
-```
+```js
 pbjs.setConfig({
   debug: false,
   //cache: { url: "https://prebid.adnxs.com/pbc/v1/cache" },
@@ -80,10 +84,12 @@ pbjs.setConfig({
 ```
 
 ##### Video settings
+
 If you will work with video stream ad formats you could choose to use the prebidJS video module to render the video using  already supported video players as videoJS.
 Add the `video` config if you need to render videos using the video module.
-For more info navigate to https://docs.prebid.org/prebid-video/video-module.html.
-```
+For more info navigate to <https://docs.prebid.org/prebid-video/video-module.html>.
+
+```js
 pbjs.setConfig({
   video: {
     providers: [
@@ -139,11 +145,11 @@ pbjs.setConfig({
 |---------------|----------|-----------------------|-----------|-----------|
 | `dsarequired`      | optional |  flag to indicate if DSA information should be made available          | `3`    | `integer` |
 | `pubrender`      | optional | flag to indicate if the publisher will render the DSA Transparency info          | `0`    | `integer` |
-| `datatopub`      | optional | ndependent of pubrender, the publisher may need the transparency data for audit purposes           | `2`    | `integer` |
+| `datatopub`      | optional | independent of pubrender, the publisher may need the transparency data for audit purposes           | `2`    | `integer` |
 
 ##### RTB Banner 2.4 (Image)
 
-```javascript
+```js
 adUnits = [
   {
     code: 'postbid_iframe', // the frame where to render the creative
@@ -187,7 +193,7 @@ adUnits = [
 
 ##### RTB Banner 2.4 (Video)
 
-```javascript
+```js
 adUnits = [
   {
     code: 'postbid_iframe', // the frame where to render the creative
@@ -268,9 +274,9 @@ adUnits = [
 |---------------|----------|-----------------------|-----------|-----------|
 | `dsarequired`      | optional |  flag to indicate if DSA information should be made available          | `3`    | `integer` |
 | `pubrender`      | optional | flag to indicate if the publisher will render the DSA Transparency info          | `0`    | `integer` |
-| `datatopub`      | optional | ndependent of pubrender, the publisher may need the transparency data for audit purposes           | `2`    | `integer` |
+| `datatopub`      | optional | independent of pubrender, the publisher may need the transparency data for audit purposes           | `2`    | `integer` |
 
-```javascript
+```js
 adUnits = [
   {
     code: 'postbid_iframe',
@@ -345,32 +351,32 @@ adUnits = [
 ##### Assets
 
 * **assets (title)**
-    * **id** - unique asset ID, assigned by exchange. Typically a counter for the array (integer): 
-        * 1 - image asset ID
+  * **id** - unique asset ID, assigned by exchange. Typically a counter for the array (integer):
+        *1 - image asset ID
         * 2 - title asset ID
         * 3 - description asset ID
-    * **required** - set to 1 if asset is required or 0 if asset is optional (integer)
-    * **title**
+  * **required** - set to 1 if asset is required or 0 if asset is optional (integer)
+  * **title**
         * len (required) - maximum length of the text in the title element (integer)
 * **assets (data)**
-    * **id** - unique asset ID, assigned by exchange. Typically a counter for the array (integer):
-        * 1 - image asset ID
+  * **id** - unique asset ID, assigned by exchange. Typically a counter for the array (integer):
+        *1 - image asset ID
         * 2 - title asset ID
         * 3 - description asset ID
     * **data**
-        * **type** - type ID of the element supported by the publisher (integer). We support: 
-            * 1 - sponsored - sponsored By message where response should contain the brand name of the sponsor
+      * **type** - type ID of the element supported by the publisher (integer). We support:
+            *1 - sponsored - sponsored By message where response should contain the brand name of the sponsor
             * 2 - desc - descriptive text associated with the product or service being advertised
         * **len** - maximum length of the text in the element’s response (integer)
 * **assets (img)**
-    * **id** - unique asset ID, assigned by exchange. Typically a counter for the array (integer): 
-        * 1 - image asset ID
+  * **id** - unique asset ID, assigned by exchange. Typically a counter for the array (integer):
+        *1 - image asset ID
         * 2 - title asset ID
         * 3 - description asset ID
     * **required** - set to 1 if asset is required or 0 if asset is optional (integer)
     * **img**
-        * **type** - type ID of the image element supported by the publisher. We support: 
-            * 1 - icon image (integer)
+      * **type** - type ID of the image element supported by the publisher. We support:
+            *1 - icon image (integer)
             * 3 - large image preview for the ad (integer)
         * **w** - width of the image in pixels, optional (integer)
         * **h** - height of the image in pixels, optional (integer)
@@ -382,9 +388,9 @@ adUnits = [
 |---------------|----------|-----------------------|-----------|-----------|
 | `dsarequired`      | optional |  flag to indicate if DSA information should be made available          | `3`    | `integer` |
 | `pubrender`      | optional | flag to indicate if the publisher will render the DSA Transparency info          | `0`    | `integer` |
-| `datatopub`      | optional | ndependent of pubrender, the publisher may need the transparency data for audit purposes           | `2`    | `integer` |
+| `datatopub`      | optional | independent of pubrender, the publisher may need the transparency data for audit purposes           | `2`    | `integer` |
 
-```javascript
+```js
 adUnits = [
   {
     code: 'postbid_iframe',
@@ -454,9 +460,11 @@ adUnits = [
 ];
 ```
 
-# DSA Transparency
+### DSA Transparency
+
 All DSA information, returned by the ad server, can be found into the **meta** tag of the response. As:
-```
+
+```js
 "meta": {
     "dsa": {
         "behalf": "...",
@@ -472,4 +480,5 @@ All DSA information, returned by the ad server, can be found into the **meta** t
     }
 }
 ```
-For more information navigate to https://docs.prebid.org/dev-docs/bidder-adaptor.html.
\ No newline at end of file
+
+For more information navigate to <https://docs.prebid.org/dev-docs/bidder-adaptor.html>.

From 9f1510fcb9470f043aa9176b970acefe5dc4e660 Mon Sep 17 00:00:00 2001
From: Giuseppe Cera <117671343+giuseppe-exads@users.noreply.github.com>
Date: Thu, 11 Apr 2024 12:03:23 +0200
Subject: [PATCH 7/9] EX-21135 - from CR (#5)

* fix: related to markdown lint validation

* fix: from code review

* fix: from code review
---
 dev-docs/bidders/exadsadserver.md | 86 ++-----------------------------
 1 file changed, 3 insertions(+), 83 deletions(-)

diff --git a/dev-docs/bidders/exadsadserver.md b/dev-docs/bidders/exadsadserver.md
index 87dc21c6bc..a5059a6c11 100644
--- a/dev-docs/bidders/exadsadserver.md
+++ b/dev-docs/bidders/exadsadserver.md
@@ -3,11 +3,12 @@ layout: bidder
 title: EXADS
 description: EXADS Bidder Adapter
 pbjs: true
+multiformat_supported: will-not-bid
 biddercode: exadsadserver
+dsa_supported: true
 gvl_id: 1084
 tcfeu_supported: true
 media_types: banner, video, native
-gpp_sids: tcfeu
 safeframes_ok: false
 deals_supported: false
 floors_supported: true
@@ -54,66 +55,12 @@ adUnits = [
 
 ### Configuration
 
-#### General settings
-
-Use `setConfig` to instruct Prebid.js to initilize the exadsBidAdapter, as specified below.
-
-* Set "debug" as true if you need to read logs;
-* Set "gdprApplies" as true if you need to pass gdpr consent string;
-* The tcString is the iabtcf consent string for gdpr;
-* Uncomment the cache instruction if you need to configure a cache server (e.g. for instream video)
-
-```js
-pbjs.setConfig({
-  debug: false,
-  //cache: { url: "https://prebid.adnxs.com/pbc/v1/cache" },
-  consentManagement: {
-    gdpr: {
-      cmpApi: 'static',
-      timeout: 1000000,
-      defaultGdprScope: true,
-      consentData: {
-        getTCData: {
-          tcString: consentString,
-          gdprApplies: false, // set to true to pass the gdpr consent string
-        },
-      },
-    },
-  },
-});
-```
-
-##### Video settings
+#### Video settings
 
 If you will work with video stream ad formats you could choose to use the prebidJS video module to render the video using  already supported video players as videoJS.
 Add the `video` config if you need to render videos using the video module.
 For more info navigate to <https://docs.prebid.org/prebid-video/video-module.html>.
 
-```js
-pbjs.setConfig({
-  video: {
-    providers: [
-      {
-        divId: 'player', // the id related to the videojs tag in your body
-        vendorCode: 2, // videojs,
-        playerConfig: {
-          params: {
-            adPluginConfig: {
-              numRedirects: 10,
-            },
-            vendorConfig: {
-              controls: true,
-              autoplay: true,
-              preload: 'auto',
-            },
-          },
-        },
-      },
-    ],
-  },
-});
-```
-
 #### RTB Banner 2.4
 
 {: .table .table-bordered .table-striped }
@@ -138,15 +85,6 @@ pbjs.setConfig({
 | `dsa`      | optional |   DSA transparency information. To see the specific paragraph for more details.            | `{ dsarequired: 3, pubrender: 0, datatopub: 2 }`    | `object` |
 | `endpoint`      | required |   EXADS endpoint (URL)            | `https://your-ad-network.com/rtb.php`    | `string` |
 
-##### DSA
-
-{: .table .table-bordered .table-striped }
-| Name          | Scope    | Description           | Example   | Type      |
-|---------------|----------|-----------------------|-----------|-----------|
-| `dsarequired`      | optional |  flag to indicate if DSA information should be made available          | `3`    | `integer` |
-| `pubrender`      | optional | flag to indicate if the publisher will render the DSA Transparency info          | `0`    | `integer` |
-| `datatopub`      | optional | independent of pubrender, the publisher may need the transparency data for audit purposes           | `2`    | `integer` |
-
 ##### RTB Banner 2.4 (Image)
 
 ```js
@@ -267,15 +205,6 @@ adUnits = [
 | `protocols`      | required | list of supported video bid response protocols          | `[3, 6]`    | `integer array` |
 | `context`      | recommended | the video context, either ‘instream’, ‘outstream’. Defaults to ‘instream’          | `'instream'`    | `string` |
 
-##### DSA
-
-{: .table .table-bordered .table-striped }
-| Name          | Scope    | Description           | Example   | Type      |
-|---------------|----------|-----------------------|-----------|-----------|
-| `dsarequired`      | optional |  flag to indicate if DSA information should be made available          | `3`    | `integer` |
-| `pubrender`      | optional | flag to indicate if the publisher will render the DSA Transparency info          | `0`    | `integer` |
-| `datatopub`      | optional | independent of pubrender, the publisher may need the transparency data for audit purposes           | `2`    | `integer` |
-
 ```js
 adUnits = [
   {
@@ -381,15 +310,6 @@ adUnits = [
         * **w** - width of the image in pixels, optional (integer)
         * **h** - height of the image in pixels, optional (integer)
 
-##### DSA
-
-{: .table .table-bordered .table-striped }
-| Name          | Scope    | Description           | Example   | Type      |
-|---------------|----------|-----------------------|-----------|-----------|
-| `dsarequired`      | optional |  flag to indicate if DSA information should be made available          | `3`    | `integer` |
-| `pubrender`      | optional | flag to indicate if the publisher will render the DSA Transparency info          | `0`    | `integer` |
-| `datatopub`      | optional | independent of pubrender, the publisher may need the transparency data for audit purposes           | `2`    | `integer` |
-
 ```js
 adUnits = [
   {

From fb925397a849f5c027ae51e3608c8312b74b6a55 Mon Sep 17 00:00:00 2001
From: Giuseppe Cera <117671343+giuseppe-exads@users.noreply.github.com>
Date: Fri, 12 Apr 2024 13:56:56 +0200
Subject: [PATCH 8/9] EX-21135 - from CR - making URL as relative (#6)

* fix: related to markdown lint validation

* fix: from code review

* fix: from code review

* fix: from CR
---
 dev-docs/bidders/exadsadserver.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/dev-docs/bidders/exadsadserver.md b/dev-docs/bidders/exadsadserver.md
index a5059a6c11..5e80e506ed 100644
--- a/dev-docs/bidders/exadsadserver.md
+++ b/dev-docs/bidders/exadsadserver.md
@@ -59,7 +59,7 @@ adUnits = [
 
 If you will work with video stream ad formats you could choose to use the prebidJS video module to render the video using  already supported video players as videoJS.
 Add the `video` config if you need to render videos using the video module.
-For more info navigate to <https://docs.prebid.org/prebid-video/video-module.html>.
+For more info navigate to [instructions](/prebid-video/video-module.html).
 
 #### RTB Banner 2.4
 
@@ -401,4 +401,4 @@ All DSA information, returned by the ad server, can be found into the **meta** t
 }
 ```
 
-For more information navigate to <https://docs.prebid.org/dev-docs/bidder-adaptor.html>.
+For more information navigate to the [page](/dev-docs/bidder-adaptor.html).

From 14ba92d0ab24af5e0a6021c97575f8e5d3c87718 Mon Sep 17 00:00:00 2001
From: Giuseppe Cera <giuseppe@exads.com>
Date: Wed, 8 May 2024 11:01:22 +0100
Subject: [PATCH 9/9] fix: changed bidder code

---
 dev-docs/bidders/{exadsadserver.md => exads.md} | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)
 rename dev-docs/bidders/{exadsadserver.md => exads.md} (98%)

diff --git a/dev-docs/bidders/exadsadserver.md b/dev-docs/bidders/exads.md
similarity index 98%
rename from dev-docs/bidders/exadsadserver.md
rename to dev-docs/bidders/exads.md
index 5e80e506ed..6e877ffb1b 100644
--- a/dev-docs/bidders/exadsadserver.md
+++ b/dev-docs/bidders/exads.md
@@ -4,7 +4,7 @@ title: EXADS
 description: EXADS Bidder Adapter
 pbjs: true
 multiformat_supported: will-not-bid
-biddercode: exadsadserver
+biddercode: exads
 dsa_supported: true
 gvl_id: 1084
 tcfeu_supported: true
@@ -33,7 +33,7 @@ adUnits = [
     },
     bids: [
       {
-        bidder: 'exadsadserver',
+        bidder: 'exads',
         params: {
           zoneId: 12345,
           fid: '829a896f011475d50da0d82cfdd1af8d9cdb07ff',
@@ -98,7 +98,7 @@ adUnits = [
     },
     bids: [
       {
-        bidder: 'exadsadserver',
+        bidder: 'exads',
         params: {
           zoneId: 12345,
           fid: '829a896f011475d50da0d82cfdd1af8d9cdb07ff',
@@ -142,7 +142,7 @@ adUnits = [
     },
     bids: [
       {
-        bidder: 'exadsadserver',
+        bidder: 'exads',
         params: {
           zoneId: 12345,
           fid: '829a896f011475d50da0d82cfdd1af8d9cdb07ff',
@@ -218,7 +218,7 @@ adUnits = [
     },
     bids: [
       {
-        bidder: 'exadsadserver',
+        bidder: 'exads',
         params: {
           zoneId: 12345,
           fid: '829a896f011475d50da0d82cfdd1af8d9cdb07ff',
@@ -347,7 +347,7 @@ adUnits = [
     },
     bids: [
       {
-        bidder: 'exadsadserver',
+        bidder: 'exads',
         params: {
           zoneId: 12345,
           fid: '829a896f011475d50da0d82cfdd1af8d9cdb07ff',