Repository: prebid/prebid-server
Pull request #3658 (2024-05-03 07:41:07)

Medianet: Adds mtype support to be used as BidType

github-actions[bot]: ## Code coverage summary 
Note: 
- Prebid team doesn't anticipate tests covering code paths that might result in marshal and unmarshal errors 
- Coverage summary encompasses all commits leading up to the latest one, 69c551f9b9c6f62112ed36e841768d2018424dc2 
#### medianet 
Refer [here](https://htmlpreview.github.io/?https://github.com/prebid/prebid-server/coverage-preview/.github/preview/8935726188_1714722111/medianet.html) for heat map coverage report 
``` 
github.com/prebid/prebid-server/v2/adapters/medianet/medianet.go:20:	MakeRequests			75.0%
github.com/prebid/prebid-server/v2/adapters/medianet/medianet.go:40:	MakeBids			84.2%
github.com/prebid/prebid-server/v2/adapters/medianet/medianet.go:85:	Builder				100.0%
github.com/prebid/prebid-server/v2/adapters/medianet/medianet.go:92:	getMediaTypeForImp		27.3%
github.com/prebid/prebid-server/v2/adapters/medianet/medianet.go:113:	getBidMediaTypeFromMtype	60.0%
github.com/prebid/prebid-server/v2/adapters/medianet/medianet.go:126:	buildEndpoint			88.9%
total:									(statements)			70.4%

 ``` 


Patch:
diff --git a/README.md b/README.md
index c5b0e003..20cccf8a 100644
--- a/README.md
+++ b/README.md
@@ -105,3 +105,9 @@ We welcome everyone to contribute to this project by implementing a specificatio
 
 ### Bug Fix
 Bug reports may be submitted by [opening a new issue](https://github.com/prebid/prebid-server/issues/new/choose) and describing the error in detail with the steps to reproduce and example data. A member of the core development team will validate the bug and discuss next steps. You're encouraged to open an exploratory draft pull request to either demonstrate the bug by adding a test or offering a potential fix.
+The quickest way to start developing Prebid Server in a reproducible environment isolated from your host OS
+is by using Visual Studio Code with [Remote Container Setup](devcontainer.md).
+
+## Learning Materials
+
+To understand more about how Prebid Server in Go works and quickly spins up sample instances, refer to the `sample` folder which describes various structured and integrated examples. The examples are designed to run on any platform that supports `docker` container.
diff --git a/account/account.go b/account/account.go
index b40d9a88..418fd90c 100644
--- a/account/account.go
+++ b/account/account.go
@@ -19,7 +19,7 @@ import (
 func GetAccount(ctx context.Context, cfg *config.Configuration, fetcher stored_requests.AccountFetcher, accountID string, me metrics.MetricsEngine) (account *config.Account, errs []error) {
 	if cfg.AccountRequired && accountID == metrics.PublisherUnknown {
 		return nil, []error{&errortypes.AcctRequired{
-			Message: fmt.Sprintf("Prebid-server has been configured to discard requests without a valid Account ID. Please reach out to the prebid server host."),
+			Message: "Prebid-server has been configured to discard requests without a valid Account ID. Please reach out to the prebid server host.",
 		}}
 	}
 
@@ -32,7 +32,7 @@ func GetAccount(ctx context.Context, cfg *config.Configuration, fetcher stored_r
 		}
 		if cfg.AccountRequired && cfg.AccountDefaults.Disabled {
 			errs = append(errs, &errortypes.AcctRequired{
-				Message: fmt.Sprintf("Prebid-server could not verify the Account ID. Please reach out to the prebid server host."),
+				Message: "Prebid-server could not verify the Account ID. Please reach out to the prebid server host.",
 			})
 			return nil, errs
 		}
diff --git a/adapters/adkernelAdn/adkernelAdn.go b/adapters/adkernelAdn/adkernelAdn.go
index 00b4c1a2..33e5ee93 100644
--- a/adapters/adkernelAdn/adkernelAdn.go
+++ b/adapters/adkernelAdn/adkernelAdn.go
@@ -124,7 +124,7 @@ func compatBannerImpression(imp *openrtb2.Imp) error {
 	//As banner.w/h are required fields for adkernelAdn platform - take the first format entry
 	if banner.W == nil && banner.H == nil {
 		if len(banner.Format) == 0 {
-			return newBadInputError(fmt.Sprintf("Expected at least one banner.format entry or explicit w/h"))
+			return newBadInputError("Expected at least one banner.format entry or explicit w/h")
 		}
 		format := banner.Format[0]
 		banner.Format = banner.Format[1:]
diff --git a/adapters/adnuntius/adnuntius.go b/adapters/adnuntius/adnuntius.go
index 465547db..823c1783 100644
--- a/adapters/adnuntius/adnuntius.go
+++ b/adapters/adnuntius/adnuntius.go
@@ -218,7 +218,7 @@ func (a *adapter) generateRequests(ortbRequest openrtb2.BidRequest) ([]*adapters
 			}}
 		}
 
-		if adnuntiusExt.NoCookies == true {
+		if adnuntiusExt.NoCookies {
 			noCookies = true
 		}
 
@@ -463,7 +463,7 @@ func generateBidResponse(adnResponse *AdnResponse, request *openrtb2.BidRequest)
 			adBid, err := generateAdResponse(ad, imp, adunit.Html, request)
 			if err != nil {
 				return nil, []error{&errortypes.BadInput{
-					Message: fmt.Sprintf("Error at ad generation"),
+					Message: "Error at ad generation",
 				}}
 			}
 
@@ -476,7 +476,7 @@ func generateBidResponse(adnResponse *AdnResponse, request *openrtb2.BidRequest)
 				dealBid, err := generateAdResponse(deal, imp, deal.Html, request)
 				if err != nil {
 					return nil, []error{&errortypes.BadInput{
-						Message: fmt.Sprintf("Error at ad generation"),
+						Message: "Error at ad generation",
 					}}
 				}
 
diff --git a/adapters/adtelligent/adtelligent.go b/adapters/adtelligent/adtelligent.go
index d466c3df..492de0a3 100644
--- a/adapters/adtelligent/adtelligent.go
+++ b/adapters/adtelligent/adtelligent.go
@@ -175,6 +175,11 @@ func validateImpression(imp *openrtb2.Imp) (int, error) {
 	impExtBuffer, err = json.Marshal(&adtelligentImpExt{
 		Adtelligent: impExt,
 	})
+	if err != nil {
+		return 0, &errortypes.BadInput{
+			Message: fmt.Sprintf("ignoring imp id=%s, error while marshaling impExt, err: %s", imp.ID, err),
+		}
+	}
 
 	if impExt.BidFloor > 0 {
 		imp.BidFloor = impExt.BidFloor
diff --git a/adapters/avocet/avocet.go b/adapters/avocet/avocet.go
index 09737085..76ce8195 100644
--- a/adapters/avocet/avocet.go
+++ b/adapters/avocet/avocet.go
@@ -103,6 +103,9 @@ func (a *AvocetAdapter) MakeBids(internalRequest *openrtb2.BidRequest, externalR
 			bidResponse.Bids = append(bidResponse.Bids, tbid)
 		}
 	}
+	if len(errs) > 0 {
+		return nil, errs
+	}
 	return bidResponse, nil
 }
 
diff --git a/adapters/beintoo/beintoo.go b/adapters/beintoo/beintoo.go
index ee16082a..9a68bb40 100644
--- a/adapters/beintoo/beintoo.go
+++ b/adapters/beintoo/beintoo.go
@@ -27,7 +27,7 @@ func (a *BeintooAdapter) MakeRequests(request *openrtb2.BidRequest, reqInfo *ada
 		}}
 	}
 
-	if errors := preprocess(request); errors != nil && len(errors) > 0 {
+	if errors := preprocess(request); len(errors) > 0 {
 		return nil, append(errors, &errortypes.BadInput{
 			Message: fmt.Sprintf("Error in preprocess of Imp, err: %s", errors),
 		})
@@ -133,8 +133,6 @@ func addImpProps(imp *openrtb2.Imp, secure *int8, BeintooExt *openrtb_ext.ExtImp
 			imp.BidFloor = bidFloor
 		}
 	}
-
-	return
 }
 
 // Adding header fields to request header
diff --git a/adapters/between/between.go b/adapters/between/between.go
index 50c130a7..4b9deae6 100644
--- a/adapters/between/between.go
+++ b/adapters/between/between.go
@@ -28,7 +28,7 @@ func (a *BetweenAdapter) MakeRequests(request *openrtb2.BidRequest, reqInfo *ada
 		}}
 	}
 	ext, errors := preprocess(request)
-	if errors != nil && len(errors) > 0 {
+	if len(errors) > 0 {
 		return nil, errors
 	}
 	endpoint, err := a.buildEndpointURL(ext)
diff --git a/adapters/cadent_aperture_mx/cadentaperturemx.go b/adapters/cadent_aperture_mx/cadentaperturemx.go
index 2a0b3759..e86cddbe 100644
--- a/adapters/cadent_aperture_mx/cadentaperturemx.go
+++ b/adapters/cadent_aperture_mx/cadentaperturemx.go
@@ -42,7 +42,7 @@ func (a *adapter) MakeRequests(request *openrtb2.BidRequest, reqInfo *adapters.E
 		}}
 	}
 
-	if errs := preprocess(request); errs != nil && len(errs) > 0 {
+	if errs := preprocess(request); len(errs) > 0 {
 		return nil, append(errs, &errortypes.BadInput{
 			Message: fmt.Sprintf("Error in preprocess of Imp, err: %s", errs),
 		})
@@ -192,8 +192,6 @@ func addImpProps(imp *openrtb2.Imp, secure *int8, cadentExt *openrtb_ext.ExtImpC
 			imp.BidFloorCur = "USD"
 		}
 	}
-
-	return
 }
 
 // Adding header fields to request header
diff --git a/adapters/connectad/connectad.go b/adapters/connectad/connectad.go
index e71184ae..ca681c1b 100644
--- a/adapters/connectad/connectad.go
+++ b/adapters/connectad/connectad.go
@@ -146,8 +146,6 @@ func addImpInfo(imp *openrtb2.Imp, secure *int8, cadExt *openrtb_ext.ExtImpConne
 		imp.BidFloor = cadExt.Bidfloor
 		imp.BidFloorCur = "USD"
 	}
-
-	return
 }
 
 func addHeaderIfNonEmpty(headers http.Header, headerName string, headerValue string) {
diff --git a/adapters/consumable/consumable.go b/adapters/consumable/consumable.go
index 17ef90f2..1f669f28 100644
--- a/adapters/consumable/consumable.go
+++ b/adapters/consumable/consumable.go
@@ -104,13 +104,10 @@ func (a *adapter) MakeBids(request *openrtb2.BidRequest, requestData *adapters.R
 			switch bidType {
 			case openrtb_ext.BidTypeAudio:
 				seatBid.Bid[i].MType = openrtb2.MarkupAudio
-				break
 			case openrtb_ext.BidTypeVideo:
 				seatBid.Bid[i].MType = openrtb2.MarkupVideo
-				break
 			case openrtb_ext.BidTypeBanner:
 				seatBid.Bid[i].MType = openrtb2.MarkupBanner
-				break
 			}
 			bidResponse.Bids = append(bidResponse.Bids, &adapters.TypedBid{
 				Bid:      &seatBid.Bid[i],
diff --git a/adapters/dmx/dmx.go b/adapters/dmx/dmx.go
index e35b5562..f080ca8e 100644
--- a/adapters/dmx/dmx.go
+++ b/adapters/dmx/dmx.go
@@ -64,7 +64,6 @@ func (adapter *DmxAdapter) MakeRequests(request *openrtb2.BidRequest, req *adapt
 	var publisherId string
 	var sellerId string
 	var userExt openrtb_ext.ExtUser
-	var anyHasId = false
 	var reqCopy openrtb2.BidRequest = *request
 	var dmxReq *openrtb2.BidRequest = &reqCopy
 	var dmxRawPubId dmxPubExt
@@ -85,6 +84,7 @@ func (adapter *DmxAdapter) MakeRequests(request *openrtb2.BidRequest, req *adapt
 		}
 	}
 
+	hasNoID := true
 	if request.App != nil {
 		appCopy := *request.App
 		appPublisherCopy := *request.App.Publisher
@@ -101,12 +101,12 @@ func (adapter *DmxAdapter) MakeRequests(request *openrtb2.BidRequest, req *adapt
 		}
 		dmxReq.App.Publisher.Ext = ext
 		if dmxReq.App.ID != "" {
-			anyHasId = true
+			hasNoID = false
 		}
-		if anyHasId == false {
+		if hasNoID {
 			if idfa, valid := getIdfa(request); valid {
 				dmxReq.App.ID = idfa
-				anyHasId = true
+				hasNoID = false
 			}
 		}
 	} else {
@@ -145,12 +145,12 @@ func (adapter *DmxAdapter) MakeRequests(request *openrtb2.BidRequest, req *adapt
 
 	if dmxReq.User != nil {
 		if dmxReq.User.ID != "" {
-			anyHasId = true
+			hasNoID = false
 		}
 		if dmxReq.User.Ext != nil {
 			if err := json.Unmarshal(dmxReq.User.Ext, &userExt); err == nil {
 				if len(userExt.Eids) > 0 {
-					anyHasId = true
+					hasNoID = false
 				}
 			}
 		}
@@ -190,7 +190,7 @@ func (adapter *DmxAdapter) MakeRequests(request *openrtb2.BidRequest, req *adapt
 
 	dmxReq.Imp = imps
 
-	if anyHasId == false {
+	if hasNoID {
 		return nil, []error{errors.New("This request contained no identifier")}
 	}
 
@@ -264,37 +264,36 @@ func (adapter *DmxAdapter) MakeBids(request *openrtb2.BidRequest, externalReques
 }
 
 func fetchParams(params dmxExt, inst openrtb2.Imp, ins openrtb2.Imp, imps []openrtb2.Imp, banner *openrtb2.Banner, video *openrtb2.Video, intVal int8) []openrtb2.Imp {
-	var tempimp openrtb2.Imp
-	tempimp = inst
+	tempImp := inst
 	if params.Bidder.Bidfloor != 0 {
-		tempimp.BidFloor = params.Bidder.Bidfloor
+		tempImp.BidFloor = params.Bidder.Bidfloor
 	}
 	if params.Bidder.TagId != "" {
-		tempimp.TagID = params.Bidder.TagId
-		tempimp.Secure = &intVal
+		tempImp.TagID = params.Bidder.TagId
+		tempImp.Secure = &intVal
 	}
 
 	if params.Bidder.DmxId != "" {
-		tempimp.TagID = params.Bidder.DmxId
-		tempimp.Secure = &intVal
+		tempImp.TagID = params.Bidder.DmxId
+		tempImp.Secure = &intVal
 	}
 	if banner != nil {
 		if banner.H == nil || banner.W == nil {
 			banner.H = &banner.Format[0].H
 			banner.W = &banner.Format[0].W
 		}
-		tempimp.Banner = banner
+		tempImp.Banner = banner
 	}
 
 	if video != nil {
 		video.Protocols = checkProtocols(video)
-		tempimp.Video = video
+		tempImp.Video = video
 	}
 
-	if tempimp.TagID == "" {
+	if tempImp.TagID == "" {
 		return imps
 	}
-	imps = append(imps, tempimp)
+	imps = append(imps, tempImp)
 	return imps
 }
 
diff --git a/adapters/gamma/gamma.go b/adapters/gamma/gamma.go
index 631132cc..8e14331b 100644
--- a/adapters/gamma/gamma.go
+++ b/adapters/gamma/gamma.go
@@ -150,7 +150,7 @@ func (a *GammaAdapter) MakeRequests(request *openrtb2.BidRequest, reqInfo *adapt
 		errs = append(errs, err)
 		return nil, errs
 	}
-	var invalidImpIndex = make([]int, 0, 0)
+	var invalidImpIndex []int
 
 	for i := 0; i < len(request.Imp); i++ {
 		if request.Imp[i].Banner != nil {
@@ -182,7 +182,7 @@ func (a *GammaAdapter) MakeRequests(request *openrtb2.BidRequest, reqInfo *adapt
 	} else if len(request.Imp) == len(invalidImpIndex) {
 		//only true if every Imp was not a Banner or a Video
 		err := &errortypes.BadInput{
-			Message: fmt.Sprintf("No valid impression in the bid request"),
+			Message: "No valid impression in the bid request",
 		}
 		errs = append(errs, err)
 		return nil, errs
@@ -205,8 +205,7 @@ func (a *GammaAdapter) MakeRequests(request *openrtb2.BidRequest, reqInfo *adapt
 }
 
 func convertBid(gBid gammaBid, mediaType openrtb_ext.BidType) *openrtb2.Bid {
-	var bid openrtb2.Bid
-	bid = gBid.Bid
+	bid := gBid.Bid
 
 	if mediaType == openrtb_ext.BidTypeVideo {
 		//Return inline VAST XML Document (Section 6.4.2)
diff --git a/adapters/lemmadigital/lemmadigital.go b/adapters/lemmadigital/lemmadigital.go
index 7ff32ba4..281cd2e1 100644
--- a/adapters/lemmadigital/lemmadigital.go
+++ b/adapters/lemmadigital/lemmadigital.go
@@ -94,15 +94,14 @@ func (a *adapter) MakeBids(request *openrtb2.BidRequest, requestData *adapters.R
 	if len(response.Cur) > 0 {
 		bidResponse.Currency = response.Cur
 	}
-	for _, seatBid := range response.SeatBid {
-		for i := range seatBid.Bid {
+	if len(response.SeatBid) > 0 {
+		for i := range response.SeatBid[0].Bid {
 			b := &adapters.TypedBid{
-				Bid:     &seatBid.Bid[i],
+				Bid:     &response.SeatBid[0].Bid[i],
 				BidType: bidType,
 			}
 			bidResponse.Bids = append(bidResponse.Bids, b)
 		}
-		break
 	}
 
 	return bidResponse, nil
diff --git a/adapters/medianet/medianet.go b/adapters/medianet/medianet.go
index f10ca986..a6a3bd47 100644
--- a/adapters/medianet/medianet.go
+++ b/adapters/medianet/medianet.go
@@ -67,7 +67,7 @@ func (a *adapter) MakeBids(internalRequest *openrtb2.BidRequest, externalRequest
 
 	for _, sb := range bidResp.SeatBid {
 		for i := range sb.Bid {
-			bidType, err := getMediaTypeForImp(sb.Bid[i].ImpID, internalRequest.Imp)
+			bidType, err := getBidMediaTypeFromMtype(&sb.Bid[i])
 			if err != nil {
 				errs = append(errs, err)
 			} else {
@@ -90,19 +90,16 @@ func Builder(bidderName openrtb_ext.BidderName, config config.Adapter, server co
 	}, nil
 }
 
-func getMediaTypeForImp(impID string, imps []openrtb2.Imp) (openrtb_ext.BidType, error) {
-	mediaType := openrtb_ext.BidTypeBanner
-	for _, imp := range imps {
-		if imp.ID == impID {
-			if imp.Banner == nil && imp.Video != nil {
-				mediaType = openrtb_ext.BidTypeVideo
-			}
-			return mediaType, nil
-		}
-	}
-
-	return "", &errortypes.BadInput{
-		Message: fmt.Sprintf("Failed to find impression \"%s\" ", impID),
+func getBidMediaTypeFromMtype(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.MarkupNative:
+		return openrtb_ext.BidTypeNative, nil
+	default:
+		return "", fmt.Errorf("Unable to fetch mediaType for imp: %s", bid.ImpID)
 	}
 }
 
diff --git a/adapters/minutemedia/minutemedia.go b/adapters/minutemedia/minutemedia.go
index cb5581e5..796f9ec6 100644
--- a/adapters/minutemedia/minutemedia.go
+++ b/adapters/minutemedia/minutemedia.go
@@ -91,21 +91,21 @@ func (a *adapter) MakeBids(request *openrtb2.BidRequest, _ *adapters.RequestData
 
 func extractOrg(openRTBRequest *openrtb2.BidRequest) (string, error) {
 	var err error
-	for _, imp := range openRTBRequest.Imp {
-		var bidderExt adapters.ExtImpBidder
-		if err = json.Unmarshal(imp.Ext, &bidderExt); err != nil {
-			return "", fmt.Errorf("failed to unmarshal bidderExt: %w", err)
-		}
+	if len(openRTBRequest.Imp) == 0 {
+		return "", errors.New("no imps in bid request")
+	}
 
-		var impExt openrtb_ext.ImpExtMinuteMedia
-		if err = json.Unmarshal(bidderExt.Bidder, &impExt); err != nil {
-			return "", fmt.Errorf("failed to unmarshal ImpExtMinuteMedia: %w", err)
-		}
+	var bidderExt adapters.ExtImpBidder
+	if err = json.Unmarshal(openRTBRequest.Imp[0].Ext, &bidderExt); err != nil {
+		return "", fmt.Errorf("failed to unmarshal bidderExt: %w", err)
+	}
 
-		return strings.TrimSpace(impExt.Org), nil
+	var impExt openrtb_ext.ImpExtMinuteMedia
+	if err = json.Unmarshal(bidderExt.Bidder, &impExt); err != nil {
+		return "", fmt.Errorf("failed to unmarshal ImpExtMinuteMedia: %w", err)
 	}
 
-	return "", errors.New("no imps in bid request")
+	return strings.TrimSpace(impExt.Org), nil
 }
 
 func getMediaTypeForBid(bid openrtb2.Bid) (openrtb_ext.BidType, error) {
diff --git a/adapters/pubmatic/pubmatic.go b/adapters/pubmatic/pubmatic.go
index da6092d8..9c5799ee 100644
--- a/adapters/pubmatic/pubmatic.go
+++ b/adapters/pubmatic/pubmatic.go
@@ -48,6 +48,7 @@ type ExtImpBidderPubmatic struct {
 	adapters.ExtImpBidder
 	Data json.RawMessage `json:"data,omitempty"`
 	AE   int             `json:"ae,omitempty"`
+	GpId string          `json:"gpid,omitempty"`
 }
 
 type ExtAdServer struct {
@@ -78,6 +79,7 @@ const (
 	AdServerGAM        = "gam"
 	AdServerKey        = "adserver"
 	PBAdslotKey        = "pbadslot"
+	gpIdKey            = "gpid"
 )
 
 func (a *PubmaticAdapter) MakeRequests(request *openrtb2.BidRequest, reqInfo *adapters.ExtraRequestInfo) ([]*adapters.RequestData, []error) {
@@ -319,6 +321,10 @@ func parseImpressionObject(imp *openrtb2.Imp, extractWrapperExtFromImp, extractP
 		extMap[ae] = bidderExt.AE
 	}
 
+	if bidderExt.GpId != "" {
+		extMap[gpIdKey] = bidderExt.GpId
+	}
+
 	imp.Ext = nil
 	if len(extMap) > 0 {
 		ext, err := json.Marshal(extMap)
diff --git a/adapters/rubicon/rubicon.go b/adapters/rubicon/rubicon.go
index cb968fbe..6e515b11 100644
--- a/adapters/rubicon/rubicon.go
+++ b/adapters/rubicon/rubicon.go
@@ -331,14 +331,9 @@ func (a *RubiconAdapter) MakeRequests(request *openrtb2.BidRequest, reqInfo *ada
 			}
 
 			userExtRP := rubiconUserExt{RP: rubiconUserExtRP{Target: target}}
-			userBuyerUID := userCopy.BuyerUID
 
 			if len(userCopy.EIDs) > 0 {
 				userExtRP.Eids = userCopy.EIDs
-
-				if userBuyerUID == "" {
-					userBuyerUID = extractUserBuyerUID(userExtRP.Eids)
-				}
 			}
 
 			if userCopy.Consent != "" {
@@ -354,7 +349,6 @@ func (a *RubiconAdapter) MakeRequests(request *openrtb2.BidRequest, reqInfo *ada
 			userCopy.Geo = nil
 			userCopy.Yob = 0
 			userCopy.Gender = ""
-			userCopy.BuyerUID = userBuyerUID
 			userCopy.EIDs = nil
 
 			rubiconRequest.User = &userCopy
@@ -587,7 +581,7 @@ func createImpsToExtMap(imps []openrtb2.Imp) (map[*openrtb2.Imp]rubiconExtImpBid
 func prepareImpsToExtMap(impsToExtMap map[*openrtb2.Imp]rubiconExtImpBidder) map[*openrtb2.Imp]rubiconExtImpBidder {
 	preparedImpsToExtMap := make(map[*openrtb2.Imp]rubiconExtImpBidder)
 	for imp, bidderExt := range impsToExtMap {
-		if bidderExt.Bidder.BidOnMultiformat == false {
+		if bidderExt.Bidder.BidOnMultiformat == false { //nolint: staticcheck
 			impCopy := imp
 			preparedImpsToExtMap[impCopy] = bidderExt
 			continue
@@ -914,20 +908,6 @@ func contains(s []int, e int) bool {
 	return false
 }
 
-func extractUserBuyerUID(eids []openrtb2.EID) string {
-	for _, eid := range eids {
-		if eid.Source != "rubiconproject.com" {
-			continue
-		}
-
-		for _, uid := range eid.UIDs {
-			return uid.ID
-		}
-	}
-
-	return ""
-}
-
 func isVideo(imp openrtb2.Imp) bool {
 	video := imp.Video
 	if video != nil {
diff --git a/adapters/smartrtb/smartrtb.go b/adapters/smartrtb/smartrtb.go
index 4e15c5ab..1c5d1abb 100644
--- a/adapters/smartrtb/smartrtb.go
+++ b/adapters/smartrtb/smartrtb.go
@@ -29,6 +29,7 @@ type bidRequestExt struct {
 }
 
 // bidExt.CreativeType values.
+// nolint: staticcheck // staticcheck SA9004: only the first constant in this group has an explicit type
 const (
 	creativeTypeBanner string = "BANNER"
 	creativeTypeVideo         = "VIDEO"
diff --git a/adapters/sovrnXsp/sovrnXsp.go b/adapters/sovrnXsp/sovrnXsp.go
index 4b384163..ed97697e 100644
--- a/adapters/sovrnXsp/sovrnXsp.go
+++ b/adapters/sovrnXsp/sovrnXsp.go
@@ -20,9 +20,9 @@ type adapter struct {
 // bidExt.CreativeType values.
 const (
 	creativeTypeBanner int = 0
-	creativeTypeVideo      = 1
-	creativeTypeNative     = 2
-	creativeTypeAudio      = 3
+	creativeTypeVideo  int = 1
+	creativeTypeNative int = 2
+	creativeTypeAudio  int = 3
 )
 
 // Bid response extension from XSP.
diff --git a/adapters/tappx/tappx.go b/adapters/tappx/tappx.go
index 6da9497b..57aaa039 100644
--- a/adapters/tappx/tappx.go
+++ b/adapters/tappx/tappx.go
@@ -86,8 +86,7 @@ func (a *TappxAdapter) MakeRequests(request *openrtb2.BidRequest, reqInfo *adapt
 		}}
 	}
 
-	var test int
-	test = int(request.Test)
+	test := int(request.Test)
 
 	url, err := a.buildEndpointURL(&tappxExt, test)
 	if url == "" {
@@ -134,6 +133,11 @@ func (a *TappxAdapter) buildEndpointURL(params *openrtb_ext.ExtImpTappx, test in
 
 	tappxHost := "tappx.com"
 	isNewEndpoint, err := regexp.Match(`^(zz|vz)[0-9]{3,}([a-z]{2,3}|test)$`, []byte(params.Endpoint))
+	if err != nil {
+		return "", &errortypes.BadInput{
+			Message: "Unable to match params.Endpoint " + string(params.Endpoint) + "): " + err.Error(),
+		}
+	}
 	if isNewEndpoint {
 		tappxHost = params.Endpoint + ".pub.tappx.com/rtb/"
 	} else {
diff --git a/adapters/unruly/unruly.go b/adapters/unruly/unruly.go
index cdea14d3..97fc2b64 100644
--- a/adapters/unruly/unruly.go
+++ b/adapters/unruly/unruly.go
@@ -113,7 +113,7 @@ func (a *adapter) MakeBids(internalRequest *openrtb2.BidRequest, externalRequest
 		}}
 	}
 
-	bidResponse := adapters.NewBidderResponseWithBidsCapacity(5)
+	bidResponse := adapters.NewBidderResponseWithBidsCapacity(len(internalRequest.Imp))
 
 	var errs []error
 	for _, sb := range bidResp.SeatBid {
diff --git a/adapters/yeahmobi/yeahmobi.go b/adapters/yeahmobi/yeahmobi.go
index 6d351d85..b533e76b 100644
--- a/adapters/yeahmobi/yeahmobi.go
+++ b/adapters/yeahmobi/yeahmobi.go
@@ -18,6 +18,12 @@ import (
 type adapter struct {
 	EndpointTemplate *template.Template
 }
+type yeahmobiBidExt struct {
+	VideoCreativeInfo *yeahmobiBidExtVideo `json:"video,omitempty"`
+}
+type yeahmobiBidExtVideo struct {
+	Duration *int `json:"duration,omitempty"`
+}
 
 // Builder builds a new instance of the Yeahmobi adapter for the given bidder with the given config.
 func Builder(bidderName openrtb_ext.BidderName, config config.Adapter, server config.Server) (adapters.Bidder, error) {
@@ -134,34 +140,42 @@ func (a *adapter) MakeBids(internalRequest *openrtb2.BidRequest, externalRequest
 	if response.StatusCode == http.StatusNoContent {
 		return nil, nil
 	}
-
 	if response.StatusCode == http.StatusBadRequest {
 		return nil, []error{&errortypes.BadInput{
 			Message: fmt.Sprintf("Unexpected status code: %d.", response.StatusCode),
 		}}
 	}
-
 	if response.StatusCode != http.StatusOK {
 		return nil, []error{&errortypes.BadServerResponse{
 			Message: fmt.Sprintf("Unexpected status code: %d.", response.StatusCode),
 		}}
 	}
-
 	var bidResp openrtb2.BidResponse
-
 	if err := json.Unmarshal(response.Body, &bidResp); err != nil {
 		return nil, []error{err}
 	}
-
 	bidResponse := adapters.NewBidderResponseWithBidsCapacity(1)
-
 	for _, sb := range bidResp.SeatBid {
 		for i := range sb.Bid {
 			var mediaType = getBidType(sb.Bid[i].ImpID, internalRequest.Imp)
-			bidResponse.Bids = append(bidResponse.Bids, &adapters.TypedBid{
-				Bid:     &sb.Bid[i],
-				BidType: mediaType,
-			})
+			bid := sb.Bid[i]
+			typedBid := &adapters.TypedBid{
+				Bid:      &bid,
+				BidType:  mediaType,
+				BidVideo: &openrtb_ext.ExtBidPrebidVideo{},
+			}
+			if bid.Ext != nil {
+				var bidExt *yeahmobiBidExt
+				err := json.Unmarshal(bid.Ext, &bidExt)
+				if err != nil {
+					return nil, []error{fmt.Errorf("bid.ext json unmarshal error")}
+				} else if bidExt != nil {
+					if bidExt.VideoCreativeInfo != nil && bidExt.VideoCreativeInfo.Duration != nil {
+						typedBid.BidVideo.Duration = *bidExt.VideoCreativeInfo.Duration
+					}
+				}
+			}
+			bidResponse.Bids = append(bidResponse.Bids, typedBid)
 		}
 	}
 	return bidResponse, nil
diff --git a/adapters/yieldlab/yieldlab.go b/adapters/yieldlab/yieldlab.go
index 72041659..c92abe75 100644
--- a/adapters/yieldlab/yieldlab.go
+++ b/adapters/yieldlab/yieldlab.go
@@ -498,20 +498,20 @@ func makeSupplyChain(openRtbSchain openrtb2.SupplyChain) string {
 
 // makeNodeValue converts any known value type from a schain node to a string and does URL encoding if necessary.
 func makeNodeValue(nodeParam any) string {
-	switch nodeParam.(type) {
+	switch nodeParam := nodeParam.(type) {
 	case string:
-		return url.QueryEscape(nodeParam.(string))
+		return url.QueryEscape(nodeParam)
 	case *int8:
-		pointer := nodeParam.(*int8)
+		pointer := nodeParam
 		if pointer == nil {
 			return ""
 		}
 		return makeNodeValue(int(*pointer))
 	case int:
-		return strconv.Itoa(nodeParam.(int))
+		return strconv.Itoa(nodeParam)
 	case json.RawMessage:
-		if freeFormData := nodeParam.(json.RawMessage); freeFormData != nil {
-			freeFormJson, err := json.Marshal(freeFormData)
+		if nodeParam != nil {
+			freeFormJson, err := json.Marshal(nodeParam)
 			if err != nil {
 				return ""
 			}
diff --git a/adapters/yieldmo/yieldmo.go b/adapters/yieldmo/yieldmo.go
index f01527cc..6693861c 100644
--- a/adapters/yieldmo/yieldmo.go
+++ b/adapters/yieldmo/yieldmo.go
@@ -35,16 +35,8 @@ type ExtBid struct {
 }
 
 func (a *YieldmoAdapter) MakeRequests(request *openrtb2.BidRequest, reqInfo *adapters.ExtraRequestInfo) ([]*adapters.RequestData, []error) {
-	var errs []error
-	var adapterRequests []*adapters.RequestData
-
-	adapterReq, errors := a.makeRequest(request)
-	if adapterReq != nil {
-		adapterRequests = append(adapterRequests, adapterReq)
-	}
-	errs = append(errs, errors...)
-
-	return adapterRequests, errors
+	reqData, errors := a.makeRequest(request)
+	return []*adapters.RequestData{reqData}, errors
 }
 
 func (a *YieldmoAdapter) makeRequest(request *openrtb2.BidRequest) (*adapters.RequestData, []error) {
diff --git a/adservertargeting/respdataprocessor.go b/adservertargeting/respdataprocessor.go
index 5ec305c1..51bad207 100644
--- a/adservertargeting/respdataprocessor.go
+++ b/adservertargeting/respdataprocessor.go
@@ -82,13 +82,13 @@ func buildBidExt(targetingData map[string]string,
 	}
 	bidExtTargeting, err := jsonutil.Marshal(bidExtTargetingData)
 	if err != nil {
-		warnings = append(warnings, createWarning(err.Error()))
+		warnings = append(warnings, createWarning(err.Error())) //nolint: ineffassign,staticcheck
 		return nil
 	}
 
 	newExt, err := jsonpatch.MergePatch(bid.Ext, bidExtTargeting)
 	if err != nil {
-		warnings = append(warnings, createWarning(err.Error()))
+		warnings = append(warnings, createWarning(err.Error())) //nolint: ineffassign,staticcheck
 		return nil
 	}
 	return newExt
diff --git a/bidadjustment/apply.go b/bidadjustment/apply.go
index 16b8305a..86bc813d 100644
--- a/bidadjustment/apply.go
+++ b/bidadjustment/apply.go
@@ -21,7 +21,7 @@ const minBid = 0.1
 
 // Apply gets the highest priority adjustment slice given a map of rules, and applies those adjustments to a bid's price
 func Apply(rules map[string][]openrtb_ext.Adjustment, bidInfo *adapters.TypedBid, bidderName openrtb_ext.BidderName, currency string, reqInfo *adapters.ExtraRequestInfo, bidType string) (float64, string) {
-	adjustments := []openrtb_ext.Adjustment{}
+	var adjustments []openrtb_ext.Adjustment
 	if len(rules) > 0 {
 		adjustments = get(rules, bidType, string(bidderName), bidInfo.Bid.DealID)
 	} else {
diff --git a/config/config.go b/config/config.go
index d4ef73a6..4da788d4 100644
--- a/config/config.go
+++ b/config/config.go
@@ -192,27 +192,27 @@ func (data *ExternalCache) validate(errs []error) []error {
 
 	// Either host or path or both not empty, validate.
 	if data.Host == "" && data.Path != "" || data.Host != "" && data.Path == "" {
-		return append(errs, errors.New("External cache Host and Path must both be specified"))
+		return append(errs, errors.New("external cache Host and Path must both be specified"))
 	}
 	if strings.HasSuffix(data.Host, "/") {
-		return append(errs, errors.New(fmt.Sprintf("External cache Host '%s' must not end with a path separator", data.Host)))
+		return append(errs, fmt.Errorf("external cache Host '%s' must not end with a path separator", data.Host))
 	}
 	if strings.Contains(data.Host, "://") {
-		return append(errs, errors.New(fmt.Sprintf("External cache Host must not specify a protocol. '%s'", data.Host)))
+		return append(errs, fmt.Errorf("external cache Host must not specify a protocol. '%s'", data.Host))
 	}
 	if !strings.HasPrefix(data.Path, "/") {
-		return append(errs, errors.New(fmt.Sprintf("External cache Path '%s' must begin with a path separator", data.Path)))
+		return append(errs, fmt.Errorf("external cache Path '%s' must begin with a path separator", data.Path))
 	}
 
 	urlObj, err := url.Parse("https://" + data.Host + data.Path)
 	if err != nil {
-		return append(errs, errors.New(fmt.Sprintf("External cache Path validation error: %s ", err.Error())))
+		return append(errs, fmt.Errorf("external cache Path validation error: %s ", err.Error()))
 	}
 	if urlObj.Host != data.Host {
-		return append(errs, errors.New(fmt.Sprintf("External cache Host '%s' is invalid", data.Host)))
+		return append(errs, fmt.Errorf("external cache Host '%s' is invalid", data.Host))
 	}
 	if urlObj.Path != data.Path {
-		return append(errs, errors.New("External cache Path is invalid"))
+		return append(errs, fmt.Errorf("external cache Path is invalid"))
 	}
 
 	return errs
@@ -269,7 +269,7 @@ func (cfg *GDPR) validate(v *viper.Viper, errs []error) []error {
 	if cfg.HostVendorID == 0 {
 		glog.Warning("gdpr.host_vendor_id was not specified. Host company GDPR checks will be skipped.")
 	}
-	if cfg.AMPException == true {
+	if cfg.AMPException {
 		errs = append(errs, fmt.Errorf("gdpr.amp_exception has been discontinued and must be removed from your config. If you need to disable GDPR for AMP, you may do so per-account (gdpr.integration_enabled.amp) or at the host level for the default account (account_defaults.gdpr.integration_enabled.amp)"))
 	}
 	return cfg.validatePurposes(errs)
diff --git a/config/events.go b/config/events.go
index cf3139d8..c73460e0 100644
--- a/config/events.go
+++ b/config/events.go
@@ -82,11 +82,9 @@ func (e Events) validate(errs []error) []error {
 
 // validateVASTEvents verifies the all VASTEvent objects and returns error if at least one is invalid.
 func validateVASTEvents(events []VASTEvent) error {
-	if events != nil {
-		for i, event := range events {
-			if err := event.validate(); err != nil {
-				return fmt.Errorf(err.Error(), i, i)
-			}
+	for i, event := range events {
+		if err := event.validate(); err != nil {
+			return fmt.Errorf(err.Error(), i, i)
 		}
 	}
 	return nil
diff --git a/endpoints/events/vtrack.go b/endpoints/events/vtrack.go
index a2e185f4..01e544a4 100644
--- a/endpoints/events/vtrack.go
+++ b/endpoints/events/vtrack.go
@@ -194,12 +194,12 @@ func ParseVTrackRequest(httpRequest *http.Request, maxRequestSize int64) (req *B
 
 	for _, bcr := range req.Puts {
 		if bcr.BidID == "" {
-			err = error(&errortypes.BadInput{Message: fmt.Sprint("'bidid' is required field and can't be empty")})
+			err = error(&errortypes.BadInput{Message: "'bidid' is required field and can't be empty"})
 			return req, err
 		}
 
 		if bcr.Bidder == "" {
-			err = error(&errortypes.BadInput{Message: fmt.Sprint("'bidder' is required field and can't be empty")})
+			err = error(&errortypes.BadInput{Message: "'bidder' is required field and can't be empty"})
 			return req, err
 		}
 	}
@@ -271,12 +271,13 @@ func getBiddersAllowingVastUpdate(req *BidCacheRequest, bidderInfos *config.Bidd
 
 // isAllowVastForBidder checks if a bidder is active and allowed to modify vast xml data
 func isAllowVastForBidder(bidder string, bidderInfos *config.BidderInfos, allowUnknownBidder bool, normalizeBidderName normalizeBidderName) bool {
-	//if bidder is active and isModifyingVastXmlAllowed is true
+	// if bidder is active and isModifyingVastXmlAllowed is true
 	// check if bidder is configured
 	if normalizedBidder, ok := normalizeBidderName(bidder); ok {
-		if b, ok := (*bidderInfos)[normalizedBidder.String()]; bidderInfos != nil && ok {
-			// check if bidder is enabled
-			return b.IsEnabled() && b.ModifyingVastXmlAllowed
+		if bidderInfos != nil {
+			if b, ok := (*bidderInfos)[normalizedBidder.String()]; ok {
+				return b.IsEnabled() && b.ModifyingVastXmlAllowed
+			}
 		}
 	}
 
diff --git a/endpoints/openrtb2/auction.go b/endpoints/openrtb2/auction.go
index 28b2aa3d..a1d4a98f 100644
--- a/endpoints/openrtb2/auction.go
+++ b/endpoints/openrtb2/auction.go
@@ -2319,8 +2319,8 @@ func (deps *endpointDeps) processStoredRequests(requestJson []byte, impInfo []Im
 // parseImpInfo parses the request JSON and returns impression and unmarshalled imp.ext.prebid
 func parseImpInfo(requestJson []byte) (impData []ImpExtPrebidData, errs []error) {
 	if impArray, dataType, _, err := jsonparser.Get(requestJson, "imp"); err == nil && dataType == jsonparser.Array {
-		_, err = jsonparser.ArrayEach(impArray, func(imp []byte, _ jsonparser.ValueType, _ int, err error) {
-			impExtData, _, _, err := jsonparser.Get(imp, "ext", "prebid")
+		_, _ = jsonparser.ArrayEach(impArray, func(imp []byte, _ jsonparser.ValueType, _ int, _ error) {
+			impExtData, _, _, _ := jsonparser.Get(imp, "ext", "prebid")
 			var impExtPrebid openrtb_ext.ExtImpPrebid
 			if impExtData != nil {
 				if err := jsonutil.Unmarshal(impExtData, &impExtPrebid); err != nil {
diff --git a/endpoints/openrtb2/sample-requests/aliased/simple.json b/endpoints/openrtb2/sample-requests/aliased/default-request-alias.json
similarity index 76%
rename from endpoints/openrtb2/sample-requests/aliased/simple.json
rename to endpoints/openrtb2/sample-requests/aliased/default-request-alias.json
index 6e1440a7..134d121b 100644
--- a/endpoints/openrtb2/sample-requests/aliased/simple.json
+++ b/endpoints/openrtb2/sample-requests/aliased/default-request-alias.json
@@ -35,7 +35,17 @@
           {
             "id": "appnexus-bid",
             "impid": "my-imp-id",
-            "price": 0
+            "price": 0,
+            "ext": {
+              "origbidcpm": 0,
+              "origbidcur": "USD",
+              "prebid": {
+                "meta": {
+                  "adaptercode": "appnexus"
+                },
+                "type": "banner"
+              }
+            }
           }
         ],
        "seat": "alias1"
diff --git a/endpoints/openrtb2/sample-requests/aliased/hard-alias.json b/endpoints/openrtb2/sample-requests/aliased/hard-alias.json
new file mode 100644
index 00000000..7e727814
--- /dev/null
+++ b/endpoints/openrtb2/sample-requests/aliased/hard-alias.json
@@ -0,0 +1,62 @@
+{
+  "description": "Imp extension references valid bidder alias of adf defined in the adform bidder infos config yaml file.",
+  "config": {
+    "mockBidders": [
+      {
+        "bidderName": "adform",
+        "currency": "USD",
+        "price": 2
+      }
+    ]
+  },
+  "mockBidRequest": {
+    "id": "some-request-id",
+    "site": {
+      "page": "test.somepage.com"
+    },
+    "imp": [
+      {
+        "id": "my-imp-id",
+        "video": {
+          "mimes": [
+            "video/mp4"
+          ]
+        },
+        "ext": {
+          "adform": {
+            "mid": "123"
+          }
+        }
+      }
+    ]
+  },
+  "expectedBidResponse": {
+    "id":"some-request-id",
+    "bidid":"test bid id",
+    "cur": "USD",
+    "nbr":0,
+    "seatbid": [
+      {
+        "bid": [
+          {
+            "id": "adform-bid",
+            "impid": "my-imp-id",
+            "price": 2,
+            "ext": {
+              "origbidcpm": 2,
+              "origbidcur": "USD",
+              "prebid": {
+                "meta": {
+                  "adaptercode": "adform"
+                },
+                "type": "banner"
+              }
+            }
+          }
+        ],
+       "seat": "adform"
+      }
+    ]
+  },
+  "expectedReturnCode": 200
+}
diff --git a/endpoints/openrtb2/sample-requests/aliased/request-alias.json b/endpoints/openrtb2/sample-requests/aliased/request-alias.json
new file mode 100644
index 00000000..77ce02ad
--- /dev/null
+++ b/endpoints/openrtb2/sample-requests/aliased/request-alias.json
@@ -0,0 +1,61 @@
+{
+    "description": "Imp extension references valid bidder alias of appnexus defined in the request ext.prebid.aliases field.",
+    "mockBidRequest": {
+      "id": "some-request-id",
+      "site": {
+        "page": "test.somepage.com"
+      },
+      "imp": [
+        {
+          "id": "my-imp-id",
+          "video": {
+            "mimes": [
+              "video/mp4"
+            ]
+          },
+          "ext": {
+            "alias1": {
+              "placementId": 12883451
+            }
+          }
+        }
+      ],
+      "ext": {
+        "prebid": {
+          "aliases": {
+            "alias1": "appnexus"
+          }
+        }
+      }
+    },
+    "expectedBidResponse": {
+      "id":"some-request-id",
+      "bidid":"test bid id",
+      "cur": "USD",
+      "nbr":0,
+      "seatbid": [
+        {
+          "bid": [
+            {
+              "id": "appnexus-bid",
+              "impid": "my-imp-id",
+              "price": 0,
+              "ext": {
+                "origbidcpm": 0,
+                "origbidcur": "USD",
+                "prebid": {
+                  "meta": {
+                    "adaptercode": "appnexus"
+                  },
+                  "type": "banner"
+                }
+              }
+            }
+          ],
+         "seat": "alias1"
+        }
+      ]
+    },
+    "expectedReturnCode": 200
+  }
+  
\ No newline at end of file
diff --git a/endpoints/openrtb2/sample-requests/alternate-bidder-code/alternate-bidder-code.json b/endpoints/openrtb2/sample-requests/alternate-bidder-code/alternate-bidder-code.json
new file mode 100644
index 00000000..75e951cb
--- /dev/null
+++ b/endpoints/openrtb2/sample-requests/alternate-bidder-code/alternate-bidder-code.json
@@ -0,0 +1,67 @@
+{
+    "description": "Imp extension doesn't come with valid bidder name but does come with valid bidder alias as defined in the mockAliases list.",
+    "config": {
+      "mockBidders": [
+        {
+          "bidderName": "appnexus",
+          "currency": "USD",
+          "price": 2,
+          "seat": "groupm"
+        }
+      ]
+    },
+    "mockBidRequest": {
+      "id": "some-request-id",
+      "site": {
+        "page": "test.somepage.com",
+        "publisher": {
+            "id": "alternate_bidder_code_acct"
+          }
+      },
+      "imp": [
+        {
+          "id": "my-imp-id",
+          "video": {
+            "mimes": [
+              "video/mp4"
+            ]
+          },
+          "ext": {
+            "appnexus": {
+              "placementId": 12883451
+            }
+          }
+        }
+      ]
+    },
+    "expectedBidResponse": {
+      "id":"some-request-id",
+      "bidid":"test bid id",
+      "cur": "USD",
+      "nbr":0,
+      "seatbid": [
+        {
+          "bid": [
+            {
+              "id": "appnexus-bid",
+              "impid": "my-imp-id",
+              "price": 2,
+              "ext": {
+                "origbidcpm": 2,
+                "origbidcur": "USD",
+                "prebid": {
+                  "meta": {
+                    "adaptercode": "appnexus"
+                  },
+                  "type": "banner"
+                }
+              }
+            }
+          ],
+         "seat": "groupm"
+        }
+      ]
+    },
+    "expectedReturnCode": 200
+  }
+  
\ No newline at end of file
diff --git a/endpoints/openrtb2/sample-requests/valid-whole/exemplary/simple.json b/endpoints/openrtb2/sample-requests/valid-whole/exemplary/simple.json
index 5a7dbd20..a0c627b3 100644
--- a/endpoints/openrtb2/sample-requests/valid-whole/exemplary/simple.json
+++ b/endpoints/openrtb2/sample-requests/valid-whole/exemplary/simple.json
@@ -47,7 +47,17 @@
           {
             "id": "appnexus-bid",
             "impid": "some-impression-id",
-            "price": 0
+            "price": 0,
+            "ext": {
+              "origbidcpm": 0,
+              "origbidcur": "USD",
+              "prebid": {
+                "meta": {
+                  "adaptercode": "appnexus"
+                },
+                "type": "banner"
+              }
+            }
           }
         ],
         "seat": "appnexus"
diff --git a/exchange/bidder.go b/exchange/bidder.go
index 8b54f984..fb2c73be 100644
--- a/exchange/bidder.go
+++ b/exchange/bidder.go
@@ -387,6 +387,7 @@ func (bidder *bidderAdapter) requestBid(ctx context.Context, bidderRequest Bidde
 							DealPriority:   bidResponse.Bids[i].DealPriority,
 							OriginalBidCPM: originalBidCpm,
 							OriginalBidCur: bidResponse.Currency,
+							AdapterCode:    bidderRequest.BidderCoreName,
 						})
 						seatBidMap[bidderName].Currency = currencyAfterAdjustments
 					}
@@ -669,7 +670,7 @@ func (bidder *bidderAdapter) addClientTrace(ctx context.Context) context.Context
 		},
 		// GotConn is called after a successful connection is obtained
 		GotConn: func(info httptrace.GotConnInfo) {
-			connWaitTime := time.Now().Sub(connStart)
+			connWaitTime := time.Since(connStart)
 
 			bidder.me.RecordAdapterConnections(bidder.BidderName, info.Reused, connWaitTime)
 		},
@@ -679,7 +680,7 @@ func (bidder *bidderAdapter) addClientTrace(ctx context.Context) context.Context
 		},
 		// DNSDone is called when a DNS lookup ends.
 		DNSDone: func(info httptrace.DNSDoneInfo) {
-			dnsLookupTime := time.Now().Sub(dnsStart)
+			dnsLookupTime := time.Since(dnsStart)
 
 			bidder.me.RecordDNSTime(dnsLookupTime)
 		},
@@ -689,7 +690,7 @@ func (bidder *bidderAdapter) addClientTrace(ctx context.Context) context.Context
 		},
 
 		TLSHandshakeDone: func(tls.ConnectionState, error) {
-			tlsHandshakeTime := time.Now().Sub(tlsStart)
+			tlsHandshakeTime := time.Since(tlsStart)
 
 			bidder.me.RecordTLSHandshakeTime(tlsHandshakeTime)
 		},
diff --git a/exchange/entities/entities.go b/exchange/entities/entities.go
index 0449f456..c764fe82 100644
--- a/exchange/entities/entities.go
+++ b/exchange/entities/entities.go
@@ -50,4 +50,5 @@ type PbsOrtbBid struct {
 	OriginalBidCPM    float64
 	OriginalBidCur    string
 	TargetBidderCode  string
+	AdapterCode       openrtb_ext.BidderName
 }
diff --git a/exchange/exchange.go b/exchange/exchange.go
index a90a693c..01abe37d 100644
--- a/exchange/exchange.go
+++ b/exchange/exchange.go
@@ -1317,7 +1317,7 @@ func (e *exchange) makeBid(bids []*entities.PbsOrtbBid, auc *auction, returnCrea
 			}
 		}
 
-		if bidExtJSON, err := makeBidExtJSON(bid.Bid.Ext, bidExtPrebid, impExtInfoMap, bid.Bid.ImpID, bid.OriginalBidCPM, bid.OriginalBidCur, adapter); err != nil {
+		if bidExtJSON, err := makeBidExtJSON(bid.Bid.Ext, bidExtPrebid, impExtInfoMap, bid.Bid.ImpID, bid.OriginalBidCPM, bid.OriginalBidCur, bid.AdapterCode); err != nil {
 			errs = append(errs, err)
 		} else {
 			result = append(result, *bid.Bid)
diff --git a/main.go b/main.go
index 1909199d..4ef96b34 100644
--- a/main.go
+++ b/main.go
@@ -2,7 +2,6 @@ package main
 
 import (
 	"flag"
-	"math/rand"
 	"net/http"
 	"path/filepath"
 	"runtime"
@@ -22,7 +21,6 @@ import (
 )
 
 func init() {
-	rand.Seed(time.Now().UnixNano())
 	jsoniter.RegisterExtension(&jsonutil.RawMessageExtension{})
 }
 
@@ -80,7 +78,9 @@ func serve(cfg *config.Configuration) error {
 	}
 
 	corsRouter := router.SupportCORS(r)
-	server.Listen(cfg, router.NoCache{Handler: corsRouter}, router.Admin(currencyConverter, fetchingInterval), r.MetricsEngine)
+	if err := server.Listen(cfg, router.NoCache{Handler: corsRouter}, router.Admin(currencyConverter, fetchingInterval), r.MetricsEngine); err != nil {
+		glog.Fatalf("prebid-server returned an error: %v", err)
+	}
 
 	r.Shutdown()
 	return nil
diff --git a/openrtb_ext/imp_theadx.go b/openrtb_ext/imp_theadx.go
index bee3ac60..9910aecc 100644
--- a/openrtb_ext/imp_theadx.go
+++ b/openrtb_ext/imp_theadx.go
@@ -7,6 +7,6 @@ import (
 type ExtImpTheadx struct {
 	TagID             json.Number `json:"tagid"`
 	InventorySourceID int         `json:"wid,omitempty"`
-	MemberID          int         `json:"pid,optional,omitempty"`
-	PlacementName     string      `json:"pname,optional,omitempty"`
+	MemberID          int         `json:"pid,omitempty"`
+	PlacementName     string      `json:"pname,omitempty"`
 }
diff --git a/openrtb_ext/request_wrapper.go b/openrtb_ext/request_wrapper.go
index 4c4eb9a6..3567625a 100644
--- a/openrtb_ext/request_wrapper.go
+++ b/openrtb_ext/request_wrapper.go
@@ -649,7 +649,6 @@ func (ue *UserExt) SetConsentedProvidersSettingsOut(cpSettings *ConsentedProvide
 
 	ue.consentedProvidersSettingsOut = cpSettings
 	ue.consentedProvidersSettingsOutDirty = true
-	return
 }
 
 func (ue *UserExt) GetPrebid() *ExtUserPrebid {
diff --git a/sample/001_banner/app.yaml b/sample/001_banner/app.yaml
new file mode 100644
index 00000000..a314e77e
--- /dev/null
+++ b/sample/001_banner/app.yaml
@@ -0,0 +1,20 @@
+port: 8000 # main auction server port
+admin_port: 6060 # admin server listening port
+
+external_url: localhost # host url of all 2 servers above
+status_response: "ok" # default response string for /status endpoint
+
+gdpr:
+  default_value: "0" # disable gdpr, explicitly specifying a default value is a requirement in prebid server config
+
+# set up stored request storage using local file system
+stored_requests:
+  filesystem: 
+    enabled: true
+    directorypath: ./stored_requests/data/by_id
+
+# set up stored response storage using local file system
+stored_responses:
+  filesystem:
+    enabled: true
+    directorypath: ./stored_responses/data/by_id
\ No newline at end of file
diff --git a/sample/001_banner/pbjs.html b/sample/001_banner/pbjs.html
new file mode 100644
index 00000000..b02ba95b
--- /dev/null
+++ b/sample/001_banner/pbjs.html
@@ -0,0 +1,121 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <style>
+        div.adslot {
+            border-color: red;
+            border-style: solid;
+            width: 300px;
+            height: 600px;
+        }
+        p.description {
+            border-style: solid;
+        }
+    </style>
+    <script src="//cdn.jsdelivr.net/npm/prebid.js@latest/dist/not-for-prod/prebid.js"></script>
+    <script>
+
+        var sizes = [
+            [300, 250],
+            [300, 600]
+        ];
+
+        // use the cool "Prebid Less" feature https://docs.prebid.org/dev-docs/adunit-reference.html#stored-imp
+        var adUnits = [
+            {
+                code: 'test-div-1',
+                mediaTypes: {
+                    banner: {
+                        sizes: sizes
+                    }
+                },
+	        bids: [{
+	            module: "pbsBidAdapter",
+	            ortb2Imp: {
+		      ext: { prebid: { storedrequest: { id: 'test-imp-id' }}}
+                    }
+                }]
+            }
+        ]
+
+        function renderAllAdUnits() {
+            var winners = pbjs.getHighestCpmBids();
+            for (var i = 0; i < winners.length; i++) {
+                renderOne(winners[i]);
+            }
+        }
+
+        // create an iframe in the div and write the winning ad into it
+        function renderOne(winningBid) {
+            if (winningBid && winningBid.adId) {
+                var div = document.getElementById(winningBid.adUnitCode);
+                if (div) {
+                    const iframe = document.createElement('iframe');
+                    iframe.scrolling = 'no';
+                    iframe.frameBorder = '0';
+                    iframe.marginHeight = '0';
+                    iframe.marginHeight = '0';
+                    iframe.name = `prebid_ads_iframe_${winningBid.adUnitCode}`;
+                    iframe.title = '3rd party ad content';
+                    iframe.sandbox.add(
+                        'allow-forms',
+                        'allow-popups',
+                        'allow-popups-to-escape-sandbox',
+                        'allow-same-origin',
+                        'allow-scripts',
+                        'allow-top-navigation-by-user-activation'
+                    );
+                    iframe.setAttribute('aria-label', 'Advertisment');
+                    iframe.style.setProperty('border', '0');
+                    iframe.style.setProperty('margin', '0');
+                    iframe.style.setProperty('overflow', 'hidden');
+                    div.appendChild(iframe);
+                    const iframeDoc = iframe.contentWindow.document;
+                    pbjs.renderAd(iframeDoc, winningBid.adId);
+                }
+            }
+        }
+
+    </script>
+    <script>
+        var pbjs = pbjs || {};
+        pbjs.que = pbjs.que || [];
+
+        pbjs.que.push(function () {
+            pbjs.setConfig({
+                s2sConfig: [{
+                    accountId: '1',
+                    adapter: "prebidServer",
+                    enabled: true,
+                    endpoint: {
+                        noP1Consent: "http://localhost:8000/openrtb2/auction",
+                        p1Consent: 'http://localhost:8000/openrtb2/auction',
+                    },
+                    timeout: 1000,
+                    debug: true,
+                    allowUnknownBidderCodes: true
+                }],
+            })
+
+            pbjs.addAdUnits(adUnits);
+            pbjs.requestBids({
+                bidsBackHandler: renderAllAdUnits
+            })
+        });
+    </script>
+
+</head>
+
+<body>
+    <h1>001_banner</h1>
+    <p class="description">
+        This demo uses Prebid.js to interact with Prebid Server to fill the ad slot <strong>test-div-1</strong>
+        The auction request to Prebid Server uses a stored request, which in turn links to a stored response.</br>
+        Look for the <strong>/auction</strong> request in your browser's developer tool to inspect the request
+        and response.
+    </p>
+    <h2>&#8595I am ad unit test-div-1 &#8595</h2>
+        <div id="test-div-1">
+        </div>
+</body>
+</html>
diff --git a/sample/001_banner/stored_request.json b/sample/001_banner/stored_request.json
new file mode 100644
index 00000000..59e13ae8
--- /dev/null
+++ b/sample/001_banner/stored_request.json
@@ -0,0 +1,28 @@
+{
+    "id": "test-imp-id",
+    "banner": {
+        "format": [
+            {
+                "w": 300,
+                "h": 250
+            },
+            {
+                "w": 300,
+                "h": 600
+            }
+        ]
+    },
+    "ext": {
+        "prebid": {
+            "bidder": {
+                "pubmatic": {
+                    "publisherId": "111111",
+                    "adSlot": "test"
+                }
+            },
+            "storedbidresponse": [
+               { "bidder": "pubmatic", "id": "test-bid-id" }
+            ]
+        }
+    }
+}
diff --git a/sample/001_banner/stored_response.json b/sample/001_banner/stored_response.json
new file mode 100644
index 00000000..033d9928
--- /dev/null
+++ b/sample/001_banner/stored_response.json
@@ -0,0 +1,46 @@
+{
+    "id": "test-auction-id",
+    "seatbid": [
+        {
+            "bid": [
+                {
+                    "id": "test-bid-id",
+                    "impid": "test-div-1",
+                    "price": 1,
+                    "adm": "<img src =\"http://files.prebid.org/creatives/prebid300x250.png\" />",
+                    "adomain": [
+                        "www.addomain.com"
+                    ],
+                    "iurl": "http://localhost11",
+                    "crid": "creative111",
+                    "w": 300,
+                    "h": 250,
+                    "mtype": 1,
+                    "ext": {
+                        "bidtype": 0,
+                        "dspid": 6,
+                        "origbidcpm": 1,
+                        "origbidcur": "USD",
+                        "prebid": {
+                            "meta": {
+                                "adaptercode": "pubmatic"
+                            },
+                            "targeting": {
+                                "hb_bidder": "pubmatic",
+                                "hb_pb": "1.00",
+                                "hb_size": "300x250"
+                            },
+                            "type": "banner",
+                            "video": {
+                                "duration": 0,
+                                "primary_category": ""
+                            }
+                        }
+                    }
+                }
+            ],
+            "seat": "pubmatic"
+        }
+    ],
+    "cur": "USD"
+}
diff --git a/sample/README.md b/sample/README.md
new file mode 100644
index 00000000..6b0109aa
--- /dev/null
+++ b/sample/README.md
@@ -0,0 +1,65 @@
+# Sample
+
+The Sample describes several demos of quickly spinning up different Prebid Server instances with various preset configurations. These samples are intended for audiences with little knowledge about Prebid Server and plan to play around with it locally and see how it works.
+
+# Installation
+
+In the Sample, we use `docker` and `docker-compose` to instantiate examples; with docker providing a unified setup and interface,  you can spin up a demo server instance locally with only one command without knowing all the complexities.
+The docker image used in `docker-compose.yml` is the `Dockerfile` residing in the root level of the repository. 
+
+## Option 1 - Standard Docker Engine
+Install `docker` and `docker-compose` via the [official docker page](https://docs.docker.com/compose/install/#scenario-one-install-docker-desktop). If you cannot use the official docker engine due to restrictions of its license, see the option below about using Podman instead of Docker. 
+
+## Option 2 - Podman
+From MacOS, you can use [podman](https://podman.io/) with these additional steps:
+
+```sh
+$ brew install podman docker-compose
+$ podman machine init
+$ podman machine set --rootful
+$ podman machine start
+```
+
+# Examples
+
+## Common File & Structures
+All required files for each example are stored in a folder that follows the name pattern <number>_<name>. The `<number>` suggests its order and `<name`>` describes its title.
+
+The following files will be present for every example and are exclusively catered to that example.
+1. `app.yaml` - the prebid server app config.
+2. `pbjs.html` - the HTML file with `Prebid JS` integration and communicates with the Prebid Server. It also provides a detailed explanation of the example.
+3. `*.json` - additional files required to support the example. e.g. stored request and stored response.
+
+## Common steps 
+
+```sh
+#1 - To get to the sample folder if you are on the root repository directory.
+$ cd sample 
+
+#2a - This command builds a new image, you should execute this command whenever the repository source code changes.
+$ docker-compose build
+
+#2b - Optionally you could run `docker-compose build --no-cache` if you want to build an completely new image without using cache but results in slower time to build it.
+$ docker-compose build --no-cache
+
+#3a - Spin up a corresponding sample in a container - see Steps for details 
+$ docker-compose up <number>_<name>
+
+#3b - Optionally you could use `--force-recreate` flag if you want to recreate the container every time you spin up the container.
+$ docker-compose up <number>_<name> --force-recreate
+```
+
+### Detailed Steps
+1. To prevent `app.yaml` from being overwritten by other config files. Ensure that `pbs.yaml` or `pbs.json` config file **MUST NOT** be present in the root directory of the repository.
+
+2. Bring up an instance by running `docker-compose up <number>_<name>` in the `sample` folder.
+
+3. Wait patiently until you see ` Admin server starting on: :6060` and `Main server starting on: :8000` in the command line output. This marks the Prebid Server instance finishing its initialization and is ready to serve the auction traffic.
+
+4. you can copy the URL `http://localhost:8000/status` and paste it into your browser. You should see `ok` in the response which is another way to tell the Prebid Server that the main auction server is up and running.
+
+5. Open a new tab in your browser and turn on the console UI. If you are using Chrome, you can right-click on the page and click `inspect`. Once the console UI is on, click on the `Network` tab to inspect the traffic later.
+
+6. Copy the URL `http://localhost:8000/static/pbjs.html?pbjs_debug=true` into your browser. It starts the example immediately with debugging information from `Prebid JS`, and you can inspect the request and response between `Prebid JS` and `Prebid Server`.
+
+7. After playing with the example, type `docker-compose down`. This is to shut down the existing Sample so you can start the next one you want to select.
diff --git a/sample/docker-compose.yml b/sample/docker-compose.yml
new file mode 100644
index 00000000..49b615c1
--- /dev/null
+++ b/sample/docker-compose.yml
@@ -0,0 +1,20 @@
+version: "3.9"
+services:
+  001_banner:
+    platform: linux/amd64
+    build:
+      context: ../
+      dockerfile: Dockerfile
+      args:
+        - TEST=false
+    image: pbs-sample
+    container_name: 001_banner
+    privileged: true
+    ports:
+      - "8000:8000"
+      - "6060:6060"
+    volumes:
+      - ../sample/001_banner/app.yaml:/usr/local/bin/pbs.yaml
+      - ../sample/001_banner/pbjs.html:/usr/local/bin/static/pbjs.html
+      - ../sample/001_banner/stored_request.json:/usr/local/bin/stored_requests/data/by_id/stored_imps/test-imp-id.json
+      - ../sample/001_banner/stored_response.json:/usr/local/bin/stored_responses/data/by_id/stored_responses/test-bid-id.json
\ No newline at end of file
diff --git a/static/bidder-info/cpmstar.yaml b/static/bidder-info/cpmstar.yaml
index 7c54ba53..94a91e5a 100644
--- a/static/bidder-info/cpmstar.yaml
+++ b/static/bidder-info/cpmstar.yaml
@@ -11,6 +11,9 @@ capabilities:
       - banner
       - video
 userSync:
+  iframe:
+    url: "https://server.cpmstar.com/usersync.aspx?ifr=1&gdpr={{.GDPR}}&consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&redirect={{.RedirectURL}}"
+    userMacro: "$UID"
   redirect:
     url: "https://server.cpmstar.com/usersync.aspx?gdpr={{.GDPR}}&consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&redirect={{.RedirectURL}}"
-    userMacro: "$UID"
+    userMacro: "$UID"    
\ No newline at end of file
diff --git a/static/bidder-info/jdpmedia.yaml b/static/bidder-info/jdpmedia.yaml
new file mode 100644
index 00000000..8139dd4f
--- /dev/null
+++ b/static/bidder-info/jdpmedia.yaml
@@ -0,0 +1,5 @@
+endpoint: "http://jdpmedia-prebid.smart-hub.io/pbserver/?seat={{.AccountID}}&token={{.SourceId}}"
+aliasOf: "smarthub"
+userSync:
+  supports:
+    - redirect
\ No newline at end of file
diff --git a/static/bidder-info/mabidder.yaml b/static/bidder-info/mabidder.yaml
index 3f03fd87..b66e9a8b 100644
--- a/static/bidder-info/mabidder.yaml
+++ b/static/bidder-info/mabidder.yaml
@@ -8,4 +8,7 @@ capabilities:
       - banner
   site:
     mediaTypes:
-      - banner
\ No newline at end of file
+      - banner
+# This bidder does not operate globally. Please consider setting "disabled: true" outside of the following regions:
+geoscope:
+  - CAN
\ No newline at end of file
diff --git a/static/bidder-info/markapp.yaml b/static/bidder-info/markapp.yaml
new file mode 100644
index 00000000..79d8887c
--- /dev/null
+++ b/static/bidder-info/markapp.yaml
@@ -0,0 +1,5 @@
+endpoint: "http://markapp-prebid.smart-hub.io/pbserver/?seat={{.AccountID}}&token={{.SourceId}}"
+aliasOf: "smarthub"
+userSync:
+  supports:
+    - redirect
\ No newline at end of file
diff --git a/static/bidder-info/smarthub.yaml b/static/bidder-info/smarthub.yaml
index dcb65ede..687c6c3f 100644
--- a/static/bidder-info/smarthub.yaml
+++ b/static/bidder-info/smarthub.yaml
@@ -1,4 +1,4 @@
-endpoint: "http://{{.Host}}-prebid.smart-hub.io/?seat={{.AccountID}}&token={{.SourceId}}"
+endpoint: "http://prebid.smart-hub.io/pbserver?partnerName={{.Host}}&seat={{.AccountID}}&token={{.SourceId}}"
 maintainer:
   email: "support@smart-hub.io"
 capabilities:
diff --git a/stored_requests/events/http/http.go b/stored_requests/events/http/http.go
index 6c2145da..0f5dfb9a 100644
--- a/stored_requests/events/http/http.go
+++ b/stored_requests/events/http/http.go
@@ -109,58 +109,55 @@ func (e *HTTPEvents) fetchAll() {
 }
 
 func (e *HTTPEvents) refresh(ticker <-chan time.Time) {
-	for {
-		select {
-		case thisTime := <-ticker:
-			thisTimeInUTC := thisTime.UTC()
-
-			// Parse the endpoint url defined
-			endpointUrl, urlErr := url.Parse(e.Endpoint)
-
-			// Error with url parsing
-			if urlErr != nil {
-				glog.Errorf("Disabling refresh HTTP cache from GET '%s': %v", e.Endpoint, urlErr)
-				return
-			}
+	for thisTime := range ticker {
+		thisTimeInUTC := thisTime.UTC()
 
-			// Parse the url query string
-			urlQuery := endpointUrl.Query()
+		// Parse the endpoint url defined
+		endpointUrl, urlErr := url.Parse(e.Endpoint)
 
-			// See the last-modified query param
-			urlQuery.Set("last-modified", e.lastUpdate.Format(time.RFC3339))
+		// Error with url parsing
+		if urlErr != nil {
+			glog.Errorf("Disabling refresh HTTP cache from GET '%s': %v", e.Endpoint, urlErr)
+			return
+		}
 
-			// Rebuild
-			endpointUrl.RawQuery = urlQuery.Encode()
+		// Parse the url query string
+		urlQuery := endpointUrl.Query()
 
-			// Convert to string
-			endpoint := endpointUrl.String()
+		// See the last-modified query param
+		urlQuery.Set("last-modified", e.lastUpdate.Format(time.RFC3339))
 
-			glog.Infof("Refreshing HTTP cache from GET '%s'", endpoint)
+		// Rebuild
+		endpointUrl.RawQuery = urlQuery.Encode()
 
-			ctx, cancel := e.ctxProducer()
-			resp, err := ctxhttp.Get(ctx, e.client, endpoint)
-			if respObj, ok := e.parse(endpoint, resp, err); ok {
-				invalidations := events.Invalidation{
-					Requests:  extractInvalidations(respObj.StoredRequests),
-					Imps:      extractInvalidations(respObj.StoredImps),
-					Responses: extractInvalidations(respObj.StoredResponses),
-					Accounts:  extractInvalidations(respObj.Accounts),
-				}
-				if len(respObj.StoredRequests) > 0 || len(respObj.StoredImps) > 0 || len(respObj.StoredResponses) > 0 || len(respObj.Accounts) > 0 {
-					e.saves <- events.Save{
-						Requests:  respObj.StoredRequests,
-						Imps:      respObj.StoredImps,
-						Responses: respObj.StoredResponses,
-						Accounts:  respObj.Accounts,
-					}
-				}
-				if len(invalidations.Requests) > 0 || len(invalidations.Imps) > 0 || len(invalidations.Responses) > 0 || len(invalidations.Accounts) > 0 {
-					e.invalidations <- invalidations
+		// Convert to string
+		endpoint := endpointUrl.String()
+
+		glog.Infof("Refreshing HTTP cache from GET '%s'", endpoint)
+
+		ctx, cancel := e.ctxProducer()
+		resp, err := ctxhttp.Get(ctx, e.client, endpoint)
+		if respObj, ok := e.parse(endpoint, resp, err); ok {
+			invalidations := events.Invalidation{
+				Requests:  extractInvalidations(respObj.StoredRequests),
+				Imps:      extractInvalidations(respObj.StoredImps),
+				Responses: extractInvalidations(respObj.StoredResponses),
+				Accounts:  extractInvalidations(respObj.Accounts),
+			}
+			if len(respObj.StoredRequests) > 0 || len(respObj.StoredImps) > 0 || len(respObj.StoredResponses) > 0 || len(respObj.Accounts) > 0 {
+				e.saves <- events.Save{
+					Requests:  respObj.StoredRequests,
+					Imps:      respObj.StoredImps,
+					Responses: respObj.StoredResponses,
+					Accounts:  respObj.Accounts,
 				}
-				e.lastUpdate = thisTimeInUTC
 			}
-			cancel()
+			if len(invalidations.Requests) > 0 || len(invalidations.Imps) > 0 || len(invalidations.Responses) > 0 || len(invalidations.Accounts) > 0 {
+				e.invalidations <- invalidations
+			}
+			e.lastUpdate = thisTimeInUTC
 		}
+		cancel()
 	}
 }
 


Test patch:
diff --git a/adapters/medianet/medianettest/exemplary/multi-imps.json b/adapters/medianet/medianettest/exemplary/multi-imps.json
index 3aca4c1d..c48c4fdd 100644
--- a/adapters/medianet/medianettest/exemplary/multi-imps.json
+++ b/adapters/medianet/medianettest/exemplary/multi-imps.json
@@ -100,7 +100,8 @@
                                     "adm": "some-test-ad",
                                     "crid": "test-crid",
                                     "h": 50,
-                                    "w": 320
+                                    "w": 320,
+                                    "mtype": 1
                                 }
                             ]
                         }
@@ -123,7 +124,8 @@
                         "adm": "some-test-ad",
                         "crid": "test-crid",
                         "w": 320,
-                        "h": 50
+                        "h": 50,
+                        "mtype": 1
                     },
                     "type": "banner"
                 }
diff --git a/adapters/medianet/medianettest/exemplary/simple-banner.json b/adapters/medianet/medianettest/exemplary/simple-banner.json
index cff32e27..87ff3ec1 100644
--- a/adapters/medianet/medianettest/exemplary/simple-banner.json
+++ b/adapters/medianet/medianettest/exemplary/simple-banner.json
@@ -66,7 +66,8 @@
                                     "adm": "some-test-ad",
                                     "crid": "test-crid",
                                     "h": 50,
-                                    "w": 320
+                                    "w": 320,
+                                    "mtype": 1
                                 }
                             ]
                         }
@@ -89,7 +90,8 @@
                         "adm": "some-test-ad",
                         "crid": "test-crid",
                         "w": 320,
-                        "h": 50
+                        "h": 50,
+                        "mtype": 1
                     },
                     "type": "banner"
                 }
diff --git a/adapters/medianet/medianettest/exemplary/simple-video.json b/adapters/medianet/medianettest/exemplary/simple-video.json
index ffd0a0ac..8f7f77fb 100644
--- a/adapters/medianet/medianettest/exemplary/simple-video.json
+++ b/adapters/medianet/medianettest/exemplary/simple-video.json
@@ -71,7 +71,8 @@
                                     "adm": "some-test-ad",
                                     "crid": "test-crid",
                                     "w": 320,
-                                    "h": 480
+                                    "h": 480,
+                                    "mtype": 2
                                 }
                             ]
                         }
@@ -92,7 +93,8 @@
                         "adm": "some-test-ad",
                         "crid": "test-crid",
                         "w": 320,
-                        "h": 480
+                        "h": 480,
+                        "mtype": 2
                     },
                     "type": "video"
                 }
diff --git a/adapters/medianet/medianettest/supplemental/valid-req-200-bid-response-from-mnet.json b/adapters/medianet/medianettest/supplemental/valid-req-200-bid-response-from-mnet.json
index 99ac6cb8..61da5b31 100644
--- a/adapters/medianet/medianettest/supplemental/valid-req-200-bid-response-from-mnet.json
+++ b/adapters/medianet/medianettest/supplemental/valid-req-200-bid-response-from-mnet.json
@@ -101,7 +101,8 @@
                 "cid": "987",
                 "crid": "12345678",
                 "h": 250,
-                "w": 300
+                "w": 300,
+                "mtype": 1
               }
             ]
           }
@@ -123,7 +124,8 @@
         "cid": "987",
         "crid": "12345678",
         "h": 250,
-        "w": 300
+        "w": 300,
+        "mtype": 1
       },
       "type": "banner"
     }]
diff --git a/adapters/pubmatic/pubmatictest/supplemental/impExtData.json b/adapters/pubmatic/pubmatictest/supplemental/impExt.json
similarity index 97%
rename from adapters/pubmatic/pubmatictest/supplemental/impExtData.json
rename to adapters/pubmatic/pubmatictest/supplemental/impExt.json
index 17bb47fe..368dd2fa 100644
--- a/adapters/pubmatic/pubmatictest/supplemental/impExtData.json
+++ b/adapters/pubmatic/pubmatictest/supplemental/impExt.json
@@ -32,7 +32,8 @@
                             "rugby",
                             "cricket"
                         ]
-                    }
+                    },
+                    "gpid":"/1111/home"
                 }
             }
         ],
@@ -68,7 +69,8 @@
                             },
                             "ext": {
                                 "dfp_ad_unit_code": "/1111/home",
-                                "key_val": "k1=v1|k2=v2|sport=rugby,cricket"
+                                "key_val": "k1=v1|k2=v2|sport=rugby,cricket",
+                                "gpid":"/1111/home"
                             }
                         }
                     ],
diff --git a/adapters/smarthub/smarthub_test.go b/adapters/smarthub/smarthub_test.go
index d231f777..7194421a 100644
--- a/adapters/smarthub/smarthub_test.go
+++ b/adapters/smarthub/smarthub_test.go
@@ -11,7 +11,7 @@ import (
 
 func TestJsonSamples(t *testing.T) {
 	bidder, buildErr := Builder(openrtb_ext.BidderSmartHub, config.Adapter{
-		Endpoint: "http://{{.Host}}-prebid.smart-hub.io/?seat={{.AccountID}}&token={{.SourceId}}"}, config.Server{ExternalUrl: "http://hosturl.com", GvlID: 1, DataCenter: "2"})
+		Endpoint: "http://prebid.smart-hub.io/pbserver?partnerName={{.Host}}&seat={{.AccountID}}&token={{.SourceId}}"}, config.Server{ExternalUrl: "http://hosturl.com", GvlID: 1, DataCenter: "2"})
 
 	assert.NoError(t, buildErr)
 	adapterstest.RunJSONBidderTest(t, "smarthubtest", bidder)
diff --git a/adapters/smarthub/smarthubtest/exemplary/banner.json b/adapters/smarthub/smarthubtest/exemplary/banner.json
index 3f951204..66eef5e6 100644
--- a/adapters/smarthub/smarthubtest/exemplary/banner.json
+++ b/adapters/smarthub/smarthubtest/exemplary/banner.json
@@ -46,7 +46,7 @@
   "httpCalls": [
     {
       "expectedRequest": {
-        "uri": "http://partnertest-prebid.smart-hub.io/?seat=9Q20EdGxzgWdfPYShScl&token=zpl5iB5Ugpe9ofVTzi44WzfjZZYq1yer",
+        "uri": "http://prebid.smart-hub.io/pbserver?partnerName=partnertest&seat=9Q20EdGxzgWdfPYShScl&token=zpl5iB5Ugpe9ofVTzi44WzfjZZYq1yer",
         "body": {
           "id": "id",
           "imp": [
diff --git a/adapters/smarthub/smarthubtest/exemplary/native.json b/adapters/smarthub/smarthubtest/exemplary/native.json
index 49091cc7..3360ac05 100644
--- a/adapters/smarthub/smarthubtest/exemplary/native.json
+++ b/adapters/smarthub/smarthubtest/exemplary/native.json
@@ -46,7 +46,7 @@
   "httpCalls": [
     {
       "expectedRequest": {
-        "uri": "http://partnertest-prebid.smart-hub.io/?seat=9Q20EdGxzgWdfPYShScl&token=zpl5iB5Ugpe9ofVTzi44WzfjZZYq1yer",
+        "uri": "http://prebid.smart-hub.io/pbserver?partnerName=partnertest&seat=9Q20EdGxzgWdfPYShScl&token=zpl5iB5Ugpe9ofVTzi44WzfjZZYq1yer",
         "body": {
           "id": "id",
           "imp": [
diff --git a/adapters/smarthub/smarthubtest/exemplary/video.json b/adapters/smarthub/smarthubtest/exemplary/video.json
index 8fb8f8b6..30134dce 100644
--- a/adapters/smarthub/smarthubtest/exemplary/video.json
+++ b/adapters/smarthub/smarthubtest/exemplary/video.json
@@ -66,7 +66,7 @@
   "httpCalls": [
     {
       "expectedRequest": {
-        "uri": "http://partnertest-prebid.smart-hub.io/?seat=9Q20EdGxzgWdfPYShScl&token=zpl5iB5Ugpe9ofVTzi44WzfjZZYq1yer",
+        "uri": "http://prebid.smart-hub.io/pbserver?partnerName=partnertest&seat=9Q20EdGxzgWdfPYShScl&token=zpl5iB5Ugpe9ofVTzi44WzfjZZYq1yer",
         "body": {
           "id": "id",
           "imp": [
diff --git a/adapters/smarthub/smarthubtest/supplemental/bad-response.json b/adapters/smarthub/smarthubtest/supplemental/bad-response.json
index 93f97296..09e5d9ab 100644
--- a/adapters/smarthub/smarthubtest/supplemental/bad-response.json
+++ b/adapters/smarthub/smarthubtest/supplemental/bad-response.json
@@ -46,7 +46,7 @@
   "httpCalls": [
     {
       "expectedRequest": {
-        "uri": "http://partnertest-prebid.smart-hub.io/?seat=9Q20EdGxzgWdfPYShScl&token=zpl5iB5Ugpe9ofVTzi44WzfjZZYq1yer",
+        "uri": "http://prebid.smart-hub.io/pbserver?partnerName=partnertest&seat=9Q20EdGxzgWdfPYShScl&token=zpl5iB5Ugpe9ofVTzi44WzfjZZYq1yer",
         "body": {
           "id": "id",
           "imp": [
diff --git a/adapters/smarthub/smarthubtest/supplemental/empty-seatbid-0-bid.json b/adapters/smarthub/smarthubtest/supplemental/empty-seatbid-0-bid.json
index 0f527c39..c8cbc9ef 100644
--- a/adapters/smarthub/smarthubtest/supplemental/empty-seatbid-0-bid.json
+++ b/adapters/smarthub/smarthubtest/supplemental/empty-seatbid-0-bid.json
@@ -46,7 +46,7 @@
   "httpCalls": [
     {
       "expectedRequest": {
-        "uri": "http://partnertest-prebid.smart-hub.io/?seat=9Q20EdGxzgWdfPYShScl&token=zpl5iB5Ugpe9ofVTzi44WzfjZZYq1yer",
+        "uri": "http://prebid.smart-hub.io/pbserver?partnerName=partnertest&seat=9Q20EdGxzgWdfPYShScl&token=zpl5iB5Ugpe9ofVTzi44WzfjZZYq1yer",
         "body": {
           "id": "id",
           "imp": [
diff --git a/adapters/smarthub/smarthubtest/supplemental/empty-seatbid.json b/adapters/smarthub/smarthubtest/supplemental/empty-seatbid.json
index 6c92c3f6..1af890de 100644
--- a/adapters/smarthub/smarthubtest/supplemental/empty-seatbid.json
+++ b/adapters/smarthub/smarthubtest/supplemental/empty-seatbid.json
@@ -46,7 +46,7 @@
   "httpCalls": [
     {
       "expectedRequest": {
-        "uri": "http://partnertest-prebid.smart-hub.io/?seat=9Q20EdGxzgWdfPYShScl&token=zpl5iB5Ugpe9ofVTzi44WzfjZZYq1yer",
+        "uri": "http://prebid.smart-hub.io/pbserver?partnerName=partnertest&seat=9Q20EdGxzgWdfPYShScl&token=zpl5iB5Ugpe9ofVTzi44WzfjZZYq1yer",
         "body": {
           "id": "id",
           "imp": [
diff --git a/adapters/smarthub/smarthubtest/supplemental/status-204.json b/adapters/smarthub/smarthubtest/supplemental/status-204.json
index 31efa867..56922fc6 100644
--- a/adapters/smarthub/smarthubtest/supplemental/status-204.json
+++ b/adapters/smarthub/smarthubtest/supplemental/status-204.json
@@ -46,7 +46,7 @@
   "httpCalls": [
     {
       "expectedRequest": {
-        "uri": "http://partnertest-prebid.smart-hub.io/?seat=9Q20EdGxzgWdfPYShScl&token=zpl5iB5Ugpe9ofVTzi44WzfjZZYq1yer",
+        "uri": "http://prebid.smart-hub.io/pbserver?partnerName=partnertest&seat=9Q20EdGxzgWdfPYShScl&token=zpl5iB5Ugpe9ofVTzi44WzfjZZYq1yer",
         "body": {
           "id": "id",
           "imp": [
diff --git a/adapters/smarthub/smarthubtest/supplemental/status-400.json b/adapters/smarthub/smarthubtest/supplemental/status-400.json
index d0d8aacf..5ef22853 100644
--- a/adapters/smarthub/smarthubtest/supplemental/status-400.json
+++ b/adapters/smarthub/smarthubtest/supplemental/status-400.json
@@ -46,7 +46,7 @@
   "httpCalls": [
     {
       "expectedRequest": {
-        "uri": "http://partnertest-prebid.smart-hub.io/?seat=9Q20EdGxzgWdfPYShScl&token=zpl5iB5Ugpe9ofVTzi44WzfjZZYq1yer",
+        "uri": "http://prebid.smart-hub.io/pbserver?partnerName=partnertest&seat=9Q20EdGxzgWdfPYShScl&token=zpl5iB5Ugpe9ofVTzi44WzfjZZYq1yer",
         "body": {
           "id": "id",
           "imp": [
diff --git a/adapters/smarthub/smarthubtest/supplemental/status-503.json b/adapters/smarthub/smarthubtest/supplemental/status-503.json
index f09eb93c..140b8e99 100644
--- a/adapters/smarthub/smarthubtest/supplemental/status-503.json
+++ b/adapters/smarthub/smarthubtest/supplemental/status-503.json
@@ -46,7 +46,7 @@
   "httpCalls": [
     {
       "expectedRequest": {
-        "uri": "http://partnertest-prebid.smart-hub.io/?seat=9Q20EdGxzgWdfPYShScl&token=zpl5iB5Ugpe9ofVTzi44WzfjZZYq1yer",
+        "uri": "http://prebid.smart-hub.io/pbserver?partnerName=partnertest&seat=9Q20EdGxzgWdfPYShScl&token=zpl5iB5Ugpe9ofVTzi44WzfjZZYq1yer",
         "body": {
           "id": "id",
           "imp": [
diff --git a/adapters/smarthub/smarthubtest/supplemental/unexpected-status.json b/adapters/smarthub/smarthubtest/supplemental/unexpected-status.json
index 4f2f35e2..e05c7ded 100644
--- a/adapters/smarthub/smarthubtest/supplemental/unexpected-status.json
+++ b/adapters/smarthub/smarthubtest/supplemental/unexpected-status.json
@@ -46,7 +46,7 @@
   "httpCalls": [
     {
       "expectedRequest": {
-        "uri": "http://partnertest-prebid.smart-hub.io/?seat=9Q20EdGxzgWdfPYShScl&token=zpl5iB5Ugpe9ofVTzi44WzfjZZYq1yer",
+        "uri": "http://prebid.smart-hub.io/pbserver?partnerName=partnertest&seat=9Q20EdGxzgWdfPYShScl&token=zpl5iB5Ugpe9ofVTzi44WzfjZZYq1yer",
         "body": {
           "id": "id",
           "imp": [
diff --git a/adapters/smarthub/smarthubtest/supplemental/wrong-bidtype.json b/adapters/smarthub/smarthubtest/supplemental/wrong-bidtype.json
index 81a71666..680dd051 100644
--- a/adapters/smarthub/smarthubtest/supplemental/wrong-bidtype.json
+++ b/adapters/smarthub/smarthubtest/supplemental/wrong-bidtype.json
@@ -46,7 +46,7 @@
   "httpCalls": [
     {
       "expectedRequest": {
-        "uri": "http://partnertest-prebid.smart-hub.io/?seat=9Q20EdGxzgWdfPYShScl&token=zpl5iB5Ugpe9ofVTzi44WzfjZZYq1yer",
+        "uri": "http://prebid.smart-hub.io/pbserver?partnerName=partnertest&seat=9Q20EdGxzgWdfPYShScl&token=zpl5iB5Ugpe9ofVTzi44WzfjZZYq1yer",
         "body": {
           "id": "id",
           "imp": [
diff --git a/adapters/tappx/tappx_test.go b/adapters/tappx/tappx_test.go
index b3c6f3fe..803dfa5b 100644
--- a/adapters/tappx/tappx_test.go
+++ b/adapters/tappx/tappx_test.go
@@ -8,6 +8,7 @@ import (
 	"github.com/prebid/prebid-server/v2/config"
 	"github.com/prebid/prebid-server/v2/openrtb_ext"
 	"github.com/stretchr/testify/assert"
+	"github.com/stretchr/testify/require"
 )
 
 func TestJsonSamples(t *testing.T) {
@@ -38,13 +39,13 @@ func TestTsValue(t *testing.T) {
 
 	bidderTappx := bidder.(*TappxAdapter)
 
-	var test int
-	test = 0
+	test := 0
 	var tappxExt openrtb_ext.ExtImpTappx
 	tappxExt.Endpoint = "DUMMYENDPOINT"
 	tappxExt.TappxKey = "dummy-tappx-key"
 
 	url, err := bidderTappx.buildEndpointURL(&tappxExt, test)
+	require.NoError(t, err, "buildEndpointURL")
 
 	match, err := regexp.MatchString(`http://ssp\.api\.tappx\.com/rtb/v2/DUMMYENDPOINT\?tappxkey=dummy-tappx-key&ts=[0-9]{13}&type_cnn=prebid&v=1\.5`, url)
 	if err != nil {
diff --git a/adapters/yeahmobi/yeahmobitest/exemplary/simple-video.json b/adapters/yeahmobi/yeahmobitest/exemplary/simple-video.json
index cda8ebe4..af07de8f 100644
--- a/adapters/yeahmobi/yeahmobitest/exemplary/simple-video.json
+++ b/adapters/yeahmobi/yeahmobitest/exemplary/simple-video.json
@@ -20,7 +20,6 @@
       }
     ]
   },
-
   "httpCalls": [
     {
       "expectedRequest": {
@@ -29,7 +28,7 @@
           "id": "test-request-id",
           "imp": [
             {
-              "id":"test-imp-id",
+              "id": "test-imp-id",
               "video": {
                 "w": 300,
                 "h": 250,
@@ -46,7 +45,9 @@
             }
           ]
         },
-        "impIDs":["test-imp-id"]
+        "impIDs": [
+          "test-imp-id"
+        ]
       },
       "mockResponse": {
         "status": 200,
@@ -55,13 +56,20 @@
           "seatbid": [
             {
               "seat": "ttx",
-              "bid": [{
-                "id": "8ee514f1-b2b8-4abb-89fd-084437d1e800",
-                "impid": "test-imp-id",
-                "price": 1.2,
-                "adm": "some-ads",
-                "crid": "crid_testid"
-              }]
+              "bid": [
+                {
+                  "id": "8ee514f1-b2b8-4abb-89fd-084437d1e800",
+                  "impid": "test-imp-id",
+                  "price": 1.2,
+                  "adm": "some-ads",
+                  "crid": "crid_testid",
+                  "ext": {
+                    "video": {
+                      "duration": 300
+                    }
+                  }
+                }
+              ]
             }
           ],
           "cur": "USD"
@@ -69,7 +77,6 @@
       }
     }
   ],
-
   "expectedBidResponses": [
     {
       "currency": "USD",
@@ -80,9 +87,17 @@
             "impid": "test-imp-id",
             "price": 1.2,
             "adm": "some-ads",
-            "crid": "crid_testid"
+            "crid": "crid_testid",
+            "ext": {
+              "video": {
+                "duration": 300
+              }
+            }
           },
-          "type": "video"
+          "type": "video",
+          "video": {
+            "duration": 300
+          }
         }
       ]
     }
diff --git a/endpoints/cookie_sync_test.go b/endpoints/cookie_sync_test.go
index 35d7dd4b..edd1958f 100644
--- a/endpoints/cookie_sync_test.go
+++ b/endpoints/cookie_sync_test.go
@@ -2221,8 +2221,8 @@ type FakeAccountsFetcher struct {
 	AccountData map[string]json.RawMessage
 }
 
-func (f FakeAccountsFetcher) FetchAccount(ctx context.Context, defaultAccountJSON json.RawMessage, accountID string) (json.RawMessage, []error) {
-	defaultAccountJSON = json.RawMessage(`{"disabled":false}`)
+func (f FakeAccountsFetcher) FetchAccount(ctx context.Context, _ json.RawMessage, accountID string) (json.RawMessage, []error) {
+	defaultAccountJSON := json.RawMessage(`{"disabled":false}`)
 
 	if accountID == metrics.PublisherUnknown {
 		return defaultAccountJSON, nil
diff --git a/endpoints/openrtb2/auction_test.go b/endpoints/openrtb2/auction_test.go
index ee82ffdf..fbeddf46 100644
--- a/endpoints/openrtb2/auction_test.go
+++ b/endpoints/openrtb2/auction_test.go
@@ -72,9 +72,13 @@ func TestJsonSampleRequests(t *testing.T) {
 			"invalid-native",
 		},
 		{
-			"Makes sure we handle (default) aliased bidders properly",
+			"Makes sure we handle aliased bidders properly",
 			"aliased",
 		},
+		{
+			"Makes sure we handle alternate bidder codes properly",
+			"alternate-bidder-code",
+		},
 		{
 			"Asserts we return 500s on requests referencing accounts with malformed configs.",
 			"account-malformed",
diff --git a/endpoints/openrtb2/test_utils.go b/endpoints/openrtb2/test_utils.go
index 6fedb73c..66eb64fa 100644
--- a/endpoints/openrtb2/test_utils.go
+++ b/endpoints/openrtb2/test_utils.go
@@ -941,6 +941,7 @@ type mockBidderHandler struct {
 	Currency   string  `json:"currency"`
 	Price      float64 `json:"price"`
 	DealID     string  `json:"dealid"`
+	Seat       string  `json:"seat"`
 }
 
 func (b mockBidderHandler) bid(w http.ResponseWriter, req *http.Request) {
@@ -999,6 +1000,7 @@ func (b mockBidderHandler) bid(w http.ResponseWriter, req *http.Request) {
 type mockAdapter struct {
 	mockServerURL string
 	Server        config.Server
+	seat          string
 }
 
 func Builder(bidderName openrtb_ext.BidderName, config config.Adapter, server config.Server) (adapters.Bidder, error) {
@@ -1064,6 +1066,9 @@ func (a mockAdapter) MakeBids(request *openrtb2.BidRequest, requestData *adapter
 						Bid:     &seatBid.Bid[i],
 						BidType: openrtb_ext.BidTypeBanner,
 					}
+					if len(a.seat) > 0 {
+						b.Seat = openrtb_ext.BidderName(a.seat)
+					}
 					rv.Bids = append(rv.Bids, b)
 				}
 			}
@@ -1091,6 +1096,24 @@ func getBidderInfos(disabledAdapters []string, biddersNames []openrtb_ext.Bidder
 	return biddersInfos
 }
 
+func enableBidders(bidderInfos config.BidderInfos) {
+	for name, bidderInfo := range bidderInfos {
+		if bidderInfo.Disabled {
+			bidderInfo.Disabled = false
+			bidderInfos[name] = bidderInfo
+		}
+	}
+}
+
+func disableBidders(disabledAdapters []string, bidderInfos config.BidderInfos) {
+	for _, disabledAdapter := range disabledAdapters {
+		if bidderInfo, ok := bidderInfos[disabledAdapter]; ok {
+			bidderInfo.Disabled = true
+			bidderInfos[disabledAdapter] = bidderInfo
+		}
+	}
+}
+
 func newBidderInfo(isDisabled bool) config.BidderInfo {
 	return config.BidderInfo{
 		Disabled: isDisabled,
@@ -1179,7 +1202,7 @@ func buildTestExchange(testCfg *testConfigValues, adapterMap map[openrtb_ext.Bid
 	}
 	for _, mockBidder := range testCfg.MockBidders {
 		bidServer := httptest.NewServer(http.HandlerFunc(mockBidder.bid))
-		bidderAdapter := mockAdapter{mockServerURL: bidServer.URL}
+		bidderAdapter := mockAdapter{mockServerURL: bidServer.URL, seat: mockBidder.Seat}
 		bidderName := openrtb_ext.BidderName(mockBidder.BidderName)
 
 		adapterMap[bidderName] = exchange.AdaptBidder(bidderAdapter, bidServer.Client(), &config.Configuration{}, &metricsConfig.NilMetricsEngine{}, bidderName, nil, "")
@@ -1231,7 +1254,9 @@ func buildTestEndpoint(test testCase, cfg *config.Configuration) (httprouter.Han
 		paramValidator = mockBidderParamValidator{}
 	}
 
-	bidderInfos := getBidderInfos(test.Config.DisabledAdapters, openrtb_ext.CoreBidderNames())
+	bidderInfos, _ := config.LoadBidderInfoFromDisk("../../static/bidder-info")
+	enableBidders(bidderInfos)
+	disableBidders(test.Config.DisabledAdapters, bidderInfos)
 	bidderMap := exchange.GetActiveBidders(bidderInfos)
 	disabledBidders := exchange.GetDisabledBidderWarningMessages(bidderInfos)
 	met := &metricsConfig.NilMetricsEngine{}
@@ -1267,8 +1292,9 @@ func buildTestEndpoint(test testCase, cfg *config.Configuration) (httprouter.Han
 
 	accountFetcher := &mockAccountFetcher{
 		data: map[string]json.RawMessage{
-			"malformed_acct": json.RawMessage(`{"disabled":"invalid type"}`),
-			"disabled_acct":  json.RawMessage(`{"disabled":true}`),
+			"malformed_acct":             json.RawMessage(`{"disabled":"invalid type"}`),
+			"disabled_acct":              json.RawMessage(`{"disabled":true}`),
+			"alternate_bidder_code_acct": json.RawMessage(`{"disabled":false,"alternatebiddercodes":{"enabled":true,"bidders":{"appnexus":{"enabled":true,"allowedbiddercodes":["groupm"]}}}}`),
 		},
 	}
 
diff --git a/exchange/bidder_test.go b/exchange/bidder_test.go
index 9f092b7d..76ffe95d 100644
--- a/exchange/bidder_test.go
+++ b/exchange/bidder_test.go
@@ -2414,10 +2414,7 @@ type goodMultiHTTPCallsBidder struct {
 func (bidder *goodMultiHTTPCallsBidder) MakeRequests(request *openrtb2.BidRequest, reqInfo *adapters.ExtraRequestInfo) ([]*adapters.RequestData, []error) {
 	bidder.bidRequest = request
 	response := make([]*adapters.RequestData, len(bidder.httpRequest))
-
-	for i, r := range bidder.httpRequest {
-		response[i] = r
-	}
+	copy(response, bidder.httpRequest)
 	return response, nil
 }
 
diff --git a/exchange/exchange_test.go b/exchange/exchange_test.go
index ffc338bf..5849dbc3 100644
--- a/exchange/exchange_test.go
+++ b/exchange/exchange_test.go
@@ -1638,7 +1638,7 @@ func TestBidResponseCurrency(t *testing.T) {
 					Price: 9.517803,
 					W:     300,
 					H:     250,
-					Ext:   json.RawMessage(`{"origbidcpm":9.517803,"prebid":{"meta":{"adaptercode":"appnexus"},"type":"banner"}}`),
+					Ext:   json.RawMessage(`{"origbidcpm":9.517803,"prebid":{"meta":{},"type":"banner"}}`),
 				},
 			},
 		},
@@ -1768,7 +1768,7 @@ func TestBidResponseImpExtInfo(t *testing.T) {
 		H:     250,
 		Ext:   nil,
 	}
-	aPbsOrtbBidArr := []*entities.PbsOrtbBid{{Bid: sampleBid, BidType: openrtb_ext.BidTypeVideo}}
+	aPbsOrtbBidArr := []*entities.PbsOrtbBid{{Bid: sampleBid, BidType: openrtb_ext.BidTypeVideo, AdapterCode: openrtb_ext.BidderAppnexus}}
 
 	adapterBids := map[openrtb_ext.BidderName]*entities.PbsOrtbSeatBid{
 		openrtb_ext.BidderName("appnexus"): {
@@ -4144,7 +4144,7 @@ func TestStoredAuctionResponses(t *testing.T) {
 		SeatBid: []openrtb2.SeatBid{
 			{
 				Bid: []openrtb2.Bid{
-					{ID: "bid_id", ImpID: "impression-id", Ext: json.RawMessage(`{"origbidcpm":0,"prebid":{"meta":{"adaptercode":"appnexus"},"type":"video"}}`)},
+					{ID: "bid_id", ImpID: "impression-id", Ext: json.RawMessage(`{"origbidcpm":0,"prebid":{"meta":{},"type":"video"}}`)},
 				},
 				Seat: "appnexus",
 			},
@@ -5231,6 +5231,7 @@ func TestGetAllBids(t *testing.T) {
 									ID: "1",
 								},
 								OriginalBidCur: "USD",
+								AdapterCode:    openrtb_ext.BidderPubmatic,
 							},
 						},
 						Currency:  "USD",
@@ -5299,6 +5300,7 @@ func TestGetAllBids(t *testing.T) {
 									ID: "1",
 								},
 								OriginalBidCur: "USD",
+								AdapterCode:    openrtb_ext.BidderPubmatic,
 							},
 						},
 						Currency:  "USD",
@@ -5312,6 +5314,7 @@ func TestGetAllBids(t *testing.T) {
 									ID: "2",
 								},
 								OriginalBidCur: "USD",
+								AdapterCode:    openrtb_ext.BidderPubmatic,
 							},
 						},
 						Currency:  "USD",
@@ -5379,6 +5382,7 @@ func TestGetAllBids(t *testing.T) {
 									ID: "2",
 								},
 								OriginalBidCur: "USD",
+								AdapterCode:    openrtb_ext.BidderPubmatic,
 							},
 						},
 						Currency:  "USD",
diff --git a/exchange/exchangetest/alternate-bidder-codes.json b/exchange/exchangetest/alternate-bidder-codes.json
index c2e6f95a..a2272488 100644
--- a/exchange/exchangetest/alternate-bidder-codes.json
+++ b/exchange/exchangetest/alternate-bidder-codes.json
@@ -95,9 +95,7 @@
                   "price": 0.71
                 },
                 "bidType": "video",
-                "bidMeta": {
-                  "adaptercode": "pubmatic"
-                }
+                "bidMeta": {}
               }
             ],
             "seat": "pubmatic"
@@ -111,9 +109,7 @@
                   "price": 0.51
                 },
                 "bidType": "video",
-                "bidMeta": {
-                  "adaptercode": "pubmatic"
-                }
+                "bidMeta": {}
               }
             ],
             "seat": "groupm"
@@ -164,9 +160,7 @@
                   "price": 0.3
                 },
                 "bidType": "banner",
-                "bidMeta": {
-                  "adaptercode": "appnexus"
-                }
+                "bidMeta": {}
               }
             ],
             "seat": "appnexus"
@@ -181,7 +175,6 @@
                 },
                 "bidType": "banner",
                 "bidMeta": {
-                  "adaptercode": "appnexus"
                 }
               }
             ],
@@ -205,9 +198,7 @@
               "ext": {
                 "origbidcpm": 0.51,
                 "prebid": {
-                  "meta": {
-                    "adaptercode": "groupm"
-                  },
+                  "meta": {},
                   "type": "video"
                 }
               }
@@ -220,7 +211,6 @@
                 "origbidcpm": 0.3,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "groupm"
                   },
                   "type": "banner"
                 }
@@ -239,7 +229,6 @@
                 "origbidcpm": 0.71,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "pubmatic"
                   },
                   "type": "video"
                 }
@@ -258,7 +247,6 @@
                 "origbidcpm": 0.3,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "type": "banner"
                 }
diff --git a/exchange/exchangetest/append-bidder-names.json b/exchange/exchangetest/append-bidder-names.json
index 14f1181e..bc453213 100644
--- a/exchange/exchangetest/append-bidder-names.json
+++ b/exchange/exchangetest/append-bidder-names.json
@@ -138,7 +138,6 @@
                                 "prebid": {
                                     "type": "video",
                                     "meta": {
-                                        "adaptercode":"appnexus"
                                     },
                                     "targeting": {
                                         "hb_bidder": "appnexus",
@@ -166,7 +165,6 @@
                                 "origbidcpm": 0.6,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode":"appnexus"
                                     },
                                     "targeting": {
                                         "hb_bidder": "appnexus",
diff --git a/exchange/exchangetest/bid-consolidation-test.json b/exchange/exchangetest/bid-consolidation-test.json
index 61dbae5e..5222b680 100644
--- a/exchange/exchangetest/bid-consolidation-test.json
+++ b/exchange/exchangetest/bid-consolidation-test.json
@@ -128,7 +128,6 @@
                 "origbidcpm": 0.4,
                 "prebid": {
                   "meta": {
-                    "adaptercode":"rubicon"
                   },
                   "type": "video"
                 }
@@ -150,7 +149,6 @@
                 "origbidcpm": 0.3,
                 "prebid": {
                   "meta": {
-                    "adaptercode":"appnexus"
                   },
                   "type": "video"
                 }
@@ -167,7 +165,6 @@
                 "origbidcpm": 0.6,
                 "prebid": {
                   "meta": {
-                    "adaptercode":"appnexus"
                   },
                   "type": "video"
                 }
diff --git a/exchange/exchangetest/bid-ext-prebid-collision.json b/exchange/exchangetest/bid-ext-prebid-collision.json
index f6a2a065..e38637a4 100644
--- a/exchange/exchangetest/bid-ext-prebid-collision.json
+++ b/exchange/exchangetest/bid-ext-prebid-collision.json
@@ -100,7 +100,6 @@
                                 "origbidcpm": 0.3,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode":"appnexus"
                                     },
                                     "type": "video"
                                 }
diff --git a/exchange/exchangetest/bid-ext.json b/exchange/exchangetest/bid-ext.json
index f2416d6f..1d66e7d9 100644
--- a/exchange/exchangetest/bid-ext.json
+++ b/exchange/exchangetest/bid-ext.json
@@ -97,7 +97,6 @@
                                 "someField": "someValue",
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode":"appnexus"
                                     },
                                     "type": "video"
                                 }
diff --git a/exchange/exchangetest/bid_response_validation_enforce_one_bid_rejected.json b/exchange/exchangetest/bid_response_validation_enforce_one_bid_rejected.json
index 90484317..8c5d22e2 100644
--- a/exchange/exchangetest/bid_response_validation_enforce_one_bid_rejected.json
+++ b/exchange/exchangetest/bid_response_validation_enforce_one_bid_rejected.json
@@ -174,7 +174,6 @@
                                 "origbidcpm": 0.4,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode":"rubicon"
                                     },
                                     "type": "banner"
                                 }
diff --git a/exchange/exchangetest/bid_response_validation_warn_creative.json b/exchange/exchangetest/bid_response_validation_warn_creative.json
index 47546683..8d30c18c 100644
--- a/exchange/exchangetest/bid_response_validation_warn_creative.json
+++ b/exchange/exchangetest/bid_response_validation_warn_creative.json
@@ -170,7 +170,6 @@
                                 "origbidcpm": 0.3,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode":"appnexus"
                                     },
                                     "type": "banner"
                                 }
@@ -192,7 +191,6 @@
                                 "origbidcpm": 0.4,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode":"rubicon"
                                     },
                                     "type": "banner"
                                 }
diff --git a/exchange/exchangetest/bid_response_validation_warn_secure.json b/exchange/exchangetest/bid_response_validation_warn_secure.json
index 3c06f695..9d2af597 100644
--- a/exchange/exchangetest/bid_response_validation_warn_secure.json
+++ b/exchange/exchangetest/bid_response_validation_warn_secure.json
@@ -173,7 +173,6 @@
                                 "origbidcpm": 0.3,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode":"appnexus"
                                     },
                                     "type": "banner"
                                 }
@@ -196,7 +195,6 @@
                                 "origbidcpm": 0.4,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode":"rubicon"
                                     },
                                     "type": "banner"
                                 }
diff --git a/exchange/exchangetest/debuglog_disabled.json b/exchange/exchangetest/debuglog_disabled.json
index 5c0e029c..ce0669cf 100644
--- a/exchange/exchangetest/debuglog_disabled.json
+++ b/exchange/exchangetest/debuglog_disabled.json
@@ -146,7 +146,6 @@
                 "origbidcpm": 0.3,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "type": "video",
                   "targeting": {
@@ -175,7 +174,6 @@
                 "origbidcpm": 0.6,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "targeting": {
                     "hb_bidder": "appnexus",
diff --git a/exchange/exchangetest/debuglog_enabled.json b/exchange/exchangetest/debuglog_enabled.json
index 11a63f5d..71a0bc06 100644
--- a/exchange/exchangetest/debuglog_enabled.json
+++ b/exchange/exchangetest/debuglog_enabled.json
@@ -148,7 +148,6 @@
                 "origbidcpm": 0.3,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "type": "video",
                   "targeting": {
@@ -177,7 +176,6 @@
                 "origbidcpm": 0.6,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "targeting": {
                     "hb_bidder": "appnexus",
diff --git a/exchange/exchangetest/dsa-default-ignored.json b/exchange/exchangetest/dsa-default-ignored.json
index d70009e5..358bc6d1 100644
--- a/exchange/exchangetest/dsa-default-ignored.json
+++ b/exchange/exchangetest/dsa-default-ignored.json
@@ -126,7 +126,6 @@
                         "origbidcpm": 0.3,
                         "prebid": {
                             "meta": {
-                                "adaptercode": "appnexus"
                             },
                             "type": "video"
                         },
diff --git a/exchange/exchangetest/dsa-default.json b/exchange/exchangetest/dsa-default.json
index efac1441..cd8581e5 100644
--- a/exchange/exchangetest/dsa-default.json
+++ b/exchange/exchangetest/dsa-default.json
@@ -182,7 +182,6 @@
                         "origbidcpm": 0.3,
                         "prebid": {
                             "meta": {
-                                "adaptercode": "appnexus"
                             },
                             "type": "video"
                         },
diff --git a/exchange/exchangetest/dsa-not-required.json b/exchange/exchangetest/dsa-not-required.json
index f2a1f821..b3f75317 100644
--- a/exchange/exchangetest/dsa-not-required.json
+++ b/exchange/exchangetest/dsa-not-required.json
@@ -122,7 +122,6 @@
                         "origbidcpm": 0.3,
                         "prebid": {
                             "meta": {
-                                "adaptercode": "appnexus"
                             },
                             "type": "video"
                         }
diff --git a/exchange/exchangetest/dsa-required.json b/exchange/exchangetest/dsa-required.json
index d25efdc1..a3bccafc 100644
--- a/exchange/exchangetest/dsa-required.json
+++ b/exchange/exchangetest/dsa-required.json
@@ -195,7 +195,6 @@
                         "origbidcpm": 0.3,
                         "prebid": {
                             "meta": {
-                                "adaptercode": "appnexus"
                             },
                             "type": "video"
                         },
diff --git a/exchange/exchangetest/eidpermissions-allowed-alias.json b/exchange/exchangetest/eidpermissions-allowed-alias.json
index 3dfe4415..88692772 100644
--- a/exchange/exchangetest/eidpermissions-allowed-alias.json
+++ b/exchange/exchangetest/eidpermissions-allowed-alias.json
@@ -136,7 +136,6 @@
                                 "origbidcpm": 0.3,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "foo"
                                     },
                                     "type": "video"
                                 }
diff --git a/exchange/exchangetest/eidpermissions-allowed-case-insensitive.json b/exchange/exchangetest/eidpermissions-allowed-case-insensitive.json
index 459bb015..70d3d0be 100644
--- a/exchange/exchangetest/eidpermissions-allowed-case-insensitive.json
+++ b/exchange/exchangetest/eidpermissions-allowed-case-insensitive.json
@@ -133,7 +133,6 @@
                                 "origbidcpm": 0.3,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "appnexus"
                                     },
                                     "type": "video"
                                 }
diff --git a/exchange/exchangetest/eidpermissions-allowed.json b/exchange/exchangetest/eidpermissions-allowed.json
index 06b2d184..045e1246 100644
--- a/exchange/exchangetest/eidpermissions-allowed.json
+++ b/exchange/exchangetest/eidpermissions-allowed.json
@@ -133,7 +133,6 @@
                                 "origbidcpm": 0.3,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "appnexus"
                                     },
                                     "type": "video"
                                 }
diff --git a/exchange/exchangetest/eidpermissions-denied.json b/exchange/exchangetest/eidpermissions-denied.json
index 72431595..eb3e216e 100644
--- a/exchange/exchangetest/eidpermissions-denied.json
+++ b/exchange/exchangetest/eidpermissions-denied.json
@@ -120,7 +120,6 @@
                                 "origbidcpm": 0.3,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "appnexus"
                                     },
                                     "type": "video"
                                 }
diff --git a/exchange/exchangetest/events-bid-account-off-request-off.json b/exchange/exchangetest/events-bid-account-off-request-off.json
index 4ae1881b..48906439 100644
--- a/exchange/exchangetest/events-bid-account-off-request-off.json
+++ b/exchange/exchangetest/events-bid-account-off-request-off.json
@@ -80,7 +80,6 @@
                 "origbidcpm": 0.71,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "type": "banner"
                 }
@@ -97,7 +96,6 @@
                 "origbidcpm": 0.21,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "type": "banner"
                 }
diff --git a/exchange/exchangetest/events-bid-account-off-request-on.json b/exchange/exchangetest/events-bid-account-off-request-on.json
index 20606002..9166bb43 100644
--- a/exchange/exchangetest/events-bid-account-off-request-on.json
+++ b/exchange/exchangetest/events-bid-account-off-request-on.json
@@ -83,7 +83,6 @@
                 "origbidcpm": 0.71,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "type": "banner",
                   "events": {
@@ -104,7 +103,6 @@
                 "origbidcpm": 0.21,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "type": "banner",
                   "events": {
diff --git a/exchange/exchangetest/events-bid-account-on-request-off.json b/exchange/exchangetest/events-bid-account-on-request-off.json
index 0447a224..536fdb69 100644
--- a/exchange/exchangetest/events-bid-account-on-request-off.json
+++ b/exchange/exchangetest/events-bid-account-on-request-off.json
@@ -82,7 +82,6 @@
                 "origbidcpm": 0.71,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "type": "banner",
                   "events": {
@@ -103,7 +102,6 @@
                 "origbidcpm": 0.21,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "type": "banner",
                   "events": {
diff --git a/exchange/exchangetest/events-vast-account-off-request-off.json b/exchange/exchangetest/events-vast-account-off-request-off.json
index 3792c0ba..9f2e4fe0 100644
--- a/exchange/exchangetest/events-vast-account-off-request-off.json
+++ b/exchange/exchangetest/events-vast-account-off-request-off.json
@@ -126,7 +126,6 @@
                 "origbidcpm": 0.51,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "audienceNetwork"
                   },
                   "type": "video"
                 }
@@ -149,7 +148,6 @@
                 "origbidcpm": 0.71,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "type": "video",
                   "targeting": {
@@ -175,7 +173,6 @@
                 "origbidcpm": 0.21,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "type": "video"
                 }
diff --git a/exchange/exchangetest/events-vast-account-off-request-on.json b/exchange/exchangetest/events-vast-account-off-request-on.json
index 93ec6f35..560f4f0e 100644
--- a/exchange/exchangetest/events-vast-account-off-request-on.json
+++ b/exchange/exchangetest/events-vast-account-off-request-on.json
@@ -132,7 +132,6 @@
                 "origbidcpm": 0.51,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "audienceNetwork"
                   },
                   "bidid": "bid-audienceNetwork-1",
                   "type": "video"
@@ -157,7 +156,6 @@
                 "origbidcpm": 0.71,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "bidid": "bid-appnexus-1",
                   "type": "video",
@@ -185,7 +183,6 @@
                 "origbidcpm": 0.21,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "bidid": "bid-appnexus-2",
                   "type": "video"
diff --git a/exchange/exchangetest/events-vast-account-on-request-off.json b/exchange/exchangetest/events-vast-account-on-request-off.json
index 38f407d5..882f1e8c 100644
--- a/exchange/exchangetest/events-vast-account-on-request-off.json
+++ b/exchange/exchangetest/events-vast-account-on-request-off.json
@@ -127,7 +127,6 @@
                 "origbidcpm": 0.51,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "audienceNetwork"
                   },
                   "type": "video"
                 }
@@ -151,7 +150,6 @@
                 "origbidcpm": 0.71,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "type": "video",
                   "targeting": {
@@ -178,7 +176,6 @@
                 "origbidcpm": 0.21,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "type": "video"
                 }
diff --git a/exchange/exchangetest/extra-bids-with-aliases-adaptercode.json b/exchange/exchangetest/extra-bids-with-aliases-adaptercode.json
index 8da9a290..75425397 100644
--- a/exchange/exchangetest/extra-bids-with-aliases-adaptercode.json
+++ b/exchange/exchangetest/extra-bids-with-aliases-adaptercode.json
@@ -81,7 +81,6 @@
                 },
                 "bidType": "video",
                 "bidMeta": {
-                  "adaptercode": "pmbidder"
                 }
               },
               {
@@ -95,7 +94,6 @@
                 },
                 "bidType": "video",
                 "bidMeta": {
-                  "adaptercode": "pmbidder"
                 }
               },
               {
@@ -109,7 +107,6 @@
                 },
                 "bidType": "video",
                 "bidMeta": {
-                  "adaptercode": "pmbidder"
                 }
               }
             ],
@@ -128,7 +125,6 @@
                 },
                 "bidType": "video",
                 "bidMeta": {
-                  "adaptercode": "pmbidder"
                 }
               }
             ],
@@ -156,7 +152,6 @@
                 "origbidcpm": 0.51,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "pmbidder"
                   },
                   "type": "video",
                   "targeting": {
@@ -185,7 +180,6 @@
                 "origbidcpm": 0.71,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "groupm"
                   },
                   "type": "video",
                   "targeting": {
@@ -214,7 +208,6 @@
                 "origbidcpm": 0.21,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "groupm"
                   },
                   "type": "video"
                 }
@@ -231,7 +224,6 @@
                 "origbidcpm": 0.61,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "groupm"
                   },
                   "type": "video",
                   "targeting": {
diff --git a/exchange/exchangetest/extra-bids.json b/exchange/exchangetest/extra-bids.json
index edf2e60b..e1682618 100644
--- a/exchange/exchangetest/extra-bids.json
+++ b/exchange/exchangetest/extra-bids.json
@@ -146,7 +146,6 @@
                                 },
                                 "bidType": "video",
                                 "bidMeta": {
-                                    "adaptercode": "pubmatic"
                                 }
                             },
                             {
@@ -160,7 +159,6 @@
                                 },
                                 "bidType": "video",
                                 "bidMeta": {
-                                    "adaptercode": "pubmatic"
                                 }
                             },
                             {
@@ -174,7 +172,6 @@
                                 },
                                 "bidType": "video",
                                 "bidMeta": {
-                                    "adaptercode": "pubmatic"
                                 }
                             }
                         ],
@@ -193,7 +190,6 @@
                                 },
                                 "bidType": "video",
                                 "bidMeta": {
-                                    "adaptercode": "pubmatic"
                                 }
                             }
                         ],
@@ -262,7 +258,6 @@
                                 },
                                 "bidType": "banner",
                                 "bidMeta": {
-                                    "adaptercode": "appnexus"
                                 }
                             }
                         ],
@@ -281,7 +276,6 @@
                                 },
                                 "bidType": "banner",
                                 "bidMeta": {
-                                    "adaptercode": "appnexus"
                                 }
                             }
                         ],
@@ -309,7 +303,6 @@
                                 "origbidcpm": 0.51,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "groupm"
                                     },
                                     "type": "video",
                                     "targeting": {
@@ -333,7 +326,6 @@
                                 "origbidcpm": 0.3,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "groupm"
                                     },
                                     "type": "banner"
                                 }
@@ -355,7 +347,6 @@
                                 "origbidcpm": 0.71,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "pubmatic"
                                     },
                                     "type": "video",
                                     "targeting": {
@@ -384,7 +375,6 @@
                                 "origbidcpm": 0.21,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "pubmatic"
                                     },
                                     "type": "video"
                                 }
@@ -401,7 +391,6 @@
                                 "origbidcpm": 0.61,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "pubmatic"
                                     },
                                     "type": "video",
                                     "targeting": {
@@ -435,7 +424,6 @@
                                 "origbidcpm": 0.3,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "appnexus"
                                     },
                                     "type": "banner",
                                     "targeting": {
diff --git a/exchange/exchangetest/firstpartydata-amp-imp-ext-one-prebid-bidder.json b/exchange/exchangetest/firstpartydata-amp-imp-ext-one-prebid-bidder.json
index 22e0fb82..f1119b22 100644
--- a/exchange/exchangetest/firstpartydata-amp-imp-ext-one-prebid-bidder.json
+++ b/exchange/exchangetest/firstpartydata-amp-imp-ext-one-prebid-bidder.json
@@ -122,7 +122,6 @@
                                 "origbidcpm": 0.3,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "appnexus"
                                     },
                                     "type": "banner"
                                 }
diff --git a/exchange/exchangetest/firstpartydata-imp-ext-multiple-prebid-bidders.json b/exchange/exchangetest/firstpartydata-imp-ext-multiple-prebid-bidders.json
index 37d5ade5..edeb0423 100644
--- a/exchange/exchangetest/firstpartydata-imp-ext-multiple-prebid-bidders.json
+++ b/exchange/exchangetest/firstpartydata-imp-ext-multiple-prebid-bidders.json
@@ -189,7 +189,6 @@
                                 "origbidcpm": 0.3,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "appnexus"
                                     },
                                     "type": "banner"
                                 }
@@ -211,7 +210,6 @@
                                 "origbidcpm": 0.4,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "rubicon"
                                     },
                                     "type": "banner"
                                 }
diff --git a/exchange/exchangetest/firstpartydata-imp-ext-one-prebid-bidder.json b/exchange/exchangetest/firstpartydata-imp-ext-one-prebid-bidder.json
index 1b6b2043..ef0ad225 100644
--- a/exchange/exchangetest/firstpartydata-imp-ext-one-prebid-bidder.json
+++ b/exchange/exchangetest/firstpartydata-imp-ext-one-prebid-bidder.json
@@ -122,7 +122,6 @@
                                 "origbidcpm": 0.3,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "appnexus"
                                     },
                                     "type": "banner"
                                 }
diff --git a/exchange/exchangetest/fledge-with-bids.json b/exchange/exchangetest/fledge-with-bids.json
index df59c0d2..030467f6 100644
--- a/exchange/exchangetest/fledge-with-bids.json
+++ b/exchange/exchangetest/fledge-with-bids.json
@@ -115,7 +115,6 @@
                                 "someField": "someValue",
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "openx"
                                     },
                                     "type": "video"
                                 }
diff --git a/exchange/exchangetest/floors_enforcement.json b/exchange/exchangetest/floors_enforcement.json
index f1495e7c..d280c412 100644
--- a/exchange/exchangetest/floors_enforcement.json
+++ b/exchange/exchangetest/floors_enforcement.json
@@ -137,7 +137,6 @@
                   "origbidcpm": 12,
                   "prebid": {
                     "meta": {
-                      "adaptercode": "appnexus"
                     },
                     "floors": {
                       "floorCurrency": "USD",
diff --git a/exchange/exchangetest/generate-bid-id-error.json b/exchange/exchangetest/generate-bid-id-error.json
index 9c13ef38..c38d0c97 100644
--- a/exchange/exchangetest/generate-bid-id-error.json
+++ b/exchange/exchangetest/generate-bid-id-error.json
@@ -110,7 +110,6 @@
                 "origbidcpm": 0.3,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "type": "video",
                   "targeting": {
diff --git a/exchange/exchangetest/generate-bid-id-many.json b/exchange/exchangetest/generate-bid-id-many.json
index 4c6a18ab..8a55d197 100644
--- a/exchange/exchangetest/generate-bid-id-many.json
+++ b/exchange/exchangetest/generate-bid-id-many.json
@@ -98,7 +98,6 @@
                 "origbidcpm": 0.3,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "bidid": "bid-appnexus-1",
                   "type": "video"
@@ -119,7 +118,6 @@
                 "origbidcpm": 0.3,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "bidid": "bid-appnexus-2",
                   "type": "video"
diff --git a/exchange/exchangetest/generate-bid-id-one.json b/exchange/exchangetest/generate-bid-id-one.json
index 7d4169d6..e14e5db2 100644
--- a/exchange/exchangetest/generate-bid-id-one.json
+++ b/exchange/exchangetest/generate-bid-id-one.json
@@ -81,7 +81,6 @@
                 "origbidcpm": 0.3,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "bidid": "bid-appnexus-1",
                   "type": "video"
diff --git a/exchange/exchangetest/include-brand-category.json b/exchange/exchangetest/include-brand-category.json
index c0904448..74950598 100644
--- a/exchange/exchangetest/include-brand-category.json
+++ b/exchange/exchangetest/include-brand-category.json
@@ -135,7 +135,6 @@
                 "origbidcpm": 0.3,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "type": "video",
                   "targeting": {
@@ -164,7 +163,6 @@
                 "origbidcpm": 0.6,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "targeting": {
                     "hb_bidder": "appnexus",
diff --git a/exchange/exchangetest/mediatypepricegranularity-banner-video-native.json b/exchange/exchangetest/mediatypepricegranularity-banner-video-native.json
index 4e532d1e..10dacd22 100644
--- a/exchange/exchangetest/mediatypepricegranularity-banner-video-native.json
+++ b/exchange/exchangetest/mediatypepricegranularity-banner-video-native.json
@@ -197,7 +197,6 @@
                                 "origbidcpm": 15,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "appnexus"
                                     },
                                     "type": "banner",
                                     "targeting": {
@@ -227,7 +226,6 @@
                                 "origbidcpm": 18,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "appnexus"
                                     },
                                     "targeting": {
                                         "hb_bidder": "appnexus",
@@ -262,7 +260,6 @@
                                 "origbidcpm": 29,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "appnexus"
                                     },
                                     "targeting": {
                                         "hb_bidder": "appnexus",
diff --git a/exchange/exchangetest/mediatypepricegranularity-native.json b/exchange/exchangetest/mediatypepricegranularity-native.json
index e454b500..a7a04b67 100644
--- a/exchange/exchangetest/mediatypepricegranularity-native.json
+++ b/exchange/exchangetest/mediatypepricegranularity-native.json
@@ -165,7 +165,6 @@
                                 "origbidcpm": 24,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "appnexus"
                                     },
                                     "type": "native",
                                     "targeting": {
@@ -195,7 +194,6 @@
                                 "origbidcpm": 29,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "appnexus"
                                     },
                                     "targeting": {
                                         "hb_bidder": "appnexus",
diff --git a/exchange/exchangetest/multi-bid-default-bid-limit.json b/exchange/exchangetest/multi-bid-default-bid-limit.json
index 45e3c673..d94fc4a2 100644
--- a/exchange/exchangetest/multi-bid-default-bid-limit.json
+++ b/exchange/exchangetest/multi-bid-default-bid-limit.json
@@ -267,7 +267,6 @@
                                 },
                                 "bidType": "video",
                                 "bidMeta": {
-                                    "adaptercode": "appnexus"
                                 }
                             },
                             {
@@ -295,7 +294,6 @@
                                 },
                                 "bidType": "video",
                                 "bidMeta": {
-                                    "adaptercode": "appnexus"
                                 }
                             },
                             {
@@ -323,7 +321,6 @@
                                 },
                                 "bidType": "video",
                                 "bidMeta": {
-                                    "adaptercode": "appnexus"
                                 }
                             }
                         ],
@@ -471,7 +468,6 @@
                                 },
                                 "bidType": "video",
                                 "bidMeta": {
-                                    "adaptercode": "rubicon"
                                 }
                             },
                             {
@@ -498,7 +494,6 @@
                                 },
                                 "bidType": "video",
                                 "bidMeta": {
-                                    "adaptercode": "rubicon"
                                 }
                             },
                             {
@@ -525,7 +520,6 @@
                                 },
                                 "bidType": "banner",
                                 "bidMeta": {
-                                    "adaptercode": "rubicon"
                                 }
                             }
                         ],
@@ -552,7 +546,6 @@
                             "ext": {
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "rubicon"
                                     },
                                     "type": "video",
                                     "targeting": {
@@ -593,7 +586,6 @@
                             "ext": {
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "rubicon"
                                     },
                                     "type": "video",
                                     "targeting": {
@@ -638,7 +630,6 @@
                             "ext": {
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "appnexus"
                                     },
                                     "type": "video",
                                     "targeting": {
@@ -674,7 +665,6 @@
                             "ext": {
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "appnexus"
                                     },
                                     "type": "video"
                                 },
diff --git a/exchange/exchangetest/multi-bids-error.json b/exchange/exchangetest/multi-bids-error.json
index fc96b5ea..35ad1d93 100644
--- a/exchange/exchangetest/multi-bids-error.json
+++ b/exchange/exchangetest/multi-bids-error.json
@@ -180,7 +180,6 @@
                                 },
                                 "bidType": "video",
                                 "bidMeta": {
-                                    "adaptercode": "pubmatic"
                                 }
                             },
                             {
@@ -194,7 +193,6 @@
                                 },
                                 "bidType": "video",
                                 "bidMeta": {
-                                    "adaptercode": "pubmatic"
                                 }
                             },
                             {
@@ -208,7 +206,6 @@
                                 },
                                 "bidType": "video",
                                 "bidMeta": {
-                                    "adaptercode": "pubmatic"
                                 }
                             },
                             {
@@ -222,7 +219,6 @@
                                 },
                                 "bidType": "video",
                                 "bidMeta": {
-                                    "adaptercode": "pubmatic"
                                 }
                             }
                         ],
@@ -283,7 +279,6 @@
                                 },
                                 "bidType": "banner",
                                 "bidMeta": {
-                                    "adaptercode": "appnexus"
                                 }
                             },
                             {
@@ -297,7 +292,6 @@
                                 },
                                 "bidType": "banner",
                                 "bidMeta": {
-                                    "adaptercode": "appnexus"
                                 }
                             }
                         ],
@@ -325,7 +319,6 @@
                                 "origbidcpm": 0.71,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "pubmatic"
                                     },
                                     "type": "video",
                                     "targeting": {
@@ -355,7 +348,6 @@
                                 "origbidcpm": 0.21,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "pubmatic"
                                     },
                                     "type": "video",
                                     "targeting": {
@@ -380,7 +372,6 @@
                                 "origbidcpm": 0.61,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "pubmatic"
                                     },
                                     "type": "video",
                                     "targeting": {
@@ -410,7 +401,6 @@
                                 "origbidcpm": 0.51,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "pubmatic"
                                     },
                                     "type": "video",
                                     "targeting": {
@@ -440,7 +430,6 @@
                                 "origbidcpm": 0.3,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "appnexus"
                                     },
                                     "type": "banner",
                                     "targeting": {
@@ -464,7 +453,6 @@
                                 "origbidcpm": 0.3,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "appnexus"
                                     },
                                     "type": "banner"
                                 }
diff --git a/exchange/exchangetest/multi-bids-mixed-case.json b/exchange/exchangetest/multi-bids-mixed-case.json
index 44630b30..3ecdb123 100644
--- a/exchange/exchangetest/multi-bids-mixed-case.json
+++ b/exchange/exchangetest/multi-bids-mixed-case.json
@@ -146,7 +146,6 @@
                 },
                 "bidType": "video",
                 "bidMeta": {
-                  "adaptercode": "pubmatic"
                 }
               },
               {
@@ -160,7 +159,6 @@
                 },
                 "bidType": "video",
                 "bidMeta": {
-                  "adaptercode": "pubmatic"
                 }
               },
               {
@@ -174,7 +172,6 @@
                 },
                 "bidType": "video",
                 "bidMeta": {
-                  "adaptercode": "pubmatic"
                 }
               },
               {
@@ -188,7 +185,6 @@
                 },
                 "bidType": "video",
                 "bidMeta": {
-                  "adaptercode": "pubmatic"
                 }
               }
             ],
@@ -261,7 +257,6 @@
                 },
                 "bidType": "banner",
                 "bidMeta": {
-                  "adaptercode": "appnexus"
                 }
               },
               {
@@ -275,7 +270,6 @@
                 },
                 "bidType": "banner",
                 "bidMeta": {
-                  "adaptercode": "appnexus"
                 }
               }
             ],
@@ -303,7 +297,6 @@
                 "origbidcpm": 0.71,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "pubmatic"
                   },
                   "type": "video",
                   "targeting": {
@@ -333,7 +326,6 @@
                 "origbidcpm": 0.21,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "pubmatic"
                   },
                   "type": "video"
                 }
@@ -350,7 +342,6 @@
                 "origbidcpm": 0.61,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "pubmatic"
                   },
                   "type": "video",
                   "targeting": {
@@ -380,7 +371,6 @@
                 "origbidcpm": 0.51,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "pubmatic"
                   },
                   "type": "video",
                   "targeting": {
@@ -410,7 +400,6 @@
                 "origbidcpm": 0.3,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "targetbiddercode": "appnexus",
                   "type": "banner",
@@ -435,7 +424,6 @@
                 "origbidcpm": 0.3,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "type": "banner"
                 }
diff --git a/exchange/exchangetest/multi-bids-with-extra-bids.json b/exchange/exchangetest/multi-bids-with-extra-bids.json
index 92a7ff0a..4c87eb91 100644
--- a/exchange/exchangetest/multi-bids-with-extra-bids.json
+++ b/exchange/exchangetest/multi-bids-with-extra-bids.json
@@ -174,7 +174,6 @@
                                 },
                                 "bidType": "video",
                                 "bidMeta": {
-                                    "adaptercode": "pubmatic"
                                 }
                             },
                             {
@@ -188,7 +187,6 @@
                                 },
                                 "bidType": "video",
                                 "bidMeta": {
-                                    "adaptercode": "pubmatic"
                                 }
                             },
                             {
@@ -202,7 +200,6 @@
                                 },
                                 "bidType": "video",
                                 "bidMeta": {
-                                    "adaptercode": "pubmatic"
                                 }
                             },
                             {
@@ -216,7 +213,6 @@
                                 },
                                 "bidType": "video",
                                 "bidMeta": {
-                                    "adaptercode": "pubmatic"
                                 }
                             }
                         ],
@@ -293,7 +289,6 @@
                                 },
                                 "bidType": "banner",
                                 "bidMeta": {
-                                    "adaptercode": "appnexus"
                                 }
                             },
                             {
@@ -307,7 +302,6 @@
                                 },
                                 "bidType": "banner",
                                 "bidMeta": {
-                                    "adaptercode": "appnexus"
                                 }
                             }
                         ],
@@ -335,7 +329,6 @@
                                 "origbidcpm": 0.71,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "pubmatic"
                                     },
                                     "type": "video",
                                     "targeting": {
@@ -365,7 +358,6 @@
                                 "origbidcpm": 0.21,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "pubmatic"
                                     },
                                     "type": "video"
                                 }
@@ -382,7 +374,6 @@
                                 "origbidcpm": 0.61,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "pubmatic"
                                     },
                                     "type": "video",
                                     "targeting": {
@@ -412,7 +403,6 @@
                                 "origbidcpm": 0.51,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "pubmatic"
                                     },
                                     "type": "video",
                                     "targeting": {
@@ -442,7 +432,6 @@
                                 "origbidcpm": 0.3,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "appnexus"
                                     },
                                     "targetbiddercode": "appnexus",
                                     "type": "banner",
@@ -467,7 +456,6 @@
                                 "origbidcpm": 0.3,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "appnexus"
                                     },
                                     "type": "banner"
                                 }
diff --git a/exchange/exchangetest/multi-bids.json b/exchange/exchangetest/multi-bids.json
index ed3e1c1d..b4e02b57 100644
--- a/exchange/exchangetest/multi-bids.json
+++ b/exchange/exchangetest/multi-bids.json
@@ -146,7 +146,6 @@
                                 },
                                 "bidType": "video",
                                 "bidMeta": {
-                                    "adaptercode": "pubmatic"
                                 }
                             },
                             {
@@ -160,7 +159,6 @@
                                 },
                                 "bidType": "video",
                                 "bidMeta": {
-                                    "adaptercode": "pubmatic"
                                 }
                             },
                             {
@@ -174,7 +172,6 @@
                                 },
                                 "bidType": "video",
                                 "bidMeta": {
-                                    "adaptercode": "pubmatic"
                                 }
                             },
                             {
@@ -188,7 +185,6 @@
                                 },
                                 "bidType": "video",
                                 "bidMeta": {
-                                    "adaptercode": "pubmatic"
                                 }
                             }
                         ],
@@ -261,7 +257,6 @@
                                 },
                                 "bidType": "banner",
                                 "bidMeta": {
-                                    "adaptercode": "appnexus"
                                 }
                             },
                             {
@@ -275,7 +270,6 @@
                                 },
                                 "bidType": "banner",
                                 "bidMeta": {
-                                    "adaptercode": "appnexus"
                                 }
                             }
                         ],
@@ -303,7 +297,6 @@
                                 "origbidcpm": 0.71,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "pubmatic"
                                     },
                                     "type": "video",
                                     "targeting": {
@@ -333,7 +326,6 @@
                                 "origbidcpm": 0.21,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "pubmatic"
                                     },
                                     "type": "video"
                                 }
@@ -350,7 +342,6 @@
                                 "origbidcpm": 0.61,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "pubmatic"
                                     },
                                     "type": "video",
                                     "targeting": {
@@ -380,7 +371,6 @@
                                 "origbidcpm": 0.51,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "pubmatic"
                                     },
                                     "type": "video",
                                     "targeting": {
@@ -410,7 +400,6 @@
                                 "origbidcpm": 0.3,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "appnexus"
                                     },
                                     "targetbiddercode": "appnexus",
                                     "type": "banner",
@@ -435,7 +424,6 @@
                                 "origbidcpm": 0.3,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "appnexus"
                                     },
                                     "type": "banner"
                                 }
diff --git a/exchange/exchangetest/passthrough_imp_only.json b/exchange/exchangetest/passthrough_imp_only.json
index bc3d8dd2..a577f73c 100644
--- a/exchange/exchangetest/passthrough_imp_only.json
+++ b/exchange/exchangetest/passthrough_imp_only.json
@@ -145,7 +145,6 @@
                                 "origbidcpm": 0.3,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "appnexus"
                                     },
                                     "type": "video",
                                     "passthrough": {
@@ -166,7 +165,6 @@
                                 "origbidcpm": 0.3,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "appnexus"
                                     },
                                     "type": "video"
                                 }
diff --git a/exchange/exchangetest/passthrough_root_and_imp.json b/exchange/exchangetest/passthrough_root_and_imp.json
index 959b934f..d8a05055 100644
--- a/exchange/exchangetest/passthrough_root_and_imp.json
+++ b/exchange/exchangetest/passthrough_root_and_imp.json
@@ -107,7 +107,6 @@
                                 "origbidcpm": 0.3,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "appnexus"
                                     },
                                     "type": "video",
                                     "passthrough": {
diff --git a/exchange/exchangetest/passthrough_root_only.json b/exchange/exchangetest/passthrough_root_only.json
index 254b09ad..fe922431 100644
--- a/exchange/exchangetest/passthrough_root_only.json
+++ b/exchange/exchangetest/passthrough_root_only.json
@@ -102,7 +102,6 @@
                             "ext": {
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "appnexus"
                                     },
                                     "type": "video"
                                 },
diff --git a/exchange/exchangetest/request-ext-prebid-filtering.json b/exchange/exchangetest/request-ext-prebid-filtering.json
index 8a82f4cb..26312fbf 100644
--- a/exchange/exchangetest/request-ext-prebid-filtering.json
+++ b/exchange/exchangetest/request-ext-prebid-filtering.json
@@ -175,7 +175,6 @@
                                 "origbidcpm": 0.3,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "appnexus"
                                     },
                                     "type": "video"
                                 }
diff --git a/exchange/exchangetest/request-imp-ext-prebid-filtering.json b/exchange/exchangetest/request-imp-ext-prebid-filtering.json
index 94ac6ec0..8733ef9c 100644
--- a/exchange/exchangetest/request-imp-ext-prebid-filtering.json
+++ b/exchange/exchangetest/request-imp-ext-prebid-filtering.json
@@ -125,7 +125,6 @@
                                 "origbidcpm": 0.3,
                                 "prebid": {
                                     "meta": {
-                                        "adaptercode": "appnexus"
                                     },
                                     "type": "video"
                                 }
diff --git a/exchange/exchangetest/request-multi-bidders-debug-info.json b/exchange/exchangetest/request-multi-bidders-debug-info.json
index 6eeaf58d..254d321f 100644
--- a/exchange/exchangetest/request-multi-bidders-debug-info.json
+++ b/exchange/exchangetest/request-multi-bidders-debug-info.json
@@ -155,7 +155,6 @@
                 "origbidcpm": 12.00,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "targeting": {
                     "hb_bidder": "appnexus",
diff --git a/exchange/exchangetest/request-multi-bidders-one-no-resp.json b/exchange/exchangetest/request-multi-bidders-one-no-resp.json
index fc55ebd3..4d54abc2 100644
--- a/exchange/exchangetest/request-multi-bidders-one-no-resp.json
+++ b/exchange/exchangetest/request-multi-bidders-one-no-resp.json
@@ -127,7 +127,6 @@
                 "origbidcpm": 12.00,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "targeting": {
                     "hb_bidder": "appnexus",
diff --git a/exchange/exchangetest/targeting-always-include-deals.json b/exchange/exchangetest/targeting-always-include-deals.json
index 1ffb8088..14521036 100644
--- a/exchange/exchangetest/targeting-always-include-deals.json
+++ b/exchange/exchangetest/targeting-always-include-deals.json
@@ -170,7 +170,6 @@
                 "origbidcpm": 0.51,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "audienceNetwork"
                   },
                   "type": "video",
                   "targeting": {
@@ -195,7 +194,6 @@
                 "origbidcpm": 0.40,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "audienceNetwork"
                   },
                   "type": "video"
                 }
@@ -218,7 +216,6 @@
                 "origbidcpm": 0.71,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "type": "video",
                   "targeting": {
@@ -250,7 +247,6 @@
                 "origbidcpm": 0.21,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "type": "video"
                 }
@@ -268,7 +264,6 @@
                 "origbidcpm": 0.61,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "type": "video",
                   "targeting": {
diff --git a/exchange/exchangetest/targeting-cache-vast-banner.json b/exchange/exchangetest/targeting-cache-vast-banner.json
index 91fb5817..66f322e4 100644
--- a/exchange/exchangetest/targeting-cache-vast-banner.json
+++ b/exchange/exchangetest/targeting-cache-vast-banner.json
@@ -88,7 +88,6 @@
                 "origbidcpm": 0.01,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "type": "banner",
                   "targeting": {
diff --git a/exchange/exchangetest/targeting-cache-vast.json b/exchange/exchangetest/targeting-cache-vast.json
index 1c7cb636..5e1aca02 100644
--- a/exchange/exchangetest/targeting-cache-vast.json
+++ b/exchange/exchangetest/targeting-cache-vast.json
@@ -89,7 +89,6 @@
                 "origbidcpm": 0.01,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "cache": {
                     "bids": {
diff --git a/exchange/exchangetest/targeting-cache-zero.json b/exchange/exchangetest/targeting-cache-zero.json
index 7f94f73f..ff9672c3 100644
--- a/exchange/exchangetest/targeting-cache-zero.json
+++ b/exchange/exchangetest/targeting-cache-zero.json
@@ -91,7 +91,6 @@
                 "origbidcpm": 0.01,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "cache": {
                     "bids": {
diff --git a/exchange/exchangetest/targeting-mobile.json b/exchange/exchangetest/targeting-mobile.json
index 9cc2b1eb..3ae2a0ae 100644
--- a/exchange/exchangetest/targeting-mobile.json
+++ b/exchange/exchangetest/targeting-mobile.json
@@ -153,7 +153,6 @@
                 "origbidcpm": 0.51,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "audienceNetwork"
                   },
                   "type": "video",
                   "targeting": {
@@ -183,7 +182,6 @@
                 "origbidcpm": 0.71,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "type": "video",
                   "targeting": {
@@ -214,7 +212,6 @@
                 "origbidcpm": 0.21,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "type": "video"
                 }
@@ -231,7 +228,6 @@
                 "origbidcpm": 0.61,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "type": "video",
                   "targeting": {
diff --git a/exchange/exchangetest/targeting-no-winners.json b/exchange/exchangetest/targeting-no-winners.json
index 92526022..e6400d14 100644
--- a/exchange/exchangetest/targeting-no-winners.json
+++ b/exchange/exchangetest/targeting-no-winners.json
@@ -153,7 +153,6 @@
                 "origbidcpm": 0.51,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "audienceNetwork"
                   },
                   "type": "video",
                   "targeting": {
@@ -182,7 +181,6 @@
                 "origbidcpm": 0.71,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "type": "video",
                   "targeting": {
@@ -206,7 +204,6 @@
                 "origbidcpm": 0.21,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "type": "video"
                 }
@@ -223,7 +220,6 @@
                 "origbidcpm": 0.61,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "type": "video",
                   "targeting": {
diff --git a/exchange/exchangetest/targeting-only-winners.json b/exchange/exchangetest/targeting-only-winners.json
index 5e6d43ce..85bb81ed 100644
--- a/exchange/exchangetest/targeting-only-winners.json
+++ b/exchange/exchangetest/targeting-only-winners.json
@@ -153,7 +153,6 @@
                 "origbidcpm": 0.51,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "audienceNetwork"
                   },
                   "type": "video"
                 }
@@ -175,7 +174,6 @@
                 "origbidcpm": 0.71,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "type": "video",
                   "targeting": {
@@ -199,7 +197,6 @@
                 "origbidcpm": 0.21,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "type": "video"
                 }
@@ -216,7 +213,6 @@
                 "origbidcpm": 0.61,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "type": "video",
                   "targeting": {
diff --git a/exchange/exchangetest/targeting-with-winners.json b/exchange/exchangetest/targeting-with-winners.json
index 14ad8ef4..281e95b9 100644
--- a/exchange/exchangetest/targeting-with-winners.json
+++ b/exchange/exchangetest/targeting-with-winners.json
@@ -153,7 +153,6 @@
                 "origbidcpm": 0.51,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "audienceNetwork"
                   },
                   "type": "video",
                   "targeting": {
@@ -182,7 +181,6 @@
                 "origbidcpm": 0.71,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "type": "video",
                   "targeting": {
@@ -211,7 +209,6 @@
                 "origbidcpm": 0.21,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "type": "video"
                 }
@@ -228,7 +225,6 @@
                 "origbidcpm": 0.61,
                 "prebid": {
                   "meta": {
-                    "adaptercode": "appnexus"
                   },
                   "type": "video",
                   "targeting": {
diff --git a/floors/fetcher_test.go b/floors/fetcher_test.go
index cdf0537c..499c9312 100644
--- a/floors/fetcher_test.go
+++ b/floors/fetcher_test.go
@@ -1219,6 +1219,7 @@ func TestPriceFloorFetcherSubmitFailed(t *testing.T) {
 }
 
 func getRandomNumber() int {
+	//nolint: staticcheck // SA1019: rand.Seed has been deprecated since Go 1.20 and an alternative has been available since Go 1.0: As of Go 1.20 there is no reason to call Seed with a random value.
 	rand.Seed(time.Now().UnixNano())
 	min := 1
 	max := 10
diff --git a/openrtb_ext/request_wrapper_test.go b/openrtb_ext/request_wrapper_test.go
index ffa925e4..7b21531e 100644
--- a/openrtb_ext/request_wrapper_test.go
+++ b/openrtb_ext/request_wrapper_test.go
@@ -705,7 +705,7 @@ func TestCloneUserExt(t *testing.T) {
 				eids[0].UIDs[1].ID = "G2"
 				eids[1].UIDs[0].AType = 0
 				eids[0].UIDs = append(eids[0].UIDs, openrtb2.UID{ID: "Z", AType: 2})
-				eids = append(eids, openrtb2.EID{Source: "Blank"})
+				eids = append(eids, openrtb2.EID{Source: "Blank"}) //nolint: ineffassign, staticcheck // this value of `eids` is never used (staticcheck)
 				userExt.eids = nil
 			},
 		},
diff --git a/router/aspects/request_timeout_handler_test.go b/router/aspects/request_timeout_handler_test.go
index f77d48aa..0d6f2cf8 100644
--- a/router/aspects/request_timeout_handler_test.go
+++ b/router/aspects/request_timeout_handler_test.go
@@ -78,7 +78,7 @@ func TestAny(t *testing.T) {
 		reqTimeFloat, _ := strconv.ParseFloat(test.reqTimeInQueue, 64)
 		result := ExecuteAspectRequest(t, test.reqTimeInQueue, test.reqTimeOut, test.setHeaders, metrics.ReqTypeVideo, test.requestStatusMetrics, reqTimeFloat)
 		assert.Equal(t, test.expectedRespCode, result.Code, test.expectedRespCodeMessage)
-		assert.Equal(t, test.expectedRespBody, string(result.Body.Bytes()), test.expectedRespBodyMessage)
+		assert.Equal(t, test.expectedRespBody, result.Body.String(), test.expectedRespBodyMessage)
 	}
 }
 
diff --git a/server/server_test.go b/server/server_test.go
index 03a2fc91..7f81f781 100644
--- a/server/server_test.go
+++ b/server/server_test.go
@@ -12,6 +12,7 @@ import (
 	"github.com/prebid/prebid-server/v2/config"
 	metricsconfig "github.com/prebid/prebid-server/v2/metrics/config"
 	"github.com/stretchr/testify/assert"
+	"github.com/stretchr/testify/require"
 )
 
 func TestServerShutdown(t *testing.T) {
@@ -21,7 +22,7 @@ func TestServerShutdown(t *testing.T) {
 	stopper := make(chan os.Signal)
 	done := make(chan struct{})
 	go shutdownAfterSignals(server, stopper, done)
-	go server.Serve(ln)
+	go server.Serve(ln) //nolint: errcheck
 
 	stopper <- os.Interrupt
 	<-done
@@ -73,7 +74,8 @@ func TestNewSocketServer(t *testing.T) {
 	}
 
 	ret := newSocketServer(cfg, nil)
-	assert.NotEqual(t, nil, ret, "ret : isNil()")
+	require.NotNil(t, ret, "ret : isNil()")
+
 	assert.Equal(t, mockServer.Addr, ret.Addr, fmt.Sprintf("Addr invalide: %v != %v",
 		ret.Addr, mockServer.Addr))
 	assert.Equal(t, mockServer.ReadTimeout, ret.ReadTimeout, fmt.Sprintf("ReadTimeout invalide: %v != %v",
@@ -81,9 +83,7 @@ func TestNewSocketServer(t *testing.T) {
 	assert.Equal(t, mockServer.WriteTimeout, ret.WriteTimeout, fmt.Sprintf("WriteTimeout invalide: %v != %v",
 		ret.WriteTimeout, mockServer.WriteTimeout))
 
-	if ret != nil {
-		ret.Close()
-	}
+	ret.Close()
 }
 
 func TestNewMainServer(t *testing.T) {
@@ -103,7 +103,8 @@ func TestNewMainServer(t *testing.T) {
 	}
 
 	ret := newMainServer(cfg, nil)
-	assert.NotEqual(t, nil, ret, "ret : isNil()")
+	require.NotNil(t, ret, "ret : isNil()")
+
 	assert.Equal(t, ret.Addr, mockServer.Addr, fmt.Sprintf("Addr invalide: %v != %v",
 		ret.Addr, mockServer.Addr))
 	assert.Equal(t, ret.ReadTimeout, mockServer.ReadTimeout,
@@ -111,9 +112,7 @@ func TestNewMainServer(t *testing.T) {
 	assert.Equal(t, ret.WriteTimeout, mockServer.WriteTimeout,
 		fmt.Sprintf("WriteTimeout invalide: %v != %v", ret.WriteTimeout, mockServer.WriteTimeout))
 
-	if ret != nil {
-		ret.Close()
-	}
+	ret.Close()
 }
 
 func TestNewTCPListener(t *testing.T) {
@@ -155,13 +154,11 @@ func TestNewAdminServer(t *testing.T) {
 	}
 
 	ret := newAdminServer(cfg, nil)
-	assert.NotEqual(t, nil, ret, "ret : isNil()")
+	require.NotNil(t, ret, "ret : isNil()")
 	assert.Equal(t, mockServer.Addr, ret.Addr, fmt.Sprintf("Addr invalide: %v != %v",
 		ret.Addr, mockServer.Addr))
 
-	if ret != nil {
-		ret.Close()
-	}
+	ret.Close()
 }
 
 func TestRunServer(t *testing.T) {
@@ -181,7 +178,6 @@ func TestRunServer(t *testing.T) {
 }
 
 func TestListen(t *testing.T) {
-	const name = "TestListen"
 	var (
 		handler, adminHandler http.Handler
 
diff --git a/server/ssl/ssl_test.go b/server/ssl/ssl_test.go
index b72fb7ae..e6abdbdc 100644
--- a/server/ssl/ssl_test.go
+++ b/server/ssl/ssl_test.go
@@ -47,7 +47,7 @@ func TestAppendPEMFileToRootCAPoolFail(t *testing.T) {
 
 	// In this test we are going to pass a file that does not exist as value of second argument
 	fakeCertificatesFile := "mockcertificates/NO-FILE.pem"
-	certPool, err := AppendPEMFileToRootCAPool(certPool, fakeCertificatesFile)
+	_, err := AppendPEMFileToRootCAPool(certPool, fakeCertificatesFile)
 
 	// Assert AppendPEMFileToRootCAPool correctly throws an error when trying to load an nonexisting file
 	assert.Errorf(t, err, "AppendPEMFileToRootCAPool should throw an error by while loading fake file %s \n", fakeCertificatesFile)
diff --git a/stored_responses/stored_responses_test.go b/stored_responses/stored_responses_test.go
index 49ce19d3..58bba22a 100644
--- a/stored_responses/stored_responses_test.go
+++ b/stored_responses/stored_responses_test.go
@@ -258,7 +258,7 @@ func TestProcessStoredAuctionAndBidResponsesErrors(t *testing.T) {
 	for _, test := range testCases {
 		t.Run(test.description, func(t *testing.T) {
 			rw := &openrtb_ext.RequestWrapper{BidRequest: &test.request}
-			_, _, _, errorList := ProcessStoredResponses(nil, rw, nil)
+			_, _, _, errorList := ProcessStoredResponses(context.TODO(), rw, nil)
 			assert.Equalf(t, test.expectedErrorList, errorList, "Error doesn't match: %s\n", test.description)
 		})
 	}
@@ -663,7 +663,7 @@ func TestProcessStoredAuctionAndBidResponses(t *testing.T) {
 	for _, test := range testCases {
 		t.Run(test.description, func(t *testing.T) {
 			rw := openrtb_ext.RequestWrapper{BidRequest: &test.request}
-			storedAuctionResponses, storedBidResponses, bidderImpReplaceImpId, errorList := ProcessStoredResponses(nil, &rw, fetcher)
+			storedAuctionResponses, storedBidResponses, bidderImpReplaceImpId, errorList := ProcessStoredResponses(context.TODO(), &rw, fetcher)
 			assert.Equal(t, test.expectedStoredAuctionResponses, storedAuctionResponses)
 			assert.Equal(t, test.expectedStoredBidResponses, storedBidResponses)
 			assert.Equal(t, test.expectedBidderImpReplaceImpID, bidderImpReplaceImpId)
@@ -866,7 +866,7 @@ func TestProcessStoredResponsesNotFoundResponse(t *testing.T) {
 	for _, test := range testCases {
 		t.Run(test.description, func(t *testing.T) {
 			rw := openrtb_ext.RequestWrapper{BidRequest: &test.request}
-			_, _, _, errorList := ProcessStoredResponses(nil, &rw, fetcher)
+			_, _, _, errorList := ProcessStoredResponses(context.TODO(), &rw, fetcher)
 			for _, err := range test.expectedErrors {
 				assert.Contains(t, errorList, err)
 			}