Repository: prebid/prebid-server
Pull request #2779 (2023-05-15 19:05:23)

IX: MultiImp Implementation
- These changes implements multiimp functionality 
- Also bidder param sid is added and passed through

ccorbo: > I have concerns over the feature concept. It looks like the server is picking up on a signal from a request to enable a feature for a set amount of time. It's bad practice for the server to keep state in this manner. Why is this required versus looking for a feature flag on each request?

Hey Scott - First thanks for the review!
This feature toggle concept here is to control whether we are sending single-imp requests versus multi-imp requests via a signal from the exchange.
For example:
On request 0 -> FT State is off -> Send single imp requests
Response 0 -> Signals the adapter to send multiimp requests.
On all subsequent requests while the feature toggle is active:
Request n -> FT State is on -> Send multiimp requests

That is the reason we need to keep state in the adapter, to control subsequent requests.

Let me know what you think of this. Will remove the features controlled from the exchange concept and discuss with my team if we want to avoid the server keeping state.

Thank you!
gargcreation1992: > > I have concerns over the feature concept. It looks like the server is picking up on a signal from a request to enable a feature for a set amount of time. It's bad practice for the server to keep state in this manner. Why is this required versus looking for a feature flag on each request?
> 
> Hey Scott - First thanks for the review! This feature toggle concept here is to control whether we are sending single-imp requests versus multi-imp requests via a signal from the exchange. For example: On request 0 -> FT State is off -> Send single imp requests Response 0 -> Signals the adapter to send multiimp requests. On all subsequent requests while the feature toggle is active: Request n -> FT State is on -> Send multiimp requests
> 
> That is the reason we need to keep state in the adapter, to control subsequent requests.
> 
> Let me know what you think of this. Will remove the features controlled from the exchange concept and discuss with my team if we want to avoid the server keeping state.
> 
> Thank you!

@ccorbo If I understand this feature, please do not maintain any kind of state in adapter code. If you want to write any business logic then please code that logic in your bidder endpoint.
ccorbo: Removed feature toggle logic
gargcreation1992: > Removed feature toggle logic

@ccorbo Could you please help in explaining what you are trying to accomplish with this PR?
ccorbo: > > Removed feature toggle logic
> 
> @ccorbo Could you please help in explaining what you are trying to accomplish with this PR?

Hi - This PR changes how we handle multi-imp requests. Previously multi-imp requests would be flattened into multiple requests, with one request for each Imp.

Now there will be a single request, with one request for multi-imp.

Also this changes sid to be signaled at imp.ext.sid

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..946a8587 100644
--- a/exchange/exchange_test.go
+++ b/exchange/exchange_test.go
@@ -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/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 {