Repository: prebid/prebid-server
Pull request #2868 (2023-06-27 03:28:53)

Exchange unit test fix
Unit test set up function `getTestBuildRequest` had invalid imp.ext: `{"ext_field":"value}"}` and no bid requests were returned from `cleanOpenRTBRequests` func in `TestCleanOpenRTBRequestsWithFPD`. 
`imp.ext` should have a valid bidder in order to return requests. 


Patch:
diff --git a/README.md b/README.md
index 4ec6792c..95e0262b 100644
--- a/README.md
+++ b/README.md
@@ -5,17 +5,17 @@
 # Prebid Server
 
 Prebid Server is an open source implementation of Server-Side Header Bidding.
-It is managed by [Prebid.org](http://prebid.org/overview/what-is-prebid-org.html),
-and upholds the principles from the [Prebid Code of Conduct](http://prebid.org/wrapper_code_of_conduct.html).
+It is managed by [Prebid.org](https://prebid.org/about/),
+and upholds the principles from the [Prebid Code of Conduct](https://prebid.org/code-of-conduct/).
 
 This project does not support the same set of Bidders as Prebid.js, although there is overlap.
 The current set can be found in the [adapters](./adapters) package. If you don't see the one you want, feel free to [contribute it](https://docs.prebid.org/prebid-server/developers/add-new-bidder-go.html).
 
 For more information, see:
 
-- [What is Prebid?](https://prebid.org/overview/intro.html)
+- [What is Prebid?](https://docs.prebid.org/overview/intro.html)
 - [Prebid Server Overview](https://docs.prebid.org/prebid-server/overview/prebid-server-overview.html)
-- [Current Bidders](http://prebid.org/dev-docs/pbs-bidders.html)
+- [Current Bidders](https://docs.prebid.org/dev-docs/pbs-bidders.html)
 
 Please consider [registering your Prebid Server](https://docs.prebid.org/prebid-server/hosting/pbs-hosting.html#optional-registration) to get on the mailing list for updates, etc.
 
diff --git a/adapters/aidem/aidem.go b/adapters/aidem/aidem.go
new file mode 100644
index 00000000..9748f32c
--- /dev/null
+++ b/adapters/aidem/aidem.go
@@ -0,0 +1,102 @@
+package aidem
+
+import (
+	"encoding/json"
+	"fmt"
+	"net/http"
+
+	"github.com/prebid/openrtb/v19/openrtb2"
+	"github.com/prebid/prebid-server/adapters"
+	"github.com/prebid/prebid-server/config"
+	"github.com/prebid/prebid-server/errortypes"
+	"github.com/prebid/prebid-server/openrtb_ext"
+)
+
+type adapter struct {
+	endpoint string
+}
+
+func (a *adapter) MakeRequests(request *openrtb2.BidRequest, reqInfo *adapters.ExtraRequestInfo) ([]*adapters.RequestData, []error) {
+
+	reqJson, err := json.Marshal(request)
+	if err != nil {
+		return nil, []error{err}
+	}
+
+	headers := http.Header{}
+	headers.Add("Content-Type", "application/json;charset=utf-8")
+
+	return []*adapters.RequestData{{
+		Method:  "POST",
+		Uri:     a.endpoint,
+		Body:    reqJson,
+		Headers: headers,
+	}}, nil
+}
+
+func (a *adapter) MakeBids(internalRequest *openrtb2.BidRequest, externalRequest *adapters.RequestData, response *adapters.ResponseData) (*adapters.BidderResponse, []error) {
+	var errs []error
+
+	if adapters.IsResponseStatusCodeNoContent(response) {
+		return nil, nil
+	}
+
+	if err := adapters.CheckResponseStatusCodeForErrors(response); err != nil {
+		return nil, []error{&errortypes.BadInput{
+			Message: fmt.Sprintf("Unexpected status code: %d. Run with request.debug = 1 for more info", response.StatusCode),
+		}}
+	}
+
+	var bidResp openrtb2.BidResponse
+	if err := json.Unmarshal(response.Body, &bidResp); err != nil {
+		return nil, []error{&errortypes.BadServerResponse{
+			Message: fmt.Sprintf("JSON parsing error: %v", err),
+		}}
+	}
+
+	if len(bidResp.SeatBid) == 0 {
+		return nil, []error{&errortypes.BadServerResponse{
+			Message: "Empty SeatBid array",
+		}}
+	}
+
+	bidResponse := adapters.NewBidderResponseWithBidsCapacity(len(bidResp.SeatBid[0].Bid))
+
+	for _, seatBid := range bidResp.SeatBid {
+		for i := range seatBid.Bid {
+			bidType, err := getMediaTypeForBid(seatBid.Bid[i])
+			if err != nil {
+				errs = append(errs, err)
+			} else {
+				b := &adapters.TypedBid{
+					Bid:     &seatBid.Bid[i],
+					BidType: bidType,
+				}
+				bidResponse.Bids = append(bidResponse.Bids, b)
+			}
+		}
+	}
+	return bidResponse, errs
+}
+
+// Builder builds a new instance of the AIDEM adapter for the given bidder with the given config.
+func Builder(bidderName openrtb_ext.BidderName, config config.Adapter, server config.Server) (adapters.Bidder, error) {
+	return &adapter{
+		endpoint: config.Endpoint,
+	}, nil
+}
+
+func getMediaTypeForBid(bid openrtb2.Bid) (openrtb_ext.BidType, error) {
+	switch bid.MType {
+	case openrtb2.MarkupBanner:
+		return openrtb_ext.BidTypeBanner, nil
+	case openrtb2.MarkupVideo:
+		return openrtb_ext.BidTypeVideo, nil
+	case openrtb2.MarkupAudio:
+		return openrtb_ext.BidTypeAudio, nil
+	case openrtb2.MarkupNative:
+		return openrtb_ext.BidTypeNative, nil
+	default:
+		return "", fmt.Errorf("Unable to fetch mediaType in multi-format: %s", bid.ImpID)
+	}
+}
diff --git a/adapters/consumable/consumable.go b/adapters/consumable/consumable.go
index 9969ea37..0e164977 100644
--- a/adapters/consumable/consumable.go
+++ b/adapters/consumable/consumable.go
@@ -40,6 +40,8 @@ type bidRequest struct {
 	Coppa              bool                 `json:"coppa,omitempty"`
 	SChain             openrtb2.SupplyChain `json:"schain"`
 	Content            *openrtb2.Content    `json:"content,omitempty"`
+	GPP                string               `json:"gpp,omitempty"`
+	GPPSID             []int8               `json:"gpp_sid,omitempty"`
 }
 
 type placement struct {
@@ -192,6 +194,14 @@ func (a *ConsumableAdapter) MakeRequests(request *openrtb2.BidRequest, reqInfo *
 
 	body.Coppa = request.Regs != nil && request.Regs.COPPA > 0
 
+	if request.Regs != nil && request.Regs.GPP != "" {
+		body.GPP = request.Regs.GPP
+	}
+
+	if request.Regs != nil && request.Regs.GPPSID != nil {
+		body.GPPSID = request.Regs.GPPSID
+	}
+
 	if request.Site != nil && request.Site.Content != nil {
 		body.Content = request.Site.Content
 	} else if request.App != nil && request.App.Content != nil {
diff --git a/adapters/consumable/consumable/supplemental/simple-banner-gpp.json b/adapters/consumable/consumable/supplemental/simple-banner-gpp.json
new file mode 100644
index 00000000..9b2e3d75
--- /dev/null
+++ b/adapters/consumable/consumable/supplemental/simple-banner-gpp.json
@@ -0,0 +1,130 @@
+{
+  "mockBidRequest": {
+    "id": "test-request-id",
+    "imp": [
+      {
+        "id": "test-imp-id",
+        "banner": {
+          "format": [{"w": 728, "h": 250}]
+        },
+        "ext": {
+          "bidder": {
+            "networkId": 11,
+            "siteId": 32,
+            "unitId": 42
+          }
+        }
+      }
+    ],
+    "device": {
+      "ua": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36",
+      "ip": "123.123.123.123"
+    },
+    "site": {
+      "domain": "www.some.com",
+      "page": "http://www.some.com/page-where-ad-will-be-shown"
+    },
+    "regs": {
+      "gpp": "gppString",
+      "gpp_sid": [7]
+    }
+  },
+  "httpCalls": [
+    {
+      "expectedRequest": {
+        "uri": "https://e.serverbid.com/api/v2",
+        "headers": {
+          "Accept": [
+            "application/json"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "User-Agent": [
+            "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36"
+          ],
+          "X-Forwarded-For": [
+            "123.123.123.123"
+          ],
+          "Forwarded": [
+            "for=123.123.123.123"
+          ],
+          "Origin": [
+            "http://www.some.com"
+          ],
+          "Referer": [
+            "http://www.some.com/page-where-ad-will-be-shown"
+          ]
+        },
+        "body": {
+          "placements": [
+            {
+              "adTypes": [2730],
+              "divName": "test-imp-id",
+              "networkId": 11,
+              "siteId": 32,
+              "unitId": 42
+            }
+          ],
+          "schain": {
+            "complete": 0,
+            "nodes": null,
+            "ver": ""
+          },
+          "networkId": 11,
+          "siteId": 32,
+          "unitId": 42,
+          "time": 1451651415,
+          "url": "http://www.some.com/page-where-ad-will-be-shown",
+          "includePricingData": true,
+          "user":{},
+          "enableBotFiltering": true,
+          "parallel": true,
+          "gpp": "gppString",
+          "gpp_sid": [7]
+        }
+      },
+      "mockResponse": {
+        "status": 200,
+        "body": {
+          "decisions": {
+            "test-imp-id": {
+              "adId": 1234567890,
+              "pricing": {
+                "clearPrice": 0.5
+              },
+              "width": 728,
+              "height": 250,
+              "impressionUrl": "http://localhost:8080/shown",
+              "contents" : [
+                {
+                  "body": "<blink>Remember this: https://www.google.com/search?q=blink+tag ?</blink>"
+                }
+              ]
+            }
+          }
+        }
+      }
+    }
+  ],
+  "expectedBidResponses": [
+    {
+      "currency": "USD",
+      "bids": [
+        {
+          "bid": {
+            "id": "test-request-id",
+            "impid": "test-imp-id",
+            "price": 0.5,
+            "adm": "<blink>Remember this: https://www.google.com/search?q=blink+tag ?</blink>",
+            "crid": "1234567890",
+            "exp": 30,
+            "w": 728,
+            "h": 250
+          },
+          "type": "banner"
+        }
+      ]
+    }
+  ]
+}
diff --git a/adapters/huaweiads/huaweiads.go b/adapters/huaweiads/huaweiads.go
index 0591c861..2008eecd 100644
--- a/adapters/huaweiads/huaweiads.go
+++ b/adapters/huaweiads/huaweiads.go
@@ -1178,6 +1178,7 @@ func (a *adapter) extractAdmNative(adType int32, content *content, bidType openr
 	}
 
 	// dsp imp click tracking + imp click tracking
+	var eventTrackers []nativeResponse.EventTracker
 	if content.Monitor != nil {
 		for _, monitor := range content.Monitor {
 			if len(monitor.Url) == 0 {
@@ -1187,10 +1188,17 @@ func (a *adapter) extractAdmNative(adType int32, content *content, bidType openr
 				linkObject.ClickTrackers = append(linkObject.ClickTrackers, monitor.Url...)
 			}
 			if monitor.EventType == "imp" {
-				nativeResult.ImpTrackers = append(nativeResult.ImpTrackers, monitor.Url...)
+				for i := range monitor.Url {
+					var eventTracker nativeResponse.EventTracker
+					eventTracker.Event = native1.EventTypeImpression
+					eventTracker.Method = native1.EventTrackingMethodImage
+					eventTracker.URL = monitor.Url[i]
+					eventTrackers = append(eventTrackers, eventTracker)
+				}
 			}
 		}
 	}
+	nativeResult.EventTrackers = eventTrackers
 	nativeResult.Link = linkObject
 	nativeResult.Ver = "1.1"
 	if nativePayload.Ver != "" {
diff --git a/adapters/improvedigital/improvedigital.go b/adapters/improvedigital/improvedigital.go
index 4c64451f..b934ac75 100644
--- a/adapters/improvedigital/improvedigital.go
+++ b/adapters/improvedigital/improvedigital.go
@@ -140,6 +140,7 @@ func (a *ImprovedigitalAdapter) MakeBids(internalRequest *openrtb2.BidRequest, e
 	}
 
 	bidResponse := adapters.NewBidderResponseWithBidsCapacity(len(seatBid.Bid))
+	bidResponse.Currency = bidResp.Cur
 
 	for i := range seatBid.Bid {
 		bid := seatBid.Bid[i]
diff --git a/adapters/ix/ix.go b/adapters/ix/ix.go
index b17d913f..919f58da 100644
--- a/adapters/ix/ix.go
+++ b/adapters/ix/ix.go
@@ -7,6 +7,7 @@ import (
 	"sort"
 	"strings"
 
+	"github.com/golang/glog"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
@@ -19,8 +20,7 @@ import (
 )
 
 type IxAdapter struct {
-	URI         string
-	maxRequests int
+	URI string
 }
 
 type ExtRequest struct {
@@ -30,108 +30,128 @@ type ExtRequest struct {
 }
 
 type IxDiag struct {
-	PbsV  string `json:"pbsv,omitempty"`
-	PbjsV string `json:"pbjsv,omitempty"`
+	PbsV            string `json:"pbsv,omitempty"`
+	PbjsV           string `json:"pbjsv,omitempty"`
+	MultipleSiteIds string `json:"multipleSiteIds,omitempty"`
 }
 
 func (a *IxAdapter) MakeRequests(request *openrtb2.BidRequest, reqInfo *adapters.ExtraRequestInfo) ([]*adapters.RequestData, []error) {
-	nImp := len(request.Imp)
-	if nImp > a.maxRequests {
-		request.Imp = request.Imp[:a.maxRequests]
-		nImp = a.maxRequests
-	}
-
+	requests := make([]*adapters.RequestData, 0, len(request.Imp))
 	errs := make([]error, 0)
 
-	if err := BuildIxDiag(request); err != nil {
-		errs = append(errs, err)
-	}
-
-	// Multi-size banner imps are split into single-size requests.
-	// The first size imp requests are added to the first slice.
-	// Additional size requests are added to the second slice and are merged with the first at the end.
-	// Preallocate the max possible size to avoid reallocating arrays.
-	requests := make([]*adapters.RequestData, 0, a.maxRequests)
-	multiSizeRequests := make([]*adapters.RequestData, 0, a.maxRequests-nImp)
-
 	headers := http.Header{
 		"Content-Type": {"application/json;charset=utf-8"},
 		"Accept":       {"application/json"}}
 
-	imps := request.Imp
-	for iImp := range imps {
-		request.Imp = imps[iImp : iImp+1]
-		if request.Site != nil {
-			if err := setSitePublisherId(request, iImp); err != nil {
-				errs = append(errs, err)
-				continue
-			}
+	uniqueSiteIDs := make(map[string]struct{})
+	filteredImps := make([]openrtb2.Imp, 0, len(request.Imp))
+	requestCopy := *request
+
+	ixDiag := &IxDiag{}
+
+	for _, imp := range requestCopy.Imp {
+		var err error
+		ixExt, err := unmarshalToIxExt(&imp)
+
+		if err != nil {
+			errs = append(errs, err)
+			continue
 		}
 
-		if request.Imp[0].Banner != nil {
-			banner := *request.Imp[0].Banner
-			request.Imp[0].Banner = &banner
-			formats := getBannerFormats(&banner)
-			for iFmt := range formats {
-				banner.Format = formats[iFmt : iFmt+1]
-				banner.W = openrtb2.Int64Ptr(banner.Format[0].W)
-				banner.H = openrtb2.Int64Ptr(banner.Format[0].H)
-				if requestData, err := createRequestData(a, request, &headers); err == nil {
-					if iFmt == 0 {
-						requests = append(requests, requestData)
-					} else {
-						multiSizeRequests = append(multiSizeRequests, requestData)
-					}
-				} else {
-					errs = append(errs, err)
-				}
-				if len(multiSizeRequests) == cap(multiSizeRequests) {
-					break
-				}
+		if err = parseSiteId(ixExt, uniqueSiteIDs); err != nil {
+			errs = append(errs, err)
+			continue
+		}
+
+		if err := moveSid(&imp, ixExt); err != nil {
+			errs = append(errs, err)
+		}
+
+		if imp.Banner != nil {
+			bannerCopy := *imp.Banner
+
+			if len(bannerCopy.Format) == 0 && bannerCopy.W != nil && bannerCopy.H != nil {
+				bannerCopy.Format = []openrtb2.Format{{W: *bannerCopy.W, H: *bannerCopy.H}}
 			}
-		} else if requestData, err := createRequestData(a, request, &headers); err == nil {
+
+			if len(bannerCopy.Format) == 1 {
+				bannerCopy.W = openrtb2.Int64Ptr(bannerCopy.Format[0].W)
+				bannerCopy.H = openrtb2.Int64Ptr(bannerCopy.Format[0].H)
+			}
+			imp.Banner = &bannerCopy
+		}
+		filteredImps = append(filteredImps, imp)
+	}
+	requestCopy.Imp = filteredImps
+
+	setSitePublisherId(&requestCopy, uniqueSiteIDs, ixDiag)
+
+	err := setIxDiagIntoExtRequest(&requestCopy, ixDiag)
+	if err != nil {
+		errs = append(errs, err)
+	}
+
+	if len(requestCopy.Imp) != 0 {
+		if requestData, err := createRequestData(a, &requestCopy, &headers); err == nil {
 			requests = append(requests, requestData)
 		} else {
 			errs = append(errs, err)
 		}
 	}
-	request.Imp = imps
 
-	return append(requests, multiSizeRequests...), errs
+	return requests, errs
 }
 
-func setSitePublisherId(request *openrtb2.BidRequest, iImp int) error {
-	if iImp == 0 {
-		// first impression - create a site and pub copy
-		site := *request.Site
+func setSitePublisherId(requestCopy *openrtb2.BidRequest, uniqueSiteIDs map[string]struct{}, ixDiag *IxDiag) {
+	if requestCopy.Site != nil {
+		site := *requestCopy.Site
 		if site.Publisher == nil {
 			site.Publisher = &openrtb2.Publisher{}
 		} else {
 			publisher := *site.Publisher
 			site.Publisher = &publisher
 		}
-		request.Site = &site
+
+		siteIDs := make([]string, 0, len(uniqueSiteIDs))
+		for key := range uniqueSiteIDs {
+			siteIDs = append(siteIDs, key)
+		}
+		if len(siteIDs) == 1 {
+			site.Publisher.ID = siteIDs[0]
+		}
+		if len(siteIDs) > 1 {
+			// Sorting siteIDs for predictable output as Go maps don't guarantee order
+			sort.Strings(siteIDs)
+			multipleSiteIDs := strings.Join(siteIDs, ", ")
+			glog.Warningf("Multiple SiteIDs found. %s", multipleSiteIDs)
+			ixDiag.MultipleSiteIds = multipleSiteIDs
+		}
+		requestCopy.Site = &site
 	}
+}
 
+func unmarshalToIxExt(imp *openrtb2.Imp) (*openrtb_ext.ExtImpIx, error) {
 	var bidderExt adapters.ExtImpBidder
-	if err := json.Unmarshal(request.Imp[0].Ext, &bidderExt); err != nil {
-		return err
+	if err := json.Unmarshal(imp.Ext, &bidderExt); err != nil {
+		return nil, err
 	}
 
 	var ixExt openrtb_ext.ExtImpIx
 	if err := json.Unmarshal(bidderExt.Bidder, &ixExt); err != nil {
-		return err
+		return nil, err
 	}
 
-	request.Site.Publisher.ID = ixExt.SiteId
-	return nil
+	return &ixExt, nil
 }
 
-func getBannerFormats(banner *openrtb2.Banner) []openrtb2.Format {
-	if len(banner.Format) == 0 && banner.W != nil && banner.H != nil {
-		banner.Format = []openrtb2.Format{{W: *banner.W, H: *banner.H}}
+func parseSiteId(ixExt *openrtb_ext.ExtImpIx, uniqueSiteIDs map[string]struct{}) error {
+	if ixExt == nil {
+		return fmt.Errorf("Nil Ix Ext")
+	}
+	if ixExt.SiteId != "" {
+		uniqueSiteIDs[ixExt.SiteId] = struct{}{}
 	}
-	return banner.Format
+	return nil
 }
 
 func createRequestData(a *IxAdapter, request *openrtb2.BidRequest, headers *http.Header) (*adapters.RequestData, error) {
@@ -180,7 +200,8 @@ func (a *IxAdapter) MakeBids(internalRequest *openrtb2.BidRequest, externalReque
 		}
 	}
 
-	bidderResponse := adapters.NewBidderResponseWithBidsCapacity(5)
+	// capacity 0 will make channel unbuffered
+	bidderResponse := adapters.NewBidderResponseWithBidsCapacity(0)
 	bidderResponse.Currency = bidResponse.Cur
 
 	var errs []error
@@ -275,8 +296,7 @@ func getMediaTypeForBid(bid openrtb2.Bid, impMediaTypeReq map[string]openrtb_ext
 // Builder builds a new instance of the Ix adapter for the given bidder with the given config.
 func Builder(bidderName openrtb_ext.BidderName, config config.Adapter, server config.Server) (adapters.Bidder, error) {
 	bidder := &IxAdapter{
-		URI:         config.Endpoint,
-		maxRequests: 20,
+		URI: config.Endpoint,
 	}
 	return bidder, nil
 }
@@ -328,29 +348,33 @@ func marshalJsonWithoutUnicode(v interface{}) (string, error) {
 	return strings.TrimSuffix(sb.String(), "\n"), nil
 }
 
-func BuildIxDiag(request *openrtb2.BidRequest) error {
+func setIxDiagIntoExtRequest(request *openrtb2.BidRequest, ixDiag *IxDiag) error {
 	extRequest := &ExtRequest{}
 	if request.Ext != nil {
 		if err := json.Unmarshal(request.Ext, &extRequest); err != nil {
 			return err
 		}
 	}
-	ixdiag := &IxDiag{}
 
 	if extRequest.Prebid != nil && extRequest.Prebid.Channel != nil {
-		ixdiag.PbjsV = extRequest.Prebid.Channel.Version
+		ixDiag.PbjsV = extRequest.Prebid.Channel.Version
 	}
-
 	// Slice commit hash out of version
 	if strings.Contains(version.Ver, "-") {
-		ixdiag.PbsV = version.Ver[:strings.Index(version.Ver, "-")]
+		ixDiag.PbsV = version.Ver[:strings.Index(version.Ver, "-")]
 	} else if version.Ver != "" {
-		ixdiag.PbsV = version.Ver
+		ixDiag.PbsV = version.Ver
 	}
 
 	// Only set request.ext if ixDiag is not empty
-	if *ixdiag != (IxDiag{}) {
-		extRequest.IxDiag = ixdiag
+	if *ixDiag != (IxDiag{}) {
+		extRequest := &ExtRequest{}
+		if request.Ext != nil {
+			if err := json.Unmarshal(request.Ext, &extRequest); err != nil {
+				return err
+			}
+		}
+		extRequest.IxDiag = ixDiag
 		extRequestJson, err := json.Marshal(extRequest)
 		if err != nil {
 			return err
@@ -359,3 +383,24 @@ func BuildIxDiag(request *openrtb2.BidRequest) error {
 	}
 	return nil
 }
+
+// moves sid from imp[].ext.bidder.sid to imp[].ext.sid
+func moveSid(imp *openrtb2.Imp, ixExt *openrtb_ext.ExtImpIx) error {
+	if ixExt == nil {
+		return fmt.Errorf("Nil Ix Ext")
+	}
+
+	if ixExt.Sid != "" {
+		var m map[string]interface{}
+		if err := json.Unmarshal(imp.Ext, &m); err != nil {
+			return err
+		}
+		m["sid"] = ixExt.Sid
+		ext, err := json.Marshal(m)
+		if err != nil {
+			return err
+		}
+		imp.Ext = ext
+	}
+	return nil
+}
diff --git a/adapters/sharethrough/sharethrough.go b/adapters/sharethrough/sharethrough.go
index f797bfe4..009ce0aa 100644
--- a/adapters/sharethrough/sharethrough.go
+++ b/adapters/sharethrough/sharethrough.go
@@ -83,21 +83,29 @@ func (a *adapter) MakeRequests(request *openrtb2.BidRequest, reqInfo *adapters.E
 		requestCopy.BCat = append(requestCopy.BCat, strImpParams.BCat...)
 		requestCopy.BAdv = append(requestCopy.BAdv, strImpParams.BAdv...)
 
-		requestCopy.Imp = []openrtb2.Imp{imp}
-
-		requestJSON, err := json.Marshal(requestCopy)
+		impressionsByMediaType, err := splitImpressionsByMediaType(&imp)
 		if err != nil {
 			errors = append(errors, err)
 			continue
 		}
 
-		requestData := &adapters.RequestData{
-			Method:  "POST",
-			Uri:     a.endpoint,
-			Body:    requestJSON,
-			Headers: headers,
+		for _, impression := range impressionsByMediaType {
+			requestCopy.Imp = []openrtb2.Imp{impression}
+
+			requestJSON, err := json.Marshal(requestCopy)
+			if err != nil {
+				errors = append(errors, err)
+				continue
+			}
+
+			requestData := &adapters.RequestData{
+				Method:  "POST",
+				Uri:     a.endpoint,
+				Body:    requestJSON,
+				Headers: headers,
+			}
+			requests = append(requests, requestData)
 		}
-		requests = append(requests, requestData)
 	}
 
 	return requests, errors
@@ -150,6 +158,40 @@ func (a *adapter) MakeBids(request *openrtb2.BidRequest, requestData *adapters.R
 	return bidderResponse, errors
 }
 
+func splitImpressionsByMediaType(impression *openrtb2.Imp) ([]openrtb2.Imp, error) {
+	if impression.Banner == nil && impression.Video == nil && impression.Native == nil {
+		return nil, &errortypes.BadInput{Message: "Invalid MediaType. Sharethrough only supports Banner, Video and Native."}
+	}
+
+	if impression.Audio != nil {
+		impression.Audio = nil
+	}
+
+	impressions := make([]openrtb2.Imp, 0, 3)
+
+	if impression.Banner != nil {
+		impCopy := *impression
+		impCopy.Video = nil
+		impCopy.Native = nil
+		impressions = append(impressions, impCopy)
+	}
+
+	if impression.Video != nil {
+		impCopy := *impression
+		impCopy.Banner = nil
+		impCopy.Native = nil
+		impressions = append(impressions, impCopy)
+	}
+
+	if impression.Native != nil {
+		impression.Banner = nil
+		impression.Video = nil
+		impressions = append(impressions, *impression)
+	}
+
+	return impressions, nil
+}
+
 func getMediaTypeForBid(bid openrtb2.Bid) (openrtb_ext.BidType, error) {
 
 	if bid.Ext != nil {
diff --git a/adapters/yahooAdvertising/yahooAdvertising.go b/adapters/yahooAds/yahooAds.go
similarity index 93%
rename from adapters/yahooAdvertising/yahooAdvertising.go
rename to adapters/yahooAds/yahooAds.go
index d476adb4..3597d0e3 100644
--- a/adapters/yahooAdvertising/yahooAdvertising.go
+++ b/adapters/yahooAds/yahooAds.go
@@ -1,4 +1,4 @@
-package yahooAdvertising
+package yahooAds
 
 import (
 	"encoding/json"
@@ -41,8 +41,8 @@ func (a *adapter) MakeRequests(request *openrtb2.BidRequest, reqInfo *adapters.E
 			continue
 		}
 
-		var yahooAdvertisingExt openrtb_ext.ExtImpYahooAdvertising
-		err = json.Unmarshal(bidderExt.Bidder, &yahooAdvertisingExt)
+		var yahooAdsExt openrtb_ext.ExtImpYahooAds
+		err = json.Unmarshal(bidderExt.Bidder, &yahooAdsExt)
 		if err != nil {
 			err = &errortypes.BadInput{
 				Message: fmt.Sprintf("imp #%d: %s", idx, err.Error()),
@@ -64,7 +64,7 @@ func (a *adapter) MakeRequests(request *openrtb2.BidRequest, reqInfo *adapters.E
 			reqCopy.App = &appCopy
 		}
 
-		if err := changeRequestForBidService(&reqCopy, &yahooAdvertisingExt); err != nil {
+		if err := changeRequestForBidService(&reqCopy, &yahooAdsExt); err != nil {
 			errors = append(errors, err)
 			continue
 		}
@@ -150,7 +150,7 @@ func getImpInfo(impId string, imps []openrtb2.Imp) (bool, openrtb_ext.BidType) {
 	return exists, mediaType
 }
 
-func changeRequestForBidService(request *openrtb2.BidRequest, extension *openrtb_ext.ExtImpYahooAdvertising) error {
+func changeRequestForBidService(request *openrtb2.BidRequest, extension *openrtb_ext.ExtImpYahooAds) error {
 	/* Always override the tag ID and (site ID or app ID) of the request */
 	request.Imp[0].TagID = extension.Pos
 	if request.Site != nil {
@@ -218,7 +218,7 @@ func validateBanner(banner *openrtb2.Banner) error {
 	return nil
 }
 
-// Builder builds a new instance of the YahooAdvertising adapter for the given bidder with the given config.
+// Builder builds a new instance of the YahooAds adapter for the given bidder with the given config.
 func Builder(bidderName openrtb_ext.BidderName, config config.Adapter, server config.Server) (adapters.Bidder, error) {
 	bidder := &adapter{
 		URI: config.Endpoint,
diff --git a/exchange/adapter_builders.go b/exchange/adapter_builders.go
index 171600c0..3818a16a 100755
--- a/exchange/adapter_builders.go
+++ b/exchange/adapter_builders.go
@@ -28,6 +28,7 @@ import (
 	"github.com/prebid/prebid-server/adapters/adview"
 	"github.com/prebid/prebid-server/adapters/adxcg"
 	"github.com/prebid/prebid-server/adapters/adyoulike"
+	"github.com/prebid/prebid-server/adapters/aidem"
 	"github.com/prebid/prebid-server/adapters/aja"
 	"github.com/prebid/prebid-server/adapters/algorix"
 	"github.com/prebid/prebid-server/adapters/amx"
@@ -169,7 +170,7 @@ import (
 	"github.com/prebid/prebid-server/adapters/visx"
 	"github.com/prebid/prebid-server/adapters/vrtcal"
 	"github.com/prebid/prebid-server/adapters/xeworks"
-	"github.com/prebid/prebid-server/adapters/yahooAdvertising"
+	"github.com/prebid/prebid-server/adapters/yahooAds"
 	"github.com/prebid/prebid-server/adapters/yeahmobi"
 	"github.com/prebid/prebid-server/adapters/yieldlab"
 	"github.com/prebid/prebid-server/adapters/yieldmo"
@@ -212,6 +213,7 @@ func newAdapterBuilders() map[openrtb_ext.BidderName]adapters.Builder {
 		openrtb_ext.BidderAdView:            adview.Builder,
 		openrtb_ext.BidderAdxcg:             adxcg.Builder,
 		openrtb_ext.BidderAdyoulike:         adyoulike.Builder,
+		openrtb_ext.BidderAidem:             aidem.Builder,
 		openrtb_ext.BidderAJA:               aja.Builder,
 		openrtb_ext.BidderAlgorix:           algorix.Builder,
 		openrtb_ext.BidderAMX:               amx.Builder,
@@ -367,8 +369,9 @@ func newAdapterBuilders() map[openrtb_ext.BidderName]adapters.Builder {
 		openrtb_ext.BidderVisx:              visx.Builder,
 		openrtb_ext.BidderVrtcal:            vrtcal.Builder,
 		openrtb_ext.BidderXeworks:           xeworks.Builder,
-		openrtb_ext.BidderYahooAdvertising:  yahooAdvertising.Builder,
-		openrtb_ext.BidderYahooSSP:          yahooAdvertising.Builder,
+		openrtb_ext.BidderYahooAds:          yahooAds.Builder,
+		openrtb_ext.BidderYahooAdvertising:  yahooAds.Builder,
+		openrtb_ext.BidderYahooSSP:          yahooAds.Builder,
 		openrtb_ext.BidderYeahmobi:          yeahmobi.Builder,
 		openrtb_ext.BidderYieldlab:          yieldlab.Builder,
 		openrtb_ext.BidderYieldmo:           yieldmo.Builder,
diff --git a/exchange/adapter_util.go b/exchange/adapter_util.go
index d8f683b3..ad1866a6 100644
--- a/exchange/adapter_util.go
+++ b/exchange/adapter_util.go
@@ -88,7 +88,7 @@ func GetDisabledBiddersErrorMessages(infos config.BidderInfos) map[string]string
 		"lifestreet":     `Bidder "lifestreet" is no longer available in Prebid Server. Please update your configuration.`,
 		"adagio":         `Bidder "adagio" is no longer available in Prebid Server. Please update your configuration.`,
 		"somoaudience":   `Bidder "somoaudience" is no longer available in Prebid Server. Please update your configuration.`,
-		"yssp":           `Bidder "yssp" is no longer available in Prebid Server. If you're looking to use the Yahoo SSP adapter, please rename it to "yahooAdvertising" in your configuration.`,
+		"yssp":           `Bidder "yssp" is no longer available in Prebid Server. If you're looking to use the Yahoo SSP adapter, please rename it to "yahooAds" in your configuration.`,
 		"andbeyondmedia": `Bidder "andbeyondmedia" is no longer available in Prebid Server. If you're looking to use the AndBeyond.Media SSP adapter, please rename it to "beyondmedia" in your configuration.`,
 		"oftmedia":       `Bidder "oftmedia" is no longer available in Prebid Server. Please update your configuration.`,
 		"groupm":         `Bidder "groupm" is no longer available in Prebid Server. Please update your configuration.`,
diff --git a/openrtb_ext/bidders.go b/openrtb_ext/bidders.go
index 03056123..9906d12e 100644
--- a/openrtb_ext/bidders.go
+++ b/openrtb_ext/bidders.go
@@ -114,6 +114,7 @@ const (
 	BidderAdView            BidderName = "adview"
 	BidderAdxcg             BidderName = "adxcg"
 	BidderAdyoulike         BidderName = "adyoulike"
+	BidderAidem             BidderName = "aidem"
 	BidderAJA               BidderName = "aja"
 	BidderAlgorix           BidderName = "algorix"
 	BidderAMX               BidderName = "amx"
@@ -269,6 +270,7 @@ const (
 	BidderVisx              BidderName = "visx"
 	BidderVrtcal            BidderName = "vrtcal"
 	BidderXeworks           BidderName = "xeworks"
+	BidderYahooAds          BidderName = "yahooAds"
 	BidderYahooAdvertising  BidderName = "yahooAdvertising"
 	BidderYahooSSP          BidderName = "yahoossp"
 	BidderYeahmobi          BidderName = "yeahmobi"
@@ -310,6 +312,7 @@ func CoreBidderNames() []BidderName {
 		BidderAdView,
 		BidderAdxcg,
 		BidderAdyoulike,
+		BidderAidem,
 		BidderAJA,
 		BidderAlgorix,
 		BidderAMX,
@@ -465,6 +468,7 @@ func CoreBidderNames() []BidderName {
 		BidderVisx,
 		BidderVrtcal,
 		BidderXeworks,
+		BidderYahooAds,
 		BidderYahooAdvertising,
 		BidderYahooSSP,
 		BidderYeahmobi,
diff --git a/openrtb_ext/deal_tier.go b/openrtb_ext/deal_tier.go
index ef85b9b1..45285d21 100644
--- a/openrtb_ext/deal_tier.go
+++ b/openrtb_ext/deal_tier.go
@@ -27,20 +27,6 @@ func ReadDealTiersFromImp(imp openrtb2.Imp) (DealTierBidderMap, error) {
 		return dealTiers, nil
 	}
 
-	// imp.ext.{bidder}
-	var impExt map[string]struct {
-		DealTier *DealTier `json:"dealTier"`
-	}
-	if err := json.Unmarshal(imp.Ext, &impExt); err != nil {
-		return nil, err
-	}
-	for bidder, param := range impExt {
-		if param.DealTier != nil {
-			dealTiers[BidderName(bidder)] = *param.DealTier
-		}
-	}
-
-	// imp.ext.prebid.{bidder}
 	var impPrebidExt struct {
 		Prebid struct {
 			Bidders map[string]struct {
diff --git a/openrtb_ext/imp_aidem.go b/openrtb_ext/imp_aidem.go
new file mode 100644
index 00000000..59457f1e
--- /dev/null
+++ b/openrtb_ext/imp_aidem.go
@@ -0,0 +1,8 @@
+package openrtb_ext
+
+type ImpExtFoo struct {
+	SiteID      string `json:"siteId"`
+	PublisherID string `json:"publisherId"`
+	PlacementID string `json:"placementId"`
+	RateLimit   string `json:"rateLimit"`
+}
diff --git a/openrtb_ext/imp_ix.go b/openrtb_ext/imp_ix.go
index 9f977fb0..40c3f518 100644
--- a/openrtb_ext/imp_ix.go
+++ b/openrtb_ext/imp_ix.go
@@ -4,4 +4,5 @@ package openrtb_ext
 type ExtImpIx struct {
 	SiteId string `json:"siteId"`
 	Size   []int  `json:"size"`
+	Sid    string `json:"sid"`
 }
diff --git a/openrtb_ext/imp_yahooAds.go b/openrtb_ext/imp_yahooAds.go
new file mode 100644
index 00000000..36a4a0f6
--- /dev/null
+++ b/openrtb_ext/imp_yahooAds.go
@@ -0,0 +1,7 @@
+package openrtb_ext
+
+// ExtImpYahooAds defines the contract for bidrequest.imp[i].ext.prebid.bidder.yahooAds
+type ExtImpYahooAds struct {
+	Dcn string `json:"dcn"`
+	Pos string `json:"pos"`
+}
diff --git a/static/bidder-info/adsinteractive.yaml b/static/bidder-info/adsinteractive.yaml
index ae60ec88..d430e63b 100644
--- a/static/bidder-info/adsinteractive.yaml
+++ b/static/bidder-info/adsinteractive.yaml
@@ -12,6 +12,6 @@ capabilities:
       - banner
 userSync:
   redirect:
-    url: "http://bid.adsinteractive.com/getuid?{{.RedirectURL}}"
+    url: "https://bid.adsinteractive.com/getuid?{{.RedirectURL}}"
     userMacro: "$AUID"
  
diff --git a/static/bidder-info/aidem.yaml b/static/bidder-info/aidem.yaml
new file mode 100644
index 00000000..35ea898a
--- /dev/null
+++ b/static/bidder-info/aidem.yaml
@@ -0,0 +1,19 @@
+endpoint: "https://zero.aidemsrv.com/ortb/v2.6/bid/request"
+maintainer:
+  email: prebid@aidem.com
+modifyingVastXmlAllowed: true
+capabilities:
+  app:
+    mediaTypes:
+      - banner
+      - video
+      - native
+  site:
+    mediaTypes:
+      - banner
+      - video
+      - native
+userSync:
+  redirect:
+    url: https://gum.aidemsrv.com/prebid_sync?gdpr={{.GDPR}}&consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&redirect={{.RedirectURL}}
+    userMacro: "$UID"
diff --git a/static/bidder-info/consumable.yaml b/static/bidder-info/consumable.yaml
index e1c4fc9b..cc290149 100644
--- a/static/bidder-info/consumable.yaml
+++ b/static/bidder-info/consumable.yaml
@@ -11,6 +11,8 @@ capabilities:
     - banner
 userSync:
   redirect:
-    url: "https://e.serverbid.com/udb/9969/match?gdpr={{.GDPR}}&euconsent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&redir={{.RedirectURL}}"
+    url: "https://e.serverbid.com/udb/9969/match?gdpr={{.GDPR}}&euconsent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&gpp={{.GPP}}&gpp_sid={{.GPPSID}}&redir={{.RedirectURL}}"
     userMacro: ""
     # consumable appends the user id to end of the redirect url and does not utilize a macro
+openrtb:
+  gpp-supported: true   
diff --git a/static/bidder-info/imds.yaml b/static/bidder-info/imds.yaml
index e608a6c6..491a5bd0 100644
--- a/static/bidder-info/imds.yaml
+++ b/static/bidder-info/imds.yaml
@@ -13,8 +13,10 @@ capabilities:
 userSync:
   supportCors: true
   iframe:
-    url: "https://ad-cdn.technoratimedia.com/html/usersync.html?gdpr={{.GDPR}}&consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&cb={{.RedirectURL}}"
+    url: "https://ad-cdn.technoratimedia.com/html/usersync.html?gdpr={{.GDPR}}&consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&gpp={{.GPP}}&gppsid={{.GPPSID}}&cb={{.RedirectURL}}"
     userMacro: "[USER_ID]"
   redirect:
-    url: "https://sync.technoratimedia.com/services?srv=cs&gdpr={{.GDPR}}&consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&cb={{.RedirectURL}}"
+    url: "https://sync.technoratimedia.com/services?srv=cs&gdpr={{.GDPR}}&consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&gpp={{.GPP}}&gppsid={{.GPPSID}}&cb={{.RedirectURL}}"
     userMacro: "[USER_ID]"
+openrtb:
+  gpp-supported: true
diff --git a/static/bidder-info/ix.yaml b/static/bidder-info/ix.yaml
index 9ac7dba3..4ab520ad 100644
--- a/static/bidder-info/ix.yaml
+++ b/static/bidder-info/ix.yaml
@@ -17,8 +17,10 @@ capabilities:
       - audio
 userSync:
   redirect:
-    url: "https://ssum.casalemedia.com/usermatchredir?s=194962&gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&cb={{.RedirectURL}}"
+    url: "https://ssum.casalemedia.com/usermatchredir?s=194962&gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&gpp={{.GPP}}&gppsid={{.GPPSID}}&cb={{.RedirectURL}}"
     userMacro: ""
   iframe:
-    url: "https://ssum-sec.casalemedia.com/usermatch?s=184674&gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&cb={{.RedirectURL}}"
+    url: "https://ssum-sec.casalemedia.com/usermatch?s=184674&gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&gpp={{.GPP}}&gppsid={{.GPPSID}}&cb={{.RedirectURL}}"
     # ix appends the user id to end of the redirect url and does not utilize a macro
+openrtb:
+  gpp-supported: true
diff --git a/static/bidder-info/mediafuse.yaml b/static/bidder-info/mediafuse.yaml
index b78b21e1..be19cc6c 100644
--- a/static/bidder-info/mediafuse.yaml
+++ b/static/bidder-info/mediafuse.yaml
@@ -12,5 +12,5 @@ capabilities:
       - banner
       - video
       - native
-userSync:
-  key: "adnxs"
+# userSync:
+#   key: "adnxs"
diff --git a/static/bidder-info/triplelift.yaml b/static/bidder-info/triplelift.yaml
index 45811c0c..605bcc71 100644
--- a/static/bidder-info/triplelift.yaml
+++ b/static/bidder-info/triplelift.yaml
@@ -16,9 +16,11 @@ userSync:
   # Contact this bidder directly at the email address above to ask about enabling user sync.
   # 
   iframe:
-    url: "https://eb2.3lift.com/sync?gdpr={{.GDPR}}&cmp_cs={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&redir={{.RedirectURL}}"
+    url: "https://eb2.3lift.com/sync?gdpr={{.GDPR}}&cmp_cs={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&gpp={{.GPP}}&gpp_sid={{.GPPSID}}&redir={{.RedirectURL}}"
     userMacro: $UID
   redirect:
-    url: "https://eb2.3lift.com/getuid?gdpr={{.GDPR}}&cmp_cs={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&redir={{.RedirectURL}}"
+    url: "https://eb2.3lift.com/getuid?gdpr={{.GDPR}}&cmp_cs={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&gpp={{.GPP}}&gpp_sid={{.GPPSID}}&redir={{.RedirectURL}}"
     userMacro: "$UID"
-endpointCompression: "GZIP"
\ No newline at end of file
+endpointCompression: "GZIP"
+openrtb:
+  gpp-supported: true
\ No newline at end of file
diff --git a/static/bidder-info/triplelift_native.yaml b/static/bidder-info/triplelift_native.yaml
index 85ebd1a5..ff93b544 100644
--- a/static/bidder-info/triplelift_native.yaml
+++ b/static/bidder-info/triplelift_native.yaml
@@ -16,8 +16,10 @@ userSync:
   # Contact this bidder directly at the email address above to ask about enabling user sync.
   # 
   iframe:
-    url: "https://eb2.3lift.com/sync?gdpr={{.GDPR}}&cmp_cs={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&redir={{.RedirectURL}}"
+    url: "https://eb2.3lift.com/sync?gdpr={{.GDPR}}&cmp_cs={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&gpp={{.GPP}}&gpp_sid={{.GPPSID}}&redir={{.RedirectURL}}"
     userMacro: $UID
   redirect:
-    url: "https://eb2.3lift.com/getuid?gdpr={{.GDPR}}&cmp_cs={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&redir={{.RedirectURL}}"
-    userMacro: "$UID"
\ No newline at end of file
+    url: "https://eb2.3lift.com/getuid?gdpr={{.GDPR}}&cmp_cs={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&gpp={{.GPP}}&gpp_sid={{.GPPSID}}&redir={{.RedirectURL}}"
+    userMacro: "$UID"
+openrtb:
+  gpp-supported: true
\ No newline at end of file
diff --git a/static/bidder-info/ucfunnel.yaml b/static/bidder-info/ucfunnel.yaml
index 0034b9d4..99af7313 100644
--- a/static/bidder-info/ucfunnel.yaml
+++ b/static/bidder-info/ucfunnel.yaml
@@ -13,5 +13,6 @@ capabilities:
       - video
 userSync:
   redirect:
+  # for syncing to work, please register your Prebid Server domain with the contact email above
     url: "https://sync.aralego.com/idsync?gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&usprivacy={{.USPrivacy}}&redirect={{.RedirectURL}}"
     userMacro: "SspCookieUserId"
diff --git a/static/bidder-info/yahooAds.yaml b/static/bidder-info/yahooAds.yaml
new file mode 100644
index 00000000..a2581387
--- /dev/null
+++ b/static/bidder-info/yahooAds.yaml
@@ -0,0 +1,18 @@
+endpoint: "https://s2shb.ssp.yahoo.com/admax/bid/partners/PBS"
+maintainer:
+  email: "hb-fe-tech@yahooinc.com"
+gvlVendorID: 25
+capabilities:
+  app:
+    mediaTypes:
+      - banner
+      - video
+  site:
+    mediaTypes:
+      - banner
+      - video
+userSync:
+  # yahooAds supports user syncing, but requires configuration by the host. contact this
+  # bidder directly at the email address in this file to ask about enabling user sync.
+  supports:
+    - redirect
\ No newline at end of file
diff --git a/static/bidder-params/aidem.json b/static/bidder-params/aidem.json
new file mode 100644
index 00000000..221e5ff7
--- /dev/null
+++ b/static/bidder-params/aidem.json
@@ -0,0 +1,29 @@
+{
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "title": "AIDEM Adapter Params",
+    "description": "A schema which validates params accepted by the AIDEM adapter",
+    "type": "object",
+    "properties": {
+        "siteId": {
+            "type": "string",
+            "minLength": 1,
+            "description": "Unique site ID"
+        },
+        "publisherId": {
+            "type": "string",
+            "minLength": 1,
+            "description": "Unique publisher ID"
+        },
+        "placementId": {
+            "type": "string",
+            "minLength": 1,
+            "description": "Unique publisher ttag ID"
+        },
+        "rateLimit": {
+            "type": "number",
+            "minimum": 0,
+            "maximum": 1
+        }
+    },
+    "required": ["siteId", "publisherId"]
+}
\ No newline at end of file
diff --git a/static/bidder-params/ix.json b/static/bidder-params/ix.json
index a7a5cb73..172690cc 100644
--- a/static/bidder-params/ix.json
+++ b/static/bidder-params/ix.json
@@ -27,6 +27,11 @@
       "minItems": 2,
       "maxItems": 2,
       "description": "An array of two integer containing the dimension"
+    },
+    "sid": {
+      "type": "string",
+      "minLength": 1,
+      "description": "Slot ID"
     }
   },
   "oneOf": [
diff --git a/static/bidder-params/yahooAds.json b/static/bidder-params/yahooAds.json
new file mode 100644
index 00000000..77e71073
--- /dev/null
+++ b/static/bidder-params/yahooAds.json
@@ -0,0 +1,19 @@
+{
+	"$schema": "http://json-schema.org/draft-04/schema#",
+	"title": "YahooAds Adapter Params",
+	"description": "A schema which validates params accepted by the YahooAds adapter",
+	"type": "object",
+	"properties": {
+		"dcn": {
+			"type": "string",
+			"minLength": 1,
+			"description": "Site ID provided by One Mobile"
+		},
+		"pos": {
+			"type": "string",
+			"minLength": 1,
+			"description": "Placement ID"
+		}
+	},
+	"required": ["dcn", "pos"]
+}


Test patch:
diff --git a/adapters/aax/aaxtest/supplemental/invalid-resp-diff-imp-id.json b/adapters/aax/aaxtest/supplemental/invalid-resp-diff-imp-id.json
index c415c274..2d9d02d6 100644
--- a/adapters/aax/aaxtest/supplemental/invalid-resp-diff-imp-id.json
+++ b/adapters/aax/aaxtest/supplemental/invalid-resp-diff-imp-id.json
@@ -115,11 +115,11 @@
             }
         }
     ],
-    "expectedBidResponses": [],
+    "expectedBidResponses": [{"currency":"USD","bids":[]}],
     "expectedMakeBidsErrors": [
         {
             "value": "unable to fetch mediaType in multi-format: some-other-imp-id",
             "comparison": "literal"
         }
     ]
-}
\ No newline at end of file
+}
diff --git a/adapters/aax/aaxtest/supplemental/invalid-resp-multi-imp-type.json b/adapters/aax/aaxtest/supplemental/invalid-resp-multi-imp-type.json
index 23aa0ae6..b0a0b750 100644
--- a/adapters/aax/aaxtest/supplemental/invalid-resp-multi-imp-type.json
+++ b/adapters/aax/aaxtest/supplemental/invalid-resp-multi-imp-type.json
@@ -141,11 +141,11 @@
             }
         }
     ],
-    "expectedBidResponses": [],
+    "expectedBidResponses": [{"currency":"USD","bids":[]}],
     "expectedMakeBidsErrors": [
         {
             "value": "unable to fetch mediaType in multi-format: test-imp-id",
             "comparison": "literal"
         }
     ]
-}
\ No newline at end of file
+}
diff --git a/adapters/adapterstest/test_json.go b/adapters/adapterstest/test_json.go
index bdd25990..39b1e945 100644
--- a/adapters/adapterstest/test_json.go
+++ b/adapters/adapterstest/test_json.go
@@ -70,27 +70,32 @@ func RunJSONBidderTest(t *testing.T, rootDir string, bidder adapters.Bidder) {
 			return err
 		}
 
-		base := filepath.Base(filepath.Dir(path))
-		if _, ok := supportedDirs[base]; !ok {
-			return nil
-		}
+		isJsonFile := !info.IsDir() && filepath.Ext(info.Name()) == jsonFileExtension
+		RunSingleJSONBidderTest(t, bidder, path, isJsonFile)
+		return nil
+	})
+	assert.NoError(t, err, "Error reading files from directory %s \n", rootDir)
+}
 
-		allowErrors := base != "exemplary" && base != "video"
-		if !info.IsDir() && filepath.Ext(info.Name()) == jsonFileExtension {
-			specData, err := loadFile(path)
-			if err != nil {
-				t.Fatalf("Failed to load contents of file %s: %v", path, err)
-			}
+func RunSingleJSONBidderTest(t *testing.T, bidder adapters.Bidder, path string, isJsonFile bool) {
+	base := filepath.Base(filepath.Dir(path))
+	if _, ok := supportedDirs[base]; !ok {
+		return
+	}
 
-			if !allowErrors && specData.expectsErrors() {
-				t.Fatalf("Exemplary spec %s must not expect errors.", path)
-			}
+	allowErrors := base != "exemplary" && base != "video"
+	if isJsonFile {
+		specData, err := loadFile(path)
+		if err != nil {
+			t.Fatalf("Failed to load contents of file %s: %v", path, err)
+		}
 
-			runSpec(t, path, specData, bidder, base == "amp", base == "videosupplemental" || base == "video")
+		if !allowErrors && specData.expectsErrors() {
+			t.Fatalf("Exemplary spec %s must not expect errors.", path)
 		}
-		return nil
-	})
-	assert.NoError(t, err, "Error reading files from directory %s \n", rootDir)
+
+		runSpec(t, path, specData, bidder, base == "amp", base == "videosupplemental" || base == "video")
+	}
 }
 
 // LoadFile reads and parses a file as a test case. If something goes wrong, it returns an error.
@@ -272,22 +277,8 @@ func assertErrorList(t *testing.T, description string, actual []error, expected
 
 func assertMakeBidsOutput(t *testing.T, filename string, bidderResponse *adapters.BidderResponse, expected expectedBidResponse) {
 	t.Helper()
-
-	if (bidderResponse == nil || len(bidderResponse.Bids) == 0) != (len(expected.Bids) == 0) {
-		if len(expected.Bids) == 0 {
-			t.Fatalf("%s: expectedBidResponses indicated a nil response, but mockResponses supplied a non-nil response", filename)
-		}
-
-		t.Fatalf("%s: mockResponses included unexpected nil or empty response", filename)
-	}
-
-	// Expected nil response - give diffBids something to work with.
-	if bidderResponse == nil {
-		bidderResponse = new(adapters.BidderResponse)
-	}
-
-	if len(bidderResponse.Bids) != len(expected.Bids) {
-		t.Fatalf("%s: MakeBids returned wrong bid count. Expected %d, got %d", filename, len(expected.Bids), len(bidderResponse.Bids))
+	if !assert.Len(t, bidderResponse.Bids, len(expected.Bids), "%s: Wrong MakeBids bidderResponse.Bids count. len(bidderResponse.Bids) = %d vs len(spec.BidResponses.Bids) = %d", filename, len(bidderResponse.Bids), len(expected.Bids)) {
+		return
 	}
 	for i := 0; i < len(bidderResponse.Bids); i++ {
 		diffBids(t, fmt.Sprintf("%s:  typedBid[%d]", filename, i), bidderResponse.Bids[i], &(expected.Bids[i]))
@@ -449,15 +440,21 @@ func testMakeBidsImpl(t *testing.T, filename string, spec *testSpec, bidder adap
 		// output inside testMakeRequestsImpl
 		thisBidResponse, theseErrs := bidder.MakeBids(&spec.BidRequest, spec.HttpCalls[i].Request.ToRequestData(t), spec.HttpCalls[i].Response.ToResponseData(t))
 
-		bidsErrs = append(bidsErrs, theseErrs...)
-		bidResponses = append(bidResponses, thisBidResponse)
+		if theseErrs != nil {
+			bidsErrs = append(bidsErrs, theseErrs...)
+		}
+		if thisBidResponse != nil {
+			bidResponses = append(bidResponses, thisBidResponse)
+		}
 	}
 
 	// Assert actual errors thrown by MakeBids implementation versus expected JSON-defined spec.MakeBidsErrors
 	assertErrorList(t, fmt.Sprintf("%s: MakeBids", filename), bidsErrs, spec.MakeBidsErrors)
 
 	// Assert MakeBids implementation BidResponses with expected JSON-defined spec.BidResponses[i].Bids
-	for i := 0; i < len(spec.BidResponses); i++ {
-		assertMakeBidsOutput(t, filename, bidResponses[i], spec.BidResponses[i])
+	if assert.Len(t, bidResponses, len(spec.BidResponses), "%s: MakeBids len(bidResponses) = %d vs len(spec.BidResponses) = %d", filename, len(bidResponses), len(spec.BidResponses)) {
+		for i := 0; i < len(spec.BidResponses); i++ {
+			assertMakeBidsOutput(t, filename, bidResponses[i], spec.BidResponses[i])
+		}
 	}
 }
diff --git a/adapters/adf/adftest/supplemental/invalid-imp-mediatype.json b/adapters/adf/adftest/supplemental/invalid-imp-mediatype.json
index 8a87492a..5dab8c36 100644
--- a/adapters/adf/adftest/supplemental/invalid-imp-mediatype.json
+++ b/adapters/adf/adftest/supplemental/invalid-imp-mediatype.json
@@ -79,7 +79,7 @@
       }
     }
   ],
-  "expectedBidResponses": [],
+  "expectedBidResponses": [{"currency":"USD","bids":[]}],
   "expectedMakeBidsErrors": [ 
     {
       "value": "Failed to parse impression \"test-imp-id\" mediatype",
diff --git a/adapters/adf/adftest/supplemental/nobid-response.json b/adapters/adf/adftest/supplemental/nobid-response.json
index ec559aa7..57dd2d5c 100644
--- a/adapters/adf/adftest/supplemental/nobid-response.json
+++ b/adapters/adf/adftest/supplemental/nobid-response.json
@@ -44,6 +44,6 @@
       }
     }
   ],
-  "expectedBidResponses": [],
+  "expectedBidResponses": [{"currency":"USD","bids":[]}],
   "expectedMakeBidsErrors": []
 }
diff --git a/adapters/adnuntius/adnuntiustest/supplemental/check-order-multi-imp.json b/adapters/adnuntius/adnuntiustest/supplemental/check-order-multi-imp.json
index 035d1656..d6f292d8 100644
--- a/adapters/adnuntius/adnuntiustest/supplemental/check-order-multi-imp.json
+++ b/adapters/adnuntius/adnuntiustest/supplemental/check-order-multi-imp.json
@@ -75,7 +75,7 @@
 					"adUnits": [
             {
 							"auId": "0000000000000456",
-							"targetId": "456-test-imp-id2",
+							"targetId": "456-test-imp-id-2",
 							"html": "<ADCODE>",
 							"responseId": "adn-rsp-900646517",
 							"ads": [
@@ -122,7 +122,7 @@
 			}
 		}
 	],
-	"expectedBidResponse": 
+	"expectedBidResponses": [
 		{
 			"bids": [
 				{
@@ -159,4 +159,5 @@
 			"currency": "NOK"
 		}
 	
+    ]
 }
diff --git a/adapters/adocean/adoceantest/supplemental/encode-error.json b/adapters/adocean/adoceantest/supplemental/encode-error.json
index fd585e47..c5dce777 100644
--- a/adapters/adocean/adoceantest/supplemental/encode-error.json
+++ b/adapters/adocean/adoceantest/supplemental/encode-error.json
@@ -71,6 +71,7 @@
       }
     }
   ],
+  "expectedBidResponses": [{"currency":"USD","bids":[]}],
   "expectedMakeBidsErrors": [
     {
       "value": "invalid URL escape \"%a\"",
diff --git a/adapters/adot/adottest/supplemental/simple-audio.json b/adapters/adot/adottest/supplemental/simple-audio.json
index cd19d140..38be60ed 100644
--- a/adapters/adot/adottest/supplemental/simple-audio.json
+++ b/adapters/adot/adottest/supplemental/simple-audio.json
@@ -64,5 +64,5 @@
     }
   ],
 
-  "expectedBidResponses": []
+  "expectedBidResponses": [{"currency":"USD","bids":[]}]
 }
diff --git a/adapters/adprime/adprimetest/supplemental/bad_media_type.json b/adapters/adprime/adprimetest/supplemental/bad_media_type.json
index e91a0138..d5883370 100644
--- a/adapters/adprime/adprimetest/supplemental/bad_media_type.json
+++ b/adapters/adprime/adprimetest/supplemental/bad_media_type.json
@@ -82,10 +82,11 @@
             }
         }
     ],
+    "expectedBidResponses": [{"currency":"USD","bids":[]}],
     "expectedMakeBidsErrors": [
         {
             "value": "Failed to find impression \"test-imp-id\"",
             "comparison": "literal"
         }
     ]
-}
\ No newline at end of file
+}
diff --git a/adapters/adtarget/adtargettest/supplemental/wrong-impression-mapping.json b/adapters/adtarget/adtargettest/supplemental/wrong-impression-mapping.json
index 0dffdb2b..2aac06a9 100644
--- a/adapters/adtarget/adtargettest/supplemental/wrong-impression-mapping.json
+++ b/adapters/adtarget/adtargettest/supplemental/wrong-impression-mapping.json
@@ -68,10 +68,11 @@
       }
     }
   ],
+  "expectedBidResponses": [{"currency":"USD","bids":[]}],
   "expectedMakeBidsErrors": [
     {
       "value": "ignoring bid id=test-bid-id, request doesn't contain any impression with id=SOME-WRONG-IMP-ID",
       "comparison": "literal"
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/adapters/adtelligent/adtelligenttest/supplemental/wrong-impression-mapping.json b/adapters/adtelligent/adtelligenttest/supplemental/wrong-impression-mapping.json
index 2e5aeff3..894e9fbe 100644
--- a/adapters/adtelligent/adtelligenttest/supplemental/wrong-impression-mapping.json
+++ b/adapters/adtelligent/adtelligenttest/supplemental/wrong-impression-mapping.json
@@ -68,10 +68,11 @@
       }
     }
   ],
+  "expectedBidResponses": [{"currency":"USD","bids":[]}],
   "expectedMakeBidsErrors": [
     {
       "value": "ignoring bid id=test-bid-id, request doesn't contain any impression with id=SOME-WRONG-IMP-ID",
       "comparison": "literal"
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/adapters/adview/adviewtest/supplemental/nobid-response.json b/adapters/adview/adviewtest/supplemental/nobid-response.json
index 9e9ab678..76a96484 100644
--- a/adapters/adview/adviewtest/supplemental/nobid-response.json
+++ b/adapters/adview/adviewtest/supplemental/nobid-response.json
@@ -47,6 +47,6 @@
       }
     }
   ],
-  "expectedBidResponses": [],
+  "expectedBidResponses": [{"currency":"USD","bids":[]}],
   "expectedMakeBidsErrors": []
 }
diff --git a/adapters/aidem/aidem_test.go b/adapters/aidem/aidem_test.go
new file mode 100644
index 00000000..03bcc7e0
--- /dev/null
+++ b/adapters/aidem/aidem_test.go
@@ -0,0 +1,30 @@
+package aidem
+
+import (
+	"testing"
+
+	"github.com/stretchr/testify/assert"
+
+	"github.com/prebid/prebid-server/adapters/adapterstest"
+	"github.com/prebid/prebid-server/config"
+	"github.com/prebid/prebid-server/openrtb_ext"
+)
+
+func TestJsonSamples(t *testing.T) {
+	bidder, buildErr := Builder(openrtb_ext.BidderAidem, config.Adapter{
+		Endpoint: "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request",
+	}, config.Server{ExternalUrl: "http://hosturl.com", GvlID: 1, DataCenter: "2"})
+
+	if buildErr != nil {
+		t.Fatalf("Builder returned unexpected error %v", buildErr)
+	}
+
+	adapterstest.RunJSONBidderTest(t, "aidemtest", bidder)
+}
+
+func TestEndpointTemplateMalformed(t *testing.T) {
+	_, buildErr := Builder(openrtb_ext.BidderAidem, config.Adapter{
+		Endpoint: "{{Malformed}}"}, config.Server{ExternalUrl: "http://hosturl.com", GvlID: 1, DataCenter: "2"})
+
+	assert.Nil(t, buildErr)
+}
diff --git a/adapters/aidem/aidemtest/exemplary/multi-format.json b/adapters/aidem/aidemtest/exemplary/multi-format.json
new file mode 100644
index 00000000..0c940d4b
--- /dev/null
+++ b/adapters/aidem/aidemtest/exemplary/multi-format.json
@@ -0,0 +1,119 @@
+{
+    "mockBidRequest": {
+        "id": "test-request-id",
+        "imp": [
+            {
+                "id": "1",
+                "banner": {
+                    "format": [
+                        {
+                            "w": 320,
+                            "h": 50
+                        }
+                    ]
+                },
+                "video": {
+                    "mimes": [
+                        "video/mp4"
+                    ],
+                    "protocols": [
+                        2,
+                        5
+                    ],
+                    "w": 320,
+                    "h": 480
+                },
+                "ext": {
+                    "bidder": {
+                        "siteId": "TCID",
+                        "publisherId": "1234"
+                    }
+                }
+            }
+        ]
+    },
+    "httpCalls": [
+        {
+            "expectedRequest": {
+                "uri": "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request",
+                "body": {
+                    "id": "test-request-id",
+                    "imp": [
+                        {
+                            "id": "1",
+                            "banner": {
+                                "format": [
+                                    {
+                                        "w": 320,
+                                        "h": 50
+                                    }
+                                ]
+                            },
+                            "video": {
+                                "mimes": [
+                                    "video/mp4"
+                                ],
+                                "protocols": [
+                                    2,
+                                    5
+                                ],
+                                "w": 320,
+                                "h": 480
+                            },
+                            "ext": {
+                                "bidder": {
+                                    "siteId": "TCID",
+                                    "publisherId": "1234"
+                                }
+                            }
+                        }
+                    ]
+                }
+            },
+            "mockResponse": {
+                "status": 200,
+                "body": {
+                    "id": "test-request-id",
+                    "seatbid": [
+                        {
+                            "seat": "aax",
+                            "bid": [
+                                {
+                                    "id": "test-bid-id",
+                                    "impid": "1",
+                                    "price": 1.50,
+                                    "adm": "some-test-ad",
+                                    "crid": "test-crid",
+                                    "h": 50,
+                                    "w": 320,
+                                    "mtype": 1
+                                }
+                            ]
+                        }
+                    ],
+                    "cur": "USD"
+                }
+            }
+        }
+    ],
+    "expectedBidResponses": [
+        {
+            "currency": "USD",
+            "bids": [
+                {
+                    "bid": {
+                        "id": "test-bid-id",
+                        "impid": "1",
+                        "price": 1.50,
+                        "adm": "some-test-ad",
+                        "crid": "test-crid",
+                        "w": 320,
+                        "h": 50,
+                        "mtype": 1
+                    },
+                    "type": "banner"
+                }
+            ]
+        }
+    ]
+}
diff --git a/adapters/aidem/aidemtest/exemplary/multi-imps-multi-bid.json b/adapters/aidem/aidemtest/exemplary/multi-imps-multi-bid.json
new file mode 100644
index 00000000..5c2b3694
--- /dev/null
+++ b/adapters/aidem/aidemtest/exemplary/multi-imps-multi-bid.json
@@ -0,0 +1,154 @@
+{
+    "mockBidRequest": {
+        "id": "test-request-id",
+        "imp": [
+            {
+                "id": "1",
+                "banner": {
+                    "format": [
+                        {
+                            "w": 320,
+                            "h": 50
+                        }
+                    ]
+                },
+                "ext": {
+                    "bidder": {
+                        "siteId": "TCID",
+                        "publisherId": "1234"
+                    }
+                }
+            },
+            {
+                "id": "2",
+                "banner": {
+                    "format": [
+                        {
+                            "w": 300,
+                            "h": 50
+                        }
+                    ]
+                },
+                "ext": {
+                    "bidder": {
+                        "siteId": "TCID",
+                        "publisherId": "1234"
+                    }
+                }
+            }
+        ]
+    },
+    "httpCalls": [
+        {
+            "expectedRequest": {
+                "uri": "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request",
+                "body": {
+                    "id": "test-request-id",
+                    "imp": [
+                        {
+                            "id": "1",
+                            "banner": {
+                                "format": [
+                                    {
+                                        "w": 320,
+                                        "h": 50
+                                    }
+                                ]
+                            },
+                            "ext": {
+                                "bidder": {
+                                    "siteId": "TCID",
+                                    "publisherId": "1234"
+                                }
+                            }
+                        },
+                        {
+                            "id": "2",
+                            "banner": {
+                                "format": [
+                                    {
+                                        "w": 300,
+                                        "h": 50
+                                    }
+                                ]
+                            },
+                            "ext": {
+                                "bidder": {
+                                    "siteId": "TCID",
+                                    "publisherId": "1234"
+                                }
+                            }
+                        }
+                    ]
+                }
+            },
+            "mockResponse": {
+                "status": 200,
+                "body": {
+                    "id": "test-request-id",
+                    "seatbid": [
+                        {
+                            "seat": "aax",
+                            "bid": [
+                                {
+                                    "id": "test-bid-id",
+                                    "impid": "1",
+                                    "price": 1.50,
+                                    "adm": "some-test-ad",
+                                    "crid": "test-crid",
+                                    "h": 50,
+                                    "w": 320,
+                                    "mtype": 1
+                                },
+                                {
+                                    "id": "test-bid-id-2",
+                                    "impid": "2",
+                                    "price": 1.10,
+                                    "adm": "some-test-ad-2",
+                                    "crid": "test-crid-2",
+                                    "h": 50,
+                                    "w": 300,
+                                    "mtype": 1
+                                }
+                            ]
+                        }
+                    ],
+                    "cur": "USD"
+                }
+            }
+        }
+    ],
+    "expectedBidResponses": [
+        {
+            "currency": "USD",
+            "bids": [
+                {
+                    "bid": {
+                        "id": "test-bid-id",
+                        "impid": "1",
+                        "price": 1.50,
+                        "adm": "some-test-ad",
+                        "crid": "test-crid",
+                        "w": 320,
+                        "h": 50,
+                        "mtype": 1
+                    },
+                    "type": "banner"
+                },
+                {
+                    "bid": {
+                        "id": "test-bid-id-2",
+                        "impid": "2",
+                        "price": 1.10,
+                        "adm": "some-test-ad-2",
+                        "crid": "test-crid-2",
+                        "w": 300,
+                        "h": 50,
+                        "mtype": 1
+                    },
+                    "type": "banner"
+                }
+            ]
+        }
+    ]
+}
diff --git a/adapters/aidem/aidemtest/exemplary/multi-imps-single-bid.json b/adapters/aidem/aidemtest/exemplary/multi-imps-single-bid.json
new file mode 100644
index 00000000..9eae7101
--- /dev/null
+++ b/adapters/aidem/aidemtest/exemplary/multi-imps-single-bid.json
@@ -0,0 +1,131 @@
+{
+    "mockBidRequest": {
+        "id": "test-request-id",
+        "imp": [
+            {
+                "id": "1",
+                "banner": {
+                    "format": [
+                        {
+                            "w": 320,
+                            "h": 50
+                        }
+                    ]
+                },
+                "ext": {
+                    "bidder": {
+                        "siteId": "TCID",
+                        "publisherId": "1234"
+                    }
+                }
+            },
+            {
+                "id": "2",
+                "banner": {
+                    "format": [
+                        {
+                            "w": 300,
+                            "h": 50
+                        }
+                    ]
+                },
+                "ext": {
+                    "bidder": {
+                        "siteId": "TCID",
+                        "publisherId": "1234"
+                    }
+                }
+            }
+        ]
+    },
+    "httpCalls": [
+        {
+            "expectedRequest": {
+                "uri": "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request",
+                "body": {
+                    "id": "test-request-id",
+                    "imp": [
+                        {
+                            "id": "1",
+                            "banner": {
+                                "format": [
+                                    {
+                                        "w": 320,
+                                        "h": 50
+                                    }
+                                ]
+                            },
+                            "ext": {
+                                "bidder": {
+                                    "siteId": "TCID",
+                                    "publisherId": "1234"
+                                }
+                            }
+                        },
+                        {
+                            "id": "2",
+                            "banner": {
+                                "format": [
+                                    {
+                                        "w": 300,
+                                        "h": 50
+                                    }
+                                ]
+                            },
+                            "ext": {
+                                "bidder": {
+                                    "siteId": "TCID",
+                                    "publisherId": "1234"
+                                }
+                            }
+                        }
+                    ]
+                }
+            },
+            "mockResponse": {
+                "status": 200,
+                "body": {
+                    "id": "test-request-id",
+                    "seatbid": [
+                        {
+                            "seat": "aax",
+                            "bid": [
+                                {
+                                    "id": "test-bid-id",
+                                    "impid": "1",
+                                    "price": 1.50,
+                                    "adm": "some-test-ad",
+                                    "crid": "test-crid",
+                                    "h": 50,
+                                    "w": 320,
+                                    "mtype": 1
+                                }
+                            ]
+                        }
+                    ],
+                    "cur": "USD"
+                }
+            }
+        }
+    ],
+    "expectedBidResponses": [
+        {
+            "currency": "USD",
+            "bids": [
+                {
+                    "bid": {
+                        "id": "test-bid-id",
+                        "impid": "1",
+                        "price": 1.50,
+                        "adm": "some-test-ad",
+                        "crid": "test-crid",
+                        "w": 320,
+                        "h": 50,
+                        "mtype": 1
+                    },
+                    "type": "banner"
+                }
+            ]
+        }
+    ]
+}
diff --git a/adapters/aidem/aidemtest/exemplary/no-bid.json b/adapters/aidem/aidemtest/exemplary/no-bid.json
new file mode 100644
index 00000000..7418425f
--- /dev/null
+++ b/adapters/aidem/aidemtest/exemplary/no-bid.json
@@ -0,0 +1,58 @@
+{
+    "mockBidRequest": {
+        "id": "test-request-id",
+        "imp": [
+            {
+                "id": "1",
+                "banner": {
+                    "format": [
+                        {
+                            "w": 300,
+                            "h": 250
+                        }
+                    ]
+                },
+                "ext": {
+                    "bidder": {
+                        "siteId": "TCID",
+                        "publisherId": "1234"
+                    }
+                }
+            }
+        ]
+    },
+    "httpCalls": [
+        {
+            "expectedRequest": {
+                "uri": "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request",
+                "body": {
+                    "id": "test-request-id",
+                    "imp": [
+                        {
+                            "id": "1",
+                            "banner": {
+                                "format": [
+                                    {
+                                        "w": 300,
+                                        "h": 250
+                                    }
+                                ]
+                            },
+                            "ext": {
+                                "bidder": {
+                                    "siteId": "TCID",
+                                    "publisherId": "1234"
+                                }
+                            }
+                        }
+                    ]
+                }
+            },
+            "mockResponse": {
+                "status": 204,
+                "body": {}
+            }
+        }
+    ],
+    "expectedBidResponses": []
+}
diff --git a/adapters/aidem/aidemtest/exemplary/optional-params.json b/adapters/aidem/aidemtest/exemplary/optional-params.json
new file mode 100644
index 00000000..69511fb5
--- /dev/null
+++ b/adapters/aidem/aidemtest/exemplary/optional-params.json
@@ -0,0 +1,60 @@
+{
+    "mockBidRequest": {
+        "id": "test-request-id",
+        "imp": [
+            {
+                "id": "1",
+                "banner": {
+                    "format": [
+                        {
+                            "w": 300,
+                            "h": 250
+                        }
+                    ]
+                },
+                "ext": {
+                    "bidder": {
+                        "siteId": "TCID",
+                        "publisherId": "1234",
+                        "placementId": "ext"
+                    }
+                }
+            }
+        ]
+    },
+    "httpCalls": [
+        {
+            "expectedRequest": {
+                "uri": "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request",
+                "body": {
+                    "id": "test-request-id",
+                    "imp": [
+                        {
+                            "id": "1",
+                            "banner": {
+                                "format": [
+                                    {
+                                        "w": 300,
+                                        "h": 250
+                                    }
+                                ]
+                            },
+                            "ext": {
+                                "bidder": {
+                                    "siteId": "TCID",
+                                    "publisherId": "1234",
+                                    "placementId": "ext"
+                                }
+                            }
+                        }
+                    ]
+                }
+            },
+            "mockResponse": {
+                "status": 204,
+                "body": {}
+            }
+        }
+    ],
+    "expectedBidResponses": []
+}
diff --git a/adapters/aidem/aidemtest/exemplary/simple-banner.json b/adapters/aidem/aidemtest/exemplary/simple-banner.json
new file mode 100644
index 00000000..73db297e
--- /dev/null
+++ b/adapters/aidem/aidemtest/exemplary/simple-banner.json
@@ -0,0 +1,97 @@
+{
+    "mockBidRequest": {
+        "id": "test-request-id",
+        "imp": [
+            {
+                "id": "1",
+                "banner": {
+                    "format": [
+                        {
+                            "w": 320,
+                            "h": 50
+                        }
+                    ]
+                },
+                "ext": {
+                    "bidder": {
+                        "siteId": "TCID",
+                        "publisherId": "1234"
+                    }
+                }
+            }
+        ]
+    },
+    "httpCalls": [
+        {
+            "expectedRequest": {
+                "uri": "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request",
+                "body": {
+                    "id": "test-request-id",
+                    "imp": [
+                        {
+                            "id": "1",
+                            "banner": {
+                                "format": [
+                                    {
+                                        "w": 320,
+                                        "h": 50
+                                    }
+                                ]
+                            },
+                            "ext": {
+                                "bidder": {
+                                    "siteId": "TCID",
+                                    "publisherId": "1234"
+                                }
+                            }
+                        }
+                    ]
+                }
+            },
+            "mockResponse": {
+                "status": 200,
+                "body": {
+                    "id": "test-request-id",
+                    "seatbid": [
+                        {
+                            "seat": "aax",
+                            "bid": [
+                                {
+                                    "id": "test-bid-id",
+                                    "impid": "1",
+                                    "price": 1.50,
+                                    "adm": "some-test-ad",
+                                    "crid": "test-crid",
+                                    "h": 50,
+                                    "w": 320,
+                                    "mtype": 1
+                                }
+                            ]
+                        }
+                    ],
+                    "cur": "USD"
+                }
+            }
+        }
+    ],
+    "expectedBidResponses": [
+        {
+            "currency": "USD",
+            "bids": [
+                {
+                    "bid": {
+                        "id": "test-bid-id",
+                        "impid": "1",
+                        "price": 1.50,
+                        "adm": "some-test-ad",
+                        "crid": "test-crid",
+                        "w": 320,
+                        "h": 50,
+                        "mtype": 1
+                    },
+                    "type": "banner"
+                }
+            ]
+        }
+    ]
+}
diff --git a/adapters/aidem/aidemtest/exemplary/simple-video.json b/adapters/aidem/aidemtest/exemplary/simple-video.json
new file mode 100644
index 00000000..0daaffaa
--- /dev/null
+++ b/adapters/aidem/aidemtest/exemplary/simple-video.json
@@ -0,0 +1,103 @@
+{
+    "mockBidRequest": {
+        "id": "test-request-id",
+        "imp": [
+            {
+                "id": "1",
+                "video": {
+                    "mimes": [
+                        "video/mp4"
+                    ],
+                    "protocols": [
+                        2,
+                        5
+                    ],
+                    "w": 320,
+                    "h": 480
+                },
+                "ext": {
+                    "bidder": {
+                        "siteId": "TCID",
+                        "publisherId": "1234"
+                    }
+                }
+            }
+        ]
+    },
+    "httpCalls": [
+        {
+            "expectedRequest": {
+                "uri": "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request",
+                "body": {
+                    "id": "test-request-id",
+                    "imp": [
+                        {
+                            "id": "1",
+                            "video": {
+                                "mimes": [
+                                    "video/mp4"
+                                ],
+                                "protocols": [
+                                    2,
+                                    5
+                                ],
+                                "w": 320,
+                                "h": 480
+                            },
+                            "ext": {
+                                "bidder": {
+                                    "siteId": "TCID",
+                                    "publisherId": "1234"
+                                }
+                            }
+                        }
+                    ]
+                }
+            },
+            "mockResponse": {
+                "status": 200,
+                "body": {
+                    "id": "test-request-id",
+                    "cur": "USD",
+                    "seatbid": [
+                        {
+                            "seat": "aax",
+                            "bid": [
+                                {
+                                    "id": "test-bid-id",
+                                    "impid": "1",
+                                    "price": 2.50,
+                                    "adm": "some-test-ad",
+                                    "crid": "test-crid",
+                                    "w": 320,
+                                    "h": 480,
+                                    "mtype": 2
+                                }
+                            ]
+                        }
+                    ]
+                }
+            }
+        }
+    ],
+    "expectedBidResponses": [
+        {
+            "currency": "USD",
+            "bids": [
+                {
+                    "bid": {
+                        "id": "test-bid-id",
+                        "impid": "1",
+                        "price": 2.50,
+                        "adm": "some-test-ad",
+                        "crid": "test-crid",
+                        "w": 320,
+                        "h": 480,
+                        "mtype": 2
+                    },
+                    "type": "video"
+                }
+            ]
+        }
+    ]
+}
diff --git a/adapters/aidem/aidemtest/supplemental/invalid-req-400-status-code-bad-request.json b/adapters/aidem/aidemtest/supplemental/invalid-req-400-status-code-bad-request.json
new file mode 100644
index 00000000..3dea13ef
--- /dev/null
+++ b/adapters/aidem/aidemtest/supplemental/invalid-req-400-status-code-bad-request.json
@@ -0,0 +1,97 @@
+{
+    "mockBidRequest": {
+        "id": "some-request-id",
+        "tmax": 1000,
+        "user": {
+            "buyeruid": "0000-000-000-0000"
+        },
+        "app": {
+            "publisher": {
+                "id": "123456789"
+            },
+            "cat": [
+                "IAB22-1"
+            ],
+            "bundle": "com.app.awesome",
+            "name": "Awesome App",
+            "domain": "awesomeapp.com",
+            "id": "123456789"
+        },
+        "imp": [
+            {
+                "id": "some-impression-id",
+                "video": {
+                    "mimes": [
+                        "video/mp4"
+                    ],
+                    "w": 640,
+                    "h": 480,
+                    "minduration": 120,
+                    "maxduration": 150
+                },
+                "ext": {
+                    "bidder": {
+                        "siteId": "TCID",
+                        "publisherId": "1234"
+                    }
+                }
+            }
+        ]
+    },
+    "httpCalls": [
+        {
+            "expectedRequest": {
+                "uri": "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request",
+                "body": {
+                    "id": "some-request-id",
+                    "imp": [
+                        {
+                            "id": "some-impression-id",
+                            "video": {
+                                "mimes": [
+                                    "video/mp4"
+                                ],
+                                "w": 640,
+                                "h": 480,
+                                "minduration": 120,
+                                "maxduration": 150
+                            },
+                            "ext": {
+                                "bidder": {
+                                    "siteId": "TCID",
+                                    "publisherId": "1234"
+                                }
+                            }
+                        }
+                    ],
+                    "app": {
+                        "publisher": {
+                            "id": "123456789"
+                        },
+                        "cat": [
+                            "IAB22-1"
+                        ],
+                        "bundle": "com.app.awesome",
+                        "name": "Awesome App",
+                        "domain": "awesomeapp.com",
+                        "id": "123456789"
+                    },
+                    "user": {
+                        "buyeruid": "0000-000-000-0000"
+                    },
+                    "tmax": 1000
+                }
+            },
+            "mockResponse": {
+                "status": 400
+            }
+        }
+    ],
+    "expectedBidResponses": [],
+    "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/aidem/aidemtest/supplemental/invalid-res-200-status-code-empty-bids.json b/adapters/aidem/aidemtest/supplemental/invalid-res-200-status-code-empty-bids.json
new file mode 100644
index 00000000..dd64125f
--- /dev/null
+++ b/adapters/aidem/aidemtest/supplemental/invalid-res-200-status-code-empty-bids.json
@@ -0,0 +1,102 @@
+{
+    "mockBidRequest": {
+        "id": "some-request-id",
+        "tmax": 1000,
+        "user": {
+            "buyeruid": "0000-000-000-0000"
+        },
+        "app": {
+            "publisher": {
+                "id": "123456789"
+            },
+            "cat": [
+                "IAB22-1"
+            ],
+            "bundle": "com.app.awesome",
+            "name": "Awesome App",
+            "domain": "awesomeapp.com",
+            "id": "123456789"
+        },
+        "imp": [
+            {
+                "id": "some-impression-id",
+                "video": {
+                    "mimes": [
+                        "video/mp4"
+                    ],
+                    "w": 640,
+                    "h": 480,
+                    "minduration": 120,
+                    "maxduration": 150
+                },
+                "ext": {
+                    "bidder": {
+                        "siteId": "TCID",
+                        "publisherId": "1234"
+                    }
+                }
+            }
+        ]
+    },
+    "httpCalls": [
+        {
+            "expectedRequest": {
+                "uri": "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request",
+                "body": {
+                    "id": "some-request-id",
+                    "imp": [
+                        {
+                            "id": "some-impression-id",
+                            "video": {
+                                "mimes": [
+                                    "video/mp4"
+                                ],
+                                "w": 640,
+                                "h": 480,
+                                "minduration": 120,
+                                "maxduration": 150
+                            },
+                            "ext": {
+                                "bidder": {
+                                    "siteId": "TCID",
+                                    "publisherId": "1234"
+                                }
+                            }
+                        }
+                    ],
+                    "app": {
+                        "publisher": {
+                            "id": "123456789"
+                        },
+                        "cat": [
+                            "IAB22-1"
+                        ],
+                        "bundle": "com.app.awesome",
+                        "name": "Awesome App",
+                        "domain": "awesomeapp.com",
+                        "id": "123456789"
+                    },
+                    "user": {
+                        "buyeruid": "0000-000-000-0000"
+                    },
+                    "tmax": 1000
+                }
+            },
+            "mockResponse": {
+                "status": 200,
+                "body": {
+                    "id": "tid",
+                    "seatbid": [],
+                    "bidid": "bid01"
+                }
+            }
+        }
+    ],
+    "expectedBidResponses": [],
+    "expectedMakeBidsErrors": [
+        {
+            "value": "Empty SeatBid array",
+            "comparison": "literal"
+        }
+    ]
+}
\ No newline at end of file
diff --git a/adapters/aidem/aidemtest/supplemental/invalid-resp-multi-imp-type.json b/adapters/aidem/aidemtest/supplemental/invalid-resp-multi-imp-type.json
new file mode 100644
index 00000000..95f97d31
--- /dev/null
+++ b/adapters/aidem/aidemtest/supplemental/invalid-resp-multi-imp-type.json
@@ -0,0 +1,151 @@
+{
+    "mockBidRequest": {
+        "id": "test-request-id",
+        "imp": [
+            {
+                "id": "test-imp-id",
+                "banner": {
+                    "w": 300,
+                    "h": 250
+                },
+                "video": {
+                    "mimes": [
+                        "video/mp4"
+                    ],
+                    "w": 640,
+                    "h": 480,
+                    "minduration": 120,
+                    "maxduration": 150
+                },
+                "native": {
+                    "ver": "1.1",
+                    "request": "{\"adunit\":2,\"assets\":[{\"id\":3,\"img\":{\"h\":120,\"hmin\":0,\"type\":3,\"w\":180,\"wmin\":0},\"required\":1},{\"id\":0,\"required\":1,\"title\":{\"len\":25}},{\"data\":{\"len\":25,\"type\":1},\"id\":4,\"required\":1},{\"data\":{\"len\":140,\"type\":2},\"id\":6,\"required\":1}],\"context\":1,\"layout\":1,\"contextsubtype\":11,\"plcmtcnt\":1,\"plcmttype\":2,\"ver\":\"1.1\",\"ext\":{\"banner\":{\"w\":320,\"h\":50}}}"
+                },
+                "ext": {
+                    "bidder": {
+                        "siteId": "TCID",
+                        "publisherId": "1234"
+                    }
+                }
+            }
+        ],
+        "site": {
+            "domain": "www.example.com",
+            "page": "http://www.example.com",
+            "publisher": {
+                "domain": "example.com"
+            },
+            "ext": {
+                "amp": 0
+            }
+        },
+        "device": {
+            "ua": "userAgent",
+            "ip": "193.168.244.1"
+        },
+        "at": 1,
+        "tmax": 5000,
+        "cur": [
+            "USD"
+        ],
+        "regs": {
+            "ext": {
+                "gdpr": 0
+            }
+        }
+    },
+    "httpCalls": [
+        {
+            "expectedRequest": {
+                "uri": "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request",
+                "body": {
+                    "id": "test-request-id",
+                    "imp": [
+                        {
+                            "id": "test-imp-id",
+                            "banner": {
+                                "w": 300,
+                                "h": 250
+                            },
+                            "video": {
+                                "mimes": [
+                                    "video/mp4"
+                                ],
+                                "w": 640,
+                                "h": 480,
+                                "minduration": 120,
+                                "maxduration": 150
+                            },
+                            "native": {
+                                "ver": "1.1",
+                                "request": "{\"adunit\":2,\"assets\":[{\"id\":3,\"img\":{\"h\":120,\"hmin\":0,\"type\":3,\"w\":180,\"wmin\":0},\"required\":1},{\"id\":0,\"required\":1,\"title\":{\"len\":25}},{\"data\":{\"len\":25,\"type\":1},\"id\":4,\"required\":1},{\"data\":{\"len\":140,\"type\":2},\"id\":6,\"required\":1}],\"context\":1,\"layout\":1,\"contextsubtype\":11,\"plcmtcnt\":1,\"plcmttype\":2,\"ver\":\"1.1\",\"ext\":{\"banner\":{\"w\":320,\"h\":50}}}"
+                            },
+                            "ext": {
+                                "bidder": {
+                                    "siteId": "TCID",
+                                    "publisherId": "1234"
+                                }
+                            }
+                        }
+                    ],
+                    "site": {
+                        "domain": "www.example.com",
+                        "page": "http://www.example.com",
+                        "publisher": {
+                            "domain": "example.com"
+                        },
+                        "ext": {
+                            "amp": 0
+                        }
+                    },
+                    "device": {
+                        "ua": "userAgent",
+                        "ip": "193.168.244.1"
+                    },
+                    "at": 1,
+                    "tmax": 5000,
+                    "cur": [
+                        "USD"
+                    ],
+                    "regs": {
+                        "ext": {
+                            "gdpr": 0
+                        }
+                    }
+                }
+            },
+            "mockResponse": {
+                "status": 200,
+                "body": {
+                    "id": "tid",
+                    "seatbid": [
+                        {
+                            "seat": "aax",
+                            "bid": [
+                                {
+                                    "id": "randomid",
+                                    "impid": "test-imp-id",
+                                    "price": 0.500000,
+                                    "adid": "12345678",
+                                    "adm": "some-test-ad",
+                                    "cid": "987",
+                                    "crid": "12345678",
+                                    "h": 250,
+                                    "w": 300
+                                }
+                            ]
+                        }
+                    ],
+                    "bidid": "bid01"
+                }
+            }
+        }
+    ],
+    "expectedBidResponses": [{"currency":"USD","bids":[]}],
+    "expectedMakeBidsErrors": [
+        {
+            "value": "Unable to fetch mediaType in multi-format: test-imp-id",
+            "comparison": "literal"
+        }
+    ]
+}
\ No newline at end of file
diff --git a/adapters/aidem/aidemtest/supplemental/valid-req-200-bid-response-from-aidem.json b/adapters/aidem/aidemtest/supplemental/valid-req-200-bid-response-from-aidem.json
new file mode 100644
index 00000000..cbd534cd
--- /dev/null
+++ b/adapters/aidem/aidemtest/supplemental/valid-req-200-bid-response-from-aidem.json
@@ -0,0 +1,141 @@
+{
+    "mockBidRequest": {
+        "id": "test-request-id",
+        "imp": [
+            {
+                "id": "test-imp-id",
+                "banner": {
+                    "w": 300,
+                    "h": 250
+                },
+                "ext": {
+                    "bidder": {
+                        "siteId": "TCID",
+                        "publisherId": "1234"
+                    }
+                }
+            }
+        ],
+        "site": {
+            "domain": "www.example.com",
+            "page": "http://www.example.com",
+            "publisher": {
+                "domain": "example.com"
+            },
+            "ext": {
+                "amp": 0
+            }
+        },
+        "device": {
+            "ua": "userAgent",
+            "ip": "193.168.244.1"
+        },
+        "at": 1,
+        "tmax": 5000,
+        "cur": [
+            "USD"
+        ],
+        "regs": {
+            "ext": {
+                "gdpr": 0
+            }
+        }
+    },
+    "httpCalls": [
+        {
+            "expectedRequest": {
+                "uri": "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request",
+                "body": {
+                    "id": "test-request-id",
+                    "imp": [
+                        {
+                            "id": "test-imp-id",
+                            "banner": {
+                                "w": 300,
+                                "h": 250
+                            },
+                            "ext": {
+                                "bidder": {
+                                    "siteId": "TCID",
+                                    "publisherId": "1234"
+                                }
+                            }
+                        }
+                    ],
+                    "site": {
+                        "domain": "www.example.com",
+                        "page": "http://www.example.com",
+                        "publisher": {
+                            "domain": "example.com"
+                        },
+                        "ext": {
+                            "amp": 0
+                        }
+                    },
+                    "device": {
+                        "ua": "userAgent",
+                        "ip": "193.168.244.1"
+                    },
+                    "at": 1,
+                    "tmax": 5000,
+                    "cur": [
+                        "USD"
+                    ],
+                    "regs": {
+                        "ext": {
+                            "gdpr": 0
+                        }
+                    }
+                }
+            },
+            "mockResponse": {
+                "status": 200,
+                "body": {
+                    "id": "tid",
+                    "seatbid": [
+                        {
+                            "seat": "aax",
+                            "bid": [
+                                {
+                                    "id": "randomid",
+                                    "impid": "test-imp-id",
+                                    "price": 0.500000,
+                                    "adid": "12345678",
+                                    "adm": "some-test-ad",
+                                    "cid": "987",
+                                    "crid": "12345678",
+                                    "h": 250,
+                                    "w": 300,
+                                    "mtype": 1
+                                }
+                            ]
+                        }
+                    ],
+                    "bidid": "bid01"
+                }
+            }
+        }
+    ],
+    "expectedBidResponses": [
+        {
+            "currency": "USD",
+            "bids": [
+                {
+                    "bid": {
+                        "id": "randomid",
+                        "impid": "test-imp-id",
+                        "price": 0.500000,
+                        "adid": "12345678",
+                        "adm": "some-test-ad",
+                        "cid": "987",
+                        "crid": "12345678",
+                        "h": 250,
+                        "w": 300,
+                        "mtype": 1
+                    },
+                    "type": "banner"
+                }
+            ]
+        }
+    ]
+}
\ No newline at end of file
diff --git a/adapters/aidem/aidemtest/supplemental/valid-req-204-response-from-aidem.json b/adapters/aidem/aidemtest/supplemental/valid-req-204-response-from-aidem.json
new file mode 100644
index 00000000..ddd4e5a7
--- /dev/null
+++ b/adapters/aidem/aidemtest/supplemental/valid-req-204-response-from-aidem.json
@@ -0,0 +1,66 @@
+{
+    "mockBidRequest": {
+        "app": {
+            "bundle": "com.example.app"
+        },
+        "id": "req-id",
+        "device": {
+            "ifa": "9d8fe0a9-c0dd-4482-b16b-5709b00c608d",
+            "ip": "1.1.1.1",
+            "ua": "Mozilla/5.0 (Linux; Android 8.0.0; SM-G960F Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36"
+        },
+        "imp": [
+            {
+                "ext": {
+                    "bidder": {
+                        "siteId": "TCID",
+                        "publisherId": "1234"
+                    }
+                },
+                "banner": {
+                    "w": 320,
+                    "h": 50
+                },
+                "id": "imp-id"
+            }
+        ]
+    },
+    "httpCalls": [
+        {
+            "expectedRequest": {
+                "uri": "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request",
+                "body": {
+                    "app": {
+                        "bundle": "com.example.app"
+                    },
+                    "id": "req-id",
+                    "device": {
+                        "ifa": "9d8fe0a9-c0dd-4482-b16b-5709b00c608d",
+                        "ip": "1.1.1.1",
+                        "ua": "Mozilla/5.0 (Linux; Android 8.0.0; SM-G960F Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36"
+                    },
+                    "imp": [
+                        {
+                            "ext": {
+                                "bidder": {
+                                    "siteId": "TCID",
+                                    "publisherId": "1234"
+                                }
+                            },
+                            "banner": {
+                                "w": 320,
+                                "h": 50
+                            },
+                            "id": "imp-id"
+                        }
+                    ]
+                }
+            },
+            "mockResponse": {
+                "status": 204,
+                "body": {}
+            }
+        }
+    ],
+    "expectedBidResponses": []
+}
\ No newline at end of file
diff --git a/adapters/aidem/params_test.go b/adapters/aidem/params_test.go
new file mode 100644
index 00000000..36190c0b
--- /dev/null
+++ b/adapters/aidem/params_test.go
@@ -0,0 +1,57 @@
+package aidem
+
+import (
+	"encoding/json"
+	"testing"
+
+	"github.com/prebid/prebid-server/openrtb_ext"
+)
+
+// This file actually intends to test static/bidder-params/aidem.json TODO: MUST BE CREATED
+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.BidderAidem, json.RawMessage(validParam)); err != nil {
+			t.Errorf("Schema rejected aidem params: %s", validParam)
+		}
+	}
+}
+
+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.BidderAidem, json.RawMessage(invalidParam)); err == nil {
+			t.Errorf("Schema allowed unexpected params: %s", invalidParam)
+		}
+	}
+}
+
+var validParams = []string{
+	`{"siteId":"123", "publisherId":"1234"}`,
+	`{"siteId":"123", "publisherId":"1234", "placementId":"12345"}`,
+	`{"siteId":"123", "publisherId":"1234", "rateLimit":1}`,
+	`{"siteId":"123", "publisherId":"1234", "placementId":"12345", "rateLimit":1}`,
+}
+
+var invalidParams = []string{
+	``,
+	`null`,
+	`true`,
+	`5`,
+	`4.2`,
+	`[]`,
+	`{}`,
+	`{"siteId":"", "publisherId":""}`,
+	`{"siteId":"only siteId is present"}`,
+	`{"publisherId":"only publisherId is present"}`,
+	`{"ssiteId":"123","ppublisherId":"123"}`,
+	`{"aid":123, "placementId":"123", "siteId":"321"}`,
+}
diff --git a/adapters/aja/ajatest/supplemental/invalid-bid-type.json b/adapters/aja/ajatest/supplemental/invalid-bid-type.json
index 1bba635f..52f2c492 100644
--- a/adapters/aja/ajatest/supplemental/invalid-bid-type.json
+++ b/adapters/aja/ajatest/supplemental/invalid-bid-type.json
@@ -60,7 +60,7 @@
     }
   ],
 
-  "expectedBidResponses": [],
+  "expectedBidResponses": [{"currency":"USD","bids":[]}],
 
   "expectedMakeBidsErrors": [
     {
@@ -68,4 +68,4 @@
       "comparison": "literal"
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/adapters/algorix/algorixtest/supplemental/multiformat-no-mediatype-response.json b/adapters/algorix/algorixtest/supplemental/multiformat-no-mediatype-response.json
index 3828c52d..4d3ea894 100644
--- a/adapters/algorix/algorixtest/supplemental/multiformat-no-mediatype-response.json
+++ b/adapters/algorix/algorixtest/supplemental/multiformat-no-mediatype-response.json
@@ -81,6 +81,7 @@
     }
   ],
 
+  "expectedBidResponses": [{"currency":"USD","bids":[]}],
   "expectedMakeBidsErrors": [
     {
       "comparison": "literal",
diff --git a/adapters/apacdex/apacdextest/supplemental/wrong-bid-ext.json b/adapters/apacdex/apacdextest/supplemental/wrong-bid-ext.json
index f2842d88..f93cc011 100644
--- a/adapters/apacdex/apacdextest/supplemental/wrong-bid-ext.json
+++ b/adapters/apacdex/apacdextest/supplemental/wrong-bid-ext.json
@@ -66,10 +66,11 @@
       }
     }
   ],
+  "expectedBidResponses": [{"currency":"USD","bids":[]}],
   "expectedMakeBidsErrors": [
     {
       "value": "Failed to parse bid mediatype for impression \"another-imp-id\"",
       "comparison": "regex"
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/adapters/appnexus/appnexustest/supplemental/invalid-bid-type.json b/adapters/appnexus/appnexustest/supplemental/invalid-bid-type.json
index 9f5a07b4..6c7f1633 100644
--- a/adapters/appnexus/appnexustest/supplemental/invalid-bid-type.json
+++ b/adapters/appnexus/appnexustest/supplemental/invalid-bid-type.json
@@ -121,11 +121,11 @@
       }
     }
   ],
-
+  "expectedBidResponses": [{"currency":"USD","bids":[]}],
   "expectedMakeBidsErrors": [
     {
       "value": "Unrecognized bid_ad_type in response from appnexus: 2",
       "comparison": "literal"
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/adapters/appnexus/appnexustest/video/video-no-adpodid-two-imps-different-pod.json b/adapters/appnexus/appnexustest/video/video-no-adpodid-two-imps-different-pod.json
index 140cf0b0..ef1368ab 100644
--- a/adapters/appnexus/appnexustest/video/video-no-adpodid-two-imps-different-pod.json
+++ b/adapters/appnexus/appnexustest/video/video-no-adpodid-two-imps-different-pod.json
@@ -90,5 +90,6 @@
 		  "body": {}
 		}
 	  }
-	]
-  }
\ No newline at end of file
+	],
+    "expectedBidResponses": [{"currency":"USD","bids":[]}]
+  }
diff --git a/adapters/appnexus/appnexustest/video/video-same-adpodid-two-imps-same-pod.json b/adapters/appnexus/appnexustest/video/video-same-adpodid-two-imps-same-pod.json
index 86fa14aa..efaf95ed 100644
--- a/adapters/appnexus/appnexustest/video/video-same-adpodid-two-imps-same-pod.json
+++ b/adapters/appnexus/appnexustest/video/video-same-adpodid-two-imps-same-pod.json
@@ -93,5 +93,6 @@
 		  "body": {}
 		}
 	  }
-	]
-  }
\ No newline at end of file
+	],
+    "expectedBidResponses": [{"currency":"USD","bids":[]}]
+  }
diff --git a/adapters/audienceNetwork/audienceNetworktest/supplemental/invalid-adm.json b/adapters/audienceNetwork/audienceNetworktest/supplemental/invalid-adm.json
index c33807bd..a5a9384e 100644
--- a/adapters/audienceNetwork/audienceNetworktest/supplemental/invalid-adm.json
+++ b/adapters/audienceNetwork/audienceNetworktest/supplemental/invalid-adm.json
@@ -96,8 +96,9 @@
             }
         }
     }],
+    "expectedBidResponses": [{"currency":"USD","bids":[]}],
     "expectedMakeBidsErrors": [{
         "value": "invalid character 'm' looking for beginning of value",
         "comparison": "literal"
     }]
-}
\ No newline at end of file
+}
diff --git a/adapters/avocet/avocettest/exemplary/video.json b/adapters/avocet/avocettest/exemplary/video.json
index 2398256b..64c3fa3b 100644
--- a/adapters/avocet/avocettest/exemplary/video.json
+++ b/adapters/avocet/avocettest/exemplary/video.json
@@ -77,28 +77,34 @@
       }
     }
   ],
-
-  "expectedBids": [
+  "expectedBidResponses": [
     {
-      "bid": {
-        "adm": "<VAST version=\"3.0\"><Ad id=\"5ec530e32d57fe1100f17d87\"><Wrapper><AdSystem>Avocet</AdSystem><VASTAdTagURI><![CDATA[http://ads.staging.avct.cloud/vast?x=1&uuid=0df2c449-6d85-4179-b5d5-37f2f91caa24&ty=h&crid=5ec530e32d57fe1100f17d87&tacid=5ec531d32d57fe1100f17d89&aid=749d36d7-c993-455f-aefd-ffd8a7e3ccf_0&accid=5b51dd1634f2021f127ff7c0&brid=5b51e20f34f2021f127ff7c4&ioid=5b51e22089654741306813a1&caid=5b51e2d689654741306813a4&it=2&iobsid=496e8cff35b2c0110029534d&ext_aid=749d36d7-c993-455f-aefd-ffd8a7e3ccf_0&bp=15.64434783&bt=1591875033134290518&h=396&w=600&vpr=0&vdp=0&domain=example.com&gco=54510b3b816269000061a0f7&stid=542d2c1615e3c013de53a6e2&glat=0&glong=0&bip4=3232238090&ext_siid=5ea89200c865f911007f1b0e&ext_pid=1&ext_sid=5ea84df8c865f911007f1ade&ext_plid=5ea9601ac865f911007f1b6a&optv=latest:latest&invsrc=5e722ee9bd6df11d063a8013&ug=0d&ca=0&biid=requestd-54644474bf-l7gx4|eu-central-1-staging&reg=eu-central-1&pixel=1&ck=1_c343bf14]]></VASTAdTagURI><Impression><![CDATA[http://ads.staging.avct.cloud/sv?pp=${AUCTION_PRICE}&uuid=0df2c449-6d85-4179-b5d5-37f2f91caa24&ty=h&crid=5ec530e32d57fe1100f17d87&tacid=5ec531d32d57fe1100f17d89&aid=749d36d7-c993-455f-aefd-ffd8a7e3ccf_0&accid=5b51dd1634f2021f127ff7c0&brid=5b51e20f34f2021f127ff7c4&ioid=5b51e22089654741306813a1&caid=5b51e2d689654741306813a4&it=2&iobsid=496e8cff35b2c0110029534d&ext_aid=749d36d7-c993-455f-aefd-ffd8a7e3ccf_0&bp=15.64434783&bt=1591875033134290518&h=396&w=600&vpr=0&vdp=0&domain=example.com&gco=54510b3b816269000061a0f7&stid=542d2c1615e3c013de53a6e2&glat=0&glong=0&bip4=3232238090&ext_siid=5ea89200c865f911007f1b0e&ext_pid=1&ext_sid=5ea84df8c865f911007f1ade&ext_plid=5ea9601ac865f911007f1b6a&optv=latest:latest&invsrc=5e722ee9bd6df11d063a8013&ug=0d&ca=0&biid=requestd-54644474bf-l7gx4|eu-central-1-staging&reg=eu-central-1&pixel=1&ck=1_c343bf14]]></Impression><Creatives><Creative AdId=\"5ec530e32d57fe1100f17d87\"><Linear><TrackingEvents></TrackingEvents><VideoClicks></VideoClicks></Linear></Creative></Creatives></Wrapper></Ad></VAST>",
-        "adomain": ["avocet.io"],
-        "cid": "5b51e2d689654741306813a4",
-        "crid": "5ec530e32d57fe1100f17d87",
-        "h": 396,
-        "id": "3d4c2d45-5a8c-43b8-9e15-4f48ac45204f",
-        "impid": "dfp-ad--top-above-nav",
-        "iurl": "https://cdn.staging.avocet.io/snapshots/5b51dd1634f2021f127ff7c0/5ec530e32d57fe1100f17d87.jpeg",
-        "language": "en",
-        "price": 15.64434783,
-        "w": 600,
-        "ext": {
-          "avocet": {
-            "duration": 30
-          }
+      "currency": "EUR",
+      "bids": [
+        {
+          "bid": {
+            "adm": "<VAST version=\"3.0\"><Ad id=\"5ec530e32d57fe1100f17d87\"><Wrapper><AdSystem>Avocet</AdSystem><VASTAdTagURI><![CDATA[http://ads.staging.avct.cloud/vast?x=1&uuid=0df2c449-6d85-4179-b5d5-37f2f91caa24&ty=h&crid=5ec530e32d57fe1100f17d87&tacid=5ec531d32d57fe1100f17d89&aid=749d36d7-c993-455f-aefd-ffd8a7e3ccf_0&accid=5b51dd1634f2021f127ff7c0&brid=5b51e20f34f2021f127ff7c4&ioid=5b51e22089654741306813a1&caid=5b51e2d689654741306813a4&it=2&iobsid=496e8cff35b2c0110029534d&ext_aid=749d36d7-c993-455f-aefd-ffd8a7e3ccf_0&bp=15.64434783&bt=1591875033134290518&h=396&w=600&vpr=0&vdp=0&domain=example.com&gco=54510b3b816269000061a0f7&stid=542d2c1615e3c013de53a6e2&glat=0&glong=0&bip4=3232238090&ext_siid=5ea89200c865f911007f1b0e&ext_pid=1&ext_sid=5ea84df8c865f911007f1ade&ext_plid=5ea9601ac865f911007f1b6a&optv=latest:latest&invsrc=5e722ee9bd6df11d063a8013&ug=0d&ca=0&biid=requestd-54644474bf-l7gx4|eu-central-1-staging&reg=eu-central-1&pixel=1&ck=1_c343bf14]]></VASTAdTagURI><Impression><![CDATA[http://ads.staging.avct.cloud/sv?pp=${AUCTION_PRICE}&uuid=0df2c449-6d85-4179-b5d5-37f2f91caa24&ty=h&crid=5ec530e32d57fe1100f17d87&tacid=5ec531d32d57fe1100f17d89&aid=749d36d7-c993-455f-aefd-ffd8a7e3ccf_0&accid=5b51dd1634f2021f127ff7c0&brid=5b51e20f34f2021f127ff7c4&ioid=5b51e22089654741306813a1&caid=5b51e2d689654741306813a4&it=2&iobsid=496e8cff35b2c0110029534d&ext_aid=749d36d7-c993-455f-aefd-ffd8a7e3ccf_0&bp=15.64434783&bt=1591875033134290518&h=396&w=600&vpr=0&vdp=0&domain=example.com&gco=54510b3b816269000061a0f7&stid=542d2c1615e3c013de53a6e2&glat=0&glong=0&bip4=3232238090&ext_siid=5ea89200c865f911007f1b0e&ext_pid=1&ext_sid=5ea84df8c865f911007f1ade&ext_plid=5ea9601ac865f911007f1b6a&optv=latest:latest&invsrc=5e722ee9bd6df11d063a8013&ug=0d&ca=0&biid=requestd-54644474bf-l7gx4|eu-central-1-staging&reg=eu-central-1&pixel=1&ck=1_c343bf14]]></Impression><Creatives><Creative AdId=\"5ec530e32d57fe1100f17d87\"><Linear><TrackingEvents></TrackingEvents><VideoClicks></VideoClicks></Linear></Creative></Creatives></Wrapper></Ad></VAST>",
+            "adomain": [
+              "avocet.io"
+            ],
+            "cid": "5b51e2d689654741306813a4",
+            "crid": "5ec530e32d57fe1100f17d87",
+            "ext": {
+              "avocet": {
+                "duration": 30
+              }
+            },
+            "h": 396,
+            "id": "3d4c2d45-5a8c-43b8-9e15-4f48ac45204f",
+            "impid": "dfp-ad--top-above-nav",
+            "iurl": "https://cdn.staging.avocet.io/snapshots/5b51dd1634f2021f127ff7c0/5ec530e32d57fe1100f17d87.jpeg",
+            "language": "en",
+            "price": 15.64434783,
+            "w": 600
+          },
+          "type": "video"
         }
-      },
-      "type": "video"
+      ]
     }
   ]
 }
diff --git a/adapters/beachfront/beachfronttest/supplemental/banner-and-adm-video-expected-204-response-on-banner.json b/adapters/beachfront/beachfronttest/supplemental/banner-and-adm-video-expected-204-response-on-banner.json
index 9b0f1863..27ed881f 100644
--- a/adapters/beachfront/beachfronttest/supplemental/banner-and-adm-video-expected-204-response-on-banner.json
+++ b/adapters/beachfront/beachfronttest/supplemental/banner-and-adm-video-expected-204-response-on-banner.json
@@ -148,7 +148,6 @@
   ],
 
   "expectedBidResponses": [
-    {"bids":[]},
     {
       "bids": [
         {
diff --git a/adapters/beachfront/beachfronttest/supplemental/six-nine-combo.json b/adapters/beachfront/beachfronttest/supplemental/six-nine-combo.json
index 294bd13d..c75642df 100644
--- a/adapters/beachfront/beachfronttest/supplemental/six-nine-combo.json
+++ b/adapters/beachfront/beachfronttest/supplemental/six-nine-combo.json
@@ -493,5 +493,111 @@
         }
       }
     }
+  ],
+  "expectedBidResponses": [
+      {"currency":"USD","bids":[
+        {"bid": {
+            "adm": "<div id=\"crid_1\">Buy now!</div>",
+            "crid": "crid_1",
+            "h": 150,
+            "id": "ADMVideoWithBannerImp1Banner",
+            "impid": "ADMVideoWithBannerImp1",
+            "price": 1.594764,
+            "w": 100
+        }, "type": "banner"},
+        {"bid": {
+            "adm": "<div id=\"crid_2\">Buy now!</div>",
+            "crid": "crid_2",
+            "h": 150,
+            "id": "ADMVideoWithBannerImp2Banner",
+            "impid": "ADMVideoWithBannerImp2",
+            "price": 1.594764,
+            "w": 100
+        }, "type": "banner"},
+        {"bid": {
+            "adm": "<div id=\"crid_3\">Buy now!</div>",
+            "crid": "crid_3",
+            "h": 1024,
+            "id": "RegularBannerImp4Banner",
+            "impid": "RegularBannerImp4",
+            "price": 1.501188,
+            "w": 1280
+        }, "type": "banner"},
+        {"bid": {
+            "adm": "<div id=\"crid_4\">Buy now!</div>",
+            "crid": "crid_4",
+            "h": 1024,
+            "id": "RegularBannerImp5Banner",
+            "impid": "RegularBannerImp5",
+            "price": 1.501188,
+            "w": 1280
+        }, "type": "banner"}
+      ]},
+      {"currency":"USD","bids":[
+        {
+          "bid": {
+            "id": "ADMVideoWithBannerImp1AdmVideo",
+            "impid": "ADMVideoWithBannerImp1",
+            "price": 0.8,
+            "adm": "<VAST version=\"2.0\"><Ad><Wrapper>http://example.com/vast.xml</Wrapper></Ad></VAST>",
+            "cat":["IAB2"],
+            "w": 300,
+            "h": 400,
+            "ext": {
+              "duration": 30
+            }
+          },
+          "type": "video"
+        }
+      ]},
+      {"currency":"USD","bids":[
+        {
+          "bid": {
+            "id": "ADMVideoWithBannerImp2AdmVideo",
+            "impid": "ADMVideoWithBannerImp2",
+            "price": 0.8,
+            "adm": "<VAST version=\"2.0\"><Ad><Wrapper>http://example.com/vast.xml</Wrapper></Ad></VAST>",
+            "cat":["IAB2"],
+            "w": 300,
+            "h": 400,
+            "ext": {
+              "duration": 30
+            }
+          },
+          "type": "video"
+        }
+      ]},
+      {"currency":"USD","bids":[
+        {
+          "bid": {
+            "id": "ADMVideoImp6AdmVideo",
+            "impid": "ADMVideoImp6",
+            "price": 0.8,
+            "adm": "<VAST version=\"2.0\"><Ad><Wrapper>http://example.com/vast.xml</Wrapper></Ad></VAST>",
+            "cat":["IAB2"],
+            "w": 100,
+            "h": 150,
+            "ext": {
+              "duration": 30
+            }
+          },
+          "type": "video"
+        }
+      ]},
+      {"currency":"USD","bids":[
+        {
+          "bid": {
+            "crid": "de5b4976-0d2a-4032-874c-35e2b3e3ab95",
+            "id": "NURLVideoImp3NurlVideo",
+            "impid": "NURLVideoImp3",
+            "nurl": "https://useast.bfmio.com/getBids?aid=bid:de5b4976-0d2a-4032-874c-35e2b3e3ab95: videoAppId1: 10.0: 10.0&v=1&dsp=5f7da002b6b0ca361fc692b0,0.01&i_type=pre",
+            "price": 20,
+            "w": 150,
+            "h": 300,
+            "ext": {}
+          },
+          "type": "video"
+        }
+      ]}
   ]
 }
diff --git a/adapters/beachfront/beachfronttest/supplemental/two-four-combo.json b/adapters/beachfront/beachfronttest/supplemental/two-four-combo.json
index 7310d0b4..a305034f 100644
--- a/adapters/beachfront/beachfronttest/supplemental/two-four-combo.json
+++ b/adapters/beachfront/beachfronttest/supplemental/two-four-combo.json
@@ -203,7 +203,7 @@
                   "w":300,
                   "h":400,
                   "ext":{
-                    "duration":15
+                    "duration":30
                   }
                 }
               ],
@@ -269,5 +269,62 @@
         }
       }
     }
+  ],
+  "expectedBidResponses": [
+      {"currency":"USD","bids":[
+        {"bid": {
+            "adm": "<div id=\"44861168\"><script>!function(){console.log\"Hello, ad.\";}();</script></div>",
+            "crid": "crid_1",
+            "h": 250,
+            "id": "div-gpt-ad-1460505748561-0Banner",
+            "impid": "div-gpt-ad-1460505748561-0",
+            "price": 2.942808,
+            "w": 300
+        }, "type": "banner"},
+        {"bid": {
+            "adm": "<div id=\"44861168\"><script>!function(){console.log\"Hello, ad.\";}();</script></div>",
+            "crid": "crid_1",
+            "h": 250,
+            "id": "div-gpt-ad-1460505748561-0Banner",
+            "impid": "div-gpt-ad-1460505748561-0",
+            "price": 2.942808,
+            "w": 300
+        }, "type": "banner"}
+      ]},
+      {"currency":"USD","bids":[
+        {
+          "bid": {
+            "adid": "22873",
+            "adomain": ["nintendo.com"],
+            "id": "ComboADMVideoWithBannerImp1AdmVideo",
+            "impid": "ComboADMVideoWithBannerImp1",
+            "price": 2.5500002,
+            "adm": "<VAST version=\"2.0\"><Ad><Wrapper>http://example.com/vast.xml</Wrapper></Ad></VAST>",
+            "cat":["IAB9-30"],
+            "cid": "6095",
+            "crid": "0",
+            "w": 300,
+            "h": 400,
+            "ext": {
+              "duration": 30
+            }
+          },
+          "type": "video"
+        }
+      ]},
+      {"currency":"USD","bids":[
+        {
+          "bid": {
+              "crid": "747f49a2-7a15-40bd-a43f-b8576eaa0368",
+            "id": "ComboNurlVideoWithBannerImp2NurlVideo",
+            "impid": "ComboNurlVideoWithBannerImp2",
+            "nurl": "https://useast.bfmio.com/getmu?aid=bid:747f49a2-7a15-40bd-a43f-b8576eaa0368:2096a4df-d32c-4b7b-b46c-f4b5d717327a:2.5500002:2.5500002&v=1&dsp=5fe7a6ab3f06cc571bf5c897,1.01&i_type=pre",
+            "price": 2.4700302,
+            "w": 100,
+            "h": 150
+          },
+          "type": "video"
+        }
+      ]}
   ]
 }
diff --git a/adapters/beintoo/beintootest/supplemental/add-bidfloor.json b/adapters/beintoo/beintootest/supplemental/add-bidfloor.json
index a53d11ff..b578701b 100644
--- a/adapters/beintoo/beintootest/supplemental/add-bidfloor.json
+++ b/adapters/beintoo/beintootest/supplemental/add-bidfloor.json
@@ -39,5 +39,5 @@
           }
         }
     }],
-    "expectedBidResponses": []
+    "expectedBidResponses": [{"currency":"USD","bids":[]}]
 }
diff --git a/adapters/beintoo/beintootest/supplemental/build-banner-object.json b/adapters/beintoo/beintootest/supplemental/build-banner-object.json
index 32756ff6..0ad6cf95 100644
--- a/adapters/beintoo/beintootest/supplemental/build-banner-object.json
+++ b/adapters/beintoo/beintootest/supplemental/build-banner-object.json
@@ -58,5 +58,5 @@
           }
         }
     }],
-    "expectedBidResponses": []
+    "expectedBidResponses": [{"currency":"USD","bids":[]}]
 }
diff --git a/adapters/beintoo/beintootest/supplemental/site-domain-and-url-correctly-parsed.json b/adapters/beintoo/beintootest/supplemental/site-domain-and-url-correctly-parsed.json
index d9b9f6e3..1f8ba2e1 100644
--- a/adapters/beintoo/beintootest/supplemental/site-domain-and-url-correctly-parsed.json
+++ b/adapters/beintoo/beintootest/supplemental/site-domain-and-url-correctly-parsed.json
@@ -58,5 +58,5 @@
         }
       }
     ],
-    "expectedBidResponses": []
+    "expectedBidResponses": [{"currency":"USD","bids":[]}]
   }
diff --git a/adapters/bidscube/bidscubetest/supplemental/bad_bidtype_response.json b/adapters/bidscube/bidscubetest/supplemental/bad_bidtype_response.json
index 62107dad..998ef2dd 100644
--- a/adapters/bidscube/bidscubetest/supplemental/bad_bidtype_response.json
+++ b/adapters/bidscube/bidscubetest/supplemental/bad_bidtype_response.json
@@ -96,6 +96,7 @@
       }
     }
   ],
+  "expectedBidResponses": [{"currency":"USD","bids":[]}],
   "expectedMakeBidsErrors": [
     {
       "value": "unable to read bid.ext.prebid.type: Key path not found",
diff --git a/adapters/bliink/bliinktest/supplemental/multiple_format_request.json b/adapters/bliink/bliinktest/supplemental/multiple_format_request.json
index 43ee1e9d..c85bc9ed 100644
--- a/adapters/bliink/bliinktest/supplemental/multiple_format_request.json
+++ b/adapters/bliink/bliinktest/supplemental/multiple_format_request.json
@@ -116,10 +116,11 @@
       }
     }
   ],
+  "expectedBidResponses": [{"currency":"USD","bids":[]}],
   "expectedMakeBidsErrors": [
     {
       "value": "unable to fetch mediaType in multi-format: some-impression-id",
       "comparison": "literal"
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/adapters/bluesea/blueseatest/supplemental/invalid-media-type.json b/adapters/bluesea/blueseatest/supplemental/invalid-media-type.json
index d04b7ce3..b4b4ad25 100644
--- a/adapters/bluesea/blueseatest/supplemental/invalid-media-type.json
+++ b/adapters/bluesea/blueseatest/supplemental/invalid-media-type.json
@@ -102,7 +102,7 @@
             }
         }
     ],
-
+    "expectedBidResponses": [{"currency":"USD","bids":[]}],
     "expectedMakeBidsErrors": [
       {
         "comparison": "literal",
diff --git a/adapters/colossus/colossustest/supplemental/bad_media_type.json b/adapters/colossus/colossustest/supplemental/bad_media_type.json
index e4a21787..828e0a80 100644
--- a/adapters/colossus/colossustest/supplemental/bad_media_type.json
+++ b/adapters/colossus/colossustest/supplemental/bad_media_type.json
@@ -72,6 +72,7 @@
             }
         }
     }],
+    "expectedBidResponses": [{"currency":"USD","bids":[]}],
     "expectedMakeBidsErrors": [
         {
           "value": "Failed to find impression \"test-imp-id\"",
diff --git a/adapters/cpmstar/cpmstartest/supplemental/wrong-impression-mapping.json b/adapters/cpmstar/cpmstartest/supplemental/wrong-impression-mapping.json
index 6ab02db0..e1e5ddf9 100644
--- a/adapters/cpmstar/cpmstartest/supplemental/wrong-impression-mapping.json
+++ b/adapters/cpmstar/cpmstartest/supplemental/wrong-impression-mapping.json
@@ -68,10 +68,11 @@
       }
     }
   ],
+  "expectedBidResponses": [{"currency":"USD","bids":[]}],
   "expectedMakeBidsErrors": [
     {
       "value": "bid id='test-bid-id' could not find valid impid='BOGUS-IMPID'",
       "comparison": "regex"
     }
 ]
-}
\ No newline at end of file
+}
diff --git a/adapters/deepintent/deepintenttest/supplemental/wrongimp.json b/adapters/deepintent/deepintenttest/supplemental/wrongimp.json
index 5021c51d..a8205217 100644
--- a/adapters/deepintent/deepintenttest/supplemental/wrongimp.json
+++ b/adapters/deepintent/deepintenttest/supplemental/wrongimp.json
@@ -111,6 +111,7 @@
         }
       }
     ],
+    "expectedBidResponses": [{"currency":"USD","bids":[]}],
     "expectedMakeBidsErrors": [
         {
           "value": "Failed to find impression test-imp-id1 ",
@@ -118,4 +119,4 @@
         }
       ]
   }
-  
\ No newline at end of file
+  
diff --git a/adapters/definemedia/definemediatest/supplemental/nobid-response.json b/adapters/definemedia/definemediatest/supplemental/nobid-response.json
index 2140ee9b..aaa942da 100644
--- a/adapters/definemedia/definemediatest/supplemental/nobid-response.json
+++ b/adapters/definemedia/definemediatest/supplemental/nobid-response.json
@@ -218,5 +218,5 @@
         }
       }
     ],
-    "expectedBidResponses": []
-  }
\ No newline at end of file
+    "expectedBidResponses": [{"currency":"USD","bids":[]}]
+  }
diff --git a/adapters/definemedia/definemediatest/supplemental/unsupported-type.json b/adapters/definemedia/definemediatest/supplemental/unsupported-type.json
index 0c1add16..91bfbc41 100644
--- a/adapters/definemedia/definemediatest/supplemental/unsupported-type.json
+++ b/adapters/definemedia/definemediatest/supplemental/unsupported-type.json
@@ -240,11 +240,11 @@
       }
     }
   ],
-  "expectedBidResponses": [],
+  "expectedBidResponses": [{"currency":"USD","bids":[]}],
   "expectedMakeBidsErrors": [
       {
         "value": "Invalid mediatype in the impression",
         "comparison": "literal"
       }
     ]
-}
\ No newline at end of file
+}
diff --git a/adapters/dianomi/dianomitest/supplemental/invalid-imp-mediatype.json b/adapters/dianomi/dianomitest/supplemental/invalid-imp-mediatype.json
index f12b62b0..1b7b522a 100644
--- a/adapters/dianomi/dianomitest/supplemental/invalid-imp-mediatype.json
+++ b/adapters/dianomi/dianomitest/supplemental/invalid-imp-mediatype.json
@@ -79,7 +79,7 @@
       }
     }
   ],
-  "expectedBidResponses": [],
+  "expectedBidResponses": [{"currency":"USD","bids":[]}],
   "expectedMakeBidsErrors": [ 
     {
       "value": "Failed to parse impression \"test-imp-id\" mediatype",
diff --git a/adapters/dianomi/dianomitest/supplemental/nobid-response.json b/adapters/dianomi/dianomitest/supplemental/nobid-response.json
index 7654e803..7a56456e 100644
--- a/adapters/dianomi/dianomitest/supplemental/nobid-response.json
+++ b/adapters/dianomi/dianomitest/supplemental/nobid-response.json
@@ -44,6 +44,6 @@
       }
     }
   ],
-  "expectedBidResponses": [],
+  "expectedBidResponses": [{"currency":"USD","bids":[]}],
   "expectedMakeBidsErrors": []
 }
diff --git a/adapters/emx_digital/emx_digitaltest/supplemental/add-bidfloor.json b/adapters/emx_digital/emx_digitaltest/supplemental/add-bidfloor.json
index 50ab8f16..2e3dbc36 100644
--- a/adapters/emx_digital/emx_digitaltest/supplemental/add-bidfloor.json
+++ b/adapters/emx_digital/emx_digitaltest/supplemental/add-bidfloor.json
@@ -46,5 +46,5 @@
           }
         }
     }],
-    "expectedBidResponses": []
+    "expectedBidResponses": [{"currency":"USD","bids":[]}]
 }
diff --git a/adapters/emx_digital/emx_digitaltest/supplemental/app-domain-and-url-correctly-parsed.json b/adapters/emx_digital/emx_digitaltest/supplemental/app-domain-and-url-correctly-parsed.json
index 9e885666..8930efaf 100644
--- a/adapters/emx_digital/emx_digitaltest/supplemental/app-domain-and-url-correctly-parsed.json
+++ b/adapters/emx_digital/emx_digitaltest/supplemental/app-domain-and-url-correctly-parsed.json
@@ -63,5 +63,5 @@
         }
       }
     ],
-    "expectedBidResponses":[]
+    "expectedBidResponses": [{"currency":"USD","bids":[]}]
   }
diff --git a/adapters/emx_digital/emx_digitaltest/supplemental/app-storeUrl-correctly-parsed.json b/adapters/emx_digital/emx_digitaltest/supplemental/app-storeUrl-correctly-parsed.json
index 198adb5a..4693a105 100644
--- a/adapters/emx_digital/emx_digitaltest/supplemental/app-storeUrl-correctly-parsed.json
+++ b/adapters/emx_digital/emx_digitaltest/supplemental/app-storeUrl-correctly-parsed.json
@@ -61,5 +61,5 @@
         }
       }
     ],
-    "expectedBidResponses":[]
+    "expectedBidResponses": [{"currency":"USD","bids":[]}]
   }
diff --git a/adapters/emx_digital/emx_digitaltest/supplemental/build-banner-object.json b/adapters/emx_digital/emx_digitaltest/supplemental/build-banner-object.json
index f35e882b..0c3d0d9a 100644
--- a/adapters/emx_digital/emx_digitaltest/supplemental/build-banner-object.json
+++ b/adapters/emx_digital/emx_digitaltest/supplemental/build-banner-object.json
@@ -65,5 +65,5 @@
           }
         }
     }],
-    "expectedBidResponses": []
+    "expectedBidResponses": [{"currency":"USD","bids":[]}]
 }
diff --git a/adapters/emx_digital/emx_digitaltest/supplemental/build-video-object.json b/adapters/emx_digital/emx_digitaltest/supplemental/build-video-object.json
index 235367c4..7076501d 100644
--- a/adapters/emx_digital/emx_digitaltest/supplemental/build-video-object.json
+++ b/adapters/emx_digital/emx_digitaltest/supplemental/build-video-object.json
@@ -66,5 +66,5 @@
           }
         }
     }],
-    "expectedBidResponses":[]
+    "expectedBidResponses": [{"currency":"USD","bids":[]}]
 }
diff --git a/adapters/emx_digital/emx_digitaltest/supplemental/site-domain-and-url-correctly-parsed.json b/adapters/emx_digital/emx_digitaltest/supplemental/site-domain-and-url-correctly-parsed.json
index 0d71ade6..22160cf3 100644
--- a/adapters/emx_digital/emx_digitaltest/supplemental/site-domain-and-url-correctly-parsed.json
+++ b/adapters/emx_digital/emx_digitaltest/supplemental/site-domain-and-url-correctly-parsed.json
@@ -63,5 +63,5 @@
         }
       }
     ],
-    "expectedBidResponses": []
+    "expectedBidResponses": [{"currency":"USD","bids":[]}]
   }
diff --git a/adapters/eplanning/eplanningtest/supplemental/invalid-response-no-bids.json b/adapters/eplanning/eplanningtest/supplemental/invalid-response-no-bids.json
index 782722be..acbd256a 100644
--- a/adapters/eplanning/eplanningtest/supplemental/invalid-response-no-bids.json
+++ b/adapters/eplanning/eplanningtest/supplemental/invalid-response-no-bids.json
@@ -47,5 +47,5 @@
       }
     }
   ],
-  "expectedBidResponses": []
-}
\ No newline at end of file
+  "expectedBidResponses": [{"currency":"USD","bids":[]}]
+}
diff --git a/adapters/frvradn/frvradntest/supplemental/empty_object_response.json b/adapters/frvradn/frvradntest/supplemental/empty_object_response.json
index e0e8959e..00655c70 100644
--- a/adapters/frvradn/frvradntest/supplemental/empty_object_response.json
+++ b/adapters/frvradn/frvradntest/supplemental/empty_object_response.json
@@ -52,5 +52,5 @@
       }
     }
   ],
-  "expectedBidResponses": []
+  "expectedBidResponses": [{"currency":"USD","bids":[]}]
 }
diff --git a/adapters/frvradn/frvradntest/supplemental/missing_bid_ext.json b/adapters/frvradn/frvradntest/supplemental/missing_bid_ext.json
index 32b54f20..e601c882 100644
--- a/adapters/frvradn/frvradntest/supplemental/missing_bid_ext.json
+++ b/adapters/frvradn/frvradntest/supplemental/missing_bid_ext.json
@@ -72,6 +72,7 @@
       }
     }
   ],
+  "expectedBidResponses": [{"currency":"USD","bids":[]}],
   "expectedMakeBidsErrors": [
     {
       "value": "unable to deserialize imp random-imp bid.ext",
diff --git a/adapters/frvradn/frvradntest/supplemental/unknown_imp_media_type.json b/adapters/frvradn/frvradntest/supplemental/unknown_imp_media_type.json
index 7ed869d7..5b8dfb62 100644
--- a/adapters/frvradn/frvradntest/supplemental/unknown_imp_media_type.json
+++ b/adapters/frvradn/frvradntest/supplemental/unknown_imp_media_type.json
@@ -57,6 +57,7 @@
       }
     }
   ],
+  "expectedBidResponses": [{"currency":"USD","bids":[]}],
   "expectedMakeBidsErrors": [
     {
       "value": "imp test-banner-id with unknown media type",
diff --git a/adapters/gamma/gammatest/supplemental/ignore-imp.json b/adapters/gamma/gammatest/supplemental/ignore-imp.json
index 722b5041..d62f7873 100644
--- a/adapters/gamma/gammatest/supplemental/ignore-imp.json
+++ b/adapters/gamma/gammatest/supplemental/ignore-imp.json
@@ -114,36 +114,41 @@
     }
   ],
 
-  "expectedBids": [
+  "expectedBidResponses": [
     {
-      "bid": {
-        "id": "7706636740145184841",
-        "impid": "test-imp-id",
-        "price": 0.5,
-        "adm": "some-test-ad",
-        "adid": "29681110",
-        "adomain": ["sample.com"],
-        "cid": "958",
-        "crid": "29681110",
-        "w": 1024,
-        "h": 576
-      },
-      "type": "banner"
+      "bids": [
+        {
+          "bid": {
+            "id": "7706636740145184841",
+            "impid": "test-imp-id",
+            "price": 0.5,
+            "adm": "some-test-ad",
+            "adid": "29681110",
+            "adomain": ["sample.com"],
+            "cid": "958",
+            "crid": "29681110",
+            "w": 300,
+            "h": 250
+          },
+          "type": "banner"
+        }
+      ]
     },
     {
-      "bid": {
-        "id": "8ee514f1-b2b8-4abb-89fd-084437d1e800",
-        "impid": "test-imp-video-id",
-        "price": 0.5,
-        "adm": "some-test-ad",
-        "adid": "29484110",
-        "adomain": ["sample.com"],
-        "cid": "958",
-        "crid": "29484110",
-        "w": 1024,
-        "h": 576
-      },
-      "type": "video"
+      "bids": [
+        {
+          "bid": {
+            "id": "8ee514f1-b2b8-4abb-89fd-084437d1e800",
+            "impid": "test-imp-video-id",
+            "price": 0.5,
+            "adm": "some-test-ad",
+            "crid": "29484110",
+            "w": 640,
+            "h": 480
+          },
+          "type": "banner"
+        }
+      ]
     }
   ],
   "expectedMakeRequestsErrors": [
diff --git a/adapters/gamma/gammatest/supplemental/missing-adm.json b/adapters/gamma/gammatest/supplemental/missing-adm.json
index 6b8ff64c..4e8603d3 100644
--- a/adapters/gamma/gammatest/supplemental/missing-adm.json
+++ b/adapters/gamma/gammatest/supplemental/missing-adm.json
@@ -54,7 +54,7 @@
             }
         }
     ],
-    "expectedBids": [
+    "expectedBidResponses": [
         {
             "bid": {
                 "id": "8ee514f1-b2b8-4abb-89fd-084437d1e800",
@@ -73,4 +73,4 @@
             "comparison": "literal"
         }
     ]
-}
\ No newline at end of file
+}
diff --git a/adapters/huaweiads/huaweiadstest/exemplary/nativeIncludeVideo.json b/adapters/huaweiads/huaweiadstest/exemplary/nativeIncludeVideo.json
index 8297d11b..8a7ca1b0 100644
--- a/adapters/huaweiads/huaweiadstest/exemplary/nativeIncludeVideo.json
+++ b/adapters/huaweiads/huaweiadstest/exemplary/nativeIncludeVideo.json
@@ -312,7 +312,7 @@
               "huaweiads"
             ],
             "crid": "58022259",
-            "adm": "{\"ver\":\"1.2\",\"assets\":[{\"id\":100,\"title\":{\"text\":\"/test/\",\"len\":6}},{\"id\":101,\"img\":{\"type\":3,\"url\":\"http://image1.jpg\",\"w\":400,\"h\":350}},{\"id\":107,\"video\":{\"vasttag\":\"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?><VAST version=\\\"3.0\\\"><Ad id=\\\"58022259\\\"><InLine><AdSystem>HuaweiAds</AdSystem><AdTitle>/test/</AdTitle><Error><![CDATA[http://test/vastError&et=[ERRORCODE]]]></Error><Impression><![CDATA[http://test/imp]]></Impression><Impression><![CDATA[http://test/dspimp]]></Impression><Creatives><Creative adId=\\\"58022259\\\" id=\\\"58022259\\\"><Linear><Duration>00:00:06.038</Duration><TrackingEvents><Tracking event=\\\"skip\\\"><![CDATA[http://test/userclose]]></Tracking><Tracking event=\\\"closeLinear\\\"><![CDATA[http://test/userclose]]></Tracking><Tracking event=\\\"start\\\"><![CDATA[http://test/playStart]]></Tracking><Tracking event=\\\"complete\\\"><![CDATA[http://test/playEnd1]]></Tracking><Tracking event=\\\"complete\\\"><![CDATA[http://test/playEnd2]]></Tracking><Tracking event=\\\"resume\\\"><![CDATA[http://test/playResume]]></Tracking><Tracking event=\\\"pause\\\"><![CDATA[http://test/playPause]]></Tracking></TrackingEvents><VideoClicks><ClickThrough><![CDATA[https://ads.huawei.com/usermgtportal/home/index.html#/]]></ClickThrough><ClickTracking><![CDATA[http://test/click]]></ClickTracking><ClickTracking><![CDATA[http://test/dspclick]]></ClickTracking></VideoClicks><MediaFiles><MediaFile delivery=\\\"progressive\\\" type=\\\"video/mp4\\\" width=\\\"600\\\" height=\\\"500\\\" scalable=\\\"true\\\" maintainAspectRatio=\\\"true\\\"> <![CDATA[https://video.mp4]]></MediaFile></MediaFiles></Linear></Creative></Creatives></InLine></Ad></VAST>\"}},{\"id\":105,\"data\":{\"label\":\"desc\",\"value\":\"this is a test ad\"}}],\"link\":{\"url\":\"https://ads.huawei.com/usermgtportal/home/index.html#/\",\"clicktrackers\":[\"http://test/click\",\"http://test/dspclick\"]},\"imptrackers\":[\"http://test/imp\",\"http://test/dspimp\"]}",
+            "adm": "{\"ver\":\"1.2\",\"assets\":[{\"id\":100,\"title\":{\"text\":\"/test/\",\"len\":6}},{\"id\":101,\"img\":{\"type\":3,\"url\":\"http://image1.jpg\",\"w\":400,\"h\":350}},{\"id\":107,\"video\":{\"vasttag\":\"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?><VAST version=\\\"3.0\\\"><Ad id=\\\"58022259\\\"><InLine><AdSystem>HuaweiAds</AdSystem><AdTitle>/test/</AdTitle><Error><![CDATA[http://test/vastError&et=[ERRORCODE]]]></Error><Impression><![CDATA[http://test/imp]]></Impression><Impression><![CDATA[http://test/dspimp]]></Impression><Creatives><Creative adId=\\\"58022259\\\" id=\\\"58022259\\\"><Linear><Duration>00:00:06.038</Duration><TrackingEvents><Tracking event=\\\"skip\\\"><![CDATA[http://test/userclose]]></Tracking><Tracking event=\\\"closeLinear\\\"><![CDATA[http://test/userclose]]></Tracking><Tracking event=\\\"start\\\"><![CDATA[http://test/playStart]]></Tracking><Tracking event=\\\"complete\\\"><![CDATA[http://test/playEnd1]]></Tracking><Tracking event=\\\"complete\\\"><![CDATA[http://test/playEnd2]]></Tracking><Tracking event=\\\"resume\\\"><![CDATA[http://test/playResume]]></Tracking><Tracking event=\\\"pause\\\"><![CDATA[http://test/playPause]]></Tracking></TrackingEvents><VideoClicks><ClickThrough><![CDATA[https://ads.huawei.com/usermgtportal/home/index.html#/]]></ClickThrough><ClickTracking><![CDATA[http://test/click]]></ClickTracking><ClickTracking><![CDATA[http://test/dspclick]]></ClickTracking></VideoClicks><MediaFiles><MediaFile delivery=\\\"progressive\\\" type=\\\"video/mp4\\\" width=\\\"600\\\" height=\\\"500\\\" scalable=\\\"true\\\" maintainAspectRatio=\\\"true\\\"> <![CDATA[https://video.mp4]]></MediaFile></MediaFiles></Linear></Creative></Creatives></InLine></Ad></VAST>\"}},{\"id\":105,\"data\":{\"label\":\"desc\",\"value\":\"this is a test ad\"}}],\"link\":{\"url\":\"https://ads.huawei.com/usermgtportal/home/index.html#/\",\"clicktrackers\":[\"http://test/click\",\"http://test/dspclick\"]},\"eventtrackers\":[{\"event\":1,\"method\":1,\"url\":\"http://test/imp\"},{\"event\":1,\"method\":1,\"url\":\"http://test/dspimp\"}]}",
             "id": "test-imp-id",
             "impid": "test-imp-id",
             "price": 2.8,
diff --git a/adapters/huaweiads/huaweiadstest/exemplary/nativeSingleImage.json b/adapters/huaweiads/huaweiadstest/exemplary/nativeSingleImage.json
index 1af8abc5..240098e0 100644
--- a/adapters/huaweiads/huaweiadstest/exemplary/nativeSingleImage.json
+++ b/adapters/huaweiads/huaweiadstest/exemplary/nativeSingleImage.json
@@ -300,7 +300,7 @@
               "huaweiads"
             ],
             "crid": "58022259",
-            "adm": "{\"ver\":\"1.2\",\"assets\":[{\"id\":100,\"title\":{\"text\":\"/test/\",\"len\":6}},{\"id\":103,\"img\":{\"type\":3,\"url\":\"http://image.jpg\",\"w\":720,\"h\":1280}},{\"id\":105,\"data\":{\"label\":\"desc\",\"value\":\"\"}}],\"link\":{\"url\":\"https://ads.huawei.com/usermgtportal/home/index.html#/\",\"clicktrackers\":[\"http://test/click\"]},\"imptrackers\":[\"http://test/imp\"]}",
+            "adm": "{\"ver\":\"1.2\",\"assets\":[{\"id\":100,\"title\":{\"text\":\"/test/\",\"len\":6}},{\"id\":103,\"img\":{\"type\":3,\"url\":\"http://image.jpg\",\"w\":720,\"h\":1280}},{\"id\":105,\"data\":{\"label\":\"desc\",\"value\":\"\"}}],\"link\":{\"url\":\"https://ads.huawei.com/usermgtportal/home/index.html#/\",\"clicktrackers\":[\"http://test/click\"]},\"eventtrackers\":[{\"event\":1,\"method\":1,\"url\":\"http://test/imp\"}]}",
             "id": "test-imp-id",
             "impid": "test-imp-id",
             "price": 2.8,
diff --git a/adapters/huaweiads/huaweiadstest/exemplary/nativeThreeImage.json b/adapters/huaweiads/huaweiadstest/exemplary/nativeThreeImage.json
index 7b5c9a54..9b46072d 100644
--- a/adapters/huaweiads/huaweiadstest/exemplary/nativeThreeImage.json
+++ b/adapters/huaweiads/huaweiadstest/exemplary/nativeThreeImage.json
@@ -319,7 +319,7 @@
               "huaweiads"
             ],
             "crid": "58022259",
-            "adm": "{\"ver\":\"1.2\",\"assets\":[{\"id\":100,\"title\":{\"text\":\"/test/\",\"len\":6}},{\"id\":101,\"img\":{\"type\":3,\"url\":\"http://image1.jpg\",\"w\":400,\"h\":350}},{\"id\":102,\"img\":{\"type\":3,\"url\":\"http://image2.jpg\",\"w\":400,\"h\":300}},{\"id\":103,\"img\":{\"type\":3,\"url\":\"http://image3.jpg\",\"w\":400,\"h\":300}},{\"id\":105,\"data\":{\"label\":\"desc\",\"value\":\"this is a test ad\"}}],\"link\":{\"url\":\"https://ads.huawei.com/usermgtportal/home/index.html#/\",\"clicktrackers\":[\"http://test/click\"]},\"imptrackers\":[\"http://test/imp\"]}",
+            "adm": "{\"ver\":\"1.2\",\"assets\":[{\"id\":100,\"title\":{\"text\":\"/test/\",\"len\":6}},{\"id\":101,\"img\":{\"type\":3,\"url\":\"http://image1.jpg\",\"w\":400,\"h\":350}},{\"id\":102,\"img\":{\"type\":3,\"url\":\"http://image2.jpg\",\"w\":400,\"h\":300}},{\"id\":103,\"img\":{\"type\":3,\"url\":\"http://image3.jpg\",\"w\":400,\"h\":300}},{\"id\":105,\"data\":{\"label\":\"desc\",\"value\":\"this is a test ad\"}}],\"link\":{\"url\":\"https://ads.huawei.com/usermgtportal/home/index.html#/\",\"clicktrackers\":[\"http://test/click\"]},\"eventtrackers\":[{\"event\":1,\"method\":1,\"url\":\"http://test/imp\"}]}",
             "id": "test-imp-id",
             "impid": "test-imp-id",
             "price": 2.8,
diff --git a/adapters/huaweiads/huaweiadstest/exemplary/nativeThreeImageIncludeIcon.json b/adapters/huaweiads/huaweiadstest/exemplary/nativeThreeImageIncludeIcon.json
index e72f5f59..f78f50e2 100644
--- a/adapters/huaweiads/huaweiadstest/exemplary/nativeThreeImageIncludeIcon.json
+++ b/adapters/huaweiads/huaweiadstest/exemplary/nativeThreeImageIncludeIcon.json
@@ -320,7 +320,7 @@
               "huaweiads"
             ],
             "crid": "58022259",
-            "adm": "{\"ver\":\"1.2\",\"assets\":[{\"id\":100,\"title\":{\"text\":\"/test/\",\"len\":6}},{\"id\":101,\"img\":{\"type\":3,\"url\":\"http://image1.jpg\",\"w\":400,\"h\":350}},{\"id\":102,\"img\":{\"type\":1,\"url\":\"https://icon1.png\",\"w\":160,\"h\":160}},{\"id\":103,\"img\":{\"type\":3,\"url\":\"http://image2.jpg\",\"w\":400,\"h\":300}},{\"id\":105,\"data\":{\"label\":\"desc\",\"value\":\"this is a test ad\"}}],\"link\":{\"url\":\"https://ads.huawei.com/usermgtportal/home/index.html#/\",\"clicktrackers\":[\"http://test/click\"]},\"imptrackers\":[\"http://test/imp\"]}",
+            "adm": "{\"ver\":\"1.2\",\"assets\":[{\"id\":100,\"title\":{\"text\":\"/test/\",\"len\":6}},{\"id\":101,\"img\":{\"type\":3,\"url\":\"http://image1.jpg\",\"w\":400,\"h\":350}},{\"id\":102,\"img\":{\"type\":1,\"url\":\"https://icon1.png\",\"w\":160,\"h\":160}},{\"id\":103,\"img\":{\"type\":3,\"url\":\"http://image2.jpg\",\"w\":400,\"h\":300}},{\"id\":105,\"data\":{\"label\":\"desc\",\"value\":\"this is a test ad\"}}],\"link\":{\"url\":\"https://ads.huawei.com/usermgtportal/home/index.html#/\",\"clicktrackers\":[\"http://test/click\"]},\"eventtrackers\":[{\"event\":1,\"method\":1,\"url\":\"http://test/imp\"}]}",
             "id": "test-imp-id",
             "impid": "test-imp-id",
             "price": 2.8,
diff --git a/adapters/huaweiads/huaweiadstest/supplemental/bad_response_dont_find_impid.json b/adapters/huaweiads/huaweiadstest/supplemental/bad_response_dont_find_impid.json
index e94e5fb7..f040ce95 100644
--- a/adapters/huaweiads/huaweiadstest/supplemental/bad_response_dont_find_impid.json
+++ b/adapters/huaweiads/huaweiadstest/supplemental/bad_response_dont_find_impid.json
@@ -319,7 +319,27 @@
     }
   ],
   "expectedBidResponses": [
+      {
+          "currency":"USD",
+          "bids":[
+              {
+          "bid": {
+            "adm": "<style> html, body  { margin: 0; padding: 0; width: 100%; height: 100%; vertical-align: middle; }  html  { display: table; }  body { display: table-cell; vertical-align: middle; text-align: center; -webkit-text-size-adjust: none; }  </style> <span class=\"title-link advertiser_label\"></span> <a href='https://task/clickurl' style=\"text-decoration:none\" onclick=sendGetReq()> <img src='https://test/1.png' width='250' height='300'/> </a> <img height=\"1\" width=\"1\" src='http://test/imp' >  <script type=\"text/javascript\">var dspClickTrackings = [\"http://test/click\"];function sendGetReq() {sendSomeGetReq(dspClickTrackings)}function sendOneGetReq(url) {var req = new XMLHttpRequest();req.open('GET', url, true);req.send(null);}function sendSomeGetReq(urls) {for (var i = 0; i < urls.length; i++) {sendOneGetReq(urls[i]);}}</script>",
+            "adomain": [
+              "huaweiads"
+            ],
+            "crid": "58025103",
+            "id": "test-imp-id",
+            "impid": "test-imp-id",
+            "price": 2.8,
+            "h": 300,
+            "w": 250
+          },
+          "type": "banner"
+              }
+          ]
+      }
   ],
   "expectedMakeRequestsErrors": [],
   "expectedMakeBidsErrors": []
-}
\ No newline at end of file
+}
diff --git a/adapters/huaweiads/huaweiadstest/supplemental/bad_response_retcode30_204.json b/adapters/huaweiads/huaweiadstest/supplemental/bad_response_retcode30_204.json
index 466209d9..d4a41bba 100644
--- a/adapters/huaweiads/huaweiadstest/supplemental/bad_response_retcode30_204.json
+++ b/adapters/huaweiads/huaweiadstest/supplemental/bad_response_retcode30_204.json
@@ -155,9 +155,8 @@
       }
     }
   ],
-  "expectedBidResponses": [
-  ],
+  "expectedBidResponses": [{"currency":"USD","bids":[]}],
   "expectedMakeRequestsErrors": [],
   "expectedMakeBidsErrors": [
   ]
-}
\ No newline at end of file
+}
diff --git a/adapters/impactify/impactifytest/supplemental/http_204.json b/adapters/impactify/impactifytest/supplemental/http_204.json
index bca38ba0..d3f790b2 100644
--- a/adapters/impactify/impactifytest/supplemental/http_204.json
+++ b/adapters/impactify/impactifytest/supplemental/http_204.json
@@ -58,11 +58,5 @@
         }
       }
     }
-  ],
-
-  "expectedBidResponses": [
-    {
-      "bids": []
-    }
   ]
 }
diff --git a/adapters/impactify/impactifytest/supplemental/no_seat_bid.json b/adapters/impactify/impactifytest/supplemental/no_seat_bid.json
index e1371c3a..21a3d00e 100644
--- a/adapters/impactify/impactifytest/supplemental/no_seat_bid.json
+++ b/adapters/impactify/impactifytest/supplemental/no_seat_bid.json
@@ -58,11 +58,5 @@
         }
       }
     }
-  ],
-
-  "expectedBidResponses": [
-    {
-      "bids": []
-    }
   ]
 }
diff --git a/adapters/improvedigital/improvedigitaltest/supplemental/foreign-currency.json b/adapters/improvedigital/improvedigitaltest/supplemental/foreign-currency.json
new file mode 100644
index 00000000..633e8b6b
--- /dev/null
+++ b/adapters/improvedigital/improvedigitaltest/supplemental/foreign-currency.json
@@ -0,0 +1,89 @@
+{
+    "mockBidRequest": {
+        "id": "test-request-id",
+        "cur": ["EUR"],
+        "site": {
+            "page": "https://good.site/url"
+        },
+        "imp": [{
+            "id": "test-imp-id",
+            "banner": {
+                "format": [{
+                    "w": 300,
+                    "h": 250
+                }]
+            },
+            "ext": {
+                "bidder": {
+                    "placementId": 13245
+                }
+            }
+        }]
+    },
+
+    "httpCalls": [{
+        "expectedRequest": {
+            "uri": "http://localhost/pbs",
+            "body": {
+                "id": "test-request-id",
+                "cur": ["EUR"],
+                "site": {
+                    "page": "https://good.site/url"
+                },
+                "imp": [{
+                    "id": "test-imp-id",
+                    "banner": {
+                        "format": [{
+                            "w": 300,
+                            "h": 250
+                        }]
+                    },
+                    "ext": {
+                        "bidder": {
+                            "placementId": 13245
+                        }
+                    }
+                }]
+            }
+        },
+        "mockResponse": {
+            "status": 200,
+            "body": {
+                "id": "test-request-id",
+                "cur": "EUR",
+                "seatbid": [{
+                    "seat": "improvedigital",
+                    "bid": [{
+                        "id": "randomid",
+                        "impid": "test-imp-id",
+                        "price": 0.500000,
+                        "adid": "12345678",
+                        "adm": "some-test-ad",
+                        "cid": "987",
+                        "crid": "12345678",
+                        "h": 250,
+                        "w": 300
+                    }]
+                }]
+            }
+        }
+    }],
+
+    "expectedBidResponses": [{
+        "currency": "EUR",
+        "bids": [{
+            "bid": {
+                "id": "randomid",
+                "impid": "test-imp-id",
+                "price": 0.5,
+                "adm": "some-test-ad",
+                "adid": "12345678",
+                "cid": "987",
+                "crid": "12345678",
+                "w": 300,
+                "h": 250
+            },
+            "type": "banner"
+        }]
+    }]
+}
diff --git a/adapters/improvedigital/improvedigitaltest/supplemental/rewarded-inventory.json b/adapters/improvedigital/improvedigitaltest/supplemental/rewarded-inventory.json
index 44921fe9..17c8a656 100644
--- a/adapters/improvedigital/improvedigitaltest/supplemental/rewarded-inventory.json
+++ b/adapters/improvedigital/improvedigitaltest/supplemental/rewarded-inventory.json
@@ -170,8 +170,5 @@
         "body": {}
       }
     }
-  ],
-  "expectedBidResponses": [
-    {},{},{}
   ]
 }
diff --git a/adapters/invibes/invibestest/amp/amp-ad.json b/adapters/invibes/invibestest/amp/amp-ad.json
index 63a037b7..742df1bb 100644
--- a/adapters/invibes/invibestest/amp/amp-ad.json
+++ b/adapters/invibes/invibestest/amp/amp-ad.json
@@ -73,5 +73,23 @@
       }
     }
   ],
-  "expectedBidResponses": []
-}
\ No newline at end of file
+  "expectedBidResponses": [
+    {
+      "currency": "EUR",
+      "bids": [
+        {
+          "bid": {
+            "id": "1234",
+            "impid": "test-imp-id",
+            "price": 0.5,
+            "adm": "<div>abc</div>",
+            "crid": "29681110",
+            "w": 300,
+            "h": 250
+          },
+          "type": "banner"
+        }
+      ]
+    }
+  ]
+}
diff --git a/adapters/invibes/invibestest/exemplary/no-ad.json b/adapters/invibes/invibestest/exemplary/no-ad.json
index 4f7718c9..56be0abd 100644
--- a/adapters/invibes/invibestest/exemplary/no-ad.json
+++ b/adapters/invibes/invibestest/exemplary/no-ad.json
@@ -60,5 +60,5 @@
       }
     }
   ],
-  "expectedBidResponses": []
-}
\ No newline at end of file
+  "expectedBidResponses": [{"currency":"USD","bids":[]}]
+}
diff --git a/adapters/invibes/invibestest/exemplary/test-ad.json b/adapters/invibes/invibestest/exemplary/test-ad.json
index fb4d58c1..44160b92 100644
--- a/adapters/invibes/invibestest/exemplary/test-ad.json
+++ b/adapters/invibes/invibestest/exemplary/test-ad.json
@@ -73,5 +73,23 @@
       }
     }
   ],
-  "expectedBidResponses": []
-}
\ No newline at end of file
+  "expectedBidResponses": [
+    {
+      "currency": "EUR",
+      "bids": [
+        {
+          "bid": {
+            "id": "1234",
+            "impid": "test-imp-id",
+            "price": 0.5,
+            "adm": "<div>abc</div>",
+            "crid": "29681110",
+            "w": 300,
+            "h": 250
+          },
+          "type": "banner"
+        }
+      ]
+    }
+  ]
+}
diff --git a/adapters/ix/ix_test.go b/adapters/ix/ix_test.go
index 0f6b856d..a64e3d0c 100644
--- a/adapters/ix/ix_test.go
+++ b/adapters/ix/ix_test.go
@@ -19,8 +19,6 @@ const endpoint string = "http://host/endpoint"
 
 func TestJsonSamples(t *testing.T) {
 	if bidder, err := Builder(openrtb_ext.BidderIx, config.Adapter{Endpoint: endpoint}, config.Server{ExternalUrl: "http://hosturl.com", GvlID: 1, DataCenter: "2"}); err == nil {
-		ixBidder := bidder.(*IxAdapter)
-		ixBidder.maxRequests = 2
 		adapterstest.RunJSONBidderTest(t, "ixtest", bidder)
 	} else {
 		t.Fatalf("Builder returned unexpected error %v", err)
@@ -44,7 +42,7 @@ func TestIxMakeBidsWithCategoryDuration(t *testing.T) {
 				`{
 					"prebid": {},
 					"bidder": {
-						"siteID": 123456
+						"siteID": "123456"
 					}
 				}`,
 			)},
@@ -106,7 +104,6 @@ func TestIxMakeBidsWithCategoryDuration(t *testing.T) {
 
 func TestIxMakeRequestWithGppString(t *testing.T) {
 	bidder := &IxAdapter{}
-	bidder.maxRequests = 2
 
 	testGppString := "DBACNYA~CPXxRfAPXxRfAAfKABENB-CgAAAAAAAAAAYgAAAAAAAA~1YNN"
 
@@ -124,7 +121,7 @@ func TestIxMakeRequestWithGppString(t *testing.T) {
 				`{
 					"prebid": {},
 					"bidder": {
-						"siteID": 123456
+						"siteId": "123456"
 					}
 				}`,
 			)},
@@ -256,7 +253,8 @@ func TestBuildIxDiag(t *testing.T) {
 	for _, test := range testCases {
 		t.Run(test.description, func(t *testing.T) {
 			version.Ver = test.pbsVersion
-			err := BuildIxDiag(test.request)
+			ixDiag := &IxDiag{}
+			err := setIxDiagIntoExtRequest(test.request, ixDiag)
 			if test.expectError {
 				assert.NotNil(t, err)
 			} else {
diff --git a/adapters/ix/ixtest/exemplary/multi-imp-multi-size-requests.json b/adapters/ix/ixtest/exemplary/multi-imp-multi-size-requests.json
new file mode 100644
index 00000000..4decdaf9
--- /dev/null
+++ b/adapters/ix/ixtest/exemplary/multi-imp-multi-size-requests.json
@@ -0,0 +1,211 @@
+{
+    "mockBidRequest": {
+        "id": "test-request-id",
+        "imp": [
+            {
+                "id": "test-imp-id-1",
+                "banner": {
+                    "format": [
+                        {
+                            "w": 300,
+                            "h": 250
+                        },
+                        {
+                            "w": 300,
+                            "h": 600
+                        }
+                    ]
+                },
+                "ext": {
+                    "bidder": {
+                        "siteId": "569749"
+                    }
+                }
+            },
+            {
+                "id": "test-imp-id-2",
+                "video": {
+                    "mimes": [
+                        "video/mp4"
+                    ],
+                    "minduration": 15,
+                    "maxduration": 30,
+                    "protocols": [
+                        2,
+                        3,
+                        5,
+                        6,
+                        7,
+                        8
+                    ],
+                    "w": 940,
+                    "h": 560
+                },
+                "ext": {
+                    "bidder": {
+                        "siteId": "569749"
+                    }
+                }
+            },
+            {
+                "id": "test-imp-id-3",
+                "banner": {
+                    "format": [
+                        {
+                            "w": 300,
+                            "h": 600
+                        }
+                    ]
+                },
+                "ext": {
+                    "bidder": {
+                        "siteId": "569749"
+                    }
+                }
+            }
+        ],
+        "site": {
+            "page": "https://www.example.com/"
+        }
+    },
+    "httpCalls": [
+        {
+            "expectedRequest": {
+                "uri": "http://host/endpoint",
+                "body": {
+                    "id": "test-request-id",
+                    "imp": [
+                        {
+                            "id": "test-imp-id-1",
+                            "banner": {
+                                "format": [
+                                    {
+                                        "w": 300,
+                                        "h": 250
+                                    },
+                                    {
+                                        "w": 300,
+                                        "h": 600
+                                    }
+                                ]
+                            },
+                            "ext": {
+                                "bidder": {
+                                    "siteId": "569749"
+                                }
+                            }
+                        },
+                        {
+                            "id": "test-imp-id-2",
+                            "video": {
+                                "mimes": [
+                                    "video/mp4"
+                                ],
+                                "minduration": 15,
+                                "maxduration": 30,
+                                "protocols": [
+                                    2,
+                                    3,
+                                    5,
+                                    6,
+                                    7,
+                                    8
+                                ],
+                                "w": 940,
+                                "h": 560
+                            },
+                            "ext": {
+                                "bidder": {
+                                    "siteId": "569749"
+                                }
+                            }
+                        },
+                        {
+                            "id": "test-imp-id-3",
+                            "banner": {
+                                "format": [
+                                    {
+                                        "w": 300,
+                                        "h": 600
+                                    }
+                                ],
+                                "w": 300,
+                                "h": 600
+                            },
+                            "ext": {
+                                "bidder": {
+                                    "siteId": "569749"
+                                }
+                            }
+                        }
+                    ],
+                    "site": {
+                        "page": "https://www.example.com/",
+                        "publisher": {
+                            "id": "569749"
+                        }
+                    }
+                }
+            },
+            "mockResponse": {
+                "status": 200,
+                "body": {
+                    "id": "test-request-id",
+                    "seatbid": [
+                        {
+                            "seat": "958",
+                            "bid": [
+                                {
+                                    "id": "7706636740145184841",
+                                    "impid": "test-imp-id-1",
+                                    "price": 0.5,
+                                    "adid": "29681110",
+                                    "adm": "some-test-ad",
+                                    "adomain": [
+                                        "https://advertiser.example.com"
+                                    ],
+                                    "cid": "958",
+                                    "crid": "29681110",
+                                    "h": 600,
+                                    "w": 300,
+                                    "ext": {
+                                        "ix": {}
+                                    }
+                                }
+                            ]
+                        }
+                    ],
+                    "bidid": "5778926625248726496",
+                    "cur": "USD"
+                }
+            }
+        }
+    ],
+    "expectedBidResponses": [
+        {
+            "currency": "USD",
+            "bids": [
+                {
+                    "bid": {
+                        "id": "7706636740145184841",
+                        "impid": "test-imp-id-1",
+                        "price": 0.5,
+                        "adm": "some-test-ad",
+                        "adid": "29681110",
+                        "adomain": [
+                            "https://advertiser.example.com"
+                        ],
+                        "cid": "958",
+                        "crid": "29681110",
+                        "w": 300,
+                        "h": 600,
+                        "ext": {
+                            "ix": {}
+                        }
+                    },
+                    "type": "banner"
+                }
+            ]
+        }
+    ]
+}
diff --git a/adapters/ix/ixtest/exemplary/max-requests.json b/adapters/ix/ixtest/exemplary/multi-imp-requests.json
similarity index 69%
rename from adapters/ix/ixtest/exemplary/max-requests.json
rename to adapters/ix/ixtest/exemplary/multi-imp-requests.json
index 46d9ec5d..d8d00aee 100644
--- a/adapters/ix/ixtest/exemplary/max-requests.json
+++ b/adapters/ix/ixtest/exemplary/multi-imp-requests.json
@@ -9,10 +9,6 @@
                         {
                             "w": 300,
                             "h": 250
-                        },
-                        {
-                            "w": 300,
-                            "h": 600
                         }
                     ]
                 },
@@ -62,6 +58,38 @@
                         "siteId": "569749"
                     }
                 }
+            },
+            {
+                "id": "test-imp-id-4",
+                "banner": {
+                    "format": [
+                        {
+                            "w": 300,
+                            "h": 250
+                        }
+                    ]
+                },
+                "ext": {
+                    "bidder": {
+                        "siteId": "569749"
+                    }
+                }
+            },
+            {
+                "id": "test-imp-id-5",
+                "banner": {
+                    "format": [
+                        {
+                            "w": 300,
+                            "h": 250
+                        }
+                    ]
+                },
+                "ext": {
+                    "bidder": {
+                        "siteId": "569749"
+                    }
+                }
             }
         ]
     },
@@ -89,49 +117,7 @@
                                     "siteId": "569749"
                                 }
                             }
-                        }
-                    ]
-                }
-            },
-            "mockResponse": {
-                "status": 200,
-                "body": {
-                    "id": "test-request-id",
-                    "seatbid": [
-                        {
-                            "seat": "958",
-                            "bid": [
-                                {
-                                    "id": "7706636740145184841",
-                                    "impid": "test-imp-id-1",
-                                    "price": 0.5,
-                                    "adid": "29681110",
-                                    "adm": "some-test-ad",
-                                    "adomain": [
-                                        "https://advertiser.example.com"
-                                    ],
-                                    "cid": "958",
-                                    "crid": "29681110",
-                                    "h": 250,
-                                    "w": 300,
-                                    "ext": {
-                                        "ix": {}
-                                    }
-                                }
-                            ]
-                        }
-                    ],
-                    "bidid": "5778926625248726496",
-                    "cur": "USD"
-                }
-            }
-        },
-        {
-            "expectedRequest": {
-                "uri": "http://host/endpoint",
-                "body": {
-                    "id": "test-request-id",
-                    "imp": [
+                        },
                         {
                             "id": "test-imp-id-2",
                             "video": {
@@ -156,6 +142,60 @@
                                     "siteId": "569749"
                                 }
                             }
+                        },
+                        {
+                            "banner": {
+                              "format": [
+                                {
+                                  "h": 600,
+                                  "w": 300
+                                }
+                              ],
+                              "h": 600,
+                              "w": 300
+                            },
+                            "ext": {
+                              "bidder": {
+                                "siteId": "569749"
+                              }
+                            },
+                            "id": "test-imp-id-3"
+                        },
+                        {
+                            "id": "test-imp-id-4",
+                            "banner": {
+                                "format": [
+                                    {
+                                        "w": 300,
+                                        "h": 250
+                                    }
+                                ],
+                                "w": 300,
+                                "h": 250
+                            },
+                            "ext": {
+                                "bidder": {
+                                    "siteId": "569749"
+                                }
+                            }
+                        },
+                        {
+                            "id": "test-imp-id-5",
+                            "banner": {
+                                "format": [
+                                    {
+                                        "w": 300,
+                                        "h": 250
+                                    }
+                                ],
+                                "w": 300,
+                                "h": 250
+                            },
+                            "ext": {
+                                "bidder": {
+                                    "siteId": "569749"
+                                }
+                            }
                         }
                     ]
                 }
@@ -170,7 +210,7 @@
                             "bid": [
                                 {
                                     "id": "7706636740145184841",
-                                    "impid": "test-imp-id-2",
+                                    "impid": "test-imp-id-1",
                                     "price": 0.5,
                                     "adid": "29681110",
                                     "adm": "some-test-ad",
@@ -181,9 +221,6 @@
                                     "crid": "29681110",
                                     "h": 250,
                                     "w": 300,
-                                    "cat": [
-                                        "IAB9-1"
-                                    ],
                                     "ext": {
                                         "ix": {}
                                     }
@@ -222,34 +259,6 @@
                     "type": "banner"
                 }
             ]
-        },
-        {
-            "currency": "USD",
-            "bids": [
-                {
-                    "bid": {
-                        "id": "7706636740145184841",
-                        "impid": "test-imp-id-2",
-                        "price": 0.5,
-                        "adm": "some-test-ad",
-                        "adid": "29681110",
-                        "adomain": [
-                            "https://advertiser.example.com"
-                        ],
-                        "cid": "958",
-                        "crid": "29681110",
-                        "w": 300,
-                        "h": 250,
-                        "cat": [
-                            "IAB9-1"
-                        ],
-                        "ext": {
-                            "ix": {}
-                        }
-                    },
-                    "type": "video"
-                }
-            ]
         }
     ]
 }
diff --git a/adapters/ix/ixtest/exemplary/multiple-siteIds.json b/adapters/ix/ixtest/exemplary/multiple-siteIds.json
new file mode 100644
index 00000000..7f4227ac
--- /dev/null
+++ b/adapters/ix/ixtest/exemplary/multiple-siteIds.json
@@ -0,0 +1,224 @@
+{
+    "mockBidRequest": {
+        "id": "test-request-id",
+        "imp": [
+            {
+                "id": "test-imp-id-1",
+                "banner": {
+                    "format": [
+                        {
+                            "w": 300,
+                            "h": 250
+                        }
+                    ]
+                },
+                "ext": {
+                    "bidder": {
+                        "siteId": "569749"
+                    }
+                }
+            },
+            {
+                "id": "test-imp-id-2",
+                "video": {
+                    "mimes": [
+                        "video/mp4"
+                    ],
+                    "minduration": 15,
+                    "maxduration": 30,
+                    "protocols": [
+                        2,
+                        3,
+                        5,
+                        6,
+                        7,
+                        8
+                    ],
+                    "w": 940,
+                    "h": 560
+                },
+                "ext": {
+                    "bidder": {
+                        "siteId": "569750"
+                    }
+                }
+            },
+            {
+                "id": "test-imp-id-3",
+                "banner": {
+                    "format": [
+                        {
+                            "w": 300,
+                            "h": 600
+                        }
+                    ]
+                },
+                "ext": {
+                    "bidder": {
+                        "siteId": "569751"
+                    }
+                }
+            }
+        ],
+        "site": {
+            "page": "https://www.example.com/"
+        },
+        "ext": {
+            "prebid": {
+                "channel": {
+                    "name": "web",
+                    "version": "7.0.0"
+                }
+            }
+        }
+    },
+    "httpCalls": [
+        {
+            "expectedRequest": {
+                "uri": "http://host/endpoint",
+                "body": {
+                    "id": "test-request-id",
+                    "imp": [
+                        {
+                            "id": "test-imp-id-1",
+                            "banner": {
+                                "format": [
+                                    {
+                                        "w": 300,
+                                        "h": 250
+                                    }
+                                ],
+                                "w": 300,
+                                "h": 250
+                            },
+                            "ext": {
+                                "bidder": {
+                                    "siteId": "569749"
+                                }
+                            }
+                        },
+                        {
+                            "id": "test-imp-id-2",
+                            "video": {
+                                "mimes": [
+                                    "video/mp4"
+                                ],
+                                "minduration": 15,
+                                "maxduration": 30,
+                                "protocols": [
+                                    2,
+                                    3,
+                                    5,
+                                    6,
+                                    7,
+                                    8
+                                ],
+                                "w": 940,
+                                "h": 560
+                            },
+                            "ext": {
+                                "bidder": {
+                                    "siteId": "569750"
+                                }
+                            }
+                        },
+                        {
+                            "banner": {
+                              "format": [
+                                {
+                                  "h": 600,
+                                  "w": 300
+                                }
+                              ],
+                              "h": 600,
+                              "w": 300
+                            },
+                            "ext": {
+                              "bidder": {
+                                "siteId": "569751"
+                              }
+                            },
+                            "id": "test-imp-id-3"
+                        }
+                    ],
+                    "site": {
+                        "page": "https://www.example.com/",
+                        "publisher": {
+                        }
+                    },
+                    "ext": {
+                        "ixdiag": {
+                          "multipleSiteIds": "569749, 569750, 569751",
+                          "pbjsv": "7.0.0"
+                        },
+                        "prebid": {
+                          "channel": {
+                            "name": "web",
+                            "version": "7.0.0"
+                          }
+                        }
+                    }
+                }
+            },
+            "mockResponse": {
+                "status": 200,
+                "body": {
+                    "id": "test-request-id",
+                    "seatbid": [
+                        {
+                            "seat": "958",
+                            "bid": [
+                                {
+                                    "id": "7706636740145184841",
+                                    "impid": "test-imp-id-1",
+                                    "price": 0.5,
+                                    "adid": "29681110",
+                                    "adm": "some-test-ad",
+                                    "adomain": [
+                                        "https://advertiser.example.com"
+                                    ],
+                                    "cid": "958",
+                                    "crid": "29681110",
+                                    "h": 250,
+                                    "w": 300,
+                                    "ext": {
+                                        "ix": {}
+                                    }
+                                }
+                            ]
+                        }
+                    ],
+                    "bidid": "5778926625248726496",
+                    "cur": "USD"
+                }
+            }
+        }
+    ],
+    "expectedBidResponses": [
+        {
+            "currency": "USD",
+            "bids": [
+                {
+                    "bid": {
+                        "id": "7706636740145184841",
+                        "impid": "test-imp-id-1",
+                        "price": 0.5,
+                        "adm": "some-test-ad",
+                        "adid": "29681110",
+                        "adomain": [
+                            "https://advertiser.example.com"
+                        ],
+                        "cid": "958",
+                        "crid": "29681110",
+                        "w": 300,
+                        "h": 250,
+                        "ext": {
+                            "ix": {}
+                        }
+                    },
+                    "type": "banner"
+                }
+            ]
+        }
+    ]
+}
diff --git a/adapters/ix/ixtest/exemplary/simple-banner-multi-size.json b/adapters/ix/ixtest/exemplary/simple-banner-multi-size.json
index 5e0a311a..15dc3ecb 100644
--- a/adapters/ix/ixtest/exemplary/simple-banner-multi-size.json
+++ b/adapters/ix/ixtest/exemplary/simple-banner-multi-size.json
@@ -13,6 +13,10 @@
                         {
                             "w": 300,
                             "h": 600
+                        },
+                        {
+                            "w": 600,
+                            "h": 800
                         }
                     ]
                 },
@@ -22,7 +26,10 @@
                     }
                 }
             }
-        ]
+        ],
+        "site": {
+            "page": "https://www.example.com/"
+        }
     },
     "httpCalls": [
         {
@@ -38,70 +45,16 @@
                                     {
                                         "w": 300,
                                         "h": 250
-                                    }
-                                ],
-                                "w": 300,
-                                "h": 250
-                            },
-                            "ext": {
-                                "bidder": {
-                                    "siteId": "569749"
-                                }
-                            }
-                        }
-                    ]
-                }
-            },
-            "mockResponse": {
-                "status": 200,
-                "body": {
-                    "id": "test-request-id",
-                    "seatbid": [
-                        {
-                            "seat": "958",
-                            "bid": [
-                                {
-                                    "id": "7706636740145184841",
-                                    "impid": "test-imp-id",
-                                    "price": 0.5,
-                                    "adid": "29681110",
-                                    "adm": "some-test-ad",
-                                    "adomain": [
-                                        "https://advertiser.example.com"
-                                    ],
-                                    "cid": "958",
-                                    "crid": "29681110",
-                                    "h": 250,
-                                    "w": 300,
-                                    "ext": {
-                                        "ix": {}
-                                    }
-                                }
-                            ]
-                        }
-                    ],
-                    "bidid": "5778926625248726496",
-                    "cur": "USD"
-                }
-            }
-        },
-        {
-            "expectedRequest": {
-                "uri": "http://host/endpoint",
-                "body": {
-                    "id": "test-request-id",
-                    "imp": [
-                        {
-                            "id": "test-imp-id",
-                            "banner": {
-                                "format": [
+                                    },
                                     {
                                         "w": 300,
                                         "h": 600
+                                    },
+                                    {
+                                        "w": 600,
+                                        "h": 800
                                     }
-                                ],
-                                "w": 300,
-                                "h": 600
+                                ]
                             },
                             "ext": {
                                 "bidder": {
@@ -109,7 +62,13 @@
                                 }
                             }
                         }
-                    ]
+                    ],
+                    "site": {
+                        "page": "https://www.example.com/",
+                        "publisher": {
+                            "id": "569749"
+                        }
+                    }
                 }
             },
             "mockResponse": {
@@ -131,7 +90,7 @@
                                     ],
                                     "cid": "958",
                                     "crid": "29681110",
-                                    "h": 600,
+                                    "h": 250,
                                     "w": 300,
                                     "ext": {
                                         "ix": {}
@@ -171,31 +130,6 @@
                     "type": "banner"
                 }
             ]
-        },
-        {
-            "currency": "USD",
-            "bids": [
-                {
-                    "bid": {
-                        "id": "7706636740145184841",
-                        "impid": "test-imp-id",
-                        "price": 0.5,
-                        "adm": "some-test-ad",
-                        "adid": "29681110",
-                        "adomain": [
-                            "https://advertiser.example.com"
-                        ],
-                        "cid": "958",
-                        "crid": "29681110",
-                        "w": 300,
-                        "h": 600,
-                        "ext": {
-                            "ix": {}
-                        }
-                    },
-                    "type": "banner"
-                }
-            ]
         }
     ]
 }
diff --git a/adapters/ix/ixtest/exemplary/structured-pod.json b/adapters/ix/ixtest/exemplary/structured-pod.json
new file mode 100644
index 00000000..a5ca9895
--- /dev/null
+++ b/adapters/ix/ixtest/exemplary/structured-pod.json
@@ -0,0 +1,236 @@
+{
+    "mockBidRequest": {
+        "id": "test-request-id",
+        "imp": [
+            {
+                "id": "test-imp-id-1",
+                "video": {
+                    "mimes": [
+                        "video/mp4"
+                    ],
+                    "minduration": 15,
+                    "maxduration": 30,
+                    "protocols": [
+                        2,
+                        3,
+                        5,
+                        6,
+                        7,
+                        8
+                    ],
+                    "w": 940,
+                    "h": 560,
+                    "podid": "1",
+                    "slotinpod": 1,
+                    "podseq": 1
+                },
+                "ext": {
+                    "bidder": {
+                        "siteId": "569749"
+                    }
+                }
+            },
+            {
+                "id": "test-imp-id-2",
+                "video": {
+                    "mimes": [
+                        "video/mp4"
+                    ],
+                    "minduration": 15,
+                    "maxduration": 30,
+                    "protocols": [
+                        2,
+                        3,
+                        5,
+                        6,
+                        7,
+                        8
+                    ],
+                    "w": 940,
+                    "h": 560,
+                    "podid": "1",
+                    "slotinpod": -1,
+                    "podseq": 1
+                },
+                "ext": {
+                    "bidder": {
+                        "siteId": "569749"
+                    }
+                }
+            }
+        ]
+    },
+    "httpCalls": [
+        {
+            "expectedRequest": {
+                "uri": "http://host/endpoint",
+                "body": {
+                  "id": "test-request-id",
+                    "imp": [
+                        {
+                            "id": "test-imp-id-1",
+                            "video": {
+                                "mimes": [
+                                    "video/mp4"
+                                ],
+                                "minduration": 15,
+                                "maxduration": 30,
+                                "protocols": [
+                                    2,
+                                    3,
+                                    5,
+                                    6,
+                                    7,
+                                    8
+                                ],
+                                "w": 940,
+                                "h": 560,
+                                "podid": "1",
+                                "slotinpod": 1,
+                                "podseq": 1
+                            },
+                            "ext": {
+                                "bidder": {
+                                    "siteId": "569749"
+                                }
+                            }
+                        },
+                        {
+                            "id": "test-imp-id-2",
+                            "video": {
+                                "mimes": [
+                                    "video/mp4"
+                                ],
+                                "minduration": 15,
+                                "maxduration": 30,
+                                "protocols": [
+                                    2,
+                                    3,
+                                    5,
+                                    6,
+                                    7,
+                                    8
+                                ],
+                                "w": 940,
+                                "h": 560,
+                                "podid": "1",
+                                "slotinpod": -1,
+                                "podseq": 1
+                            },
+                            "ext": {
+                                "bidder": {
+                                    "siteId": "569749"
+                                }
+                            }
+                        }
+                    ]
+                }
+            },
+            "mockResponse": {
+                "status": 200,
+                "body": {
+                    "id": "test-request-id",
+                    "seatbid": [
+                        {
+                            "seat": "958",
+                            "bid": [
+                                {
+                                    "id": "7706636740145184841",
+                                    "impid": "test-imp-id-1",
+                                    "price": 0.5,
+                                    "adid": "29681110",
+                                    "adm": "some-test-ad",
+                                    "adomain": [
+                                        "https://advertiser.example.com"
+                                    ],
+                                    "cid": "958",
+                                    "crid": "29681110",
+                                    "h": 560,
+                                    "w": 940,
+                                    "dur": 30,
+                                    "ext": {
+                                        "ix": {}
+                                    }
+                                }
+                            ]
+                        },
+                        {
+                            "seat": "958",
+                            "bid": [
+                                {
+                                    "id": "7706636740145184841",
+                                    "impid": "test-imp-id-2",
+                                    "price": 0.75,
+                                    "adid": "29681110",
+                                    "adm": "some-test-ad",
+                                    "adomain": [
+                                        "https://advertiser.example.com"
+                                    ],
+                                    "cid": "958",
+                                    "crid": "29681110",
+                                    "h": 560,
+                                    "w": 940,
+                                    "dur": 30,
+                                    "ext": {
+                                        "ix": {}
+                                    }
+                                }
+                            ]
+                        }
+                    ],
+                    "bidid": "5778926625248726496",
+                    "cur": "USD"
+                }
+            }
+        }
+    ],
+    "expectedBidResponses": [
+        {
+            "currency": "USD",
+            "bids": [
+                {
+                    "bid": {
+                        "id": "7706636740145184841",
+                        "impid": "test-imp-id-1",
+                        "price": 0.5,
+                        "adm": "some-test-ad",
+                        "adid": "29681110",
+                        "adomain": [
+                            "https://advertiser.example.com"
+                        ],
+                        "cid": "958",
+                        "crid": "29681110",
+                        "h": 560,
+                        "w": 940,
+                        "dur": 30,
+                    "ext": {
+                        "ix": {}
+                    }
+                },
+                "type": "video"
+            },
+            {
+                "bid": {
+                    "id": "7706636740145184841",
+                    "impid": "test-imp-id-2",
+                    "price": 0.75,
+                    "adm": "some-test-ad",
+                    "adid": "29681110",
+                    "adomain": [
+                        "https://advertiser.example.com"
+                    ],
+                    "cid": "958",
+                    "crid": "29681110",
+                    "h": 560,
+                    "w": 940,
+                    "dur": 30,
+                "ext": {
+                    "ix": {}
+                }
+            },
+                "type": "video"
+            }
+        ]
+    }
+    ]
+}
diff --git a/adapters/ix/ixtest/supplemental/bad-imp-id.json b/adapters/ix/ixtest/supplemental/bad-imp-id.json
index 5ca8daf2..28d40443 100644
--- a/adapters/ix/ixtest/supplemental/bad-imp-id.json
+++ b/adapters/ix/ixtest/supplemental/bad-imp-id.json
@@ -82,6 +82,7 @@
             }
         }
     ],
+    "expectedBidResponses": [{"currency":"USD","bids":[]}],
     "expectedMakeBidsErrors": [
         {
             "value": "unmatched impression id: bad-imp-id",
diff --git a/adapters/ix/ixtest/supplemental/multi-imp-requests-error.json b/adapters/ix/ixtest/supplemental/multi-imp-requests-error.json
new file mode 100644
index 00000000..223e8632
--- /dev/null
+++ b/adapters/ix/ixtest/supplemental/multi-imp-requests-error.json
@@ -0,0 +1,189 @@
+{
+    "mockBidRequest": {
+        "id": "test-request-id",
+        "imp": [
+            {
+                "id": "test-imp-id-1",
+                "banner": {
+                    "format": [
+                        {
+                            "w": 300,
+                            "h": 250
+                        },
+                        {
+                            "w": 300,
+                            "h": 600
+                        }
+                    ]
+                },
+                "ext": {
+                    "bidder": {
+                        "siteId": "569749",
+                        "sid": 12345
+                    }
+                }
+            },
+            {
+                "id": "test-imp-id-2",
+                "video": {
+                    "mimes": [
+                        "video/mp4"
+                    ],
+                    "minduration": 15,
+                    "maxduration": 30,
+                    "protocols": [
+                        2,
+                        3,
+                        5,
+                        6,
+                        7,
+                        8
+                    ],
+                    "w": 940,
+                    "h": 560
+                },
+                "ext": {
+                    "bidder": {
+                        "siteId": "569749"
+                    }
+                }
+            },
+            {
+                "id": "test-imp-id-3",
+                "banner": {
+                    "format": [
+                        {
+                            "w": 300,
+                            "h": 600
+                        }
+                    ]
+                },
+                "ext": {
+                    "bidder": {
+                        "siteId": "569749"
+                    }
+                }
+            }
+        ]
+    },
+    "httpCalls": [
+        {
+            "expectedRequest": {
+                "uri": "http://host/endpoint",
+                "body": {
+                  "id": "test-request-id",
+                    "imp": [
+                        {
+                            "id": "test-imp-id-2",
+                            "video": {
+                                "mimes": [
+                                    "video/mp4"
+                                ],
+                                "minduration": 15,
+                                "maxduration": 30,
+                                "protocols": [
+                                    2,
+                                    3,
+                                    5,
+                                    6,
+                                    7,
+                                    8
+                                ],
+                                "w": 940,
+                                "h": 560
+                            },
+                            "ext": {
+                                "bidder": {
+                                    "siteId": "569749"
+                                }
+                            }
+                        },
+                        {
+                            "id": "test-imp-id-3",
+                            "banner": {
+                                "format": [
+                                    {
+                                        "w": 300,
+                                        "h": 600
+                                    }
+                                ],
+                                "w": 300,
+                                "h": 600
+                            },
+                            "ext": {
+                                "bidder": {
+                                    "siteId": "569749"
+                                }
+                            }
+                        }
+                    ]
+                }
+            },
+            "mockResponse": {
+                "status": 200,
+                "body": {
+                    "id": "test-request-id",
+                    "seatbid": [
+                        {
+                            "seat": "958",
+                            "bid": [
+                                {
+                                    "id": "7706636740145184841",
+                                    "impid": "test-imp-id-1",
+                                    "price": 0.5,
+                                    "adid": "29681110",
+                                    "adm": "some-test-ad",
+                                    "adomain": [
+                                        "https://advertiser.example.com"
+                                    ],
+                                    "cid": "958",
+                                    "crid": "29681110",
+                                    "h": 600,
+                                    "w": 300,
+                                    "ext": {
+                                        "ix": {}
+                                    }
+                                }
+                            ]
+                        }
+                    ],
+                    "bidid": "5778926625248726496",
+                    "cur": "USD"
+                }
+            }
+        }
+    ],
+    "expectedBidResponses": [
+        {
+            "currency": "USD",
+            "bids": [
+                {
+                    "bid": {
+                        "id": "7706636740145184841",
+                        "impid": "test-imp-id-1",
+                        "price": 0.5,
+                        "adm": "some-test-ad",
+                        "adid": "29681110",
+                        "adomain": [
+                            "https://advertiser.example.com"
+                        ],
+                        "cid": "958",
+                        "crid": "29681110",
+                        "w": 300,
+                        "h": 600,
+                        "ext": {
+                            "ix": {}
+                        }
+                    },
+                    "type": "banner"
+                }
+            ]
+        }
+    ],
+    "expectedMakeRequestsErrors": [
+        {
+            "value": "json: cannot unmarshal number into Go struct field ExtImpIx.sid of type string",
+            "comparison": "literal"
+        }
+    ]
+}
diff --git a/adapters/ix/ixtest/supplemental/sid.json b/adapters/ix/ixtest/supplemental/sid.json
new file mode 100644
index 00000000..c2156b6b
--- /dev/null
+++ b/adapters/ix/ixtest/supplemental/sid.json
@@ -0,0 +1,184 @@
+{
+  "mockBidRequest": {
+    "id": "test-request-id",
+    "imp": [
+      {
+        "id": "test-imp-id-1",
+        "video": {
+          "mimes": [
+            "video/mp4"
+          ],
+          "minduration": 15,
+          "maxduration": 30,
+          "protocols": [
+            2,
+            3,
+            5,
+            6,
+            7,
+            8
+          ],
+          "w": 940,
+          "h": 560
+        },
+        "ext": {
+          "bidder": {
+            "siteId": "569749",
+            "sid": "1234"
+          }
+        }
+      },
+      {
+        "id": "test-imp-id-2",
+        "video": {
+          "mimes": [
+            "video/mp4"
+          ],
+          "minduration": 15,
+          "maxduration": 30,
+          "protocols": [
+            2,
+            3,
+            5,
+            6,
+            7,
+            8
+          ],
+          "w": 940,
+          "h": 560
+        },
+        "ext": {
+          "bidder": {
+            "siteId": "569750",
+            "sid": "5678"
+          }
+        }
+      }
+    ]
+  },
+  "httpCalls": [
+    {
+      "expectedRequest": {
+        "uri": "http://host/endpoint",
+        "body": {
+          "id": "test-request-id",
+          "imp": [
+            {
+              "id": "test-imp-id-1",
+              "video": {
+                "mimes": [
+                  "video/mp4"
+                ],
+                "minduration": 15,
+                "maxduration": 30,
+                "protocols": [
+                  2,
+                  3,
+                  5,
+                  6,
+                  7,
+                  8
+                ],
+                "w": 940,
+                "h": 560
+              },
+              "ext": {
+                "bidder": {
+                  "siteId": "569749",
+                  "sid": "1234"
+                },
+                "sid": "1234"
+              }
+            },
+            {
+              "id": "test-imp-id-2",
+              "video": {
+                "mimes": [
+                  "video/mp4"
+                ],
+                "minduration": 15,
+                "maxduration": 30,
+                "protocols": [
+                  2,
+                  3,
+                  5,
+                  6,
+                  7,
+                  8
+                ],
+                "w": 940,
+                "h": 560
+              },
+              "ext": {
+                "bidder": {
+                  "siteId": "569750",
+                  "sid": "5678"
+                },
+                "sid": "5678"
+              }
+            }
+          ]
+        }
+      },
+      "mockResponse": {
+        "status": 200,
+        "body": {
+          "id": "test-request-id",
+          "seatbid": [
+            {
+              "seat": "958",
+              "bid": [
+                {
+                  "id": "7706636740145184841",
+                  "impid": "test-imp-id-1",
+                  "price": 0.5,
+                  "adid": "29681110",
+                  "adm": "some-test-ad",
+                  "adomain": [
+                    "https://advertiser.example.com"
+                  ],
+                  "cid": "958",
+                  "crid": "29681110",
+                  "h": 250,
+                  "w": 300,
+                  "ext": {
+                    "ix": {}
+                  }
+                }
+              ]
+            }
+          ],
+          "bidid": "5778926625248726496",
+          "cur": "USD"
+        }
+      }
+    }
+  ],
+  "expectedBidResponses": [
+    {
+      "currency": "USD",
+      "bids": [
+        {
+          "bid": {
+            "id": "7706636740145184841",
+            "impid": "test-imp-id-1",
+            "price": 0.5,
+            "adm": "some-test-ad",
+            "adid": "29681110",
+            "adomain": [
+              "https://advertiser.example.com"
+            ],
+            "cid": "958",
+            "crid": "29681110",
+            "w": 300,
+            "h": 250,
+            "ext": {
+              "ix": {}
+            }
+          },
+          "type": "video"
+        }
+      ]
+    }
+  ]
+}
diff --git a/adapters/ix/params_test.go b/adapters/ix/params_test.go
index 9246a43a..8ba937c1 100644
--- a/adapters/ix/params_test.go
+++ b/adapters/ix/params_test.go
@@ -38,6 +38,7 @@ var validParams = []string{
 	`{"siteID":"12345"}`,
 	`{"siteId":"123456"}`,
 	`{"siteid":"1234567", "size": [640,480]}`,
+	`{"siteId":"123456", "sid":"12345"}`,
 }
 
 var invalidParams = []string{
diff --git a/adapters/kidoz/kidoztest/exemplary/simple-banner.json b/adapters/kidoz/kidoztest/exemplary/simple-banner.json
index 81b5f1e5..bd4c058c 100644
--- a/adapters/kidoz/kidoztest/exemplary/simple-banner.json
+++ b/adapters/kidoz/kidoztest/exemplary/simple-banner.json
@@ -68,5 +68,19 @@
 			}
 		}
 	],
-	"expectedBidResponses": []
-}
\ No newline at end of file
+    "expectedBidResponses": [
+      {
+        "currency": "EUR",
+        "bids": [
+          {
+            "bid": {
+              "id": "test-bid-id-1",
+              "impid": "test-impression-id-1",
+              "price": 1
+            },
+            "type": "banner"
+          }
+        ]
+      }
+    ]
+}
diff --git a/adapters/kidoz/kidoztest/exemplary/simple-video.json b/adapters/kidoz/kidoztest/exemplary/simple-video.json
index 7c012f95..7ffb5406 100644
--- a/adapters/kidoz/kidoztest/exemplary/simple-video.json
+++ b/adapters/kidoz/kidoztest/exemplary/simple-video.json
@@ -66,5 +66,19 @@
 			}
 		}
 	],
-	"expectedBidResponses": []
-}
\ No newline at end of file
+    "expectedBidResponses": [
+      {
+        "currency": "EUR",
+        "bids": [
+          {
+            "bid": {
+              "id": "test-bid-id-1",
+              "impid": "test-impression-id-1",
+              "price": 1
+            },
+            "type": "video"
+          }
+        ]
+      }
+    ]
+}
diff --git a/adapters/limelightDigital/LimelightDigitaltest/supplemental/empty_object_response.json b/adapters/limelightDigital/LimelightDigitaltest/supplemental/empty_object_response.json
index 7f62a76f..2703b9a8 100644
--- a/adapters/limelightDigital/LimelightDigitaltest/supplemental/empty_object_response.json
+++ b/adapters/limelightDigital/LimelightDigitaltest/supplemental/empty_object_response.json
@@ -48,5 +48,5 @@
       }
     }
   ],
-  "expectedBidResponses": []
+  "expectedBidResponses": [{"currency":"USD","bids":[]}]
 }
diff --git a/adapters/limelightDigital/LimelightDigitaltest/supplemental/unknown_bid_impid.json b/adapters/limelightDigital/LimelightDigitaltest/supplemental/unknown_bid_impid.json
index 157453c1..371983bd 100644
--- a/adapters/limelightDigital/LimelightDigitaltest/supplemental/unknown_bid_impid.json
+++ b/adapters/limelightDigital/LimelightDigitaltest/supplemental/unknown_bid_impid.json
@@ -68,6 +68,7 @@
       }
     }
   ],
+  "expectedBidResponses": [{"currency":"USD","bids":[]}],
   "expectedMakeBidsErrors": [
     {
       "value": "bid contains unknown imp id: test-unknown-banner-id",
diff --git a/adapters/limelightDigital/LimelightDigitaltest/supplemental/unknown_imp_media_type.json b/adapters/limelightDigital/LimelightDigitaltest/supplemental/unknown_imp_media_type.json
index 6eebe900..dcc3f355 100644
--- a/adapters/limelightDigital/LimelightDigitaltest/supplemental/unknown_imp_media_type.json
+++ b/adapters/limelightDigital/LimelightDigitaltest/supplemental/unknown_imp_media_type.json
@@ -52,6 +52,7 @@
       }
     }
   ],
+  "expectedBidResponses": [{"currency":"USD","bids":[]}],
   "expectedMakeBidsErrors": [
     {
       "value": "unknown media type of imp: test-banner-id",
diff --git a/adapters/mobfoxpb/mobfoxpbtest/supplemental/missmatch_bid_id.json b/adapters/mobfoxpb/mobfoxpbtest/supplemental/missmatch_bid_id.json
index 28a1b6c7..391462e8 100644
--- a/adapters/mobfoxpb/mobfoxpbtest/supplemental/missmatch_bid_id.json
+++ b/adapters/mobfoxpb/mobfoxpbtest/supplemental/missmatch_bid_id.json
@@ -100,10 +100,11 @@
             }
         }
     ],
+    "expectedBidResponses": [{"currency":"USD","bids":[]}],
     "expectedMakeBidsErrors": [
         {
             "value": "Failed to find impression \"test-imp-id-not\"",
             "comparison": "literal"
         }
     ]
-}
\ No newline at end of file
+}
diff --git a/adapters/nobid/nobidtest/supplemental/bad-response.json b/adapters/nobid/nobidtest/supplemental/bad-response.json
index 05b6e623..617f9273 100644
--- a/adapters/nobid/nobidtest/supplemental/bad-response.json
+++ b/adapters/nobid/nobidtest/supplemental/bad-response.json
@@ -60,7 +60,7 @@
         }
       }
     ],
-    "expectedBidResponses": [],
+    "expectedBidResponses": [{"currency":"USD","bids":[]}],
     "expectedMakeBidsErrors": [
       {
       "value": "Failed to find impression \"XYZ\"",
@@ -68,4 +68,4 @@
       }
     ]
   }
-  
\ No newline at end of file
+  
diff --git a/adapters/openweb/openwebtest/supplemental/wrong-impression-mapping.json b/adapters/openweb/openwebtest/supplemental/wrong-impression-mapping.json
index 776cbabc..d733df3a 100644
--- a/adapters/openweb/openwebtest/supplemental/wrong-impression-mapping.json
+++ b/adapters/openweb/openwebtest/supplemental/wrong-impression-mapping.json
@@ -68,6 +68,7 @@
       }
     }
   ],
+  "expectedBidResponses": [{"currency":"USD","bids":[]}],
   "expectedMakeBidsErrors": [
     {
       "value": "ignoring bid id=test-bid-id, request doesn't contain any impression with id=SOME-WRONG-IMP-ID",
diff --git a/adapters/pangle/pangletest/supplemental/pangle_ext_check.json b/adapters/pangle/pangletest/supplemental/pangle_ext_check.json
index e80c199a..4983acfd 100644
--- a/adapters/pangle/pangletest/supplemental/pangle_ext_check.json
+++ b/adapters/pangle/pangletest/supplemental/pangle_ext_check.json
@@ -98,11 +98,11 @@
       }
     }
   ],
-  "expectedBidResponses": [],
+  "expectedBidResponses": [{"currency":"USD","bids":[]}],
   "expectedMakeBidsErrors": [
     {
       "value": "missing pangleExt/adtype in bid ext",
       "comparison": "literal"
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/adapters/pangle/pangletest/supplemental/unrecognized_adtype.json b/adapters/pangle/pangletest/supplemental/unrecognized_adtype.json
index 613694a9..74871686 100644
--- a/adapters/pangle/pangletest/supplemental/unrecognized_adtype.json
+++ b/adapters/pangle/pangletest/supplemental/unrecognized_adtype.json
@@ -100,12 +100,11 @@
       }
     }
   ],
-  "expectedBidResponses": [
-  ],
+  "expectedBidResponses": [{"currency":"USD","bids":[]}],
   "expectedMakeBidsErrors": [
     {
       "value": "unrecognized adtype in response",
       "comparison": "literal"
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/adapters/rise/risetest/supplemental/missing-mtype.json b/adapters/rise/risetest/supplemental/missing-mtype.json
index bc9466d9..be45db58 100644
--- a/adapters/rise/risetest/supplemental/missing-mtype.json
+++ b/adapters/rise/risetest/supplemental/missing-mtype.json
@@ -113,5 +113,6 @@
       "value": "unsupported MType 3",
       "comparison": "literal"
     }
-  ]
+  ],
+  "expectedBidResponses": [{"currency":"USD","bids":[]}]
 }
diff --git a/adapters/sharethrough/sharethroughtest/supplemental/error-bad-request.json b/adapters/sharethrough/sharethroughtest/supplemental/error-bad-request.json
index 82908095..76d81780 100644
--- a/adapters/sharethrough/sharethroughtest/supplemental/error-bad-request.json
+++ b/adapters/sharethrough/sharethroughtest/supplemental/error-bad-request.json
@@ -90,9 +90,6 @@
       }
     }
   ],
-  "expectedBidResponses": [
-    null
-  ],
   "expectedMakeBidsErrors": [
     {
       "value": "Unexpected status code: 400.",
diff --git a/adapters/sharethrough/sharethroughtest/supplemental/error-internal-server.json b/adapters/sharethrough/sharethroughtest/supplemental/error-internal-server.json
index 11cbc3a4..5562c466 100644
--- a/adapters/sharethrough/sharethroughtest/supplemental/error-internal-server.json
+++ b/adapters/sharethrough/sharethroughtest/supplemental/error-internal-server.json
@@ -90,9 +90,6 @@
       }
     }
   ],
-  "expectedBidResponses": [
-    null
-  ],
   "expectedMakeBidsErrors": [
     {
       "value": "unexpected status code: 500.",
diff --git a/adapters/sharethrough/sharethroughtest/supplemental/multiformat-impression.json b/adapters/sharethrough/sharethroughtest/supplemental/multiformat-impression.json
new file mode 100644
index 00000000..fcebf79a
--- /dev/null
+++ b/adapters/sharethrough/sharethroughtest/supplemental/multiformat-impression.json
@@ -0,0 +1,362 @@
+{
+  "mockBidRequest": {
+    "id": "parent-id",
+    "tmax": 3000,
+    "imp": [
+      {
+        "id": "impression-id",
+        "ext": {
+          "bidder": {
+            "pkey": "pkey1"
+          }
+        },
+        "banner": {
+          "format": [
+            {
+              "w": 300,
+              "h": 250
+            }
+          ]
+        },
+        "video": {
+          "w": 640,
+          "h": 480,
+          "mimes": [
+            "video/mp4"
+          ],
+          "placement": 1
+        },
+        "native": {
+          "ver": "1.2",
+          "request": "placeholder request"
+        },
+        "audio": {
+          "mimes": [
+            "audio/mp4"
+          ],
+          "protocols": [
+            1,
+            2
+          ]
+        }
+      }
+    ],
+    "site": {
+      "publisher": {
+        "id": "1"
+      },
+      "page": "https://some-site.com",
+      "ref": "https://some-site.com"
+    },
+    "device": {
+      "w": 1200,
+      "h": 900
+    }
+  },
+  "httpCalls": [
+    {
+      "expectedRequest": {
+        "uri": "http://whatever.url",
+        "headers": {
+          "Content-Type": [
+            "application/json;charset=utf-8"
+          ],
+          "Accept": [
+            "application/json"
+          ]
+        },
+        "body": {
+          "id": "parent-id",
+          "tmax": 3000,
+          "imp": [
+            {
+              "id": "impression-id",
+              "tagid": "pkey1",
+              "ext": {
+                "bidder": {
+                  "pkey": "pkey1"
+                }
+              },
+              "banner": {
+                "format": [
+                  {
+                    "w": 300,
+                    "h": 250
+                  }
+                ]
+              }
+            }
+          ],
+          "site": {
+            "publisher": {
+              "id": "1"
+            },
+            "page": "https://some-site.com",
+            "ref": "https://some-site.com"
+          },
+          "device": {
+            "w": 1200,
+            "h": 900
+          },
+          "source": {
+            "ext": {
+              "version": "",
+              "str": "10.0"
+            }
+          }
+        }
+      },
+      "mockResponse": {
+        "status": 200,
+        "body": {
+          "id": "parent-id",
+          "cur": "USD",
+          "seatbid": [
+            {
+              "bid": [
+                {
+                  "id": "parent-id",
+                  "impid": "impression-id",
+                  "crid": "some-creative-id",
+                  "adm": "<div>Ad</div>",
+                  "price": 20,
+                  "w": 300,
+                  "h": 250,
+                  "ext": {
+                    "prebid": {
+                      "type": "banner"
+                    }
+                  }
+                }
+              ]
+            }
+          ]
+        }
+      }
+    },
+    {
+      "expectedRequest": {
+        "uri": "http://whatever.url",
+        "headers": {
+          "Content-Type": [
+            "application/json;charset=utf-8"
+          ],
+          "Accept": [
+            "application/json"
+          ]
+        },
+        "body": {
+          "id": "parent-id",
+          "tmax": 3000,
+          "imp": [
+            {
+              "id": "impression-id",
+              "tagid": "pkey1",
+              "ext": {
+                "bidder": {
+                  "pkey": "pkey1"
+                }
+              },
+              "video": {
+                "w": 640,
+                "h": 480,
+                "mimes": [
+                  "video/mp4"
+                ],
+                "placement": 1
+              }
+            }
+          ],
+          "site": {
+            "publisher": {
+              "id": "1"
+            },
+            "page": "https://some-site.com",
+            "ref": "https://some-site.com"
+          },
+          "device": {
+            "w": 1200,
+            "h": 900
+          },
+          "source": {
+            "ext": {
+              "version": "",
+              "str": "10.0"
+            }
+          }
+        }
+      },
+      "mockResponse": {
+        "status": 200,
+        "body": {
+          "id": "parent-id",
+          "cur": "USD",
+          "seatbid": [
+            {
+              "bid": [
+                {
+                  "id": "parent-id",
+                  "impid": "impression-id",
+                  "crid": "some-creative-id",
+                  "adm": "<VAST>TAG</VAST>",
+                  "price": 20,
+                  "w": 640,
+                  "h": 480,
+                  "ext": {
+                    "prebid": {
+                      "type": "video"
+                    }
+                  }
+                }
+              ]
+            }
+          ]
+        }
+      }
+    },
+    {
+      "expectedRequest": {
+        "uri": "http://whatever.url",
+        "headers": {
+          "Content-Type": [
+            "application/json;charset=utf-8"
+          ],
+          "Accept": [
+            "application/json"
+          ]
+        },
+        "body": {
+          "id": "parent-id",
+          "tmax": 3000,
+          "imp": [
+            {
+              "id": "impression-id",
+              "tagid": "pkey1",
+              "ext": {
+                "bidder": {
+                  "pkey": "pkey1"
+                }
+              },
+              "native": {
+                "ver": "1.2",
+                "request": "placeholder request"
+              }
+            }
+          ],
+          "site": {
+            "publisher": {
+              "id": "1"
+            },
+            "page": "https://some-site.com",
+            "ref": "https://some-site.com"
+          },
+          "device": {
+            "w": 1200,
+            "h": 900
+          },
+          "source": {
+            "ext": {
+              "version": "",
+              "str": "10.0"
+            }
+          }
+        }
+      },
+      "mockResponse": {
+        "status": 200,
+        "body": {
+          "id": "parent-id",
+          "cur": "USD",
+          "seatbid": [
+            {
+              "bid": [
+                {
+                  "id": "parent-id",
+                  "impid": "impression-id",
+                  "crid": "some-creative-id",
+                  "adm": "<div>Ad</div>",
+                  "price": 20,
+                  "w": 640,
+                  "h": 480,
+                  "ext": {
+                    "prebid": {
+                      "type": "native"
+                    }
+                  }
+                }
+              ]
+            }
+          ]
+        }
+      }
+    }
+  ],
+  "expectedBidResponses": [
+    {
+      "currency": "USD",
+      "bids": [
+        {
+          "bid": {
+            "id": "parent-id",
+            "impid": "impression-id",
+            "crid": "some-creative-id",
+            "adm": "<div>Ad</div>",
+            "price": 20,
+            "w": 300,
+            "h": 250,
+            "ext": {
+              "prebid": {
+                "type": "banner"
+              }
+            }
+          },
+          "type": "banner"
+        }
+      ]
+    },
+    {
+      "currency": "USD",
+      "bids": [
+        {
+          "bid": {
+            "id": "parent-id",
+            "impid": "impression-id",
+            "crid": "some-creative-id",
+            "adm": "<VAST>TAG</VAST>",
+            "price": 20,
+            "w": 640,
+            "h": 480,
+            "ext": {
+              "prebid": {
+                "type": "video"
+              }
+            }
+          },
+          "type": "video"
+        }
+      ]
+    },
+    {
+      "currency": "USD",
+      "bids": [
+        {
+          "bid": {
+            "id": "parent-id",
+            "impid": "impression-id",
+            "crid": "some-creative-id",
+            "adm": "<div>Ad</div>",
+            "price": 20,
+            "w": 640,
+            "h": 480,
+            "ext": {
+              "prebid": {
+                "type": "native"
+              }
+            }
+          },
+          "type": "native"
+        }
+      ]
+    }
+  ]
+}
\ No newline at end of file
diff --git a/adapters/sharethrough/sharethroughtest/supplemental/no-fill.json b/adapters/sharethrough/sharethroughtest/supplemental/no-fill.json
index 6d7dd939..3b8dd997 100644
--- a/adapters/sharethrough/sharethroughtest/supplemental/no-fill.json
+++ b/adapters/sharethrough/sharethroughtest/supplemental/no-fill.json
@@ -90,8 +90,5 @@
       }
     }
   ],
-  "expectedBidResponses": [
-    null
-  ],
   "expectedMakeBidsErrors": []
 }
diff --git a/adapters/smaato/smaatotest/supplemental/bad-adm-response.json b/adapters/smaato/smaatotest/supplemental/bad-adm-response.json
index 04a7248d..e45e8753 100644
--- a/adapters/smaato/smaatotest/supplemental/bad-adm-response.json
+++ b/adapters/smaato/smaatotest/supplemental/bad-adm-response.json
@@ -162,10 +162,11 @@
       }
     }
   ],
+  "expectedBidResponses": [{"currency":"USD","bids":[]}],
   "expectedMakeBidsErrors": [
     {
       "value": "Invalid ad markup {\"badmedia\":{\"mediadata\":{\"content\":\"<div>hello</div>\", \"w\":350,\"h\":50},\"impressiontrackers\":[\"//prebid-test.smaatolabs.net/track/imp/1\",\"//prebid-test.smaatolabs.net/track/imp/2\"],\"clicktrackers\":[\"//prebid-test.smaatolabs.net/track/click/1\",\"//prebid-test.smaatolabs.net/track/click/2\"]}}.",
       "comparison": "literal"
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/adapters/smaato/smaatotest/supplemental/bad-adtype-header-response.json b/adapters/smaato/smaatotest/supplemental/bad-adtype-header-response.json
index 679a34f7..053f0d3f 100644
--- a/adapters/smaato/smaatotest/supplemental/bad-adtype-header-response.json
+++ b/adapters/smaato/smaatotest/supplemental/bad-adtype-header-response.json
@@ -165,10 +165,11 @@
       }
     }
   ],
+  "expectedBidResponses": [{"currency":"USD","bids":[]}],
   "expectedMakeBidsErrors": [
     {
       "value": "Unknown markup type something.",
       "comparison": "literal"
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/adapters/sovrn/sovrntest/supplemental/invalid-imp-id.json b/adapters/sovrn/sovrntest/supplemental/invalid-imp-id.json
index 874844dc..e3b2c17c 100644
--- a/adapters/sovrn/sovrntest/supplemental/invalid-imp-id.json
+++ b/adapters/sovrn/sovrntest/supplemental/invalid-imp-id.json
@@ -113,7 +113,7 @@
       }
     }
   ],
-
+  "expectedBidResponses": [{"currency":"USD","bids":[]}],
   "expectedMakeBidsErrors": [
     {
       "value": "Imp ID test-imp-idx in bid didn't match with any imp in the original request",
diff --git a/adapters/sspBC/sspbctest/supplemental/bad_response_without_adm.json b/adapters/sspBC/sspbctest/supplemental/bad_response_without_adm.json
index 46774f30..f8358499 100644
--- a/adapters/sspBC/sspbctest/supplemental/bad_response_without_adm.json
+++ b/adapters/sspBC/sspbctest/supplemental/bad_response_without_adm.json
@@ -120,10 +120,11 @@
             }
         }
     ],
+    "expectedBidResponses": [{"currency":"USD","bids":[]}],
     "expectedMakeBidsErrors": [
         {
             "value": "bid format is not supported",
             "comparison": "literal"
         }
     ]
-}
\ No newline at end of file
+}
diff --git a/adapters/taboola/taboolatest/supplemental/incorrectResponseImpMapping.json b/adapters/taboola/taboolatest/supplemental/incorrectResponseImpMapping.json
index 7373d05c..3cc915ce 100644
--- a/adapters/taboola/taboolatest/supplemental/incorrectResponseImpMapping.json
+++ b/adapters/taboola/taboolatest/supplemental/incorrectResponseImpMapping.json
@@ -123,6 +123,7 @@
       }
     }
   ],
+  "expectedBidResponses": [{"currency":"USD","bids":[]}],
   "expectedMakeBidsErrors": [
     {
       "value": "Failed to find banner/native impression \"incorrect-impression-id\" ",
diff --git a/adapters/unruly/unrulytest/supplemental/no-matching-impid.json b/adapters/unruly/unrulytest/supplemental/no-matching-impid.json
index d3519db3..efabbe64 100644
--- a/adapters/unruly/unrulytest/supplemental/no-matching-impid.json
+++ b/adapters/unruly/unrulytest/supplemental/no-matching-impid.json
@@ -87,6 +87,7 @@
       }
     }
   ],
+  "expectedBidResponses": [{"currency":"USD","bids":[]}],
   "expectedMakeBidsErrors": [
     {
       "comparison": "literal",
diff --git a/adapters/vidoomy/vidoomytest/supplemental/simple-banner-no-response.json b/adapters/vidoomy/vidoomytest/supplemental/simple-banner-no-response.json
index 0964351a..b765252f 100644
--- a/adapters/vidoomy/vidoomytest/supplemental/simple-banner-no-response.json
+++ b/adapters/vidoomy/vidoomytest/supplemental/simple-banner-no-response.json
@@ -77,9 +77,5 @@
         "body": {}
       }
     }
-  ],
-
-  "expectedBidResponses": [
-    {}
   ]
 }
diff --git a/adapters/vrtcal/vrtcaltest/supplemental/unmatched_response_impression_id.json b/adapters/vrtcal/vrtcaltest/supplemental/unmatched_response_impression_id.json
index 42cf5f1a..b3bfc060 100644
--- a/adapters/vrtcal/vrtcaltest/supplemental/unmatched_response_impression_id.json
+++ b/adapters/vrtcal/vrtcaltest/supplemental/unmatched_response_impression_id.json
@@ -78,6 +78,7 @@
       }
     }
   ],
+  "expectedBidResponses": [{"currency":"USD","bids":[]}],
     "expectedMakeBidsErrors": [
       {
         "value": "Failed to find impression for ID: \"WRONG-IMPRESSION_ID\"",
diff --git a/adapters/xeworks/xeworkstest/exemplary/banner.json b/adapters/xeworks/xeworkstest/exemplary/banner.json
index 2360c279..657c36c6 100644
--- a/adapters/xeworks/xeworkstest/exemplary/banner.json
+++ b/adapters/xeworks/xeworkstest/exemplary/banner.json
@@ -247,6 +247,33 @@
           "type": "banner"
         }
       ]
+    },
+    {
+      "currency": "USD",
+      "bids": [
+        {
+          "bid": {
+            "id": "id",
+            "impid": "2",
+            "price": 2.4,
+            "nurl": "http://test.com/nurl",
+            "burl": "http://test.com/burl",
+            "adm": "<span>Test3</span>",
+            "adomain": ["test.com"],
+            "cat": ["IAB1"],
+            "cid": "cid",
+            "crid": "crid",
+            "w": 300,
+            "h": 250,
+            "ext": {
+              "prebid": {
+                "type": "banner"
+              }
+            }
+          },
+          "type": "banner"
+        }
+      ]
     }
   ]
 }
diff --git a/adapters/xeworks/xeworkstest/supplemental/empty-mediatype.json b/adapters/xeworks/xeworkstest/supplemental/empty-mediatype.json
index 5fb43a36..c2d62d09 100644
--- a/adapters/xeworks/xeworkstest/supplemental/empty-mediatype.json
+++ b/adapters/xeworks/xeworkstest/supplemental/empty-mediatype.json
@@ -156,5 +156,33 @@
       "comparison": "literal"
     }
   ],
-  "expectedBidResponses": []
+  "expectedBidResponses": [
+    {
+      "currency":"USD",
+      "bids":[
+        {
+          "bid": {
+            "id": "id",
+            "impid": "1",
+            "price": 0.1,
+            "nurl": "http://test.com/nurl",
+            "burl": "http://test.com/burl",
+            "adm": "<span>Test1</span>",
+            "adomain": ["test.com"],
+            "cat": ["IAB1"],
+            "cid": "cid",
+            "crid": "crid",
+            "w": 300,
+            "h": 250,
+            "ext": {
+              "prebid": {
+                "type": "banner"
+              }
+            }
+          },
+          "type": "banner"
+        }
+      ]
+    }
+  ]
 }
diff --git a/adapters/xeworks/xeworkstest/supplemental/empty-seatbid-0-bid.json b/adapters/xeworks/xeworkstest/supplemental/empty-seatbid-0-bid.json
index 3f275448..98bcbbeb 100644
--- a/adapters/xeworks/xeworkstest/supplemental/empty-seatbid-0-bid.json
+++ b/adapters/xeworks/xeworkstest/supplemental/empty-seatbid-0-bid.json
@@ -107,5 +107,5 @@
     }
   ],
   "expectedMakeBidsErrors": [],
-  "expectedBidResponses": []
+  "expectedBidResponses": [{"currency":"USD","bids":[]}]
 }
diff --git a/adapters/xeworks/xeworkstest/supplemental/invalid-mediatype.json b/adapters/xeworks/xeworkstest/supplemental/invalid-mediatype.json
index db84e637..39e0cd23 100644
--- a/adapters/xeworks/xeworkstest/supplemental/invalid-mediatype.json
+++ b/adapters/xeworks/xeworkstest/supplemental/invalid-mediatype.json
@@ -158,5 +158,33 @@
       "comparison": "literal"
     }
   ],
-  "expectedBidResponses": []
+  "expectedBidResponses": [
+    {
+      "currency":"USD",
+      "bids":[
+        {
+          "bid": {
+            "id": "id",
+            "impid": "1",
+            "price": 0.1,
+            "nurl": "http://test.com/nurl",
+            "burl": "http://test.com/burl",
+            "adm": "<span>Test1</span>",
+            "adomain": ["test.com"],
+            "cat": ["IAB1"],
+            "cid": "cid",
+            "crid": "crid",
+            "w": 300,
+            "h": 250,
+            "ext": {
+              "prebid": {
+                "type": "banner"
+              }
+            }
+          },
+          "type": "banner"
+        }
+      ]
+    }
+  ]
 }
diff --git a/adapters/yahooAdvertising/params_test.go b/adapters/yahooAds/params_test.go
similarity index 63%
rename from adapters/yahooAdvertising/params_test.go
rename to adapters/yahooAds/params_test.go
index 10d504cb..c0deaaa3 100644
--- a/adapters/yahooAdvertising/params_test.go
+++ b/adapters/yahooAds/params_test.go
@@ -1,4 +1,4 @@
-package yahooAdvertising
+package yahooAds
 
 import (
 	"encoding/json"
@@ -7,11 +7,11 @@ import (
 	"github.com/prebid/prebid-server/openrtb_ext"
 )
 
-// This file actually intends to test static/bidder-params/yahooAdvertising.json
+// This file actually intends to test static/bidder-params/yahooAds.json
 //
-// These also validate the format of the external API: request.imp[i].ext.yahooAdvertising
+// These also validate the format of the external API: request.imp[i].ext.yahooAds
 
-// TestValidParams makes sure that the yahooAdvertising schema accepts all imp.ext fields which we intend to support.
+// TestValidParams makes sure that the yahooAds 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 {
@@ -19,13 +19,13 @@ func TestValidParams(t *testing.T) {
 	}
 
 	for _, validParam := range validParams {
-		if err := validator.Validate(openrtb_ext.BidderYahooAdvertising, json.RawMessage(validParam)); err != nil {
-			t.Errorf("Schema rejected yahooAdvertising params: %s", validParam)
+		if err := validator.Validate(openrtb_ext.BidderYahooAds, json.RawMessage(validParam)); err != nil {
+			t.Errorf("Schema rejected yahooAds params: %s", validParam)
 		}
 	}
 }
 
-// TestInvalidParams makes sure that the yahooAdvertising schema rejects all the imp.ext fields we don't support.
+// TestInvalidParams makes sure that the yahooAds 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 {
@@ -33,7 +33,7 @@ func TestInvalidParams(t *testing.T) {
 	}
 
 	for _, invalidParam := range invalidParams {
-		if err := validator.Validate(openrtb_ext.BidderYahooAdvertising, json.RawMessage(invalidParam)); err == nil {
+		if err := validator.Validate(openrtb_ext.BidderYahooAds, json.RawMessage(invalidParam)); err == nil {
 			t.Errorf("Schema allowed unexpected params: %s", invalidParam)
 		}
 	}
diff --git a/adapters/yahooAdvertising/yahooAdvertising_test.go b/adapters/yahooAds/yahooAds_test.go
similarity index 51%
rename from adapters/yahooAdvertising/yahooAdvertising_test.go
rename to adapters/yahooAds/yahooAds_test.go
index e701c333..924eabd5 100644
--- a/adapters/yahooAdvertising/yahooAdvertising_test.go
+++ b/adapters/yahooAds/yahooAds_test.go
@@ -1,4 +1,4 @@
-package yahooAdvertising
+package yahooAds
 
 import (
 	"testing"
@@ -10,8 +10,8 @@ import (
 	"github.com/prebid/prebid-server/openrtb_ext"
 )
 
-func TestYahooAdvertisingBidderEndpointConfig(t *testing.T) {
-	bidder, buildErr := Builder(openrtb_ext.BidderYahooAdvertising, config.Adapter{
+func TestYahooAdsBidderEndpointConfig(t *testing.T) {
+	bidder, buildErr := Builder(openrtb_ext.BidderYahooAds, config.Adapter{
 		Endpoint: "http://localhost/bid",
 	}, config.Server{ExternalUrl: "http://hosturl.com", GvlID: 1, DataCenter: "2"})
 
@@ -19,17 +19,17 @@ func TestYahooAdvertisingBidderEndpointConfig(t *testing.T) {
 		t.Fatalf("Builder returned unexpected error %v", buildErr)
 	}
 
-	bidderYahooAdvertising := bidder.(*adapter)
+	bidderYahooAds := bidder.(*adapter)
 
-	assert.Equal(t, "http://localhost/bid", bidderYahooAdvertising.URI)
+	assert.Equal(t, "http://localhost/bid", bidderYahooAds.URI)
 }
 
 func TestJsonSamples(t *testing.T) {
-	bidder, buildErr := Builder(openrtb_ext.BidderYahooAdvertising, config.Adapter{}, config.Server{ExternalUrl: "http://hosturl.com", GvlID: 1, DataCenter: "2"})
+	bidder, buildErr := Builder(openrtb_ext.BidderYahooAds, config.Adapter{}, config.Server{ExternalUrl: "http://hosturl.com", GvlID: 1, DataCenter: "2"})
 
 	if buildErr != nil {
 		t.Fatalf("Builder returned unexpected error %v", buildErr)
 	}
 
-	adapterstest.RunJSONBidderTest(t, "yahooAdvertisingtest", bidder)
+	adapterstest.RunJSONBidderTest(t, "yahooAdstest", bidder)
 }
diff --git a/adapters/yahooAdvertising/yahooAdvertisingtest/exemplary/simple-app-banner.json b/adapters/yahooAds/yahooAdstest/exemplary/simple-app-banner.json
similarity index 98%
rename from adapters/yahooAdvertising/yahooAdvertisingtest/exemplary/simple-app-banner.json
rename to adapters/yahooAds/yahooAdstest/exemplary/simple-app-banner.json
index d5e77c71..7ad41161 100644
--- a/adapters/yahooAdvertising/yahooAdvertisingtest/exemplary/simple-app-banner.json
+++ b/adapters/yahooAds/yahooAdstest/exemplary/simple-app-banner.json
@@ -77,7 +77,7 @@
           "id": "test-request-id",
           "seatbid": [
             {
-              "seat": "yahooAdvertising",
+              "seat": "yahooAds",
               "bid": [{
                 "id": "8ee514f1-b2b8-4abb-89fd-084437d1e800",
                 "impid": "test-imp-id",
diff --git a/adapters/yahooAdvertising/yahooAdvertisingtest/exemplary/simple-banner.json b/adapters/yahooAds/yahooAdstest/exemplary/simple-banner.json
similarity index 98%
rename from adapters/yahooAdvertising/yahooAdvertisingtest/exemplary/simple-banner.json
rename to adapters/yahooAds/yahooAdstest/exemplary/simple-banner.json
index d08bdf06..7036664d 100644
--- a/adapters/yahooAdvertising/yahooAdvertisingtest/exemplary/simple-banner.json
+++ b/adapters/yahooAds/yahooAdstest/exemplary/simple-banner.json
@@ -77,7 +77,7 @@
           "id": "test-request-id",
           "seatbid": [
             {
-              "seat": "yahooAdvertising",
+              "seat": "yahooAds",
               "bid": [{
                 "id": "8ee514f1-b2b8-4abb-89fd-084437d1e800",
                 "impid": "test-imp-id",
diff --git a/adapters/yahooAdvertising/yahooAdvertisingtest/exemplary/simple-video.json b/adapters/yahooAds/yahooAdstest/exemplary/simple-video.json
similarity index 98%
rename from adapters/yahooAdvertising/yahooAdvertisingtest/exemplary/simple-video.json
rename to adapters/yahooAds/yahooAdstest/exemplary/simple-video.json
index ea95ec40..ebf7af93 100644
--- a/adapters/yahooAdvertising/yahooAdvertisingtest/exemplary/simple-video.json
+++ b/adapters/yahooAds/yahooAdstest/exemplary/simple-video.json
@@ -92,7 +92,7 @@
           "id": "test-request-id",
           "seatbid": [
             {
-              "seat": "yahooAdvertising",
+              "seat": "yahooAds",
               "bid": [{
                 "id": "8ee514f1-b2b8-4abb-89fd-084437d1e800",
                 "impid": "test-imp-id",
diff --git a/adapters/yahooAdvertising/yahooAdvertisingtest/supplemental/empty-banner-format.json b/adapters/yahooAds/yahooAdstest/supplemental/empty-banner-format.json
similarity index 100%
rename from adapters/yahooAdvertising/yahooAdvertisingtest/supplemental/empty-banner-format.json
rename to adapters/yahooAds/yahooAdstest/supplemental/empty-banner-format.json
diff --git a/adapters/yahooAdvertising/yahooAdvertisingtest/supplemental/invalid-banner-height.json b/adapters/yahooAds/yahooAdstest/supplemental/invalid-banner-height.json
similarity index 100%
rename from adapters/yahooAdvertising/yahooAdvertisingtest/supplemental/invalid-banner-height.json
rename to adapters/yahooAds/yahooAdstest/supplemental/invalid-banner-height.json
diff --git a/adapters/yahooAdvertising/yahooAdvertisingtest/supplemental/invalid-banner-width.json b/adapters/yahooAds/yahooAdstest/supplemental/invalid-banner-width.json
similarity index 100%
rename from adapters/yahooAdvertising/yahooAdvertisingtest/supplemental/invalid-banner-width.json
rename to adapters/yahooAds/yahooAdstest/supplemental/invalid-banner-width.json
diff --git a/adapters/yahooAdvertising/yahooAdvertisingtest/supplemental/non-supported-requests-bids-ignored.json b/adapters/yahooAds/yahooAdstest/supplemental/non-supported-requests-bids-ignored.json
similarity index 98%
rename from adapters/yahooAdvertising/yahooAdvertisingtest/supplemental/non-supported-requests-bids-ignored.json
rename to adapters/yahooAds/yahooAdstest/supplemental/non-supported-requests-bids-ignored.json
index a44020da..c0d77fa4 100644
--- a/adapters/yahooAdvertising/yahooAdvertisingtest/supplemental/non-supported-requests-bids-ignored.json
+++ b/adapters/yahooAds/yahooAdstest/supplemental/non-supported-requests-bids-ignored.json
@@ -74,7 +74,7 @@
           "id": "test-request-id",
           "seatbid": [
             {
-              "seat": "yahooAdvertising",
+              "seat": "yahooAds",
               "bid": [{
                 "id": "8ee514f1-b2b8-4abb-89fd-084437d1e800",
                 "impid": "test-imp-id",
diff --git a/adapters/yahooAdvertising/yahooAdvertisingtest/supplemental/required-nobidder-info.json b/adapters/yahooAds/yahooAdstest/supplemental/required-nobidder-info.json
similarity index 100%
rename from adapters/yahooAdvertising/yahooAdvertisingtest/supplemental/required-nobidder-info.json
rename to adapters/yahooAds/yahooAdstest/supplemental/required-nobidder-info.json
diff --git a/adapters/yahooAdvertising/yahooAdvertisingtest/supplemental/server-error.json b/adapters/yahooAds/yahooAdstest/supplemental/server-error.json
similarity index 100%
rename from adapters/yahooAdvertising/yahooAdvertisingtest/supplemental/server-error.json
rename to adapters/yahooAds/yahooAdstest/supplemental/server-error.json
diff --git a/adapters/yahooAdvertising/yahooAdvertisingtest/supplemental/server-response-wrong-impid.json b/adapters/yahooAds/yahooAdstest/supplemental/server-response-wrong-impid.json
similarity index 98%
rename from adapters/yahooAdvertising/yahooAdvertisingtest/supplemental/server-response-wrong-impid.json
rename to adapters/yahooAds/yahooAdstest/supplemental/server-response-wrong-impid.json
index 1fcf61e1..f4081949 100644
--- a/adapters/yahooAdvertising/yahooAdvertisingtest/supplemental/server-response-wrong-impid.json
+++ b/adapters/yahooAds/yahooAdstest/supplemental/server-response-wrong-impid.json
@@ -76,7 +76,7 @@
           "id": "test-request-id",
           "seatbid": [
             {
-              "seat": "yahooAdvertising",
+              "seat": "yahooAds",
               "bid": [{
                 "id": "8ee514f1-b2b8-4abb-89fd-084437d1e800",
                 "impid": "wrong",
diff --git a/adapters/yahooAdvertising/yahooAdvertisingtest/supplemental/simple-banner-gpp-overwrite.json b/adapters/yahooAds/yahooAdstest/supplemental/simple-banner-gpp-overwrite.json
similarity index 98%
rename from adapters/yahooAdvertising/yahooAdvertisingtest/supplemental/simple-banner-gpp-overwrite.json
rename to adapters/yahooAds/yahooAdstest/supplemental/simple-banner-gpp-overwrite.json
index 190f96bf..94c895b9 100644
--- a/adapters/yahooAdvertising/yahooAdvertisingtest/supplemental/simple-banner-gpp-overwrite.json
+++ b/adapters/yahooAds/yahooAdstest/supplemental/simple-banner-gpp-overwrite.json
@@ -92,7 +92,7 @@
           "id": "test-request-id",
           "seatbid": [
             {
-              "seat": "yahooAdvertising",
+              "seat": "yahooAds",
               "bid": [{
                 "id": "8ee514f1-b2b8-4abb-89fd-084437d1e800",
                 "impid": "test-imp-id",
diff --git a/adapters/yahooAdvertising/yahooAdvertisingtest/supplemental/simple-banner-gpp.json b/adapters/yahooAds/yahooAdstest/supplemental/simple-banner-gpp.json
similarity index 98%
rename from adapters/yahooAdvertising/yahooAdvertisingtest/supplemental/simple-banner-gpp.json
rename to adapters/yahooAds/yahooAdstest/supplemental/simple-banner-gpp.json
index 81c89f55..3d5aff6c 100644
--- a/adapters/yahooAdvertising/yahooAdvertisingtest/supplemental/simple-banner-gpp.json
+++ b/adapters/yahooAds/yahooAdstest/supplemental/simple-banner-gpp.json
@@ -87,7 +87,7 @@
           "id": "test-request-id",
           "seatbid": [
             {
-              "seat": "yahooAdvertising",
+              "seat": "yahooAds",
               "bid": [{
                 "id": "8ee514f1-b2b8-4abb-89fd-084437d1e800",
                 "impid": "test-imp-id",
diff --git a/adapters/yahooAdvertising/yahooAdvertisingtest/supplemental/simple-banner-ignore-width-when-height-missing.json b/adapters/yahooAds/yahooAdstest/supplemental/simple-banner-ignore-width-when-height-missing.json
similarity index 98%
rename from adapters/yahooAdvertising/yahooAdvertisingtest/supplemental/simple-banner-ignore-width-when-height-missing.json
rename to adapters/yahooAds/yahooAdstest/supplemental/simple-banner-ignore-width-when-height-missing.json
index 353d5e29..12060059 100644
--- a/adapters/yahooAdvertising/yahooAdvertisingtest/supplemental/simple-banner-ignore-width-when-height-missing.json
+++ b/adapters/yahooAds/yahooAdstest/supplemental/simple-banner-ignore-width-when-height-missing.json
@@ -78,7 +78,7 @@
           "id": "test-request-id",
           "seatbid": [
             {
-              "seat": "yahooAdvertising",
+              "seat": "yahooAds",
               "bid": [{
                 "id": "8ee514f1-b2b8-4abb-89fd-084437d1e800",
                 "impid": "test-imp-id",
diff --git a/adapters/zeta_global_ssp/zeta_global_ssp-test/supplemental/invalid-bid-type.json b/adapters/zeta_global_ssp/zeta_global_ssp-test/supplemental/invalid-bid-type.json
index 070430ac..4a556707 100644
--- a/adapters/zeta_global_ssp/zeta_global_ssp-test/supplemental/invalid-bid-type.json
+++ b/adapters/zeta_global_ssp/zeta_global_ssp-test/supplemental/invalid-bid-type.json
@@ -115,7 +115,7 @@
       }
     }
   ],
-  "expectedBidResponses": [],
+  "expectedBidResponses": [{"currency":"USD","bids":[]}],
   "expectedMakeBidsErrors": [
     {
       "value": "invalid BidType: invalid",
diff --git a/adapters/zeta_global_ssp/zeta_global_ssp-test/supplemental/no-bid-type.json.json b/adapters/zeta_global_ssp/zeta_global_ssp-test/supplemental/no-bid-type.json.json
index e9ba895b..19925864 100644
--- a/adapters/zeta_global_ssp/zeta_global_ssp-test/supplemental/no-bid-type.json.json
+++ b/adapters/zeta_global_ssp/zeta_global_ssp-test/supplemental/no-bid-type.json.json
@@ -110,7 +110,7 @@
       }
     }
   ],
-  "expectedBidResponses": [],
+  "expectedBidResponses": [{"currency":"USD","bids":[]}],
   "expectedMakeBidsErrors": [
     {
       "value": "Failed to parse impression \"some-impression-id\" mediatype",
diff --git a/exchange/adapter_util_test.go b/exchange/adapter_util_test.go
index 9d2a5c3c..2dd0fd04 100644
--- a/exchange/adapter_util_test.go
+++ b/exchange/adapter_util_test.go
@@ -210,7 +210,7 @@ func TestGetDisabledBiddersErrorMessages(t *testing.T) {
 				"lifestreet":     `Bidder "lifestreet" is no longer available in Prebid Server. Please update your configuration.`,
 				"adagio":         `Bidder "adagio" is no longer available in Prebid Server. Please update your configuration.`,
 				"somoaudience":   `Bidder "somoaudience" is no longer available in Prebid Server. Please update your configuration.`,
-				"yssp":           `Bidder "yssp" is no longer available in Prebid Server. If you're looking to use the Yahoo SSP adapter, please rename it to "yahooAdvertising" in your configuration.`,
+				"yssp":           `Bidder "yssp" is no longer available in Prebid Server. If you're looking to use the Yahoo SSP adapter, please rename it to "yahooAds" in your configuration.`,
 				"andbeyondmedia": `Bidder "andbeyondmedia" is no longer available in Prebid Server. If you're looking to use the AndBeyond.Media SSP adapter, please rename it to "beyondmedia" in your configuration.`,
 				"oftmedia":       `Bidder "oftmedia" is no longer available in Prebid Server. Please update your configuration.`,
 				"groupm":         `Bidder "groupm" is no longer available in Prebid Server. Please update your configuration.`,
@@ -224,7 +224,7 @@ func TestGetDisabledBiddersErrorMessages(t *testing.T) {
 				"lifestreet":     `Bidder "lifestreet" is no longer available in Prebid Server. Please update your configuration.`,
 				"adagio":         `Bidder "adagio" is no longer available in Prebid Server. Please update your configuration.`,
 				"somoaudience":   `Bidder "somoaudience" is no longer available in Prebid Server. Please update your configuration.`,
-				"yssp":           `Bidder "yssp" is no longer available in Prebid Server. If you're looking to use the Yahoo SSP adapter, please rename it to "yahooAdvertising" in your configuration.`,
+				"yssp":           `Bidder "yssp" is no longer available in Prebid Server. If you're looking to use the Yahoo SSP adapter, please rename it to "yahooAds" in your configuration.`,
 				"andbeyondmedia": `Bidder "andbeyondmedia" is no longer available in Prebid Server. If you're looking to use the AndBeyond.Media SSP adapter, please rename it to "beyondmedia" in your configuration.`,
 				"oftmedia":       `Bidder "oftmedia" is no longer available in Prebid Server. Please update your configuration.`,
 				"groupm":         `Bidder "groupm" is no longer available in Prebid Server. Please update your configuration.`,
@@ -238,7 +238,7 @@ func TestGetDisabledBiddersErrorMessages(t *testing.T) {
 				"lifestreet":     `Bidder "lifestreet" is no longer available in Prebid Server. Please update your configuration.`,
 				"adagio":         `Bidder "adagio" is no longer available in Prebid Server. Please update your configuration.`,
 				"somoaudience":   `Bidder "somoaudience" is no longer available in Prebid Server. Please update your configuration.`,
-				"yssp":           `Bidder "yssp" is no longer available in Prebid Server. If you're looking to use the Yahoo SSP adapter, please rename it to "yahooAdvertising" in your configuration.`,
+				"yssp":           `Bidder "yssp" is no longer available in Prebid Server. If you're looking to use the Yahoo SSP adapter, please rename it to "yahooAds" in your configuration.`,
 				"appnexus":       `Bidder "appnexus" has been disabled on this instance of Prebid Server. Please work with the PBS host to enable this bidder again.`,
 				"andbeyondmedia": `Bidder "andbeyondmedia" is no longer available in Prebid Server. If you're looking to use the AndBeyond.Media SSP adapter, please rename it to "beyondmedia" in your configuration.`,
 				"oftmedia":       `Bidder "oftmedia" is no longer available in Prebid Server. Please update your configuration.`,
@@ -253,7 +253,7 @@ func TestGetDisabledBiddersErrorMessages(t *testing.T) {
 				"lifestreet":     `Bidder "lifestreet" is no longer available in Prebid Server. Please update your configuration.`,
 				"adagio":         `Bidder "adagio" is no longer available in Prebid Server. Please update your configuration.`,
 				"somoaudience":   `Bidder "somoaudience" is no longer available in Prebid Server. Please update your configuration.`,
-				"yssp":           `Bidder "yssp" is no longer available in Prebid Server. If you're looking to use the Yahoo SSP adapter, please rename it to "yahooAdvertising" in your configuration.`,
+				"yssp":           `Bidder "yssp" is no longer available in Prebid Server. If you're looking to use the Yahoo SSP adapter, please rename it to "yahooAds" in your configuration.`,
 				"appnexus":       `Bidder "appnexus" has been disabled on this instance of Prebid Server. Please work with the PBS host to enable this bidder again.`,
 				"andbeyondmedia": `Bidder "andbeyondmedia" is no longer available in Prebid Server. If you're looking to use the AndBeyond.Media SSP adapter, please rename it to "beyondmedia" in your configuration.`,
 				"oftmedia":       `Bidder "oftmedia" is no longer available in Prebid Server. Please update your configuration.`,
diff --git a/exchange/exchange_test.go b/exchange/exchange_test.go
index 511fd84b..8306849a 100644
--- a/exchange/exchange_test.go
+++ b/exchange/exchange_test.go
@@ -2085,7 +2085,7 @@ func getTestBuildRequest(t *testing.T) *openrtb2.BidRequest {
 					H: 600,
 				}},
 			},
-			Ext: json.RawMessage(`{"ext_field":"value}"}`),
+			Ext: json.RawMessage(`{"prebid":{"bidder":{"appnexus": {"placementId": 1}}}}`),
 		}, {
 			Video: &openrtb2.Video{
 				MIMEs:       []string{"video/mp4"},
@@ -2094,7 +2094,7 @@ func getTestBuildRequest(t *testing.T) *openrtb2.BidRequest {
 				W:           300,
 				H:           600,
 			},
-			Ext: json.RawMessage(`{"ext_field":"value}"}`),
+			Ext: json.RawMessage(`{"prebid":{"bidder":{"appnexus": {"placementId": 1}}}}`),
 		}},
 	}
 }
@@ -3592,7 +3592,7 @@ func TestApplyDealSupport(t *testing.T) {
 		{
 			description:  "hb_pb_cat_dur should be modified",
 			dealPriority: 5,
-			impExt:       json.RawMessage(`{"appnexus": {"dealTier": {"minDealTier": 5, "prefix": "tier"}, "placementId": 10433394}}`),
+			impExt:       json.RawMessage(`{"prebid": {"bidder": {"appnexus": {"dealTier": {"minDealTier": 5, "prefix": "tier"}, "placementId": 10433394}}}}`),
 			targ: map[string]string{
 				"hb_pb_cat_dur": "12.00_movies_30s",
 			},
@@ -3603,7 +3603,7 @@ func TestApplyDealSupport(t *testing.T) {
 		{
 			description:  "hb_pb_cat_dur should not be modified due to priority not exceeding min",
 			dealPriority: 9,
-			impExt:       json.RawMessage(`{"appnexus": {"dealTier": {"minDealTier": 10, "prefix": "tier"}, "placementId": 10433394}}`),
+			impExt:       json.RawMessage(`{"prebid": {"bidder": {"appnexus": {"dealTier": {"minDealTier": 10, "prefix": "tier"}, "placementId": 10433394}}}}`),
 			targ: map[string]string{
 				"hb_pb_cat_dur": "12.00_medicine_30s",
 			},
@@ -3614,7 +3614,7 @@ func TestApplyDealSupport(t *testing.T) {
 		{
 			description:  "hb_pb_cat_dur should not be modified due to invalid config",
 			dealPriority: 5,
-			impExt:       json.RawMessage(`{"appnexus": {"dealTier": {"minDealTier": 5, "prefix": ""}, "placementId": 10433394}}`),
+			impExt:       json.RawMessage(`{"prebid": {"bidder": {"appnexus": {"dealTier": {"minDealTier": 5, "prefix": ""}, "placementId": 10433394}}}}`),
 			targ: map[string]string{
 				"hb_pb_cat_dur": "12.00_games_30s",
 			},
@@ -3625,7 +3625,7 @@ func TestApplyDealSupport(t *testing.T) {
 		{
 			description:  "hb_pb_cat_dur should not be modified due to deal priority of 0",
 			dealPriority: 0,
-			impExt:       json.RawMessage(`{"appnexus": {"dealTier": {"minDealTier": 5, "prefix": "tier"}, "placementId": 10433394}}`),
+			impExt:       json.RawMessage(`{"prebid": {"bidder": {"appnexus": {"dealTier": {"minDealTier": 5, "prefix": "tier"}, "placementId": 10433394}}}}`),
 			targ: map[string]string{
 				"hb_pb_cat_dur": "12.00_auto_30s",
 			},
@@ -3695,11 +3695,11 @@ func TestApplyDealSupportMultiBid(t *testing.T) {
 					Imp: []openrtb2.Imp{
 						{
 							ID:  "imp_id1",
-							Ext: json.RawMessage(`{"appnexus": {"dealTier": {"minDealTier": 5, "prefix": "tier"}, "placementId": 10433394}}`),
+							Ext: json.RawMessage(`{"prebid": {"bidder": {"appnexus": {"dealTier": {"minDealTier": 5, "prefix": "tier"}, "placementId": 10433394}}}}`),
 						},
 						{
 							ID:  "imp_id1",
-							Ext: json.RawMessage(`{"appnexus": {"dealTier": {"minDealTier": 5, "prefix": "tier"}, "placementId": 10433394}}`),
+							Ext: json.RawMessage(`{"prebid": {"bidder": {"appnexus": {"dealTier": {"minDealTier": 5, "prefix": "tier"}, "placementId": 10433394}}}}`),
 						},
 					},
 				},
@@ -3741,11 +3741,11 @@ func TestApplyDealSupportMultiBid(t *testing.T) {
 					Imp: []openrtb2.Imp{
 						{
 							ID:  "imp_id1",
-							Ext: json.RawMessage(`{"appnexus": {"dealTier": {"minDealTier": 5, "prefix": "tier"}, "placementId": 10433394}}`),
+							Ext: json.RawMessage(`{"prebid": {"bidder": {"appnexus": {"dealTier": {"minDealTier": 5, "prefix": "tier"}, "placementId": 10433394}}}}`),
 						},
 						{
 							ID:  "imp_id1",
-							Ext: json.RawMessage(`{"appnexus": {"dealTier": {"minDealTier": 5, "prefix": "tier"}, "placementId": 10433394}}`),
+							Ext: json.RawMessage(`{"prebid": {"bidder": {"appnexus": {"dealTier": {"minDealTier": 5, "prefix": "tier"}, "placementId": 10433394}}}}`),
 						},
 					},
 				},
@@ -3792,11 +3792,11 @@ func TestApplyDealSupportMultiBid(t *testing.T) {
 					Imp: []openrtb2.Imp{
 						{
 							ID:  "imp_id1",
-							Ext: json.RawMessage(`{"appnexus": {"dealTier": {"minDealTier": 5, "prefix": "tier"}, "placementId": 10433394}}`),
+							Ext: json.RawMessage(`{"prebid": {"bidder": {"appnexus": {"dealTier": {"minDealTier": 5, "prefix": "tier"}, "placementId": 10433394}}}}`),
 						},
 						{
 							ID:  "imp_id1",
-							Ext: json.RawMessage(`{"appnexus": {"dealTier": {"minDealTier": 5, "prefix": "tier"}, "placementId": 10433394}}`),
+							Ext: json.RawMessage(`{"prebid": {"bidder": {"appnexus": {"dealTier": {"minDealTier": 5, "prefix": "tier"}, "placementId": 10433394}}}}`),
 						},
 					},
 				},
@@ -3869,7 +3869,7 @@ func TestGetDealTiers(t *testing.T) {
 			description: "One",
 			request: openrtb2.BidRequest{
 				Imp: []openrtb2.Imp{
-					{ID: "imp1", Ext: json.RawMessage(`{"appnexus": {"dealTier": {"minDealTier": 5, "prefix": "tier"}}}`)},
+					{ID: "imp1", Ext: json.RawMessage(`{"prebid": {"bidder": {"appnexus": {"dealTier": {"minDealTier": 5, "prefix": "tier"}}}}}`)},
 				},
 			},
 			expected: map[string]openrtb_ext.DealTierBidderMap{
@@ -3880,8 +3880,8 @@ func TestGetDealTiers(t *testing.T) {
 			description: "Many",
 			request: openrtb2.BidRequest{
 				Imp: []openrtb2.Imp{
-					{ID: "imp1", Ext: json.RawMessage(`{"appnexus": {"dealTier": {"minDealTier": 5, "prefix": "tier1"}}}`)},
-					{ID: "imp2", Ext: json.RawMessage(`{"appnexus": {"dealTier": {"minDealTier": 8, "prefix": "tier2"}}}`)},
+					{ID: "imp1", Ext: json.RawMessage(`{"prebid": {"bidder": {"appnexus": {"dealTier": {"minDealTier": 5, "prefix": "tier1"}}}}}`)},
+					{ID: "imp2", Ext: json.RawMessage(`{"prebid": {"bidder": {"appnexus": {"dealTier": {"minDealTier": 8, "prefix": "tier2"}}}}}`)},
 				},
 			},
 			expected: map[string]openrtb_ext.DealTierBidderMap{
@@ -3893,8 +3893,8 @@ func TestGetDealTiers(t *testing.T) {
 			description: "Many - Skips Malformed",
 			request: openrtb2.BidRequest{
 				Imp: []openrtb2.Imp{
-					{ID: "imp1", Ext: json.RawMessage(`{"appnexus": {"dealTier": {"minDealTier": 5, "prefix": "tier1"}}}`)},
-					{ID: "imp2", Ext: json.RawMessage(`{"appnexus": {"dealTier": "wrong type"}}`)},
+					{ID: "imp1", Ext: json.RawMessage(`{"prebid": {"bidder": {"appnexus": {"dealTier": {"minDealTier": 5, "prefix": "tier1"}}}}}`)},
+					{ID: "imp2", Ext: json.RawMessage(`{"prebid": {"bidder": {"appnexus": {"dealTier": "wrong type"}}}}`)},
 				},
 			},
 			expected: map[string]openrtb_ext.DealTierBidderMap{
diff --git a/exchange/utils_test.go b/exchange/utils_test.go
index 8bb82fe4..d1b6622f 100644
--- a/exchange/utils_test.go
+++ b/exchange/utils_test.go
@@ -505,7 +505,7 @@ func TestCleanOpenRTBRequestsWithFPD(t *testing.T) {
 		App:  &openrtb2.App{Name: "fpdApnApp"},
 		User: &openrtb2.User{Keywords: "fpdApnUser"},
 	}
-	fpd[openrtb_ext.BidderName("appnexus")] = &apnFpd
+	fpd[openrtb_ext.BidderName("rubicon")] = &apnFpd
 
 	brightrollFpd := firstpartydata.ResolvedFirstPartyData{
 		Site: &openrtb2.Site{Name: "fpdBrightrollSite"},
diff --git a/openrtb_ext/bidders_validate_test.go b/openrtb_ext/bidders_validate_test.go
index 530f260c..87a8c96d 100644
--- a/openrtb_ext/bidders_validate_test.go
+++ b/openrtb_ext/bidders_validate_test.go
@@ -50,7 +50,7 @@ func TestBidderUniquenessGatekeeping(t *testing.T) {
 	// - Exclude duplicates of adapters for the same bidder, as it's unlikely a publisher will use both.
 	var bidders []string
 	for _, bidder := range CoreBidderNames() {
-		if bidder != BidderTripleliftNative && bidder != BidderAdkernelAdn && bidder != BidderFreewheelSSPOld {
+		if bidder != BidderTripleliftNative && bidder != BidderAdkernelAdn && bidder != BidderFreewheelSSPOld && bidder != BidderYahooAdvertising {
 			bidders = append(bidders, string(bidder))
 		}
 	}
diff --git a/openrtb_ext/deal_tier_test.go b/openrtb_ext/deal_tier_test.go
index 6aaebbab..0046b788 100644
--- a/openrtb_ext/deal_tier_test.go
+++ b/openrtb_ext/deal_tier_test.go
@@ -31,55 +31,50 @@ func TestReadDealTiersFromImp(t *testing.T) {
 			expectedResult: DealTierBidderMap{},
 		},
 		{
-			description:    "imp.ext - with other params",
-			impExt:         json.RawMessage(`{"appnexus": {"dealTier": {"minDealTier": 5, "prefix": "anyPrefix"}, "placementId": 12345}}`),
-			expectedResult: DealTierBidderMap{BidderAppnexus: {Prefix: "anyPrefix", MinDealTier: 5}},
+			description:    "imp.ext - no prebid but with other params",
+			impExt:         json.RawMessage(`{"appnexus": {"dealTier": {"minDealTier": 5, "prefix": "anyPrefix"}, "placementId": 12345}, "tid": "1234"}`),
+			expectedResult: DealTierBidderMap{},
 		},
 		{
-			description:    "imp.ext - multiple",
-			impExt:         json.RawMessage(`{"appnexus": {"dealTier": {"minDealTier": 5, "prefix": "appnexusPrefix"}, "placementId": 12345}, "rubicon": {"dealTier": {"minDealTier": 8, "prefix": "rubiconPrefix"}, "placementId": 12345}}`),
-			expectedResult: DealTierBidderMap{BidderAppnexus: {Prefix: "appnexusPrefix", MinDealTier: 5}, BidderRubicon: {Prefix: "rubiconPrefix", MinDealTier: 8}},
+			description:    "imp.ext.prebid - nil",
+			impExt:         json.RawMessage(`{"prebid": null}`),
+			expectedResult: DealTierBidderMap{},
 		},
 		{
-			description:    "imp.ext - no deal tier",
-			impExt:         json.RawMessage(`{"appnexus": {"placementId": 12345}}`),
+			description:    "imp.ext.prebid - empty",
+			impExt:         json.RawMessage(`{"prebid": {}}`),
 			expectedResult: DealTierBidderMap{},
 		},
 		{
-			description:   "imp.ext - error",
-			impExt:        json.RawMessage(`{"appnexus": {"dealTier": "wrong type", "placementId": 12345}}`),
-			expectedError: "json: cannot unmarshal string into Go struct field .dealTier of type openrtb_ext.DealTier",
+			description:    "imp.ext.prebid - no bidder but with other params",
+			impExt:         json.RawMessage(`{"prebid": {"supportdeals": true}}`),
+			expectedResult: DealTierBidderMap{},
 		},
 		{
-			description:    "imp.ext.prebid",
+			description:    "imp.ext.prebid.bidder - one",
 			impExt:         json.RawMessage(`{"prebid": {"bidder": {"appnexus": {"dealTier": {"minDealTier": 5, "prefix": "anyPrefix"}, "placementId": 12345}}}}`),
 			expectedResult: DealTierBidderMap{BidderAppnexus: {Prefix: "anyPrefix", MinDealTier: 5}},
 		},
 		{
-			description:    "imp.ext.prebid- multiple",
+			description:    "imp.ext.prebid.bidder - one with other params",
+			impExt:         json.RawMessage(`{"prebid": {"bidder": {"appnexus": {"dealTier": {"minDealTier": 5, "prefix": "anyPrefix"}, "placementId": 12345}}, "supportdeals": true}, "tid": "1234"}`),
+			expectedResult: DealTierBidderMap{BidderAppnexus: {Prefix: "anyPrefix", MinDealTier: 5}},
+		},
+		{
+			description:    "imp.ext.prebid.bidder - multiple",
 			impExt:         json.RawMessage(`{"prebid": {"bidder": {"appnexus": {"dealTier": {"minDealTier": 5, "prefix": "appnexusPrefix"}, "placementId": 12345}, "rubicon": {"dealTier": {"minDealTier": 8, "prefix": "rubiconPrefix"}, "placementId": 12345}}}}`),
 			expectedResult: DealTierBidderMap{BidderAppnexus: {Prefix: "appnexusPrefix", MinDealTier: 5}, BidderRubicon: {Prefix: "rubiconPrefix", MinDealTier: 8}},
 		},
 		{
-			description:    "imp.ext.prebid - no deal tier",
+			description:    "imp.ext.prebid.bidder - one without deal tier",
 			impExt:         json.RawMessage(`{"prebid": {"bidder": {"appnexus": {"placementId": 12345}}}}`),
 			expectedResult: DealTierBidderMap{},
 		},
 		{
-			description:   "imp.ext.prebid - error",
+			description:   "imp.ext.prebid.bidder - error",
 			impExt:        json.RawMessage(`{"prebid": {"bidder": {"appnexus": {"dealTier": "wrong type", "placementId": 12345}}}}`),
 			expectedError: "json: cannot unmarshal string into Go struct field .prebid.bidder.dealTier of type openrtb_ext.DealTier",
 		},
-		{
-			description:    "imp.ext.prebid wins over imp.ext",
-			impExt:         json.RawMessage(`{"appnexus": {"dealTier": {"minDealTier": 5, "prefix": "impExt"}, "placementId": 12345}, "prebid": {"bidder": {"appnexus": {"dealTier": {"minDealTier": 8, "prefix": "impExtPrebid"}, "placementId": 12345}}}}`),
-			expectedResult: DealTierBidderMap{BidderAppnexus: {Prefix: "impExtPrebid", MinDealTier: 8}},
-		},
-		{
-			description:    "imp.ext.prebid coexists with imp.ext",
-			impExt:         json.RawMessage(`{"appnexus": {"dealTier": {"minDealTier": 5, "prefix": "impExt"}, "placementId": 12345}, "prebid": {"bidder": {"rubicon": {"dealTier": {"minDealTier": 8, "prefix": "impExtPrebid"}, "placementId": 12345}}}}`),
-			expectedResult: DealTierBidderMap{BidderAppnexus: {Prefix: "impExt", MinDealTier: 5}, BidderRubicon: {Prefix: "impExtPrebid", MinDealTier: 8}},
-		},
 	}
 
 	for _, test := range testCases {