Repository: prebid/prebid-server
Pull request #1841 (2021-05-07 12:27:08)

Adf: banner and video media type support added
Docs: https://github.com/prebid/prebid.github.io/pull/2941
Prebid.js PR: https://github.com/prebid/Prebid.js/pull/6726


Patch:
diff --git a/adapters/adf/adf.go b/adapters/adf/adf.go
index 4ed0dc07..f73e23aa 100644
--- a/adapters/adf/adf.go
+++ b/adapters/adf/adf.go
@@ -92,15 +92,38 @@ func (a *adapter) MakeBids(request *openrtb2.BidRequest, requestData *adapters.R
 
 	bidResponse := adapters.NewBidderResponseWithBidsCapacity(len(request.Imp))
 	bidResponse.Currency = response.Cur
-
+	var errors []error
 	for _, seatBid := range response.SeatBid {
-		for i := range seatBid.Bid {
+		for i, bid := range seatBid.Bid {
+			bidType, err := getMediaTypeForImp(bid.ImpID, request.Imp)
+			if err != nil {
+				errors = append(errors, err)
+				continue
+			}
 			bidResponse.Bids = append(bidResponse.Bids, &adapters.TypedBid{
 				Bid:     &seatBid.Bid[i],
-				BidType: openrtb_ext.BidTypeNative,
+				BidType: bidType,
 			})
 		}
 	}
 
-	return bidResponse, nil
+	return bidResponse, errors
+}
+
+func getMediaTypeForImp(impID string, imps []openrtb2.Imp) (openrtb_ext.BidType, error) {
+	for _, imp := range imps {
+		if imp.ID == impID {
+			if imp.Banner != nil {
+				return openrtb_ext.BidTypeBanner, nil
+			} else if imp.Video != nil {
+				return openrtb_ext.BidTypeVideo, nil
+			} else if imp.Native != nil {
+				return openrtb_ext.BidTypeNative, nil
+			}
+		}
+	}
+
+	return "", &errortypes.BadInput{
+		Message: fmt.Sprintf("Failed to find supported impression \"%s\" mediatype", impID),
+	}
 }
diff --git a/adapters/conversant/conversant.go b/adapters/conversant/conversant.go
index cdcf7566..7cf4ab5d 100644
--- a/adapters/conversant/conversant.go
+++ b/adapters/conversant/conversant.go
@@ -74,8 +74,14 @@ func (c ConversantAdapter) MakeRequests(request *openrtb2.BidRequest, reqInfo *a
 func parseCnvrParams(imp *openrtb2.Imp, cnvrExt openrtb_ext.ExtImpConversant) {
 	imp.DisplayManager = "prebid-s2s"
 	imp.DisplayManagerVer = "2.0.0"
-	imp.BidFloor = cnvrExt.BidFloor
-	imp.TagID = cnvrExt.TagID
+
+	if imp.BidFloor <= 0 && cnvrExt.BidFloor > 0 {
+		imp.BidFloor = cnvrExt.BidFloor
+	}
+
+	if len(cnvrExt.TagID) > 0 {
+		imp.TagID = cnvrExt.TagID
+	}
 
 	// Take care not to override the global secure flag
 	if (imp.Secure == nil || *imp.Secure == 0) && cnvrExt.Secure != nil {
diff --git a/adapters/madvertise/madvertise.go b/adapters/madvertise/madvertise.go
new file mode 100644
index 00000000..dfc996d2
--- /dev/null
+++ b/adapters/madvertise/madvertise.go
@@ -0,0 +1,163 @@
+package madvertise
+
+import (
+	"encoding/json"
+	"fmt"
+	"net/http"
+	"text/template"
+
+	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/prebid/prebid-server/adapters"
+	"github.com/prebid/prebid-server/config"
+	"github.com/prebid/prebid-server/errortypes"
+	"github.com/prebid/prebid-server/macros"
+	"github.com/prebid/prebid-server/openrtb_ext"
+)
+
+type adapter struct {
+	endpointTemplate template.Template
+}
+
+func Builder(bidderName openrtb_ext.BidderName, config config.Adapter) (adapters.Bidder, error) {
+	template, err := template.New("endpointTemplate").Parse(config.Endpoint)
+	if err != nil {
+		return nil, fmt.Errorf("unable to parse endpoint url template: %v", err)
+	}
+
+	bidder := &adapter{
+		endpointTemplate: *template,
+	}
+
+	return bidder, nil
+}
+
+func getHeaders(request *openrtb2.BidRequest) http.Header {
+	headers := http.Header{}
+	headers.Add("Content-Type", "application/json;charset=utf-8")
+	headers.Add("Accept", "application/json")
+	headers.Add("X-Openrtb-Version", "2.5")
+
+	if request.Device != nil {
+		if len(request.Device.UA) > 0 {
+			headers.Add("User-Agent", request.Device.UA)
+		}
+
+		if len(request.Device.IP) > 0 {
+			headers.Add("X-Forwarded-For", request.Device.IP)
+		}
+	}
+
+	return headers
+}
+
+func (a *adapter) MakeRequests(request *openrtb2.BidRequest, requestInfo *adapters.ExtraRequestInfo) ([]*adapters.RequestData, []error) {
+	zoneID := ""
+	for _, imp := range request.Imp {
+		madvertiseExt, err := getImpressionExt(imp)
+		if err != nil {
+			return nil, []error{err}
+		}
+		if len(madvertiseExt.ZoneID) < 7 {
+			return nil, []error{&errortypes.BadInput{
+				Message: fmt.Sprintf("The minLength of zone ID is 7; ImpID=%s", imp.ID),
+			}}
+		}
+		if zoneID == "" {
+			zoneID = madvertiseExt.ZoneID
+		} else if zoneID != madvertiseExt.ZoneID {
+			return nil, []error{&errortypes.BadInput{
+				Message: "There must be only one zone ID",
+			}}
+		}
+	}
+	url, err := a.buildEndpointURL(zoneID)
+	if err != nil {
+		return nil, []error{err}
+	}
+	requestJSON, err := json.Marshal(request)
+	if err != nil {
+		return nil, []error{err}
+	}
+
+	requestData := &adapters.RequestData{
+		Method:  "POST",
+		Uri:     url,
+		Body:    requestJSON,
+		Headers: getHeaders(request),
+	}
+
+	return []*adapters.RequestData{requestData}, nil
+}
+
+func getImpressionExt(imp openrtb2.Imp) (*openrtb_ext.ExtImpMadvertise, error) {
+	var bidderExt adapters.ExtImpBidder
+	if err := json.Unmarshal(imp.Ext, &bidderExt); err != nil {
+		return nil, &errortypes.BadInput{
+			Message: fmt.Sprintf("%s; ImpID=%s", err.Error(), imp.ID),
+		}
+	}
+	var madvertiseExt openrtb_ext.ExtImpMadvertise
+	if err := json.Unmarshal(bidderExt.Bidder, &madvertiseExt); err != nil {
+		return nil, &errortypes.BadInput{
+			Message: fmt.Sprintf("%s; ImpID=%s", err.Error(), imp.ID),
+		}
+	}
+	if madvertiseExt.ZoneID == "" {
+		return nil, &errortypes.BadInput{
+			Message: fmt.Sprintf("ext.bidder.zoneId not provided; ImpID=%s", imp.ID),
+		}
+	}
+
+	return &madvertiseExt, nil
+}
+
+func (a *adapter) buildEndpointURL(zoneID string) (string, error) {
+	endpointParams := macros.EndpointTemplateParams{ZoneID: zoneID}
+	return macros.ResolveMacros(a.endpointTemplate, endpointParams)
+}
+
+func (a *adapter) MakeBids(request *openrtb2.BidRequest, requestData *adapters.RequestData, responseData *adapters.ResponseData) (*adapters.BidderResponse, []error) {
+	if responseData.StatusCode == http.StatusNoContent {
+		return nil, nil
+	}
+
+	if responseData.StatusCode != http.StatusOK {
+		err := &errortypes.BadServerResponse{
+			Message: fmt.Sprintf("Unexpected status code: %d. Run with request.debug = 1 for more info", responseData.StatusCode),
+		}
+		return nil, []error{err}
+	}
+
+	var response openrtb2.BidResponse
+	if err := json.Unmarshal(responseData.Body, &response); err != nil {
+		return nil, []error{err}
+	}
+
+	bidResponse := adapters.NewBidderResponseWithBidsCapacity(len(request.Imp))
+	bidResponse.Currency = response.Cur
+	for _, seatBid := range response.SeatBid {
+		for i := range seatBid.Bid {
+			bid := seatBid.Bid[i]
+			bidMediaType := getMediaTypeForBid(bid.Attr)
+			b := &adapters.TypedBid{
+				Bid:     &bid,
+				BidType: bidMediaType,
+			}
+			bidResponse.Bids = append(bidResponse.Bids, b)
+		}
+	}
+	return bidResponse, nil
+}
+
+func getMediaTypeForBid(attr []openrtb2.CreativeAttribute) openrtb_ext.BidType {
+	for i := 0; i < len(attr); i++ {
+		if attr[i] == openrtb2.CreativeAttribute(16) {
+			return openrtb_ext.BidTypeVideo
+		} else if attr[i] == openrtb2.CreativeAttribute(6) {
+			return openrtb_ext.BidTypeVideo
+		} else if attr[i] == openrtb2.CreativeAttribute(7) {
+			return openrtb_ext.BidTypeVideo
+		}
+	}
+	return openrtb_ext.BidTypeBanner
+}
diff --git a/config/config.go b/config/config.go
index 36ec4dc0..61135e89 100644
--- a/config/config.go
+++ b/config/config.go
@@ -616,6 +616,7 @@ func (cfg *Configuration) setDerivedDefaults() {
 	setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderLockerDome, "https://lockerdome.com/usync/prebidserver?pid="+cfg.Adapters["lockerdome"].PlatformID+"&gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&redirect="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3Dlockerdome%26gdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D%7B%7Buid%7D%7D")
 	setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderLogicad, "https://cr-p31.ladsp.jp/cookiesender/31?r=true&gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&ru="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3Dlogicad%26gdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D%24UID")
 	setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderLunaMedia, "https://api.lunamedia.io/xp/user-sync?redirect="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3Dlunamedia%26gdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D%24UID")
+	// openrtb_ext.BidderMadvertise doesn't have a good default.
 	setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderMarsmedia, "https://dmp.rtbsrv.com/dmp/profiles/cm?p_id=179&gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&redirect="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3Dmarsmedia%26gdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D%24%7BUUID%7D")
 	// openrtb_ext.BidderMediafuse doesn't have a good default.
 	setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderMgid, "https://cm.mgid.com/m?cdsp=363893&adu="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3Dmgid%26gdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D%7Bmuidn%7D")
@@ -870,6 +871,7 @@ func SetupViper(v *viper.Viper, filename string) {
 	v.SetDefault("adapters.lockerdome.endpoint", "https://lockerdome.com/ladbid/prebidserver/openrtb2")
 	v.SetDefault("adapters.logicad.endpoint", "https://pbs.ladsp.com/adrequest/prebidserver")
 	v.SetDefault("adapters.lunamedia.endpoint", "http://api.lunamedia.io/xp/get?pubid={{.PublisherID}}")
+	v.SetDefault("adapters.madvertise.endpoint", "https://mobile.mng-ads.com/bidrequest{{.ZoneID}}")
 	v.SetDefault("adapters.marsmedia.endpoint", "https://bid306.rtbsrv.com/bidder/?bid=f3xtet")
 	v.SetDefault("adapters.mediafuse.endpoint", "http://ghb.hbmp.mediafuse.com/pbs/ortb")
 	v.SetDefault("adapters.mgid.endpoint", "https://prebid.mgid.com/prebid/")
diff --git a/exchange/adapter_builders.go b/exchange/adapter_builders.go
index 0120005b..f28d98f3 100755
--- a/exchange/adapter_builders.go
+++ b/exchange/adapter_builders.go
@@ -63,6 +63,7 @@ import (
 	"github.com/prebid/prebid-server/adapters/lockerdome"
 	"github.com/prebid/prebid-server/adapters/logicad"
 	"github.com/prebid/prebid-server/adapters/lunamedia"
+	"github.com/prebid/prebid-server/adapters/madvertise"
 	"github.com/prebid/prebid-server/adapters/marsmedia"
 	"github.com/prebid/prebid-server/adapters/mgid"
 	"github.com/prebid/prebid-server/adapters/mobfoxpb"
@@ -177,6 +178,7 @@ func newAdapterBuilders() map[openrtb_ext.BidderName]adapters.Builder {
 		openrtb_ext.BidderLockerDome:        lockerdome.Builder,
 		openrtb_ext.BidderLogicad:           logicad.Builder,
 		openrtb_ext.BidderLunaMedia:         lunamedia.Builder,
+		openrtb_ext.BidderMadvertise:        madvertise.Builder,
 		openrtb_ext.BidderMarsmedia:         marsmedia.Builder,
 		openrtb_ext.BidderMediafuse:         adtelligent.Builder,
 		openrtb_ext.BidderMgid:              mgid.Builder,
diff --git a/exchange/exchangetest/firstpartydata-imp-ext-multiple-prebid-bidders.json  b/exchange/exchangetest/firstpartydata-imp-ext-multiple-prebid-bidders.json
similarity index 100%
rename from exchange/exchangetest/firstpartydata-imp-ext-multiple-prebid-bidders.json 
rename to exchange/exchangetest/firstpartydata-imp-ext-multiple-prebid-bidders.json
diff --git a/openrtb_ext/bidders.go b/openrtb_ext/bidders.go
index 2fb50cf3..08194955 100755
--- a/openrtb_ext/bidders.go
+++ b/openrtb_ext/bidders.go
@@ -135,6 +135,7 @@ const (
 	BidderLockerDome        BidderName = "lockerdome"
 	BidderLogicad           BidderName = "logicad"
 	BidderLunaMedia         BidderName = "lunamedia"
+	BidderMadvertise        BidderName = "madvertise"
 	BidderMarsmedia         BidderName = "marsmedia"
 	BidderMediafuse         BidderName = "mediafuse"
 	BidderMgid              BidderName = "mgid"
@@ -249,6 +250,7 @@ func CoreBidderNames() []BidderName {
 		BidderLockerDome,
 		BidderLogicad,
 		BidderLunaMedia,
+		BidderMadvertise,
 		BidderMarsmedia,
 		BidderMediafuse,
 		BidderMgid,
diff --git a/openrtb_ext/imp_madvertise.go b/openrtb_ext/imp_madvertise.go
new file mode 100644
index 00000000..30bd88db
--- /dev/null
+++ b/openrtb_ext/imp_madvertise.go
@@ -0,0 +1,6 @@
+package openrtb_ext
+
+// ExtImpMadvertise defines the contract for bidrequest.imp[i].ext.madvertise
+type ExtImpMadvertise struct {
+	ZoneID string `json:"zoneId"`
+}
diff --git a/static/bidder-info/adf.yaml b/static/bidder-info/adf.yaml
index 8cc96350..776e208f 100644
--- a/static/bidder-info/adf.yaml
+++ b/static/bidder-info/adf.yaml
@@ -4,7 +4,11 @@ gvlVendorID: 50
 capabilities:
   app:
     mediaTypes:
+      - banner
       - native
+      - video
   site:
     mediaTypes:
+      - banner
       - native
+      - video
diff --git a/static/bidder-info/madvertise.yaml b/static/bidder-info/madvertise.yaml
new file mode 100644
index 00000000..6156940e
--- /dev/null
+++ b/static/bidder-info/madvertise.yaml
@@ -0,0 +1,11 @@
+maintainer:
+  email: "support@madvertise.com"
+gvlVendorID: 153
+capabilities:
+  app:
+    mediaTypes:
+      - banner
+      - video
+  site:
+    mediaTypes:
+      - banner
diff --git a/static/bidder-params/madvertise.json b/static/bidder-params/madvertise.json
new file mode 100644
index 00000000..c2fbd941
--- /dev/null
+++ b/static/bidder-params/madvertise.json
@@ -0,0 +1,16 @@
+{
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "title": "Madvertise Adapter Params",
+    "description": "A schema which validates params accepted by the Madvertise adapter",
+    "type": "object",
+    "properties": {
+        "zoneId": {
+            "type": "string",
+            "minLength": 7,
+            "description": "The zone ID provided by Madvertise"
+        }
+    },
+    "required": [
+        "zoneId"
+    ]
+}
\ No newline at end of file


Test patch:
diff --git a/adapters/adf/adftest/exemplary/multi-format.json b/adapters/adf/adftest/exemplary/multi-format.json
new file mode 100644
index 00000000..6b917658
--- /dev/null
+++ b/adapters/adf/adftest/exemplary/multi-format.json
@@ -0,0 +1,118 @@
+{
+  "mockBidRequest": {
+    "id": "test-request-id",
+    "imp": [{
+      "id": "test-imp-id-1",
+      "ext": {
+        "bidder": {
+          "mid": "828782"
+        }
+      },
+      "video": {
+        "mimes": [
+          "video/mp4"
+        ],
+        "placement": 1
+      }
+    }, {
+      "id": "test-imp-id-2",
+      "ext": {
+        "bidder": {
+          "mid": "828783"
+        }
+      },
+      "banner": {
+        "format": [{
+          "w": 300,
+          "h": 250
+        }]
+      }
+    }]
+  },
+  "httpCalls": [{
+    "expectedRequest": {
+      "uri": "https://adx.adform.net/adx/openrtb",
+      "body": {
+        "id": "test-request-id",
+        "imp": [{
+          "id": "test-imp-id-1",
+          "ext": {
+            "bidder": {
+              "mid": "828782"
+            }
+          },
+          "video": {
+            "mimes": [
+              "video/mp4"
+            ],
+            "placement": 1
+          },
+          "tagid": "828782"
+        }, {
+          "id": "test-imp-id-2",
+          "ext": {
+            "bidder": {
+              "mid": "828783"
+            }
+          },
+          "banner": {
+            "format": [{
+              "w": 300,
+              "h": 250
+            }]
+          },
+          "tagid": "828783"
+        }]
+      }
+    },
+    "mockResponse": {
+      "status": 200,
+      "body": {
+        "id": "test-request-id",
+        "seatbid": [{
+          "bid": [{
+            "id": "test-bid-id-1",
+            "impid": "test-imp-id-1",
+            "price": 10,
+            "adm": "{video xml}",
+            "adomain": [],
+            "crid": "test-creative-id-1"
+          }]
+        }, {
+          "bid": [{
+            "id": "test-bid-id-2",
+            "impid": "test-imp-id-2",
+            "price": 2,
+            "adm": "{banner html}",
+            "adomain": [ "ad-domain" ],
+            "crid": "test-creative-id-2"
+          }]
+        }],
+        "cur": "EUR"
+      }
+    }
+  }],
+  "expectedBidResponses": [{
+    "currency": "EUR",
+    "bids": [{
+      "bid": {
+        "id": "test-bid-id-1",
+        "impid": "test-imp-id-1",
+        "price": 10,
+        "adm": "{video xml}",
+        "crid": "test-creative-id-1"
+      },
+      "type": "video"
+    }, {
+      "bid": {
+        "id": "test-bid-id-2",
+        "impid": "test-imp-id-2",
+        "price": 2,
+        "adm": "{banner html}",
+        "adomain": [ "ad-domain" ],
+        "crid": "test-creative-id-2"
+      },
+      "type": "banner"
+    }]
+  }]
+}
diff --git a/adapters/adf/adftest/exemplary/single-banner.json b/adapters/adf/adftest/exemplary/single-banner.json
new file mode 100644
index 00000000..5fdfe8af
--- /dev/null
+++ b/adapters/adf/adftest/exemplary/single-banner.json
@@ -0,0 +1,95 @@
+{
+  "mockBidRequest": {
+    "id": "test-request-id",
+    "imp": [{
+      "id": "test-imp-id",
+      "ext": {
+        "bidder": {
+          "mid": "828782"
+        }
+      },
+      "banner": {
+        "format": [{
+          "w": 300,
+          "h": 250
+        }]
+      }
+    }],
+    "site": {
+      "publisher": {
+        "id": "1"
+      },
+      "page": "some-page-url"
+    },
+    "device": {
+      "w": 1920,
+      "h": 800
+    }
+  },
+  "httpCalls": [{
+    "expectedRequest": {
+      "uri": "https://adx.adform.net/adx/openrtb",
+      "body": {
+        "id": "test-request-id",
+        "imp": [{
+          "id": "test-imp-id",
+          "ext": {
+            "bidder": {
+              "mid": "828782"
+            }
+          },
+          "banner": {
+            "format": [{
+              "w": 300,
+              "h": 250
+            }]
+          },
+          "tagid": "828782"
+        }],
+        "site": {
+          "publisher": {
+            "id": "1"
+          },
+          "page": "some-page-url"
+        },
+        "device": {
+          "w": 1920,
+          "h": 800
+        }
+      }
+    },
+    "mockResponse": {
+      "status": 200,
+      "body": {
+        "id": "test-request-id",
+        "seatbid": [{
+          "bid": [{
+            "id": "test-bid-id",
+            "impid": "test-imp-id",
+            "price": 10,
+            "adm": "{banner html}",
+            "adomain": [ "test.com" ],
+            "crid": "test-creative-id"
+          }]
+        }],
+        "cur": "USD"
+      }
+    }
+  }],
+  "expectedBidResponses": [{
+    "currency": "USD",
+    "bids": [
+      {
+        "bid": {
+          "id": "test-bid-id",
+          "impid": "test-imp-id",
+          "price": 10,
+          "adm": "{banner html}",
+          "crid": "test-creative-id",
+          "adomain": [ "test.com" ]
+        },
+        "type": "banner"
+      }
+    ]
+  }]
+}
diff --git a/adapters/adf/adftest/exemplary/single-video.json b/adapters/adf/adftest/exemplary/single-video.json
new file mode 100644
index 00000000..ebe4c6f1
--- /dev/null
+++ b/adapters/adf/adftest/exemplary/single-video.json
@@ -0,0 +1,93 @@
+{
+  "mockBidRequest": {
+    "id": "test-request-id",
+    "imp": [{
+      "id": "test-imp-id",
+      "ext": {
+        "bidder": {
+          "mid": "828782"
+        }
+      },
+      "video": {
+        "mimes": [
+          "video/mp4"
+        ],
+        "placement": 1
+      }
+    }],
+    "site": {
+      "publisher": {
+        "id": "1"
+      },
+      "page": "some-page-url"
+    },
+    "device": {
+      "w": 1920,
+      "h": 800
+    }
+  },
+  "httpCalls": [{
+    "expectedRequest": {
+      "uri": "https://adx.adform.net/adx/openrtb",
+      "body": {
+        "id": "test-request-id",
+        "imp": [{
+          "id": "test-imp-id",
+          "ext": {
+            "bidder": {
+              "mid": "828782"
+            }
+          },
+          "video": {
+            "mimes": [
+              "video/mp4"
+            ],
+            "placement": 1
+          },
+          "tagid": "828782"
+        }],
+        "site": {
+          "publisher": {
+            "id": "1"
+          },
+          "page": "some-page-url"
+        },
+        "device": {
+          "w": 1920,
+          "h": 800
+        }
+      }
+    },
+    "mockResponse": {
+      "status": 200,
+      "body": {
+        "id": "test-request-id",
+        "seatbid": [{
+          "bid": [{
+            "id": "test-bid-id",
+            "impid": "test-imp-id",
+            "price": 10,
+            "adm": "{vast xml}",
+            "crid": "test-creative-id"
+          }]
+        }],
+        "cur": "USD"
+      }
+    }
+  }],
+  "expectedBidResponses": [{
+    "currency": "USD",
+    "bids": [
+      {
+        "bid": {
+          "id": "test-bid-id",
+          "impid": "test-imp-id",
+          "price": 10,
+          "adm": "{vast xml}",
+          "crid": "test-creative-id"
+        },
+        "type": "video"
+      }
+    ]
+  }]
+}
diff --git a/adapters/adf/adftest/supplemental/invalid-imp-mediatype.json b/adapters/adf/adftest/supplemental/invalid-imp-mediatype.json
new file mode 100644
index 00000000..2f01e7ea
--- /dev/null
+++ b/adapters/adf/adftest/supplemental/invalid-imp-mediatype.json
@@ -0,0 +1,59 @@
+{
+  "mockBidRequest": {
+    "id": "test-request-id",
+    "imp": [{
+        "id": "test-imp-id",
+        "audio": {},
+        "ext": {
+          "bidder": {
+            "mid": 12345
+          }
+        }
+      }]
+  },
+  "httpCalls": [
+    {
+      "expectedRequest": {
+        "uri": "https://adx.adform.net/adx/openrtb",
+        "body": {
+          "id": "test-request-id",
+          "imp": [{
+            "ext": {
+              "bidder": {
+                "mid": 12345
+              }
+            },
+            "id": "test-imp-id",
+            "audio": {
+              "mimes": null
+            },
+            "tagid": "12345"
+          }]
+        }
+      },
+      "mockResponse": {
+        "status": 200,
+        "body": {
+          "id": "test-request-id",
+          "seatbid": [{
+            "bid": [{
+              "id": "test-bid-id",
+              "impid": "test-imp-id",
+              "price": 10,
+              "adm": "{vast xml}",
+              "crid": "test-creative-id"
+            }]
+          }],
+          "cur": "USD"
+        }
+      }
+    }
+  ],
+  "expectedBidResponses": [],
+  "expectedMakeBidsErrors": [ 
+    {
+      "value": "Failed to find supported impression \"test-imp-id\" mediatype",
+      "comparison": "literal" 
+    }
+  ]
+}
diff --git a/adapters/conversant/conversanttest/supplemental/test_params.json b/adapters/conversant/conversanttest/supplemental/test_params.json
new file mode 100644
index 00000000..403bcc42
--- /dev/null
+++ b/adapters/conversant/conversanttest/supplemental/test_params.json
@@ -0,0 +1,306 @@
+{
+  "mockBidRequest": {
+    "id": "testauction",
+    "imp": [
+      {
+        "id": "1",
+        "bidfloor": 7,
+        "tagid": "mytag",
+        "secure": 1,
+        "video": {
+          "format": [{"w": 300, "h": 250}],
+          "pos": 1,
+          "mimes": ["video/mp4"],
+          "api": [1,2],
+          "protocols": [2],
+          "maxduration": 60
+        },
+        "ext": {
+          "bidder": {
+            "site_id": "108060"
+          }
+        }
+      },
+      {
+        "id": "2",
+        "bidfloor": 1,
+        "secure": 0,
+        "tagid": "sometag",
+        "video": {
+          "format": [{"w": 300, "h": 250}],
+          "pos": 0,
+          "mimes": ["video/wmv"],
+          "api": [0],
+          "protocols": [0],
+          "maxduration": 0
+        },
+        "ext": {
+          "bidder": {
+            "site_id": "108060",
+            "bidfloor": 7,
+            "tag_id": "mytag",
+            "secure": 1,
+            "position": 1,
+            "mimes": ["video/mp4"],
+            "api": [1,2],
+            "protocols": [2],
+            "maxduration": 60
+          }
+        }
+      },
+      {
+        "id": "3",
+        "video": {
+          "format": [{"w": 300, "h": 250}]
+        },
+        "ext": {
+          "bidder": {
+            "site_id": "108060",
+            "bidfloor": 7,
+            "tag_id": "mytag",
+            "secure": 1,
+            "position": 1,
+            "mimes": ["video/mp4"],
+            "api": [1,2],
+            "protocols": [2],
+            "maxduration": 60
+          }
+        }
+      },
+      {
+        "id": "4",
+	"bidfloor": -3,
+        "video": {
+          "format": [{"w": 300, "h": 250}]
+        },
+        "ext": {
+          "bidder": {
+            "site_id": "108060",
+            "bidfloor": 0,
+            "tag_id": "mytag",
+            "secure": 1,
+            "position": 1,
+            "mimes": ["video/mp4"],
+            "api": [1,2],
+            "protocols": [2],
+            "maxduration": 60
+          }
+        }
+      }
+    ],
+    "site": {
+      "domain": "www.mypage.com"
+    }
+  },
+  "httpCalls": [{
+    "expectedRequest": {
+      "uri": "",
+      "body": {
+        "id": "testauction",
+        "site": {
+          "id": "108060",
+          "domain": "www.mypage.com"
+        },
+        "imp": [
+          {
+            "id": "1",
+            "bidfloor": 7,
+            "secure": 1,
+            "tagid": "mytag",
+            "displaymanager": "prebid-s2s",
+            "displaymanagerver": "2.0.0",
+            "video": {
+              "api": [1,2],
+              "maxduration": 60,
+              "mimes": ["video/mp4"],
+              "protocols": [2]
+            },
+            "ext": {
+              "bidder": {
+                "site_id": "108060"
+              }
+            }
+          },
+          {
+            "id": "2",
+            "bidfloor": 1,
+            "secure": 1,
+            "tagid": "mytag",
+            "displaymanager": "prebid-s2s",
+            "displaymanagerver": "2.0.0",
+            "video": {
+              "api": [1,2],
+              "maxduration": 60,
+              "mimes": ["video/mp4"],
+              "protocols": [2],
+              "pos": 1
+            },
+            "ext": {
+              "bidder": {
+                "site_id": "108060",
+                "bidfloor": 7,
+                "tag_id": "mytag",
+                "secure": 1,
+                "position": 1,
+                "mimes": ["video/mp4"],
+                "api": [1,2],
+                "protocols": [2],
+                "maxduration": 60
+              }
+            }
+          },
+          {
+            "id": "3",
+            "bidfloor": 7,
+            "secure": 1,
+            "tagid": "mytag",
+            "displaymanager": "prebid-s2s",
+            "displaymanagerver": "2.0.0",
+            "video": {
+              "api": [1,2],
+              "maxduration": 60,
+              "mimes": ["video/mp4"],
+              "protocols": [2],
+              "pos": 1
+            },
+            "ext": {
+              "bidder": {
+                "site_id": "108060",
+                "bidfloor": 7,
+                "tag_id": "mytag",
+                "secure": 1,
+                "position": 1,
+                "mimes": ["video/mp4"],
+                "api": [1,2],
+                "protocols": [2],
+                "maxduration": 60
+              }
+            }
+          },
+          {
+            "id": "4",
+            "bidfloor": -3,
+            "secure": 1,
+            "tagid": "mytag",
+            "displaymanager": "prebid-s2s",
+            "displaymanagerver": "2.0.0",
+            "video": {
+              "api": [1,2],
+              "maxduration": 60,
+              "mimes": ["video/mp4"],
+              "protocols": [2],
+              "pos": 1
+            },
+            "ext": {
+              "bidder": {
+                "site_id": "108060",
+                "bidfloor": 0,
+                "tag_id": "mytag",
+                "secure": 1,
+                "position": 1,
+                "mimes": ["video/mp4"],
+                "api": [1,2],
+                "protocols": [2],
+                "maxduration": 60
+              }
+            }
+          }
+        ]
+      }
+    },
+    "mockResponse": {
+      "status": 200,
+      "body": {
+        "id": "testauction",
+        "bidid": "c8d95f4b-bcbb-4a6c-adbb-4c7f33af3c24",
+        "cur": "USD",
+        "seatbid": [
+          {
+            "bid": [
+              {
+                "id": "1",
+                "impid": "1",
+                "price": 0.0340,
+                "nurl": "https:\/\/event.ad.cpe.dotomi.com\/cvx\/event\/imp?enc=eyJ1c2VyaWQiOiI3MTI3MDUzNzM3NTM3MTAzMjIiLCJwYXJ0bmVyVHhpZCI6ImUyZWUzNjZlLWEyMjgtNDI0Mi1hNjJlLTk4ODk3ODhiYzgxNCIsInR4aWQiOiI3MTE1NzQwNDg3NTczODUwMDIiLCJuZXR3b3JrUmVxdWVzdElkIjoiNzExNTc0MDQ4NzU3Mzg1ODc0Iiwic2lkIjoxMTgwOTgsImRpdmlzaW9uSWQiOjgsInRpZCI6OCwibW9iaWxlRGF0YSI6IjU5IiwiYmlkUHJpY2UiOjAuMDY4MCwicHViQ29zdCI6MC4wMzQwLCJwYXJ0bmVyRmVlIjowLjAxMzYsImlwU3RyaW5nIjoiNzMuMTE4LjEzMC4xODYiLCJzdXBwbHlUeXBlIjoxLCJpbnRlZ3JhdGlvblR5cGUiOjQsIm1lZGlhdGlvblR5cGUiOjEyNiwicGxhY2VtZW50SWQiOiIxMTY5ODcwIiwiaGVhZGVyQmlkIjoxLCJpc0RpcmVjdFB1Ymxpc2hlciI6MCwiaGFzQ29uc2VudCI6MSwib3BlcmF0aW9uIjoiQ0xJRU5UX0hFQURFUl8yNSIsImlzQ29yZVNoaWVsZCI6MCwicGFydG5lckNyZWF0aXZlSWQiOiIyNDk2NDRfMzAweDI1MCIsInBhcnRuZXJEb21haW5zIjpbIndhbG1hcnQuY29tIl0sInNlbGxlclJlcXVlc3RJZCI6ImE3ODcyMWQ3LWE2ZmUtNGJiNS1hNjFkLTFhMDg1MzkxZTVlZCIsInNlbGxlckltcElkIjoiMzAwNDIxZDY0NWY2ZjRjOWMifQ&",
+                "adm": "<div id='beacon_97896' style='position:absolute;left:0px;top:0px;visibility:hidden;'><img src='https:\/\/rtb-us-east1.openx.net\/win\/conversant?p=0.068000&t=2DAABBgABAAECAAIBAAsAAgAAAyIcGAozeG96d1E1ekpoHBbYlLq-s8_-0YUBFu-eiJTkjsmfjAEAHBb79r3dq-TkkToW19-h99Dds9GzAQAW0Nm29AsVBjgkNTIzZDJkNzgtYjc1Yi0wM2VmLTI1Y2MtMmM2MjJmYTlhN2ZhACwcFQIAHBUCABwVAgAAHCbEvIODBBUEFQQmvLyDgwQWruuBgwTWiAEWiAEWiAEWZBZkFmQWZBbUAQAcHCwWgLGKpLvsg60qFuuytdnn4oDnpQEAABam-p2ABBaopLKABBaIrIKBBBaC1NKABBUYHBT0AxTYBAAVBCbUARbUARbUARE1DibUAQAsLBaXzu2B6O7j1_ABFrHv8IeZkI7RzAEAFtDZtvQLBiim-p2ABBaopLKABBaC1NKABBaIrIKBBBgOMjQ5NjQ0XzMwMHgyNTAWjAwW1AElBBZMJQKWwMqMAhEoAk9YDHoU-AMU2gQAFgIYA3J0YoEA3BsEiApiaWRfc291cmNlBVNTUlRCCGJpZF91dWlkJDgzZTVlOGRlLThjNzktNGE4ZC05OTQyLThiOGFkYTc1ZDI2MhhkZWxpdmVyeV9tZWRpdW1fY2F0ZWdvcnkDV0VCIXJldHJpZXZlZF9mcm9tX3NzcnRiX2Vwb2NoX21pbGxpcw0xNTk4NDc3OTI5MDgxAKwYmwJodHRwczovL21wZC5teHB0aW50Lm5ldC8xL1MxL0cxL1Q0ODA2L2RpP3Npej0zMDB4MjUwJmNwZD0yNDk2NDQmY3BzPTI3NSZzc2w9MSZtaWQ9QjMzNkI0X0NGQTRBNTczXzUyRDA1REEmbXBpZD1SMUIzNDJfQzZFRjI3MUVfMTMxRjQwOTZEJmJwPTAuMTA2MDYzNCZkbT0xNDkzREIyMDZGN0M0MUQ2NTRERDI1OUZDRjk2RTVDNSZyaT0wJnY9cTcxbzlGS0d4VVpGNUlONUEycGU5QUpRSWVEYlVSSjFIQ2p2cmRBbmx3M1F2UTFuVkQtSWhnJmFkaWQ9MSZ1dWlkPUE4emxpcHVrLUJJTEZIcl90SDVoT1p3KAt3YWxtYXJ0LmNvbQAAAA&ph=bec2690e-a73d-4d95-9901-75ad2a8d91b8'\/><\/div><script type=\"text\/javascript\" src=\"https:\/\/mpd.mxptint.net\/1\/S1\/G1\/T4806\/js?siz=300x250&cpd=249644&cps=275&ssl=1&mid=B336B4_CFA4A573_52D05DA&mpid=R1B342_C6EF271E_131F4096D&bp=0.1060634&dm=1493DB206F7C41D654DD259FCF96E5C5&ri=0&v=q71o9FKGxUZF5IN5A2pe9AJQIeDbURJ1HCjvrdAnlw3QvQ1nVD-Ihg&adid=1&uuid=A8zlipuk-BILFHr_tH5hOZw&spox=AAABdCy1ioekWBgw3-MoY-mUAAZXsF6Wi8M83w\"><\/script><noscript><iframe src=\"https:\/\/mpd.mxptint.net\/1\/S1\/G1\/T4806\/if?siz=300x250&cpd=249644&cps=275&ssl=1&mid=B336B4_CFA4A573_52D05DA&mpid=R1B342_C6EF271E_131F4096D&bp=0.1060634&dm=1493DB206F7C41D654DD259FCF96E5C5&ri=0&v=q71o9FKGxUZF5IN5A2pe9AJQIeDbURJ1HCjvrdAnlw3QvQ1nVD-Ihg&adid=1&uuid=A8zlipuk-BILFHr_tH5hOZw&spox=AAABdCy1ioekWBgw3-MoY-mUAAZXsF6Wi8M83w\" width=\"300px\" height=\"250px\" marginwidth=\"0\" marginheight=\"0\" frameborder=\"0\" scrolling=\"no\"><img src=\"https:\/\/mpc.mxptint.net\/11S2SEECE726S6C47S3CF2CS12CSFAS12C6SB336B4_CFA4A573_52D05DAS%3fhttp:\/\/noredir.mxptint.net\"\/><\/iframe><\/noscript><iframe src='https:\/\/us-u.openx.net\/w\/1.0\/pd?plm=6&ph=bec2690e-a73d-4d95-9901-75ad2a8d91b8' width='0' height='0' style='display:none;'><\/iframe>",
+                "adomain": ["walmart.com"],
+                "crid": "249644_300x250",
+                "w": 300,
+                "h": 250
+              },
+              {
+                "id": "2",
+                "impid": "2",
+                "price": 0.0340,
+                "nurl": "https:\/\/event.ad.cpe.dotomi.com\/cvx\/event\/imp?enc=eyJ1c2VyaWQiOiI3MTI3MDUzNzM3NTM3MTAzMjIiLCJwYXJ0bmVyVHhpZCI6ImUyZWUzNjZlLWEyMjgtNDI0Mi1hNjJlLTk4ODk3ODhiYzgxNCIsInR4aWQiOiI3MTE1NzQwNDg3NTczODUwMDIiLCJuZXR3b3JrUmVxdWVzdElkIjoiNzExNTc0MDQ4NzU3Mzg1ODc0Iiwic2lkIjoxMTgwOTgsImRpdmlzaW9uSWQiOjgsInRpZCI6OCwibW9iaWxlRGF0YSI6IjU5IiwiYmlkUHJpY2UiOjAuMDY4MCwicHViQ29zdCI6MC4wMzQwLCJwYXJ0bmVyRmVlIjowLjAxMzYsImlwU3RyaW5nIjoiNzMuMTE4LjEzMC4xODYiLCJzdXBwbHlUeXBlIjoxLCJpbnRlZ3JhdGlvblR5cGUiOjQsIm1lZGlhdGlvblR5cGUiOjEyNiwicGxhY2VtZW50SWQiOiIxMTY5ODcwIiwiaGVhZGVyQmlkIjoxLCJpc0RpcmVjdFB1Ymxpc2hlciI6MCwiaGFzQ29uc2VudCI6MSwib3BlcmF0aW9uIjoiQ0xJRU5UX0hFQURFUl8yNSIsImlzQ29yZVNoaWVsZCI6MCwicGFydG5lckNyZWF0aXZlSWQiOiIyNDk2NDRfMzAweDI1MCIsInBhcnRuZXJEb21haW5zIjpbIndhbG1hcnQuY29tIl0sInNlbGxlclJlcXVlc3RJZCI6ImE3ODcyMWQ3LWE2ZmUtNGJiNS1hNjFkLTFhMDg1MzkxZTVlZCIsInNlbGxlckltcElkIjoiMzAwNDIxZDY0NWY2ZjRjOWMifQ&",
+                "adm": "<div id='beacon_97896' style='position:absolute;left:0px;top:0px;visibility:hidden;'><img src='https:\/\/rtb-us-east1.openx.net\/win\/conversant?p=0.068000&t=2DAABBgABAAECAAIBAAsAAgAAAyIcGAozeG96d1E1ekpoHBbYlLq-s8_-0YUBFu-eiJTkjsmfjAEAHBb79r3dq-TkkToW19-h99Dds9GzAQAW0Nm29AsVBjgkNTIzZDJkNzgtYjc1Yi0wM2VmLTI1Y2MtMmM2MjJmYTlhN2ZhACwcFQIAHBUCABwVAgAAHCbEvIODBBUEFQQmvLyDgwQWruuBgwTWiAEWiAEWiAEWZBZkFmQWZBbUAQAcHCwWgLGKpLvsg60qFuuytdnn4oDnpQEAABam-p2ABBaopLKABBaIrIKBBBaC1NKABBUYHBT0AxTYBAAVBCbUARbUARbUARE1DibUAQAsLBaXzu2B6O7j1_ABFrHv8IeZkI7RzAEAFtDZtvQLBiim-p2ABBaopLKABBaC1NKABBaIrIKBBBgOMjQ5NjQ0XzMwMHgyNTAWjAwW1AElBBZMJQKWwMqMAhEoAk9YDHoU-AMU2gQAFgIYA3J0YoEA3BsEiApiaWRfc291cmNlBVNTUlRCCGJpZF91dWlkJDgzZTVlOGRlLThjNzktNGE4ZC05OTQyLThiOGFkYTc1ZDI2MhhkZWxpdmVyeV9tZWRpdW1fY2F0ZWdvcnkDV0VCIXJldHJpZXZlZF9mcm9tX3NzcnRiX2Vwb2NoX21pbGxpcw0xNTk4NDc3OTI5MDgxAKwYmwJodHRwczovL21wZC5teHB0aW50Lm5ldC8xL1MxL0cxL1Q0ODA2L2RpP3Npej0zMDB4MjUwJmNwZD0yNDk2NDQmY3BzPTI3NSZzc2w9MSZtaWQ9QjMzNkI0X0NGQTRBNTczXzUyRDA1REEmbXBpZD1SMUIzNDJfQzZFRjI3MUVfMTMxRjQwOTZEJmJwPTAuMTA2MDYzNCZkbT0xNDkzREIyMDZGN0M0MUQ2NTRERDI1OUZDRjk2RTVDNSZyaT0wJnY9cTcxbzlGS0d4VVpGNUlONUEycGU5QUpRSWVEYlVSSjFIQ2p2cmRBbmx3M1F2UTFuVkQtSWhnJmFkaWQ9MSZ1dWlkPUE4emxpcHVrLUJJTEZIcl90SDVoT1p3KAt3YWxtYXJ0LmNvbQAAAA&ph=bec2690e-a73d-4d95-9901-75ad2a8d91b8'\/><\/div><script type=\"text\/javascript\" src=\"https:\/\/mpd.mxptint.net\/1\/S1\/G1\/T4806\/js?siz=300x250&cpd=249644&cps=275&ssl=1&mid=B336B4_CFA4A573_52D05DA&mpid=R1B342_C6EF271E_131F4096D&bp=0.1060634&dm=1493DB206F7C41D654DD259FCF96E5C5&ri=0&v=q71o9FKGxUZF5IN5A2pe9AJQIeDbURJ1HCjvrdAnlw3QvQ1nVD-Ihg&adid=1&uuid=A8zlipuk-BILFHr_tH5hOZw&spox=AAABdCy1ioekWBgw3-MoY-mUAAZXsF6Wi8M83w\"><\/script><noscript><iframe src=\"https:\/\/mpd.mxptint.net\/1\/S1\/G1\/T4806\/if?siz=300x250&cpd=249644&cps=275&ssl=1&mid=B336B4_CFA4A573_52D05DA&mpid=R1B342_C6EF271E_131F4096D&bp=0.1060634&dm=1493DB206F7C41D654DD259FCF96E5C5&ri=0&v=q71o9FKGxUZF5IN5A2pe9AJQIeDbURJ1HCjvrdAnlw3QvQ1nVD-Ihg&adid=1&uuid=A8zlipuk-BILFHr_tH5hOZw&spox=AAABdCy1ioekWBgw3-MoY-mUAAZXsF6Wi8M83w\" width=\"300px\" height=\"250px\" marginwidth=\"0\" marginheight=\"0\" frameborder=\"0\" scrolling=\"no\"><img src=\"https:\/\/mpc.mxptint.net\/11S2SEECE726S6C47S3CF2CS12CSFAS12C6SB336B4_CFA4A573_52D05DAS%3fhttp:\/\/noredir.mxptint.net\"\/><\/iframe><\/noscript><iframe src='https:\/\/us-u.openx.net\/w\/1.0\/pd?plm=6&ph=bec2690e-a73d-4d95-9901-75ad2a8d91b8' width='0' height='0' style='display:none;'><\/iframe>",
+                "adomain": ["walmart.com"],
+                "crid": "249644_300x250",
+                "w": 300,
+                "h": 250
+              },
+              {
+                "id": "3",
+                "impid": "3",
+                "price": 0.0340,
+                "nurl": "https:\/\/event.ad.cpe.dotomi.com\/cvx\/event\/imp?enc=eyJ1c2VyaWQiOiI3MTI3MDUzNzM3NTM3MTAzMjIiLCJwYXJ0bmVyVHhpZCI6ImUyZWUzNjZlLWEyMjgtNDI0Mi1hNjJlLTk4ODk3ODhiYzgxNCIsInR4aWQiOiI3MTE1NzQwNDg3NTczODUwMDIiLCJuZXR3b3JrUmVxdWVzdElkIjoiNzExNTc0MDQ4NzU3Mzg1ODc0Iiwic2lkIjoxMTgwOTgsImRpdmlzaW9uSWQiOjgsInRpZCI6OCwibW9iaWxlRGF0YSI6IjU5IiwiYmlkUHJpY2UiOjAuMDY4MCwicHViQ29zdCI6MC4wMzQwLCJwYXJ0bmVyRmVlIjowLjAxMzYsImlwU3RyaW5nIjoiNzMuMTE4LjEzMC4xODYiLCJzdXBwbHlUeXBlIjoxLCJpbnRlZ3JhdGlvblR5cGUiOjQsIm1lZGlhdGlvblR5cGUiOjEyNiwicGxhY2VtZW50SWQiOiIxMTY5ODcwIiwiaGVhZGVyQmlkIjoxLCJpc0RpcmVjdFB1Ymxpc2hlciI6MCwiaGFzQ29uc2VudCI6MSwib3BlcmF0aW9uIjoiQ0xJRU5UX0hFQURFUl8yNSIsImlzQ29yZVNoaWVsZCI6MCwicGFydG5lckNyZWF0aXZlSWQiOiIyNDk2NDRfMzAweDI1MCIsInBhcnRuZXJEb21haW5zIjpbIndhbG1hcnQuY29tIl0sInNlbGxlclJlcXVlc3RJZCI6ImE3ODcyMWQ3LWE2ZmUtNGJiNS1hNjFkLTFhMDg1MzkxZTVlZCIsInNlbGxlckltcElkIjoiMzAwNDIxZDY0NWY2ZjRjOWMifQ&",
+                "adm": "<div id='beacon_97896' style='position:absolute;left:0px;top:0px;visibility:hidden;'><img src='https:\/\/rtb-us-east1.openx.net\/win\/conversant?p=0.068000&t=2DAABBgABAAECAAIBAAsAAgAAAyIcGAozeG96d1E1ekpoHBbYlLq-s8_-0YUBFu-eiJTkjsmfjAEAHBb79r3dq-TkkToW19-h99Dds9GzAQAW0Nm29AsVBjgkNTIzZDJkNzgtYjc1Yi0wM2VmLTI1Y2MtMmM2MjJmYTlhN2ZhACwcFQIAHBUCABwVAgAAHCbEvIODBBUEFQQmvLyDgwQWruuBgwTWiAEWiAEWiAEWZBZkFmQWZBbUAQAcHCwWgLGKpLvsg60qFuuytdnn4oDnpQEAABam-p2ABBaopLKABBaIrIKBBBaC1NKABBUYHBT0AxTYBAAVBCbUARbUARbUARE1DibUAQAsLBaXzu2B6O7j1_ABFrHv8IeZkI7RzAEAFtDZtvQLBiim-p2ABBaopLKABBaC1NKABBaIrIKBBBgOMjQ5NjQ0XzMwMHgyNTAWjAwW1AElBBZMJQKWwMqMAhEoAk9YDHoU-AMU2gQAFgIYA3J0YoEA3BsEiApiaWRfc291cmNlBVNTUlRCCGJpZF91dWlkJDgzZTVlOGRlLThjNzktNGE4ZC05OTQyLThiOGFkYTc1ZDI2MhhkZWxpdmVyeV9tZWRpdW1fY2F0ZWdvcnkDV0VCIXJldHJpZXZlZF9mcm9tX3NzcnRiX2Vwb2NoX21pbGxpcw0xNTk4NDc3OTI5MDgxAKwYmwJodHRwczovL21wZC5teHB0aW50Lm5ldC8xL1MxL0cxL1Q0ODA2L2RpP3Npej0zMDB4MjUwJmNwZD0yNDk2NDQmY3BzPTI3NSZzc2w9MSZtaWQ9QjMzNkI0X0NGQTRBNTczXzUyRDA1REEmbXBpZD1SMUIzNDJfQzZFRjI3MUVfMTMxRjQwOTZEJmJwPTAuMTA2MDYzNCZkbT0xNDkzREIyMDZGN0M0MUQ2NTRERDI1OUZDRjk2RTVDNSZyaT0wJnY9cTcxbzlGS0d4VVpGNUlONUEycGU5QUpRSWVEYlVSSjFIQ2p2cmRBbmx3M1F2UTFuVkQtSWhnJmFkaWQ9MSZ1dWlkPUE4emxpcHVrLUJJTEZIcl90SDVoT1p3KAt3YWxtYXJ0LmNvbQAAAA&ph=bec2690e-a73d-4d95-9901-75ad2a8d91b8'\/><\/div><script type=\"text\/javascript\" src=\"https:\/\/mpd.mxptint.net\/1\/S1\/G1\/T4806\/js?siz=300x250&cpd=249644&cps=275&ssl=1&mid=B336B4_CFA4A573_52D05DA&mpid=R1B342_C6EF271E_131F4096D&bp=0.1060634&dm=1493DB206F7C41D654DD259FCF96E5C5&ri=0&v=q71o9FKGxUZF5IN5A2pe9AJQIeDbURJ1HCjvrdAnlw3QvQ1nVD-Ihg&adid=1&uuid=A8zlipuk-BILFHr_tH5hOZw&spox=AAABdCy1ioekWBgw3-MoY-mUAAZXsF6Wi8M83w\"><\/script><noscript><iframe src=\"https:\/\/mpd.mxptint.net\/1\/S1\/G1\/T4806\/if?siz=300x250&cpd=249644&cps=275&ssl=1&mid=B336B4_CFA4A573_52D05DA&mpid=R1B342_C6EF271E_131F4096D&bp=0.1060634&dm=1493DB206F7C41D654DD259FCF96E5C5&ri=0&v=q71o9FKGxUZF5IN5A2pe9AJQIeDbURJ1HCjvrdAnlw3QvQ1nVD-Ihg&adid=1&uuid=A8zlipuk-BILFHr_tH5hOZw&spox=AAABdCy1ioekWBgw3-MoY-mUAAZXsF6Wi8M83w\" width=\"300px\" height=\"250px\" marginwidth=\"0\" marginheight=\"0\" frameborder=\"0\" scrolling=\"no\"><img src=\"https:\/\/mpc.mxptint.net\/11S2SEECE726S6C47S3CF2CS12CSFAS12C6SB336B4_CFA4A573_52D05DAS%3fhttp:\/\/noredir.mxptint.net\"\/><\/iframe><\/noscript><iframe src='https:\/\/us-u.openx.net\/w\/1.0\/pd?plm=6&ph=bec2690e-a73d-4d95-9901-75ad2a8d91b8' width='0' height='0' style='display:none;'><\/iframe>",
+                "adomain": ["walmart.com"],
+                "crid": "249644_300x250",
+                "w": 300,
+                "h": 250
+              }
+            ]
+          }
+        ]
+      }
+    }
+  }],
+  "expectedBidResponses": [
+    {
+      "bids": [{
+          "bid": {
+            "id": "1",
+            "impid": "1",
+            "price": 0.0340,
+            "nurl": "https:\/\/event.ad.cpe.dotomi.com\/cvx\/event\/imp?enc=eyJ1c2VyaWQiOiI3MTI3MDUzNzM3NTM3MTAzMjIiLCJwYXJ0bmVyVHhpZCI6ImUyZWUzNjZlLWEyMjgtNDI0Mi1hNjJlLTk4ODk3ODhiYzgxNCIsInR4aWQiOiI3MTE1NzQwNDg3NTczODUwMDIiLCJuZXR3b3JrUmVxdWVzdElkIjoiNzExNTc0MDQ4NzU3Mzg1ODc0Iiwic2lkIjoxMTgwOTgsImRpdmlzaW9uSWQiOjgsInRpZCI6OCwibW9iaWxlRGF0YSI6IjU5IiwiYmlkUHJpY2UiOjAuMDY4MCwicHViQ29zdCI6MC4wMzQwLCJwYXJ0bmVyRmVlIjowLjAxMzYsImlwU3RyaW5nIjoiNzMuMTE4LjEzMC4xODYiLCJzdXBwbHlUeXBlIjoxLCJpbnRlZ3JhdGlvblR5cGUiOjQsIm1lZGlhdGlvblR5cGUiOjEyNiwicGxhY2VtZW50SWQiOiIxMTY5ODcwIiwiaGVhZGVyQmlkIjoxLCJpc0RpcmVjdFB1Ymxpc2hlciI6MCwiaGFzQ29uc2VudCI6MSwib3BlcmF0aW9uIjoiQ0xJRU5UX0hFQURFUl8yNSIsImlzQ29yZVNoaWVsZCI6MCwicGFydG5lckNyZWF0aXZlSWQiOiIyNDk2NDRfMzAweDI1MCIsInBhcnRuZXJEb21haW5zIjpbIndhbG1hcnQuY29tIl0sInNlbGxlclJlcXVlc3RJZCI6ImE3ODcyMWQ3LWE2ZmUtNGJiNS1hNjFkLTFhMDg1MzkxZTVlZCIsInNlbGxlckltcElkIjoiMzAwNDIxZDY0NWY2ZjRjOWMifQ&",
+            "adm": "<div id='beacon_97896' style='position:absolute;left:0px;top:0px;visibility:hidden;'><img src='https:\/\/rtb-us-east1.openx.net\/win\/conversant?p=0.068000&t=2DAABBgABAAECAAIBAAsAAgAAAyIcGAozeG96d1E1ekpoHBbYlLq-s8_-0YUBFu-eiJTkjsmfjAEAHBb79r3dq-TkkToW19-h99Dds9GzAQAW0Nm29AsVBjgkNTIzZDJkNzgtYjc1Yi0wM2VmLTI1Y2MtMmM2MjJmYTlhN2ZhACwcFQIAHBUCABwVAgAAHCbEvIODBBUEFQQmvLyDgwQWruuBgwTWiAEWiAEWiAEWZBZkFmQWZBbUAQAcHCwWgLGKpLvsg60qFuuytdnn4oDnpQEAABam-p2ABBaopLKABBaIrIKBBBaC1NKABBUYHBT0AxTYBAAVBCbUARbUARbUARE1DibUAQAsLBaXzu2B6O7j1_ABFrHv8IeZkI7RzAEAFtDZtvQLBiim-p2ABBaopLKABBaC1NKABBaIrIKBBBgOMjQ5NjQ0XzMwMHgyNTAWjAwW1AElBBZMJQKWwMqMAhEoAk9YDHoU-AMU2gQAFgIYA3J0YoEA3BsEiApiaWRfc291cmNlBVNTUlRCCGJpZF91dWlkJDgzZTVlOGRlLThjNzktNGE4ZC05OTQyLThiOGFkYTc1ZDI2MhhkZWxpdmVyeV9tZWRpdW1fY2F0ZWdvcnkDV0VCIXJldHJpZXZlZF9mcm9tX3NzcnRiX2Vwb2NoX21pbGxpcw0xNTk4NDc3OTI5MDgxAKwYmwJodHRwczovL21wZC5teHB0aW50Lm5ldC8xL1MxL0cxL1Q0ODA2L2RpP3Npej0zMDB4MjUwJmNwZD0yNDk2NDQmY3BzPTI3NSZzc2w9MSZtaWQ9QjMzNkI0X0NGQTRBNTczXzUyRDA1REEmbXBpZD1SMUIzNDJfQzZFRjI3MUVfMTMxRjQwOTZEJmJwPTAuMTA2MDYzNCZkbT0xNDkzREIyMDZGN0M0MUQ2NTRERDI1OUZDRjk2RTVDNSZyaT0wJnY9cTcxbzlGS0d4VVpGNUlONUEycGU5QUpRSWVEYlVSSjFIQ2p2cmRBbmx3M1F2UTFuVkQtSWhnJmFkaWQ9MSZ1dWlkPUE4emxpcHVrLUJJTEZIcl90SDVoT1p3KAt3YWxtYXJ0LmNvbQAAAA&ph=bec2690e-a73d-4d95-9901-75ad2a8d91b8'\/><\/div><script type=\"text\/javascript\" src=\"https:\/\/mpd.mxptint.net\/1\/S1\/G1\/T4806\/js?siz=300x250&cpd=249644&cps=275&ssl=1&mid=B336B4_CFA4A573_52D05DA&mpid=R1B342_C6EF271E_131F4096D&bp=0.1060634&dm=1493DB206F7C41D654DD259FCF96E5C5&ri=0&v=q71o9FKGxUZF5IN5A2pe9AJQIeDbURJ1HCjvrdAnlw3QvQ1nVD-Ihg&adid=1&uuid=A8zlipuk-BILFHr_tH5hOZw&spox=AAABdCy1ioekWBgw3-MoY-mUAAZXsF6Wi8M83w\"><\/script><noscript><iframe src=\"https:\/\/mpd.mxptint.net\/1\/S1\/G1\/T4806\/if?siz=300x250&cpd=249644&cps=275&ssl=1&mid=B336B4_CFA4A573_52D05DA&mpid=R1B342_C6EF271E_131F4096D&bp=0.1060634&dm=1493DB206F7C41D654DD259FCF96E5C5&ri=0&v=q71o9FKGxUZF5IN5A2pe9AJQIeDbURJ1HCjvrdAnlw3QvQ1nVD-Ihg&adid=1&uuid=A8zlipuk-BILFHr_tH5hOZw&spox=AAABdCy1ioekWBgw3-MoY-mUAAZXsF6Wi8M83w\" width=\"300px\" height=\"250px\" marginwidth=\"0\" marginheight=\"0\" frameborder=\"0\" scrolling=\"no\"><img src=\"https:\/\/mpc.mxptint.net\/11S2SEECE726S6C47S3CF2CS12CSFAS12C6SB336B4_CFA4A573_52D05DAS%3fhttp:\/\/noredir.mxptint.net\"\/><\/iframe><\/noscript><iframe src='https:\/\/us-u.openx.net\/w\/1.0\/pd?plm=6&ph=bec2690e-a73d-4d95-9901-75ad2a8d91b8' width='0' height='0' style='display:none;'><\/iframe>",
+            "adomain": ["walmart.com"],
+            "crid": "249644_300x250",
+            "w": 300,
+            "h": 250
+          },
+          "type": "video"
+        },
+        {
+          "bid": {
+            "id": "2",
+            "impid": "2",
+            "price": 0.0340,
+            "nurl": "https:\/\/event.ad.cpe.dotomi.com\/cvx\/event\/imp?enc=eyJ1c2VyaWQiOiI3MTI3MDUzNzM3NTM3MTAzMjIiLCJwYXJ0bmVyVHhpZCI6ImUyZWUzNjZlLWEyMjgtNDI0Mi1hNjJlLTk4ODk3ODhiYzgxNCIsInR4aWQiOiI3MTE1NzQwNDg3NTczODUwMDIiLCJuZXR3b3JrUmVxdWVzdElkIjoiNzExNTc0MDQ4NzU3Mzg1ODc0Iiwic2lkIjoxMTgwOTgsImRpdmlzaW9uSWQiOjgsInRpZCI6OCwibW9iaWxlRGF0YSI6IjU5IiwiYmlkUHJpY2UiOjAuMDY4MCwicHViQ29zdCI6MC4wMzQwLCJwYXJ0bmVyRmVlIjowLjAxMzYsImlwU3RyaW5nIjoiNzMuMTE4LjEzMC4xODYiLCJzdXBwbHlUeXBlIjoxLCJpbnRlZ3JhdGlvblR5cGUiOjQsIm1lZGlhdGlvblR5cGUiOjEyNiwicGxhY2VtZW50SWQiOiIxMTY5ODcwIiwiaGVhZGVyQmlkIjoxLCJpc0RpcmVjdFB1Ymxpc2hlciI6MCwiaGFzQ29uc2VudCI6MSwib3BlcmF0aW9uIjoiQ0xJRU5UX0hFQURFUl8yNSIsImlzQ29yZVNoaWVsZCI6MCwicGFydG5lckNyZWF0aXZlSWQiOiIyNDk2NDRfMzAweDI1MCIsInBhcnRuZXJEb21haW5zIjpbIndhbG1hcnQuY29tIl0sInNlbGxlclJlcXVlc3RJZCI6ImE3ODcyMWQ3LWE2ZmUtNGJiNS1hNjFkLTFhMDg1MzkxZTVlZCIsInNlbGxlckltcElkIjoiMzAwNDIxZDY0NWY2ZjRjOWMifQ&",
+            "adm": "<div id='beacon_97896' style='position:absolute;left:0px;top:0px;visibility:hidden;'><img src='https:\/\/rtb-us-east1.openx.net\/win\/conversant?p=0.068000&t=2DAABBgABAAECAAIBAAsAAgAAAyIcGAozeG96d1E1ekpoHBbYlLq-s8_-0YUBFu-eiJTkjsmfjAEAHBb79r3dq-TkkToW19-h99Dds9GzAQAW0Nm29AsVBjgkNTIzZDJkNzgtYjc1Yi0wM2VmLTI1Y2MtMmM2MjJmYTlhN2ZhACwcFQIAHBUCABwVAgAAHCbEvIODBBUEFQQmvLyDgwQWruuBgwTWiAEWiAEWiAEWZBZkFmQWZBbUAQAcHCwWgLGKpLvsg60qFuuytdnn4oDnpQEAABam-p2ABBaopLKABBaIrIKBBBaC1NKABBUYHBT0AxTYBAAVBCbUARbUARbUARE1DibUAQAsLBaXzu2B6O7j1_ABFrHv8IeZkI7RzAEAFtDZtvQLBiim-p2ABBaopLKABBaC1NKABBaIrIKBBBgOMjQ5NjQ0XzMwMHgyNTAWjAwW1AElBBZMJQKWwMqMAhEoAk9YDHoU-AMU2gQAFgIYA3J0YoEA3BsEiApiaWRfc291cmNlBVNTUlRCCGJpZF91dWlkJDgzZTVlOGRlLThjNzktNGE4ZC05OTQyLThiOGFkYTc1ZDI2MhhkZWxpdmVyeV9tZWRpdW1fY2F0ZWdvcnkDV0VCIXJldHJpZXZlZF9mcm9tX3NzcnRiX2Vwb2NoX21pbGxpcw0xNTk4NDc3OTI5MDgxAKwYmwJodHRwczovL21wZC5teHB0aW50Lm5ldC8xL1MxL0cxL1Q0ODA2L2RpP3Npej0zMDB4MjUwJmNwZD0yNDk2NDQmY3BzPTI3NSZzc2w9MSZtaWQ9QjMzNkI0X0NGQTRBNTczXzUyRDA1REEmbXBpZD1SMUIzNDJfQzZFRjI3MUVfMTMxRjQwOTZEJmJwPTAuMTA2MDYzNCZkbT0xNDkzREIyMDZGN0M0MUQ2NTRERDI1OUZDRjk2RTVDNSZyaT0wJnY9cTcxbzlGS0d4VVpGNUlONUEycGU5QUpRSWVEYlVSSjFIQ2p2cmRBbmx3M1F2UTFuVkQtSWhnJmFkaWQ9MSZ1dWlkPUE4emxpcHVrLUJJTEZIcl90SDVoT1p3KAt3YWxtYXJ0LmNvbQAAAA&ph=bec2690e-a73d-4d95-9901-75ad2a8d91b8'\/><\/div><script type=\"text\/javascript\" src=\"https:\/\/mpd.mxptint.net\/1\/S1\/G1\/T4806\/js?siz=300x250&cpd=249644&cps=275&ssl=1&mid=B336B4_CFA4A573_52D05DA&mpid=R1B342_C6EF271E_131F4096D&bp=0.1060634&dm=1493DB206F7C41D654DD259FCF96E5C5&ri=0&v=q71o9FKGxUZF5IN5A2pe9AJQIeDbURJ1HCjvrdAnlw3QvQ1nVD-Ihg&adid=1&uuid=A8zlipuk-BILFHr_tH5hOZw&spox=AAABdCy1ioekWBgw3-MoY-mUAAZXsF6Wi8M83w\"><\/script><noscript><iframe src=\"https:\/\/mpd.mxptint.net\/1\/S1\/G1\/T4806\/if?siz=300x250&cpd=249644&cps=275&ssl=1&mid=B336B4_CFA4A573_52D05DA&mpid=R1B342_C6EF271E_131F4096D&bp=0.1060634&dm=1493DB206F7C41D654DD259FCF96E5C5&ri=0&v=q71o9FKGxUZF5IN5A2pe9AJQIeDbURJ1HCjvrdAnlw3QvQ1nVD-Ihg&adid=1&uuid=A8zlipuk-BILFHr_tH5hOZw&spox=AAABdCy1ioekWBgw3-MoY-mUAAZXsF6Wi8M83w\" width=\"300px\" height=\"250px\" marginwidth=\"0\" marginheight=\"0\" frameborder=\"0\" scrolling=\"no\"><img src=\"https:\/\/mpc.mxptint.net\/11S2SEECE726S6C47S3CF2CS12CSFAS12C6SB336B4_CFA4A573_52D05DAS%3fhttp:\/\/noredir.mxptint.net\"\/><\/iframe><\/noscript><iframe src='https:\/\/us-u.openx.net\/w\/1.0\/pd?plm=6&ph=bec2690e-a73d-4d95-9901-75ad2a8d91b8' width='0' height='0' style='display:none;'><\/iframe>",
+            "adomain": ["walmart.com"],
+            "crid": "249644_300x250",
+            "w": 300,
+            "h": 250
+          },
+          "type": "video"
+        },
+        {
+        "bid": {
+          "id": "3",
+          "impid": "3",
+          "price": 0.0340,
+          "nurl": "https:\/\/event.ad.cpe.dotomi.com\/cvx\/event\/imp?enc=eyJ1c2VyaWQiOiI3MTI3MDUzNzM3NTM3MTAzMjIiLCJwYXJ0bmVyVHhpZCI6ImUyZWUzNjZlLWEyMjgtNDI0Mi1hNjJlLTk4ODk3ODhiYzgxNCIsInR4aWQiOiI3MTE1NzQwNDg3NTczODUwMDIiLCJuZXR3b3JrUmVxdWVzdElkIjoiNzExNTc0MDQ4NzU3Mzg1ODc0Iiwic2lkIjoxMTgwOTgsImRpdmlzaW9uSWQiOjgsInRpZCI6OCwibW9iaWxlRGF0YSI6IjU5IiwiYmlkUHJpY2UiOjAuMDY4MCwicHViQ29zdCI6MC4wMzQwLCJwYXJ0bmVyRmVlIjowLjAxMzYsImlwU3RyaW5nIjoiNzMuMTE4LjEzMC4xODYiLCJzdXBwbHlUeXBlIjoxLCJpbnRlZ3JhdGlvblR5cGUiOjQsIm1lZGlhdGlvblR5cGUiOjEyNiwicGxhY2VtZW50SWQiOiIxMTY5ODcwIiwiaGVhZGVyQmlkIjoxLCJpc0RpcmVjdFB1Ymxpc2hlciI6MCwiaGFzQ29uc2VudCI6MSwib3BlcmF0aW9uIjoiQ0xJRU5UX0hFQURFUl8yNSIsImlzQ29yZVNoaWVsZCI6MCwicGFydG5lckNyZWF0aXZlSWQiOiIyNDk2NDRfMzAweDI1MCIsInBhcnRuZXJEb21haW5zIjpbIndhbG1hcnQuY29tIl0sInNlbGxlclJlcXVlc3RJZCI6ImE3ODcyMWQ3LWE2ZmUtNGJiNS1hNjFkLTFhMDg1MzkxZTVlZCIsInNlbGxlckltcElkIjoiMzAwNDIxZDY0NWY2ZjRjOWMifQ&",
+          "adm": "<div id='beacon_97896' style='position:absolute;left:0px;top:0px;visibility:hidden;'><img src='https:\/\/rtb-us-east1.openx.net\/win\/conversant?p=0.068000&t=2DAABBgABAAECAAIBAAsAAgAAAyIcGAozeG96d1E1ekpoHBbYlLq-s8_-0YUBFu-eiJTkjsmfjAEAHBb79r3dq-TkkToW19-h99Dds9GzAQAW0Nm29AsVBjgkNTIzZDJkNzgtYjc1Yi0wM2VmLTI1Y2MtMmM2MjJmYTlhN2ZhACwcFQIAHBUCABwVAgAAHCbEvIODBBUEFQQmvLyDgwQWruuBgwTWiAEWiAEWiAEWZBZkFmQWZBbUAQAcHCwWgLGKpLvsg60qFuuytdnn4oDnpQEAABam-p2ABBaopLKABBaIrIKBBBaC1NKABBUYHBT0AxTYBAAVBCbUARbUARbUARE1DibUAQAsLBaXzu2B6O7j1_ABFrHv8IeZkI7RzAEAFtDZtvQLBiim-p2ABBaopLKABBaC1NKABBaIrIKBBBgOMjQ5NjQ0XzMwMHgyNTAWjAwW1AElBBZMJQKWwMqMAhEoAk9YDHoU-AMU2gQAFgIYA3J0YoEA3BsEiApiaWRfc291cmNlBVNTUlRCCGJpZF91dWlkJDgzZTVlOGRlLThjNzktNGE4ZC05OTQyLThiOGFkYTc1ZDI2MhhkZWxpdmVyeV9tZWRpdW1fY2F0ZWdvcnkDV0VCIXJldHJpZXZlZF9mcm9tX3NzcnRiX2Vwb2NoX21pbGxpcw0xNTk4NDc3OTI5MDgxAKwYmwJodHRwczovL21wZC5teHB0aW50Lm5ldC8xL1MxL0cxL1Q0ODA2L2RpP3Npej0zMDB4MjUwJmNwZD0yNDk2NDQmY3BzPTI3NSZzc2w9MSZtaWQ9QjMzNkI0X0NGQTRBNTczXzUyRDA1REEmbXBpZD1SMUIzNDJfQzZFRjI3MUVfMTMxRjQwOTZEJmJwPTAuMTA2MDYzNCZkbT0xNDkzREIyMDZGN0M0MUQ2NTRERDI1OUZDRjk2RTVDNSZyaT0wJnY9cTcxbzlGS0d4VVpGNUlONUEycGU5QUpRSWVEYlVSSjFIQ2p2cmRBbmx3M1F2UTFuVkQtSWhnJmFkaWQ9MSZ1dWlkPUE4emxpcHVrLUJJTEZIcl90SDVoT1p3KAt3YWxtYXJ0LmNvbQAAAA&ph=bec2690e-a73d-4d95-9901-75ad2a8d91b8'\/><\/div><script type=\"text\/javascript\" src=\"https:\/\/mpd.mxptint.net\/1\/S1\/G1\/T4806\/js?siz=300x250&cpd=249644&cps=275&ssl=1&mid=B336B4_CFA4A573_52D05DA&mpid=R1B342_C6EF271E_131F4096D&bp=0.1060634&dm=1493DB206F7C41D654DD259FCF96E5C5&ri=0&v=q71o9FKGxUZF5IN5A2pe9AJQIeDbURJ1HCjvrdAnlw3QvQ1nVD-Ihg&adid=1&uuid=A8zlipuk-BILFHr_tH5hOZw&spox=AAABdCy1ioekWBgw3-MoY-mUAAZXsF6Wi8M83w\"><\/script><noscript><iframe src=\"https:\/\/mpd.mxptint.net\/1\/S1\/G1\/T4806\/if?siz=300x250&cpd=249644&cps=275&ssl=1&mid=B336B4_CFA4A573_52D05DA&mpid=R1B342_C6EF271E_131F4096D&bp=0.1060634&dm=1493DB206F7C41D654DD259FCF96E5C5&ri=0&v=q71o9FKGxUZF5IN5A2pe9AJQIeDbURJ1HCjvrdAnlw3QvQ1nVD-Ihg&adid=1&uuid=A8zlipuk-BILFHr_tH5hOZw&spox=AAABdCy1ioekWBgw3-MoY-mUAAZXsF6Wi8M83w\" width=\"300px\" height=\"250px\" marginwidth=\"0\" marginheight=\"0\" frameborder=\"0\" scrolling=\"no\"><img src=\"https:\/\/mpc.mxptint.net\/11S2SEECE726S6C47S3CF2CS12CSFAS12C6SB336B4_CFA4A573_52D05DAS%3fhttp:\/\/noredir.mxptint.net\"\/><\/iframe><\/noscript><iframe src='https:\/\/us-u.openx.net\/w\/1.0\/pd?plm=6&ph=bec2690e-a73d-4d95-9901-75ad2a8d91b8' width='0' height='0' style='display:none;'><\/iframe>",
+          "adomain": ["walmart.com"],
+          "crid": "249644_300x250",
+          "w": 300,
+          "h": 250
+        },
+        "type": "video"
+      }
+      ]
+    }
+  ]
+}
diff --git a/adapters/madvertise/madvertise_test.go b/adapters/madvertise/madvertise_test.go
new file mode 100644
index 00000000..924f25c1
--- /dev/null
+++ b/adapters/madvertise/madvertise_test.go
@@ -0,0 +1,26 @@
+package madvertise
+
+import (
+	"testing"
+
+	"github.com/prebid/prebid-server/adapters/adapterstest"
+	"github.com/prebid/prebid-server/config"
+	"github.com/prebid/prebid-server/openrtb_ext"
+	"github.com/stretchr/testify/assert"
+)
+
+func TestEndpointTemplateMalformed(t *testing.T) {
+	_, buildErr := Builder(openrtb_ext.BidderMadvertise, config.Adapter{
+		Endpoint: "{{Malformed}}"})
+
+	assert.Error(t, buildErr)
+}
+
+func TestJsonSamples(t *testing.T) {
+	bidder, buildErr := Builder(openrtb_ext.BidderMadvertise, config.Adapter{
+		Endpoint: "https://mobile.mng-ads.com/bidrequest{{.ZoneID}}"})
+
+	assert.NoError(t, buildErr, "Builder returned unexpected error %v", buildErr)
+
+	adapterstest.RunJSONBidderTest(t, "madvertisetest", bidder)
+}
diff --git a/adapters/madvertise/madvertisetest/exemplary/simple-banner.json b/adapters/madvertise/madvertisetest/exemplary/simple-banner.json
new file mode 100644
index 00000000..0c277a06
--- /dev/null
+++ b/adapters/madvertise/madvertisetest/exemplary/simple-banner.json
@@ -0,0 +1,203 @@
+{
+    "mockBidRequest": {
+        "id": "test-request-id",
+        "tmax": 500,
+        "at": 1,
+        "cur": [
+            "EUR"
+        ],
+        "regs": {
+            "ext": {
+                "gdpr": 1
+            }
+        },
+        "user": {
+            "ext": {
+                "consent": "CO-X2XiO_eyUoAsAxBFRBECsAP_AAH_AAAqIGMgB7CpERSNAYWApAOMAKYhfQAACAGAABAYIASgBQQBAMJQEkGAIMAjAAAAKAAAEACQAAAAgCAGAAAAAAAAAAQCMAAAAABAAACAAAAASAAAACAAACACSCAAQjAAAAAEAgAAAAAIF5wJwAFgAPAAqABcADIAHAAQAAqABiADQAHkARABFACeAFKALgAugBiADaAG8AOYAfwBCAClAGqANcAdQA_QCBgEIAIsARwAq4BgADZAHyAP-Aj0BUwC6gF5gCAoAYBEAC4AKpCQAwCIAFwAVSIgAgABFQAQAAg"
+            }
+        },
+        "app": {
+            "id": "9561622",
+            "bundle": "com.madvertise.bluestack",
+            "name": "FR_BlueStack_App_Android_MNG",
+            "storeurl": "https://play.google.com/store/apps/details?id=com.madvertise.bluestack"
+        },
+        "device": {
+            "ip": "123.123.123.123",
+            "ua": "test-user-agent",
+            "dnt": 0,
+            "lmt": 0,
+            "ifa": "b879a967-cccc-bbbb-aaaa-1aa111111111",
+            "make": "Sony",
+            "model": "G8441",
+            "os": "Android",
+            "osv": "9.0",
+            "devicetype": 4,
+            "connectiontype": 6,
+            "js": 1,
+            "carrier": "Free",
+            "geo": {
+                "type": 2,
+                "country": "FRA"
+            }
+        },
+        "imp": [
+            {
+                "id": "test-imp-id",
+                "secure": 1,
+                "bidfloor": 3,
+                "bidfloorcur": "EUR",
+                "instl": 0,
+                "banner": {
+                    "h": 50,
+                    "w": 320,
+                    "pos": 1
+                },
+                "ext": {
+                    "bidder": {
+                        "zoneId": "/1111111/banner"
+                    }
+                }
+            }
+        ]
+    },
+    "httpCalls": [
+        {
+            "expectedRequest": {
+                "uri": "https://mobile.mng-ads.com/bidrequest/1111111/banner",
+                "headers": {
+                    "Content-Type": [
+                        "application/json;charset=utf-8"
+                    ],
+                    "Accept": [
+                        "application/json"
+                    ],
+                    "X-Openrtb-Version": [
+                        "2.5"
+                    ],
+                    "User-Agent": [
+                        "test-user-agent"
+                    ],
+                    "X-Forwarded-For": [
+                        "123.123.123.123"
+                    ]
+                },
+                "body": {
+                    "id": "test-request-id",
+                    "tmax": 500,
+                    "at": 1,
+                    "cur": [
+                        "EUR"
+                    ],
+                    "regs": {
+                        "ext": {
+                            "gdpr": 1
+                        }
+                    },
+                    "user": {
+                        "ext": {
+                            "consent": "CO-X2XiO_eyUoAsAxBFRBECsAP_AAH_AAAqIGMgB7CpERSNAYWApAOMAKYhfQAACAGAABAYIASgBQQBAMJQEkGAIMAjAAAAKAAAEACQAAAAgCAGAAAAAAAAAAQCMAAAAABAAACAAAAASAAAACAAACACSCAAQjAAAAAEAgAAAAAIF5wJwAFgAPAAqABcADIAHAAQAAqABiADQAHkARABFACeAFKALgAugBiADaAG8AOYAfwBCAClAGqANcAdQA_QCBgEIAIsARwAq4BgADZAHyAP-Aj0BUwC6gF5gCAoAYBEAC4AKpCQAwCIAFwAVSIgAgABFQAQAAg"
+                        }
+                    },
+                    "app": {
+                        "id": "9561622",
+                        "bundle": "com.madvertise.bluestack",
+                        "name": "FR_BlueStack_App_Android_MNG",
+                        "storeurl": "https://play.google.com/store/apps/details?id=com.madvertise.bluestack"
+                    },
+                    "device": {
+                        "ip": "123.123.123.123",
+                        "ua": "test-user-agent",
+                        "dnt": 0,
+                        "lmt": 0,
+                        "ifa": "b879a967-cccc-bbbb-aaaa-1aa111111111",
+                        "make": "Sony",
+                        "model": "G8441",
+                        "os": "Android",
+                        "osv": "9.0",
+                        "devicetype": 4,
+                        "connectiontype": 6,
+                        "js": 1,
+                        "carrier": "Free",
+                        "geo": {
+                            "type": 2,
+                            "country": "FRA"
+                        }
+                    },
+                    "imp": [
+                        {
+                            "id": "test-imp-id",
+                            "secure": 1,
+                            "bidfloor": 3,
+                            "bidfloorcur": "EUR",
+                            "banner": {
+                                "h": 50,
+                                "w": 320,
+                                "pos": 1
+                            },
+                            "ext": {
+                                "bidder": {
+                                    "zoneId": "/1111111/banner"
+                                }
+                            }
+                        }
+                    ]
+                }
+            },
+            "mockResponse": {
+                "status": 200,
+                "body": {
+                    "id": "test-request-id",
+                    "seatbid": [
+                        {
+                            "bid": [
+                                {
+                                    "id": "test_bid_id",
+                                    "impid": "test-imp-id",
+                                    "price": 0.27543,
+                                    "adm": "some-test-ad",
+                                    "cid": "test_cid",
+                                    "crid": "test_crid",
+                                    "dealid": "test_dealid",
+                                    "burl": "https://burl.com",
+                                    "adomain": [
+                                        "madvertise.com"
+                                    ],
+                                    "w": 320,
+                                    "h": 50
+                                }
+                            ],
+                            "seat": "adman"
+                        }
+                    ],
+                    "cur": "EUR"
+                }
+            }
+        }
+    ],
+    "expectedBidResponses": [
+        {
+            "currency": "EUR",
+            "bids": [
+                {
+                    "bid": {
+                        "id": "test_bid_id",
+                        "impid": "test-imp-id",
+                        "price": 0.27543,
+                        "adm": "some-test-ad",
+                        "cid": "test_cid",
+                        "crid": "test_crid",
+                        "dealid": "test_dealid",
+                        "burl": "https://burl.com",
+                        "adomain": [
+                            "madvertise.com"
+                        ],
+                        "w": 320,
+                        "h": 50
+                    },
+                    "type": "banner"
+                }
+            ]
+        }
+    ]
+}
\ No newline at end of file
diff --git a/adapters/madvertise/madvertisetest/exemplary/simple-video.json b/adapters/madvertise/madvertisetest/exemplary/simple-video.json
new file mode 100644
index 00000000..a387c06e
--- /dev/null
+++ b/adapters/madvertise/madvertisetest/exemplary/simple-video.json
@@ -0,0 +1,256 @@
+{
+    "mockBidRequest": {
+        "id": "test-request-id",
+        "tmax": 500,
+        "at": 2,
+        "cur": [
+            "EUR"
+        ],
+        "regs": {
+            "ext": {
+                "gdpr": 1
+            }
+        },
+        "user": {
+            "ext": {
+                "consent": "CO-X2XiO_eyUoAsAxBFRBECsAP_AAH_AAAqIGMgB7CpERSNAYWApAOMAKYhfQAACAGAABAYIASgBQQBAMJQEkGAIMAjAAAAKAAAEACQAAAAgCAGAAAAAAAAAAQCMAAAAABAAACAAAAASAAAACAAACACSCAAQjAAAAAEAgAAAAAIF5wJwAFgAPAAqABcADIAHAAQAAqABiADQAHkARABFACeAFKALgAugBiADaAG8AOYAfwBCAClAGqANcAdQA_QCBgEIAIsARwAq4BgADZAHyAP-Aj0BUwC6gF5gCAoAYBEAC4AKpCQAwCIAFwAVSIgAgABFQAQAAg"
+            }
+        },
+        "app": {
+            "id": "9561622",
+            "bundle": "com.madvertise.bluestack",
+            "name": "FR_BlueStack_App_Android_MNG",
+            "storeurl": "https://play.google.com/store/apps/details?id=com.madvertise.bluestack",
+            "cat": [
+                "IAB6",
+                "IAB9",
+                "IAB10",
+                "IAB12",
+                "IAB14",
+                "IAB20"
+            ]
+        },
+        "device": {
+            "ip": "123.123.123.123",
+            "ua": "test-user-agent",
+            "dnt": 0,
+            "lmt": 0,
+            "ifa": "b879a967-cccc-bbbb-aaaa-1aa111111111",
+            "make": "Sony",
+            "model": "G8441",
+            "os": "Android",
+            "osv": "9.0",
+            "devicetype": 4,
+            "connectiontype": 6,
+            "js": 1,
+            "carrier": "Free",
+            "geo": {
+                "type": 2,
+                "country": "FRA"
+            }
+        },
+        "imp": [
+            {
+                "id": "test-imp-id",
+                "secure": 1,
+                "bidfloor": 3,
+                "bidfloorcur": "EUR",
+                "instl": 0,
+                "video": {
+                    "mimes": [
+                        "video/mp4"
+                    ],
+                    "w": 320,
+                    "h": 480,
+                    "minduration": 2,
+                    "maxduration": 30,
+                    "playbackmethod": [
+                        1,
+                        3
+                    ],
+                    "boxingallowed": 0,
+                    "protocols": [
+                        1,
+                        2,
+                        3,
+                        4,
+                        5,
+                        6
+                    ],
+                    "placement": 5
+                },
+                "ext": {
+                    "bidder": {
+                        "zoneId": "/1111111/video"
+                    }
+                }
+            }
+        ]
+    },
+    "httpCalls": [
+        {
+            "expectedRequest": {
+                "uri": "https://mobile.mng-ads.com/bidrequest/1111111/video",
+                "headers": {
+                    "Content-Type": [
+                        "application/json;charset=utf-8"
+                    ],
+                    "Accept": [
+                        "application/json"
+                    ],
+                    "X-Openrtb-Version": [
+                        "2.5"
+                    ],
+                    "User-Agent": [
+                        "test-user-agent"
+                    ],
+                    "X-Forwarded-For": [
+                        "123.123.123.123"
+                    ]
+                },
+                "body": {
+                    "id": "test-request-id",
+                    "tmax": 500,
+                    "at": 2,
+                    "cur": [
+                        "EUR"
+                    ],
+                    "regs": {
+                        "ext": {
+                            "gdpr": 1
+                        }
+                    },
+                    "user": {
+                        "ext": {
+                            "consent": "CO-X2XiO_eyUoAsAxBFRBECsAP_AAH_AAAqIGMgB7CpERSNAYWApAOMAKYhfQAACAGAABAYIASgBQQBAMJQEkGAIMAjAAAAKAAAEACQAAAAgCAGAAAAAAAAAAQCMAAAAABAAACAAAAASAAAACAAACACSCAAQjAAAAAEAgAAAAAIF5wJwAFgAPAAqABcADIAHAAQAAqABiADQAHkARABFACeAFKALgAugBiADaAG8AOYAfwBCAClAGqANcAdQA_QCBgEIAIsARwAq4BgADZAHyAP-Aj0BUwC6gF5gCAoAYBEAC4AKpCQAwCIAFwAVSIgAgABFQAQAAg"
+                        }
+                    },
+                    "app": {
+                        "id": "9561622",
+                        "bundle": "com.madvertise.bluestack",
+                        "name": "FR_BlueStack_App_Android_MNG",
+                        "storeurl": "https://play.google.com/store/apps/details?id=com.madvertise.bluestack",
+                        "cat": [
+                            "IAB6",
+                            "IAB9",
+                            "IAB10",
+                            "IAB12",
+                            "IAB14",
+                            "IAB20"
+                        ]
+                    },
+                    "device": {
+                        "ip": "123.123.123.123",
+                        "ua": "test-user-agent",
+                        "dnt": 0,
+                        "lmt": 0,
+                        "ifa": "b879a967-cccc-bbbb-aaaa-1aa111111111",
+                        "make": "Sony",
+                        "model": "G8441",
+                        "os": "Android",
+                        "osv": "9.0",
+                        "devicetype": 4,
+                        "connectiontype": 6,
+                        "js": 1,
+                        "carrier": "Free",
+                        "geo": {
+                            "type": 2,
+                            "country": "FRA"
+                        }
+                    },
+                    "imp": [
+                        {
+                            "id": "test-imp-id",
+                            "secure": 1,
+                            "bidfloor": 3,
+                            "bidfloorcur": "EUR",
+                            "video": {
+                                "mimes": [
+                                    "video/mp4"
+                                ],
+                                "w": 320,
+                                "h": 480,
+                                "minduration": 2,
+                                "maxduration": 30,
+                                "playbackmethod": [
+                                    1,
+                                    3
+                                ],
+                                "protocols": [
+                                    1,
+                                    2,
+                                    3,
+                                    4,
+                                    5,
+                                    6
+                                ],
+                                "placement": 5
+                            },
+                            "ext": {
+                                "bidder": {
+                                    "zoneId": "/1111111/video"
+                                }
+                            }
+                        }
+                    ]
+                }
+            },
+            "mockResponse": {
+                "status": 200,
+                "body": {
+                    "id": "test-request-id",
+                    "seatbid": [
+                        {
+                            "bid": [
+                                {
+                                    "id": "test_bid_id",
+                                    "impid": "test-imp-id",
+                                    "price": 0.27543,
+                                    "adm": "some-test-ad",
+                                    "cid": "test_cid",
+                                    "crid": "test_crid",
+                                    "dealid": "test_dealid",
+                                    "burl": "https://burl.com",
+                                    "attr": [6],
+                                    "adomain": [
+                                        "madvertise.com"
+                                    ],
+                                    "w": 320,
+                                    "h": 480
+                                }
+                            ],
+                            "seat": "adman"
+                        }
+                    ],
+                    "cur": "EUR"
+                }
+            }
+        }
+    ],
+    "expectedBidResponses": [
+        {
+            "currency": "EUR",
+            "bids": [
+                {
+                    "bid": {
+                        "id": "test_bid_id",
+                        "impid": "test-imp-id",
+                        "price": 0.27543,
+                        "adm": "some-test-ad",
+                        "cid": "test_cid",
+                        "crid": "test_crid",
+                        "dealid": "test_dealid",
+                        "burl": "https://burl.com",
+                        "attr": [6],
+                        "adomain": [
+                            "madvertise.com"
+                        ],
+                        "w": 320,
+                        "h": 480
+                    },
+                    "type": "video"
+                }
+            ]
+        }
+    ]
+}
\ No newline at end of file
diff --git a/adapters/madvertise/madvertisetest/params/race/banner.json b/adapters/madvertise/madvertisetest/params/race/banner.json
new file mode 100644
index 00000000..45243896
--- /dev/null
+++ b/adapters/madvertise/madvertisetest/params/race/banner.json
@@ -0,0 +1,4 @@
+{
+  "zoneId": "/1111111/banner"
+}
+  
\ No newline at end of file
diff --git a/adapters/madvertise/madvertisetest/params/race/video.json b/adapters/madvertise/madvertisetest/params/race/video.json
new file mode 100644
index 00000000..8d462a8e
--- /dev/null
+++ b/adapters/madvertise/madvertisetest/params/race/video.json
@@ -0,0 +1,3 @@
+{
+  "zoneId": "/1111111/video"
+}
\ No newline at end of file
diff --git a/adapters/madvertise/madvertisetest/supplemental/display-site-test.json b/adapters/madvertise/madvertisetest/supplemental/display-site-test.json
new file mode 100644
index 00000000..e111a5d9
--- /dev/null
+++ b/adapters/madvertise/madvertisetest/supplemental/display-site-test.json
@@ -0,0 +1,203 @@
+{
+    "mockBidRequest": {
+        "id": "test-request-id",
+        "tmax": 500,
+        "at": 1,
+        "cur": [
+            "EUR"
+        ],
+        "regs": {
+            "ext": {
+                "gdpr": 1
+            }
+        },
+        "user": {
+            "ext": {
+                "consent": "CO-X2XiO_eyUoAsAxBFRBECsAP_AAH_AAAqIGMgB7CpERSNAYWApAOMAKYhfQAACAGAABAYIASgBQQBAMJQEkGAIMAjAAAAKAAAEACQAAAAgCAGAAAAAAAAAAQCMAAAAABAAACAAAAASAAAACAAACACSCAAQjAAAAAEAgAAAAAIF5wJwAFgAPAAqABcADIAHAAQAAqABiADQAHkARABFACeAFKALgAugBiADaAG8AOYAfwBCAClAGqANcAdQA_QCBgEIAIsARwAq4BgADZAHyAP-Aj0BUwC6gF5gCAoAYBEAC4AKpCQAwCIAFwAVSIgAgABFQAQAAg"
+            }
+        },
+        "site": {
+            "page": "test.com",
+            "publisher": {
+              "id": "123456789"
+            }
+          },
+        "device": {
+            "ip": "123.123.123.123",
+            "ua": "test-user-agent",
+            "dnt": 0,
+            "lmt": 0,
+            "ifa": "b879a967-cccc-bbbb-aaaa-1aa111111111",
+            "make": "Sony",
+            "model": "G8441",
+            "os": "Android",
+            "osv": "9.0",
+            "devicetype": 4,
+            "connectiontype": 6,
+            "js": 1,
+            "carrier": "Free",
+            "geo": {
+                "type": 2,
+                "country": "FRA"
+            }
+        },
+        "imp": [
+            {
+                "id": "test-imp-id",
+                "secure": 1,
+                "bidfloor": 3,
+                "bidfloorcur": "EUR",
+                "instl": 0,
+                "banner": {
+                    "h": 50,
+                    "w": 320,
+                    "pos": 1
+                },
+                "ext": {
+                    "bidder": {
+                        "zoneId": "/1111111/banner"
+                    }
+                }
+            }
+        ]
+    },
+    "httpCalls": [
+        {
+            "expectedRequest": {
+                "uri": "https://mobile.mng-ads.com/bidrequest/1111111/banner",
+                "headers": {
+                    "Content-Type": [
+                        "application/json;charset=utf-8"
+                    ],
+                    "Accept": [
+                        "application/json"
+                    ],
+                    "X-Openrtb-Version": [
+                        "2.5"
+                    ],
+                    "User-Agent": [
+                        "test-user-agent"
+                    ],
+                    "X-Forwarded-For": [
+                        "123.123.123.123"
+                    ]
+                },
+                "body": {
+                    "id": "test-request-id",
+                    "tmax": 500,
+                    "at": 1,
+                    "cur": [
+                        "EUR"
+                    ],
+                    "regs": {
+                        "ext": {
+                            "gdpr": 1
+                        }
+                    },
+                    "user": {
+                        "ext": {
+                            "consent": "CO-X2XiO_eyUoAsAxBFRBECsAP_AAH_AAAqIGMgB7CpERSNAYWApAOMAKYhfQAACAGAABAYIASgBQQBAMJQEkGAIMAjAAAAKAAAEACQAAAAgCAGAAAAAAAAAAQCMAAAAABAAACAAAAASAAAACAAACACSCAAQjAAAAAEAgAAAAAIF5wJwAFgAPAAqABcADIAHAAQAAqABiADQAHkARABFACeAFKALgAugBiADaAG8AOYAfwBCAClAGqANcAdQA_QCBgEIAIsARwAq4BgADZAHyAP-Aj0BUwC6gF5gCAoAYBEAC4AKpCQAwCIAFwAVSIgAgABFQAQAAg"
+                        }
+                    },
+                    "site": {
+                        "page": "test.com",
+                        "publisher": {
+                          "id": "123456789"
+                        }
+                      },
+                    "device": {
+                        "ip": "123.123.123.123",
+                        "ua": "test-user-agent",
+                        "dnt": 0,
+                        "lmt": 0,
+                        "ifa": "b879a967-cccc-bbbb-aaaa-1aa111111111",
+                        "make": "Sony",
+                        "model": "G8441",
+                        "os": "Android",
+                        "osv": "9.0",
+                        "devicetype": 4,
+                        "connectiontype": 6,
+                        "js": 1,
+                        "carrier": "Free",
+                        "geo": {
+                            "type": 2,
+                            "country": "FRA"
+                        }
+                    },
+                    "imp": [
+                        {
+                            "id": "test-imp-id",
+                            "secure": 1,
+                            "bidfloor": 3,
+                            "bidfloorcur": "EUR",
+                            "banner": {
+                                "h": 50,
+                                "w": 320,
+                                "pos": 1
+                            },
+                            "ext": {
+                                "bidder": {
+                                    "zoneId": "/1111111/banner"
+                                }
+                            }
+                        }
+                    ]
+                }
+            },
+            "mockResponse": {
+                "status": 200,
+                "body": {
+                    "id": "test-request-id",
+                    "seatbid": [
+                        {
+                            "bid": [
+                                {
+                                    "id": "test_bid_id",
+                                    "impid": "test-imp-id",
+                                    "price": 0.27543,
+                                    "adm": "some-test-ad",
+                                    "cid": "test_cid",
+                                    "crid": "test_crid",
+                                    "dealid": "test_dealid",
+                                    "burl": "https://burl.com",
+                                    "adomain": [
+                                        "madvertise.com"
+                                    ],
+                                    "w": 320,
+                                    "h": 50
+                                }
+                            ],
+                            "seat": "adman"
+                        }
+                    ],
+                    "cur": "EUR"
+                }
+            }
+        }
+    ],
+    "expectedBidResponses": [
+        {
+            "currency": "EUR",
+            "bids": [
+                {
+                    "bid": {
+                        "id": "test_bid_id",
+                        "impid": "test-imp-id",
+                        "price": 0.27543,
+                        "adm": "some-test-ad",
+                        "cid": "test_cid",
+                        "crid": "test_crid",
+                        "dealid": "test_dealid",
+                        "burl": "https://burl.com",
+                        "adomain": [
+                            "madvertise.com"
+                        ],
+                        "w": 320,
+                        "h": 50
+                    },
+                    "type": "banner"
+                }
+            ]
+        }
+    ]
+}
\ No newline at end of file
diff --git a/adapters/madvertise/madvertisetest/supplemental/length-zoneid.json b/adapters/madvertise/madvertisetest/supplemental/length-zoneid.json
new file mode 100644
index 00000000..9d78bc85
--- /dev/null
+++ b/adapters/madvertise/madvertisetest/supplemental/length-zoneid.json
@@ -0,0 +1,29 @@
+{
+    "mockBidRequest": {
+        "id": "test-request-id",
+        "imp": [
+            {
+                "id": "test-imp-id-1",
+                "banner": {
+                    "format": [
+                        {
+                            "w": 300,
+                            "h": 250
+                        }
+                    ]
+                },
+                "ext": {
+                    "bidder": {
+                        "zoneId": "/22222"
+                    }
+                }
+            }
+        ]
+    },
+    "expectedMakeRequestsErrors": [
+        {
+            "value": "The minLength of zone ID is 7; ImpID=test-imp-id-1",
+            "comparison": "literal"
+        }
+    ]
+}
\ No newline at end of file
diff --git a/adapters/madvertise/madvertisetest/supplemental/required-ext.json b/adapters/madvertise/madvertisetest/supplemental/required-ext.json
new file mode 100644
index 00000000..8989a8dc
--- /dev/null
+++ b/adapters/madvertise/madvertisetest/supplemental/required-ext.json
@@ -0,0 +1,19 @@
+{
+  "mockBidRequest": {
+    "id": "test-request-id",
+    "imp": [
+      {
+        "id": "test-imp-id-1",
+        "banner": {
+          "format": [{"w": 300, "h": 250}]
+        }
+      }
+    ]
+  },
+  "expectedMakeRequestsErrors": [
+    {
+      "value": "unexpected end of JSON input; ImpID=test-imp-id-1",
+      "comparison": "literal"
+    }
+  ]
+}
diff --git a/adapters/madvertise/madvertisetest/supplemental/required-zoneid-.json b/adapters/madvertise/madvertisetest/supplemental/required-zoneid-.json
new file mode 100644
index 00000000..bfff193d
--- /dev/null
+++ b/adapters/madvertise/madvertisetest/supplemental/required-zoneid-.json
@@ -0,0 +1,27 @@
+{
+    "mockBidRequest": {
+        "id": "test-request-id",
+        "imp": [
+            {
+                "id": "test-imp-id-1",
+                "banner": {
+                    "format": [
+                        {
+                            "w": 300,
+                            "h": 250
+                        }
+                    ]
+                },
+                "ext": {
+                    "bidder": {}
+                }
+            }
+        ]
+    },
+    "expectedMakeRequestsErrors": [
+        {
+            "value": "ext.bidder.zoneId not provided; ImpID=test-imp-id-1",
+            "comparison": "literal"
+        }
+    ]
+}
\ No newline at end of file
diff --git a/adapters/madvertise/madvertisetest/supplemental/response-204.json b/adapters/madvertise/madvertisetest/supplemental/response-204.json
new file mode 100644
index 00000000..f0162291
--- /dev/null
+++ b/adapters/madvertise/madvertisetest/supplemental/response-204.json
@@ -0,0 +1,189 @@
+{
+    "mockBidRequest": {
+        "id": "test-request-id",
+        "tmax": 500,
+        "at": 2,
+        "cur": [
+            "EUR"
+        ],
+        "regs": {
+            "ext": {
+                "gdpr": 1
+            }
+        },
+        "user": {
+            "ext": {
+                "consent": "CO-X2XiO_eyUoAsAxBFRBECsAP_AAH_AAAqIGMgB7CpERSNAYWApAOMAKYhfQAACAGAABAYIASgBQQBAMJQEkGAIMAjAAAAKAAAEACQAAAAgCAGAAAAAAAAAAQCMAAAAABAAACAAAAASAAAACAAACACSCAAQjAAAAAEAgAAAAAIF5wJwAFgAPAAqABcADIAHAAQAAqABiADQAHkARABFACeAFKALgAugBiADaAG8AOYAfwBCAClAGqANcAdQA_QCBgEIAIsARwAq4BgADZAHyAP-Aj0BUwC6gF5gCAoAYBEAC4AKpCQAwCIAFwAVSIgAgABFQAQAAg"
+            }
+        },
+        "app": {
+            "id": "9561622",
+            "bundle": "com.madvertise.bluestack",
+            "name": "FR_BlueStack_App_Android_MNG",
+            "storeurl": "https://play.google.com/store/apps/details?id=com.madvertise.bluestack",
+            "cat": [
+                "IAB6",
+                "IAB9",
+                "IAB10",
+                "IAB12",
+                "IAB14",
+                "IAB20"
+            ]
+        },
+        "device": {
+            "ip": "123.123.123.123",
+            "ua": "test-user-agent",
+            "dnt": 0,
+            "lmt": 0,
+            "ifa": "b879a967-cccc-bbbb-aaaa-1aa111111111",
+            "make": "Sony",
+            "model": "G8441",
+            "os": "Android",
+            "osv": "9.0",
+            "devicetype": 4,
+            "connectiontype": 6,
+            "js": 1,
+            "carrier": "Free",
+            "geo": {
+                "type": 2,
+                "country": "FRA"
+            }
+        },
+        "imp": [
+            {
+                "id": "test-imp-id",
+                "secure": 1,
+                "bidfloor": 3,
+                "bidfloorcur": "EUR",
+                "instl": 0,
+                "banner": {
+                    "format": [
+                        {
+                            "w": 320,
+                            "h": 50
+                        }
+                    ],
+                    "w": 320,
+                    "h": 50,
+                    "api": [
+                        3,
+                        5,
+                        6
+                    ]
+                },
+                "ext": {
+                    "bidder": {
+                        "zoneId": "/1111111/banner"
+                    }
+                }
+            }
+        ]
+    },
+    "httpCalls": [
+        {
+            "expectedRequest": {
+                "uri": "https://mobile.mng-ads.com/bidrequest/1111111/banner",
+                "headers": {
+                    "Content-Type": [
+                        "application/json;charset=utf-8"
+                    ],
+                    "Accept": [
+                        "application/json"
+                    ],
+                    "X-Openrtb-Version": [
+                        "2.5"
+                    ],
+                    "User-Agent": [
+                        "test-user-agent"
+                    ],
+                    "X-Forwarded-For": [
+                        "123.123.123.123"
+                    ]
+                },
+                "body": {
+                    "id": "test-request-id",
+                    "tmax": 500,
+                    "at": 2,
+                    "cur": [
+                        "EUR"
+                    ],
+                    "regs": {
+                        "ext": {
+                            "gdpr": 1
+                        }
+                    },
+                    "user": {
+                        "ext": {
+                            "consent": "CO-X2XiO_eyUoAsAxBFRBECsAP_AAH_AAAqIGMgB7CpERSNAYWApAOMAKYhfQAACAGAABAYIASgBQQBAMJQEkGAIMAjAAAAKAAAEACQAAAAgCAGAAAAAAAAAAQCMAAAAABAAACAAAAASAAAACAAACACSCAAQjAAAAAEAgAAAAAIF5wJwAFgAPAAqABcADIAHAAQAAqABiADQAHkARABFACeAFKALgAugBiADaAG8AOYAfwBCAClAGqANcAdQA_QCBgEIAIsARwAq4BgADZAHyAP-Aj0BUwC6gF5gCAoAYBEAC4AKpCQAwCIAFwAVSIgAgABFQAQAAg"
+                        }
+                    },
+                    "app": {
+                        "id": "9561622",
+                        "bundle": "com.madvertise.bluestack",
+                        "name": "FR_BlueStack_App_Android_MNG",
+                        "storeurl": "https://play.google.com/store/apps/details?id=com.madvertise.bluestack",
+                        "cat": [
+                            "IAB6",
+                            "IAB9",
+                            "IAB10",
+                            "IAB12",
+                            "IAB14",
+                            "IAB20"
+                        ]
+                    },
+                    "device": {
+                        "ip": "123.123.123.123",
+                        "ua": "test-user-agent",
+                        "dnt": 0,
+                        "lmt": 0,
+                        "ifa": "b879a967-cccc-bbbb-aaaa-1aa111111111",
+                        "make": "Sony",
+                        "model": "G8441",
+                        "os": "Android",
+                        "osv": "9.0",
+                        "devicetype": 4,
+                        "connectiontype": 6,
+                        "js": 1,
+                        "carrier": "Free",
+                        "geo": {
+                            "type": 2,
+                            "country": "FRA"
+                        }
+                    },
+                    "imp": [
+                        {
+                            "id": "test-imp-id",
+                            "secure": 1,
+                            "bidfloor": 3,
+                            "bidfloorcur": "EUR",
+                            "banner": {
+                                "format": [
+                                    {
+                                        "w": 320,
+                                        "h": 50
+                                    }
+                                ],
+                                "w": 320,
+                                "h": 50,
+                                "api": [
+                                    3,
+                                    5,
+                                    6
+                                ]
+                            },
+                            "ext": {
+                                "bidder": {
+                                    "zoneId": "/1111111/banner"
+                                }
+                            }
+                        }
+                    ]
+                }
+            },
+            "mockResponse": {
+                "status": 204
+            }
+        }
+    ],
+    "expectedBidResponses": []
+}
\ No newline at end of file
diff --git a/adapters/madvertise/madvertisetest/supplemental/response-400.json b/adapters/madvertise/madvertisetest/supplemental/response-400.json
new file mode 100644
index 00000000..a5af414d
--- /dev/null
+++ b/adapters/madvertise/madvertisetest/supplemental/response-400.json
@@ -0,0 +1,194 @@
+{
+    "mockBidRequest": {
+        "id": "test-request-id",
+        "tmax": 500,
+        "at": 2,
+        "cur": [
+            "EUR"
+        ],
+        "regs": {
+            "ext": {
+                "gdpr": 1
+            }
+        },
+        "user": {
+            "ext": {
+                "consent": "CO-X2XiO_eyUoAsAxBFRBECsAP_AAH_AAAqIGMgB7CpERSNAYWApAOMAKYhfQAACAGAABAYIASgBQQBAMJQEkGAIMAjAAAAKAAAEACQAAAAgCAGAAAAAAAAAAQCMAAAAABAAACAAAAASAAAACAAACACSCAAQjAAAAAEAgAAAAAIF5wJwAFgAPAAqABcADIAHAAQAAqABiADQAHkARABFACeAFKALgAugBiADaAG8AOYAfwBCAClAGqANcAdQA_QCBgEIAIsARwAq4BgADZAHyAP-Aj0BUwC6gF5gCAoAYBEAC4AKpCQAwCIAFwAVSIgAgABFQAQAAg"
+            }
+        },
+        "app": {
+            "id": "9561622",
+            "bundle": "com.madvertise.bluestack",
+            "name": "FR_BlueStack_App_Android_MNG",
+            "storeurl": "https://play.google.com/store/apps/details?id=com.madvertise.bluestack",
+            "cat": [
+                "IAB6",
+                "IAB9",
+                "IAB10",
+                "IAB12",
+                "IAB14",
+                "IAB20"
+            ]
+        },
+        "device": {
+            "ip": "123.123.123.123",
+            "ua": "test-user-agent",
+            "dnt": 0,
+            "lmt": 0,
+            "ifa": "b879a967-cccc-bbbb-aaaa-1aa111111111",
+            "make": "Sony",
+            "model": "G8441",
+            "os": "Android",
+            "osv": "9.0",
+            "devicetype": 4,
+            "connectiontype": 6,
+            "js": 1,
+            "carrier": "Free",
+            "geo": {
+                "type": 2,
+                "country": "FRA"
+            }
+        },
+        "imp": [
+            {
+                "id": "test-imp-id",
+                "secure": 1,
+                "bidfloor": 3,
+                "bidfloorcur": "EUR",
+                "instl": 0,
+                "banner": {
+                    "format": [
+                        {
+                            "w": 320,
+                            "h": 50
+                        }
+                    ],
+                    "w": 320,
+                    "h": 50,
+                    "api": [
+                        3,
+                        5,
+                        6
+                    ]
+                },
+                "ext": {
+                    "bidder": {
+                        "zoneId": "/1111111/banner"
+                    }
+                }
+            }
+        ]
+    },
+    "httpCalls": [
+        {
+            "expectedRequest": {
+                "uri": "https://mobile.mng-ads.com/bidrequest/1111111/banner",
+                "headers": {
+                    "Content-Type": [
+                        "application/json;charset=utf-8"
+                    ],
+                    "Accept": [
+                        "application/json"
+                    ],
+                    "X-Openrtb-Version": [
+                        "2.5"
+                    ],
+                    "User-Agent": [
+                        "test-user-agent"
+                    ],
+                    "X-Forwarded-For": [
+                        "123.123.123.123"
+                    ]
+                },
+                "body": {
+                    "id": "test-request-id",
+                    "tmax": 500,
+                    "at": 2,
+                    "cur": [
+                        "EUR"
+                    ],
+                    "regs": {
+                        "ext": {
+                            "gdpr": 1
+                        }
+                    },
+                    "user": {
+                        "ext": {
+                            "consent": "CO-X2XiO_eyUoAsAxBFRBECsAP_AAH_AAAqIGMgB7CpERSNAYWApAOMAKYhfQAACAGAABAYIASgBQQBAMJQEkGAIMAjAAAAKAAAEACQAAAAgCAGAAAAAAAAAAQCMAAAAABAAACAAAAASAAAACAAACACSCAAQjAAAAAEAgAAAAAIF5wJwAFgAPAAqABcADIAHAAQAAqABiADQAHkARABFACeAFKALgAugBiADaAG8AOYAfwBCAClAGqANcAdQA_QCBgEIAIsARwAq4BgADZAHyAP-Aj0BUwC6gF5gCAoAYBEAC4AKpCQAwCIAFwAVSIgAgABFQAQAAg"
+                        }
+                    },
+                    "app": {
+                        "id": "9561622",
+                        "bundle": "com.madvertise.bluestack",
+                        "name": "FR_BlueStack_App_Android_MNG",
+                        "storeurl": "https://play.google.com/store/apps/details?id=com.madvertise.bluestack",
+                        "cat": [
+                            "IAB6",
+                            "IAB9",
+                            "IAB10",
+                            "IAB12",
+                            "IAB14",
+                            "IAB20"
+                        ]
+                    },
+                    "device": {
+                        "ip": "123.123.123.123",
+                        "ua": "test-user-agent",
+                        "dnt": 0,
+                        "lmt": 0,
+                        "ifa": "b879a967-cccc-bbbb-aaaa-1aa111111111",
+                        "make": "Sony",
+                        "model": "G8441",
+                        "os": "Android",
+                        "osv": "9.0",
+                        "devicetype": 4,
+                        "connectiontype": 6,
+                        "js": 1,
+                        "carrier": "Free",
+                        "geo": {
+                            "type": 2,
+                            "country": "FRA"
+                        }
+                    },
+                    "imp": [
+                        {
+                            "id": "test-imp-id",
+                            "secure": 1,
+                            "bidfloor": 3,
+                            "bidfloorcur": "EUR",
+                            "banner": {
+                                "format": [
+                                    {
+                                        "w": 320,
+                                        "h": 50
+                                    }
+                                ],
+                                "w": 320,
+                                "h": 50,
+                                "api": [
+                                    3,
+                                    5,
+                                    6
+                                ]
+                            },
+                            "ext": {
+                                "bidder": {
+                                    "zoneId": "/1111111/banner"
+                                }
+                            }
+                        }
+                    ]
+                }
+            },
+            "mockResponse": {
+                "status": 400
+            }
+        }
+    ],
+    "expectedMakeBidsErrors": [
+        {
+            "value": "Unexpected status code: 400. Run with request.debug = 1 for more info",
+            "comparison": "literal"
+        }
+    ]
+}
\ No newline at end of file
diff --git a/adapters/madvertise/madvertisetest/supplemental/response-500.json b/adapters/madvertise/madvertisetest/supplemental/response-500.json
new file mode 100644
index 00000000..8a4b0da4
--- /dev/null
+++ b/adapters/madvertise/madvertisetest/supplemental/response-500.json
@@ -0,0 +1,194 @@
+{
+    "mockBidRequest": {
+        "id": "test-request-id",
+        "tmax": 500,
+        "at": 2,
+        "cur": [
+            "EUR"
+        ],
+        "regs": {
+            "ext": {
+                "gdpr": 1
+            }
+        },
+        "user": {
+            "ext": {
+                "consent": "CO-X2XiO_eyUoAsAxBFRBECsAP_AAH_AAAqIGMgB7CpERSNAYWApAOMAKYhfQAACAGAABAYIASgBQQBAMJQEkGAIMAjAAAAKAAAEACQAAAAgCAGAAAAAAAAAAQCMAAAAABAAACAAAAASAAAACAAACACSCAAQjAAAAAEAgAAAAAIF5wJwAFgAPAAqABcADIAHAAQAAqABiADQAHkARABFACeAFKALgAugBiADaAG8AOYAfwBCAClAGqANcAdQA_QCBgEIAIsARwAq4BgADZAHyAP-Aj0BUwC6gF5gCAoAYBEAC4AKpCQAwCIAFwAVSIgAgABFQAQAAg"
+            }
+        },
+        "app": {
+            "id": "9561622",
+            "bundle": "com.madvertise.bluestack",
+            "name": "FR_BlueStack_App_Android_MNG",
+            "storeurl": "https://play.google.com/store/apps/details?id=com.madvertise.bluestack",
+            "cat": [
+                "IAB6",
+                "IAB9",
+                "IAB10",
+                "IAB12",
+                "IAB14",
+                "IAB20"
+            ]
+        },
+        "device": {
+            "ip": "123.123.123.123",
+            "ua": "test-user-agent",
+            "dnt": 0,
+            "lmt": 0,
+            "ifa": "b879a967-cccc-bbbb-aaaa-1aa111111111",
+            "make": "Sony",
+            "model": "G8441",
+            "os": "Android",
+            "osv": "9.0",
+            "devicetype": 4,
+            "connectiontype": 6,
+            "js": 1,
+            "carrier": "Free",
+            "geo": {
+                "type": 2,
+                "country": "FRA"
+            }
+        },
+        "imp": [
+            {
+                "id": "test-imp-id",
+                "secure": 1,
+                "bidfloor": 3,
+                "bidfloorcur": "EUR",
+                "instl": 0,
+                "banner": {
+                    "format": [
+                        {
+                            "w": 320,
+                            "h": 50
+                        }
+                    ],
+                    "w": 320,
+                    "h": 50,
+                    "api": [
+                        3,
+                        5,
+                        6
+                    ]
+                },
+                "ext": {
+                    "bidder": {
+                        "zoneId": "/1111111/banner"
+                    }
+                }
+            }
+        ]
+    },
+    "httpCalls": [
+        {
+            "expectedRequest": {
+                "uri": "https://mobile.mng-ads.com/bidrequest/1111111/banner",
+                "headers": {
+                    "Content-Type": [
+                        "application/json;charset=utf-8"
+                    ],
+                    "Accept": [
+                        "application/json"
+                    ],
+                    "X-Openrtb-Version": [
+                        "2.5"
+                    ],
+                    "User-Agent": [
+                        "test-user-agent"
+                    ],
+                    "X-Forwarded-For": [
+                        "123.123.123.123"
+                    ]
+                },
+                "body": {
+                    "id": "test-request-id",
+                    "tmax": 500,
+                    "at": 2,
+                    "cur": [
+                        "EUR"
+                    ],
+                    "regs": {
+                        "ext": {
+                            "gdpr": 1
+                        }
+                    },
+                    "user": {
+                        "ext": {
+                            "consent": "CO-X2XiO_eyUoAsAxBFRBECsAP_AAH_AAAqIGMgB7CpERSNAYWApAOMAKYhfQAACAGAABAYIASgBQQBAMJQEkGAIMAjAAAAKAAAEACQAAAAgCAGAAAAAAAAAAQCMAAAAABAAACAAAAASAAAACAAACACSCAAQjAAAAAEAgAAAAAIF5wJwAFgAPAAqABcADIAHAAQAAqABiADQAHkARABFACeAFKALgAugBiADaAG8AOYAfwBCAClAGqANcAdQA_QCBgEIAIsARwAq4BgADZAHyAP-Aj0BUwC6gF5gCAoAYBEAC4AKpCQAwCIAFwAVSIgAgABFQAQAAg"
+                        }
+                    },
+                    "app": {
+                        "id": "9561622",
+                        "bundle": "com.madvertise.bluestack",
+                        "name": "FR_BlueStack_App_Android_MNG",
+                        "storeurl": "https://play.google.com/store/apps/details?id=com.madvertise.bluestack",
+                        "cat": [
+                            "IAB6",
+                            "IAB9",
+                            "IAB10",
+                            "IAB12",
+                            "IAB14",
+                            "IAB20"
+                        ]
+                    },
+                    "device": {
+                        "ip": "123.123.123.123",
+                        "ua": "test-user-agent",
+                        "dnt": 0,
+                        "lmt": 0,
+                        "ifa": "b879a967-cccc-bbbb-aaaa-1aa111111111",
+                        "make": "Sony",
+                        "model": "G8441",
+                        "os": "Android",
+                        "osv": "9.0",
+                        "devicetype": 4,
+                        "connectiontype": 6,
+                        "js": 1,
+                        "carrier": "Free",
+                        "geo": {
+                            "type": 2,
+                            "country": "FRA"
+                        }
+                    },
+                    "imp": [
+                        {
+                            "id": "test-imp-id",
+                            "secure": 1,
+                            "bidfloor": 3,
+                            "bidfloorcur": "EUR",
+                            "banner": {
+                                "format": [
+                                    {
+                                        "w": 320,
+                                        "h": 50
+                                    }
+                                ],
+                                "w": 320,
+                                "h": 50,
+                                "api": [
+                                    3,
+                                    5,
+                                    6
+                                ]
+                            },
+                            "ext": {
+                                "bidder": {
+                                    "zoneId": "/1111111/banner"
+                                }
+                            }
+                        }
+                    ]
+                }
+            },
+            "mockResponse": {
+                "status": 500
+            }
+        }
+    ],
+    "expectedMakeBidsErrors": [
+        {
+            "value": "Unexpected status code: 500. Run with request.debug = 1 for more info",
+            "comparison": "literal"
+        }
+    ]
+}
\ No newline at end of file
diff --git a/adapters/madvertise/madvertisetest/supplemental/unique-zone-id.json b/adapters/madvertise/madvertisetest/supplemental/unique-zone-id.json
new file mode 100644
index 00000000..68a56652
--- /dev/null
+++ b/adapters/madvertise/madvertisetest/supplemental/unique-zone-id.json
@@ -0,0 +1,45 @@
+{
+    "mockBidRequest": {
+        "id": "test-no-placement-id",
+        "imp": [
+            {
+                "id": "test-imp-id-unique-id-1",
+                "banner": {
+                    "format": [
+                        {
+                            "w": 728,
+                            "h": 90
+                        }
+                    ]
+                },
+                "ext": {
+                    "bidder": {
+                        "zoneId": "/1111111/banner"
+                    }
+                }
+            },
+            {
+                "id": "test-imp-id-unique-id-2",
+                "banner": {
+                    "format": [
+                        {
+                            "w": 728,
+                            "h": 90
+                        }
+                    ]
+                },
+                "ext": {
+                    "bidder": {
+                        "zoneId": "/2222222/banner"
+                    }
+                }
+            }
+        ]
+    },
+    "expectedMakeRequestsErrors": [
+        {
+            "value": "There must be only one zone ID",
+            "comparison": "literal"
+        }
+    ]
+}
\ No newline at end of file
diff --git a/adapters/madvertise/params_test.go b/adapters/madvertise/params_test.go
new file mode 100644
index 00000000..7c138bf4
--- /dev/null
+++ b/adapters/madvertise/params_test.go
@@ -0,0 +1,55 @@
+package madvertise
+
+import (
+	"encoding/json"
+	"testing"
+
+	"github.com/prebid/prebid-server/openrtb_ext"
+)
+
+// This file actually intends to test static/bidder-params/Madvertise.json
+//
+// These also validate the format of the external API: request.imp[i].ext.Madvertise
+
+// TestValidParams makes sure that the Madvertise schema accepts all imp.ext fields which we intend to support.
+func TestValidParams(t *testing.T) {
+	validator, err := openrtb_ext.NewBidderParamsValidator("../../static/bidder-params")
+	if err != nil {
+		t.Fatalf("Failed to fetch the json-schemas. %v", err)
+	}
+
+	for _, validParam := range validParams {
+		if err := validator.Validate(openrtb_ext.BidderMadvertise, json.RawMessage(validParam)); err != nil {
+			t.Errorf("Schema rejected Madvertise params: %s \n Error: %s", validParam, err)
+		}
+	}
+}
+
+// TestInvalidParams makes sure that the Madvertise schema rejects all the imp.ext fields we don't support.
+func TestInvalidParams(t *testing.T) {
+	validator, err := openrtb_ext.NewBidderParamsValidator("../../static/bidder-params")
+	if err != nil {
+		t.Fatalf("Failed to fetch the json-schemas. %v", err)
+	}
+
+	for _, invalidParam := range invalidParams {
+		if err := validator.Validate(openrtb_ext.BidderMadvertise, json.RawMessage(invalidParam)); err == nil {
+			t.Errorf("Schema allowed unexpected params: %s", invalidParam)
+		}
+	}
+}
+
+var validParams = []string{
+	`{"zoneId":"/1111111/banner"}`,
+}
+
+var invalidParams = []string{
+	``,
+	`null`,
+	`true`,
+	`[]`,
+	`{}`,
+	`{"zoneId":""}`,
+	`{"zoneId":/1111111}`,
+	`{"zoneId":/1111"}`,
+}
diff --git a/usersync/usersyncers/syncer_test.go b/usersync/usersyncers/syncer_test.go
index 79bf84e3..3a6a7a15 100755
--- a/usersync/usersyncers/syncer_test.go
+++ b/usersync/usersyncers/syncer_test.go
@@ -117,6 +117,7 @@ func TestNewSyncerMap(t *testing.T) {
 		openrtb_ext.BidderInteractiveoffers: true,
 		openrtb_ext.BidderKidoz:             true,
 		openrtb_ext.BidderKubient:           true,
+		openrtb_ext.BidderMadvertise:        true,
 		openrtb_ext.BidderMobfoxpb:          true,
 		openrtb_ext.BidderMobileFuse:        true,
 		openrtb_ext.BidderOrbidder:          true,