Repository: prebid/prebid-server
Pull request #3181 (2023-10-05 17:19:37)

VRTCAL: Updated User Sync Support and GPP Support Flag


Patch:
diff --git a/adapters/edge226/edge226.go b/adapters/edge226/edge226.go
new file mode 100644
index 00000000..a124cb47
--- /dev/null
+++ b/adapters/edge226/edge226.go
@@ -0,0 +1,145 @@
+package edge226
+
+import (
+	"encoding/json"
+	"fmt"
+	"net/http"
+
+	"github.com/prebid/openrtb/v19/openrtb2"
+	"github.com/prebid/prebid-server/adapters"
+	"github.com/prebid/prebid-server/config"
+	"github.com/prebid/prebid-server/openrtb_ext"
+)
+
+type adapter struct {
+	endpoint string
+}
+
+type reqBodyExt struct {
+	Edge226BidderExt reqBodyExtBidder `json:"bidder"`
+}
+
+type reqBodyExtBidder struct {
+	Type        string `json:"type"`
+	PlacementID string `json:"placementId,omitempty"`
+	EndpointID  string `json:"endpointId,omitempty"`
+}
+
+func Builder(bidderName openrtb_ext.BidderName, config config.Adapter, server config.Server) (adapters.Bidder, error) {
+	bidder := &adapter{
+		endpoint: config.Endpoint,
+	}
+	return bidder, nil
+}
+
+func (a *adapter) MakeRequests(request *openrtb2.BidRequest, reqInfo *adapters.ExtraRequestInfo) ([]*adapters.RequestData, []error) {
+	var err error
+	var adapterRequests []*adapters.RequestData
+
+	reqCopy := *request
+	for _, imp := range request.Imp {
+		reqCopy.Imp = []openrtb2.Imp{imp}
+
+		var bidderExt adapters.ExtImpBidder
+		var edge226Ext openrtb_ext.ImpExtEdge226
+
+		if err = json.Unmarshal(reqCopy.Imp[0].Ext, &bidderExt); err != nil {
+			return nil, []error{err}
+		}
+		if err = json.Unmarshal(bidderExt.Bidder, &edge226Ext); err != nil {
+			return nil, []error{err}
+		}
+
+		temp := reqBodyExt{Edge226BidderExt: reqBodyExtBidder{}}
+
+		if edge226Ext.PlacementID != "" {
+			temp.Edge226BidderExt.PlacementID = edge226Ext.PlacementID
+			temp.Edge226BidderExt.Type = "publisher"
+		} else if edge226Ext.EndpointID != "" {
+			temp.Edge226BidderExt.EndpointID = edge226Ext.EndpointID
+			temp.Edge226BidderExt.Type = "network"
+		}
+
+		finalyImpExt, err := json.Marshal(temp)
+		if err != nil {
+			return nil, []error{err}
+		}
+
+		reqCopy.Imp[0].Ext = finalyImpExt
+
+		adapterReq, err := a.makeRequest(&reqCopy)
+		if err != nil {
+			return nil, []error{err}
+		}
+
+		if adapterReq != nil {
+			adapterRequests = append(adapterRequests, adapterReq)
+		}
+	}
+	return adapterRequests, nil
+}
+
+func (a *adapter) makeRequest(request *openrtb2.BidRequest) (*adapters.RequestData, error) {
+	reqJSON, err := json.Marshal(request)
+	if err != nil {
+		return nil, err
+	}
+
+	headers := http.Header{}
+	headers.Add("Content-Type", "application/json;charset=utf-8")
+	headers.Add("Accept", "application/json")
+	return &adapters.RequestData{
+		Method:  "POST",
+		Uri:     a.endpoint,
+		Body:    reqJSON,
+		Headers: headers,
+	}, err
+}
+
+func (a *adapter) MakeBids(request *openrtb2.BidRequest, requestData *adapters.RequestData, responseData *adapters.ResponseData) (*adapters.BidderResponse, []error) {
+	if adapters.IsResponseStatusCodeNoContent(responseData) {
+		return nil, nil
+	}
+
+	if err := adapters.CheckResponseStatusCodeForErrors(responseData); err != nil {
+		return nil, []error{err}
+	}
+
+	var response openrtb2.BidResponse
+	if err := json.Unmarshal(responseData.Body, &response); err != nil {
+		return nil, []error{err}
+	}
+
+	bidResponse := adapters.NewBidderResponseWithBidsCapacity(len(request.Imp))
+	bidResponse.Currency = response.Cur
+	for _, seatBid := range response.SeatBid {
+		for i := range seatBid.Bid {
+			bidType, err := getBidMediaType(&seatBid.Bid[i])
+			if err != nil {
+				return nil, []error{err}
+			}
+
+			b := &adapters.TypedBid{
+				Bid:     &seatBid.Bid[i],
+				BidType: bidType,
+			}
+			bidResponse.Bids = append(bidResponse.Bids, b)
+		}
+	}
+	return bidResponse, nil
+}
+
+func getBidMediaType(bid *openrtb2.Bid) (openrtb_ext.BidType, error) {
+	switch bid.MType {
+	case openrtb2.MarkupBanner:
+		return openrtb_ext.BidTypeBanner, nil
+	case openrtb2.MarkupVideo:
+		return openrtb_ext.BidTypeVideo, nil
+	case openrtb2.MarkupAudio:
+		return openrtb_ext.BidTypeAudio, nil
+	case openrtb2.MarkupNative:
+		return openrtb_ext.BidTypeNative, nil
+	default:
+		return "", fmt.Errorf("Unable to fetch mediaType in multi-format: %s", bid.ImpID)
+	}
+}
diff --git a/adapters/pubmatic/pubmatic.go b/adapters/pubmatic/pubmatic.go
index 04bd00cb..bd406d68 100644
--- a/adapters/pubmatic/pubmatic.go
+++ b/adapters/pubmatic/pubmatic.go
@@ -19,6 +19,8 @@ import (
 
 const MAX_IMPRESSIONS_PUBMATIC = 30
 
+const ae = "ae"
+
 type PubmaticAdapter struct {
 	URI string
 }
@@ -42,6 +44,7 @@ type pubmaticBidExtVideo struct {
 type ExtImpBidderPubmatic struct {
 	adapters.ExtImpBidder
 	Data json.RawMessage `json:"data,omitempty"`
+	AE   int             `json:"ae,omitempty"`
 }
 
 type ExtAdServer struct {
@@ -60,6 +63,10 @@ type extRequestAdServer struct {
 	openrtb_ext.ExtRequest
 }
 
+type respExt struct {
+	FledgeAuctionConfigs map[string]json.RawMessage `json:"fledge_auction_configs,omitempty"`
+}
+
 const (
 	dctrKeyName        = "key_val"
 	pmZoneIDKeyName    = "pmZoneId"
@@ -304,6 +311,10 @@ func parseImpressionObject(imp *openrtb2.Imp, extractWrapperExtFromImp, extractP
 		populateFirstPartyDataImpAttributes(bidderExt.Data, extMap)
 	}
 
+	if bidderExt.AE != 0 {
+		extMap[ae] = bidderExt.AE
+	}
+
 	imp.Ext = nil
 	if len(extMap) > 0 {
 		ext, err := json.Marshal(extMap)
@@ -465,6 +476,20 @@ func (a *PubmaticAdapter) MakeBids(internalRequest *openrtb2.BidRequest, externa
 	if bidResp.Cur != "" {
 		bidResponse.Currency = bidResp.Cur
 	}
+
+	if bidResp.Ext != nil {
+		var bidRespExt respExt
+		if err := json.Unmarshal(bidResp.Ext, &bidRespExt); err == nil && bidRespExt.FledgeAuctionConfigs != nil {
+			bidResponse.FledgeAuctionConfigs = make([]*openrtb_ext.FledgeAuctionConfig, 0, len(bidRespExt.FledgeAuctionConfigs))
+			for impId, config := range bidRespExt.FledgeAuctionConfigs {
+				fledgeAuctionConfig := &openrtb_ext.FledgeAuctionConfig{
+					ImpId:  impId,
+					Config: config,
+				}
+				bidResponse.FledgeAuctionConfigs = append(bidResponse.FledgeAuctionConfigs, fledgeAuctionConfig)
+			}
+		}
+	}
 	return bidResponse, errs
 }
 
diff --git a/adapters/smartx/smartx.go b/adapters/smartx/smartx.go
new file mode 100644
index 00000000..6fbc9496
--- /dev/null
+++ b/adapters/smartx/smartx.go
@@ -0,0 +1,90 @@
+package smartx
+
+import (
+	"encoding/json"
+	"errors"
+	"fmt"
+	"net/http"
+
+	"github.com/prebid/openrtb/v19/openrtb2"
+	"github.com/prebid/prebid-server/adapters"
+	"github.com/prebid/prebid-server/config"
+	"github.com/prebid/prebid-server/openrtb_ext"
+)
+
+type adapter struct {
+	endpointURL string
+}
+
+func Builder(_ openrtb_ext.BidderName, config config.Adapter, _ config.Server) (adapters.Bidder, error) {
+	return &adapter{
+		endpointURL: config.Endpoint,
+	}, nil
+}
+
+func (a *adapter) MakeRequests(openRTBRequest *openrtb2.BidRequest, requestInfo *adapters.ExtraRequestInfo) (requestsToBidder []*adapters.RequestData, errs []error) {
+	openRTBRequestJSON, err := json.Marshal(openRTBRequest)
+	if err != nil {
+		errs = append(errs, fmt.Errorf("marshal bidRequest: %w", err))
+		return nil, errs
+	}
+
+	headers := http.Header{}
+	headers.Add("Content-Type", "application/json;charset=utf-8")
+	headers.Add("x-openrtb-version", "2.5")
+
+	if openRTBRequest.Device != nil {
+		if openRTBRequest.Device.UA != "" {
+			headers.Set("User-Agent", openRTBRequest.Device.UA)
+		}
+
+		if openRTBRequest.Device.IP != "" {
+			headers.Set("Forwarded", "for="+openRTBRequest.Device.IP)
+			headers.Set("X-Forwarded-For", openRTBRequest.Device.IP)
+		}
+	}
+
+	return append(requestsToBidder, &adapters.RequestData{
+		Method:  http.MethodPost,
+		Uri:     a.endpointURL,
+		Body:    openRTBRequestJSON,
+		Headers: headers,
+	}), nil
+}
+
+func (a *adapter) MakeBids(request *openrtb2.BidRequest, _ *adapters.RequestData, responseData *adapters.ResponseData) (*adapters.BidderResponse, []error) {
+	if adapters.IsResponseStatusCodeNoContent(responseData) {
+		return nil, nil
+	}
+
+	if err := adapters.CheckResponseStatusCodeForErrors(responseData); err != nil {
+		return nil, []error{err}
+	}
+
+	var response openrtb2.BidResponse
+	if err := json.Unmarshal(responseData.Body, &response); err != nil {
+		return nil, []error{err}
+	}
+
+	if len(response.SeatBid) == 0 {
+		return nil, []error{errors.New("no bidders found in JSON response")}
+	}
+
+	bidResponse := adapters.NewBidderResponseWithBidsCapacity(len(request.Imp))
+	if response.Cur != "" {
+		bidResponse.Currency = response.Cur
+	}
+
+	var errs []error
+
+	for _, seatBid := range response.SeatBid {
+		for i := range seatBid.Bid {
+			bidResponse.Bids = append(bidResponse.Bids, &adapters.TypedBid{
+				Bid:     &seatBid.Bid[i],
+				BidType: openrtb_ext.BidTypeVideo,
+			})
+		}
+	}
+
+	return bidResponse, errs
+}
diff --git a/adapters/teads/models.go b/adapters/teads/models.go
new file mode 100644
index 00000000..5b63c163
--- /dev/null
+++ b/adapters/teads/models.go
@@ -0,0 +1,40 @@
+package teads
+
+import (
+	"encoding/json"
+	"text/template"
+)
+
+type adapter struct {
+	endpointTemplate *template.Template
+}
+
+type defaultBidderImpExtension struct {
+	Bidder bidder `json:"bidder"`
+}
+
+type bidder struct {
+	PlacementId int `json:"placementId"`
+}
+
+type teadsImpExtension struct {
+	KV teadsKV `json:"kv"`
+}
+
+type teadsKV struct {
+	PlacementId int `json:"placementId"`
+}
+
+type teadsBidExt struct {
+	Prebid teadsPrebidExt `json:"prebid"`
+}
+
+type teadsPrebidExt struct {
+	Meta teadsPrebidMeta `json:"meta"`
+}
+
+type teadsPrebidMeta struct {
+	RendererName    string          `json:"rendererName"`
+	RendererVersion string          `json:"rendererVersion"`
+	RendererData    json.RawMessage `json:"rendererData"`
+}
diff --git a/adapters/teads/teads.go b/adapters/teads/teads.go
new file mode 100644
index 00000000..9c2bb57f
--- /dev/null
+++ b/adapters/teads/teads.go
@@ -0,0 +1,202 @@
+package teads
+
+import (
+	"encoding/json"
+	"fmt"
+	"net/http"
+	"net/url"
+	"strconv"
+	"text/template"
+
+	"github.com/prebid/openrtb/v19/openrtb2"
+	"github.com/prebid/prebid-server/adapters"
+	"github.com/prebid/prebid-server/config"
+	"github.com/prebid/prebid-server/errortypes"
+	"github.com/prebid/prebid-server/macros"
+	"github.com/prebid/prebid-server/openrtb_ext"
+)
+
+// Builder builds a new instance of the Teads adapter for the given bidder with the given config.
+func Builder(_ openrtb_ext.BidderName, config config.Adapter, server config.Server) (adapters.Bidder, error) {
+	template, err := template.New("endpointTemplate").Parse(config.Endpoint)
+	if err != nil {
+		return nil, fmt.Errorf("unable to parse endpoint url template: %v", err)
+	}
+
+	bidder := &adapter{
+		endpointTemplate: template,
+	}
+	return bidder, nil
+}
+
+func (a *adapter) MakeRequests(request *openrtb2.BidRequest, reqInfo *adapters.ExtraRequestInfo) ([]*adapters.RequestData, []error) {
+	if len(request.Imp) == 0 {
+		return nil, []error{&errortypes.BadInput{
+			Message: "No impression in the bid request",
+		}}
+	}
+
+	endpointURL, err := a.buildEndpointURL()
+	if endpointURL == "" {
+		return nil, []error{err}
+	}
+
+	if err := updateImpObject(request.Imp); err != nil {
+		return nil, []error{err}
+	}
+
+	reqJSON, err := json.Marshal(request)
+	if err != nil {
+		return nil, []error{&errortypes.BadInput{
+			Message: "Error parsing BidRequest object",
+		}}
+	}
+
+	headers := http.Header{}
+	headers.Add("Content-Type", "application/json;charset=utf-8")
+	return []*adapters.RequestData{{
+		Method:  "POST",
+		Uri:     endpointURL,
+		Body:    reqJSON,
+		Headers: headers,
+	}}, []error{}
+}
+
+func updateImpObject(imps []openrtb2.Imp) error {
+	for i := range imps {
+		imp := &imps[i]
+
+		if imp.Banner != nil {
+			if len(imp.Banner.Format) != 0 {
+				bannerCopy := *imp.Banner
+				bannerCopy.H = &imp.Banner.Format[0].H
+				bannerCopy.W = &imp.Banner.Format[0].W
+				imp.Banner = &bannerCopy
+			}
+		}
+
+		var defaultImpExt defaultBidderImpExtension
+		if err := json.Unmarshal(imp.Ext, &defaultImpExt); err != nil {
+			return &errortypes.BadInput{
+				Message: "Error parsing Imp.Ext object",
+			}
+		}
+		if defaultImpExt.Bidder.PlacementId == 0 {
+			return &errortypes.BadInput{
+				Message: "placementId should not be 0.",
+			}
+		}
+		imp.TagID = strconv.Itoa(defaultImpExt.Bidder.PlacementId)
+		teadsImpExt := &teadsImpExtension{
+			KV: teadsKV{
+				PlacementId: defaultImpExt.Bidder.PlacementId,
+			},
+		}
+		if extJson, err := json.Marshal(teadsImpExt); err != nil {
+			return &errortypes.BadInput{
+				Message: "Error stringify Imp.Ext object",
+			}
+		} else {
+			imp.Ext = extJson
+		}
+	}
+	return nil
+}
+
+// Builds enpoint url based on adapter-specific pub settings from imp.ext
+func (a *adapter) buildEndpointURL() (string, error) {
+	endpointParams := macros.EndpointTemplateParams{}
+	host, err := macros.ResolveMacros(a.endpointTemplate, endpointParams)
+
+	if err != nil {
+		return "", &errortypes.BadInput{
+			Message: "Unable to parse endpoint url template: " + err.Error(),
+		}
+	}
+
+	thisURI, err := url.Parse(host)
+	if err != nil {
+		return "", &errortypes.BadInput{
+			Message: "Malformed URL: " + err.Error(),
+		}
+	}
+
+	return thisURI.String(), nil
+}
+
+func (a *adapter) MakeBids(internalRequest *openrtb2.BidRequest, _ *adapters.RequestData, response *adapters.ResponseData) (*adapters.BidderResponse, []error) {
+	if adapters.IsResponseStatusCodeNoContent(response) {
+		return nil, nil
+	}
+
+	err := adapters.CheckResponseStatusCodeForErrors(response)
+	if err != nil {
+		return nil, []error{err}
+	}
+
+	var bidResp openrtb2.BidResponse
+	if err := json.Unmarshal(response.Body, &bidResp); err != nil {
+		return nil, []error{err}
+	}
+
+	bidderResponse := adapters.NewBidderResponseWithBidsCapacity(len(bidResp.SeatBid))
+
+	for _, sb := range bidResp.SeatBid {
+		for i := 0; i < len(sb.Bid); i++ {
+			bid := sb.Bid[i]
+
+			bidExtTeads, err := getTeadsRendererFromBidExt(bid.Ext)
+			if err != nil {
+				return nil, err
+			}
+			bidType, err := getMediaTypeForImp(bid.ImpID, internalRequest.Imp)
+			if err != nil {
+				return nil, err
+			}
+			bidderResponse.Bids = append(bidderResponse.Bids, &adapters.TypedBid{
+				Bid: &bid,
+				BidMeta: &openrtb_ext.ExtBidPrebidMeta{
+					RendererName:    bidExtTeads.Prebid.Meta.RendererName,
+					RendererVersion: bidExtTeads.Prebid.Meta.RendererVersion,
+				},
+				BidType: bidType,
+			})
+		}
+	}
+	if bidResp.Cur != "" {
+		bidderResponse.Currency = bidResp.Cur
+	}
+	return bidderResponse, nil
+}
+
+func getTeadsRendererFromBidExt(ext json.RawMessage) (*teadsBidExt, []error) {
+	var bidExtTeads teadsBidExt
+	if err := json.Unmarshal(ext, &bidExtTeads); err != nil {
+		return nil, []error{err}
+	}
+	if bidExtTeads.Prebid.Meta.RendererName == "" {
+		return nil, []error{&errortypes.BadInput{
+			Message: "RendererName should not be empty if present",
+		}}
+	}
+	if bidExtTeads.Prebid.Meta.RendererVersion == "" {
+		return nil, []error{&errortypes.BadInput{
+			Message: "RendererVersion should not be empty if present",
+		}}
+	}
+	return &bidExtTeads, nil
+}
+
+func getMediaTypeForImp(impID string, imps []openrtb2.Imp) (openrtb_ext.BidType, []error) {
+	for _, imp := range imps {
+		if imp.ID == impID {
+			if imp.Video != nil {
+				return openrtb_ext.BidTypeVideo, nil
+			}
+			return openrtb_ext.BidTypeBanner, nil
+		}
+	}
+	return openrtb_ext.BidType(""), []error{&errortypes.BadInput{
+		Message: "Imp ids were not equals",
+	}}
+}
diff --git a/endpoints/openrtb2/amp_auction.go b/endpoints/openrtb2/amp_auction.go
index 76762d8b..2fde59c2 100644
--- a/endpoints/openrtb2/amp_auction.go
+++ b/endpoints/openrtb2/amp_auction.go
@@ -103,6 +103,7 @@ func NewAmpEndpoint(
 		storedRespFetcher,
 		hookExecutionPlanBuilder,
 		tmaxAdjustments,
+		openrtb_ext.NormalizeBidderName,
 	}).AmpAuction), nil
 
 }
diff --git a/endpoints/openrtb2/auction.go b/endpoints/openrtb2/auction.go
index 4fce4c15..3a929c43 100644
--- a/endpoints/openrtb2/auction.go
+++ b/endpoints/openrtb2/auction.go
@@ -126,9 +126,12 @@ func NewEndpoint(
 		ipValidator,
 		storedRespFetcher,
 		hookExecutionPlanBuilder,
-		tmaxAdjustments}).Auction), nil
+		tmaxAdjustments,
+		openrtb_ext.NormalizeBidderName}).Auction), nil
 }
 
+type normalizeBidderName func(name string) (openrtb_ext.BidderName, bool)
+
 type endpointDeps struct {
 	uuidGenerator             uuidutil.UUIDGenerator
 	ex                        exchange.Exchange
@@ -149,6 +152,7 @@ type endpointDeps struct {
 	storedRespFetcher         stored_requests.Fetcher
 	hookExecutionPlanBuilder  hooks.ExecutionPlanBuilder
 	tmaxAdjustments           *exchange.TmaxAdjustmentsPreprocessed
+	normalizeBidderName       normalizeBidderName
 }
 
 func (deps *endpointDeps) Auction(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
@@ -765,7 +769,7 @@ func (deps *endpointDeps) validateRequest(req *openrtb_ext.RequestWrapper, isAmp
 		}
 	}
 
-	var aliases map[string]string
+	var requestAliases map[string]string
 	reqExt, err := req.GetRequestExt()
 	if err != nil {
 		return []error{fmt.Errorf("request.ext is invalid: %v", err)}
@@ -777,17 +781,17 @@ func (deps *endpointDeps) validateRequest(req *openrtb_ext.RequestWrapper, isAmp
 	}
 
 	if reqPrebid != nil {
-		aliases = reqPrebid.Aliases
+		requestAliases = reqPrebid.Aliases
 
-		if err := deps.validateAliases(aliases); err != nil {
+		if err := deps.validateAliases(requestAliases); err != nil {
 			return []error{err}
 		}
 
-		if err := deps.validateAliasesGVLIDs(reqPrebid.AliasGVLIDs, aliases); err != nil {
+		if err := deps.validateAliasesGVLIDs(reqPrebid.AliasGVLIDs, requestAliases); err != nil {
 			return []error{err}
 		}
 
-		if err := deps.validateBidAdjustmentFactors(reqPrebid.BidAdjustmentFactors, aliases); err != nil {
+		if err := deps.validateBidAdjustmentFactors(reqPrebid.BidAdjustmentFactors, requestAliases); err != nil {
 			return []error{err}
 		}
 
@@ -795,7 +799,7 @@ func (deps *endpointDeps) validateRequest(req *openrtb_ext.RequestWrapper, isAmp
 			return []error{err}
 		}
 
-		if err := deps.validateEidPermissions(reqPrebid.Data, aliases); err != nil {
+		if err := deps.validateEidPermissions(reqPrebid.Data, requestAliases); err != nil {
 			return []error{err}
 		}
 
@@ -844,7 +848,7 @@ func (deps *endpointDeps) validateRequest(req *openrtb_ext.RequestWrapper, isAmp
 		}
 	}
 
-	if errs := deps.validateUser(req, aliases, gpp); errs != nil {
+	if errs := deps.validateUser(req, requestAliases, gpp); errs != nil {
 		if len(errs) > 0 {
 			errL = append(errL, errs...)
 		}
@@ -871,7 +875,7 @@ func (deps *endpointDeps) validateRequest(req *openrtb_ext.RequestWrapper, isAmp
 		if errortypes.ContainsFatalError([]error{err}) {
 			return errL
 		}
-	} else if _, err := ccpaPolicy.Parse(exchange.GetValidBidders(aliases)); err != nil {
+	} else if _, err := ccpaPolicy.Parse(exchange.GetValidBidders(requestAliases)); err != nil {
 		if _, invalidConsent := err.(*errortypes.Warning); invalidConsent {
 			errL = append(errL, &errortypes.Warning{
 				Message:     fmt.Sprintf("CCPA consent is invalid and will be ignored. (%v)", err),
@@ -894,7 +898,7 @@ func (deps *endpointDeps) validateRequest(req *openrtb_ext.RequestWrapper, isAmp
 		}
 		impIDs[imp.ID] = i
 
-		errs := deps.validateImp(imp, aliases, i, hasStoredResponses, storedBidResp)
+		errs := deps.validateImp(imp, requestAliases, i, hasStoredResponses, storedBidResp)
 		if len(errs) > 0 {
 			errL = append(errL, errs...)
 		}
@@ -986,7 +990,7 @@ func validateSChains(sChains []*openrtb_ext.ExtRequestPrebidSChain) error {
 	return err
 }
 
-func (deps *endpointDeps) validateEidPermissions(prebid *openrtb_ext.ExtRequestPrebidData, aliases map[string]string) error {
+func (deps *endpointDeps) validateEidPermissions(prebid *openrtb_ext.ExtRequestPrebidData, requestAliases map[string]string) error {
 	if prebid == nil {
 		return nil
 	}
@@ -1006,7 +1010,7 @@ func (deps *endpointDeps) validateEidPermissions(prebid *openrtb_ext.ExtRequestP
 			return fmt.Errorf(`request.ext.prebid.data.eidpermissions[%d] missing or empty required field: "bidders"`, i)
 		}
 
-		if err := validateBidders(eid.Bidders, deps.bidderMap, aliases); err != nil {
+		if err := deps.validateBidders(eid.Bidders, deps.bidderMap, requestAliases); err != nil {
 			return fmt.Errorf(`request.ext.prebid.data.eidpermissions[%d] contains %v`, i, err)
 		}
 	}
@@ -1014,20 +1018,16 @@ func (deps *endpointDeps) validateEidPermissions(prebid *openrtb_ext.ExtRequestP
 	return nil
 }
 
-func validateBidders(bidders []string, knownBidders map[string]openrtb_ext.BidderName, knownAliases map[string]string) error {
+func (deps *endpointDeps) validateBidders(bidders []string, knownBidders map[string]openrtb_ext.BidderName, knownRequestAliases map[string]string) error {
 	for _, bidder := range bidders {
 		if bidder == "*" {
 			if len(bidders) > 1 {
 				return errors.New(`bidder wildcard "*" mixed with specific bidders`)
 			}
 		} else {
-			bidderName := bidder
-			normalizedCoreBidder, ok := openrtb_ext.NormalizeBidderName(bidderName)
-			if ok {
-				bidderName = normalizedCoreBidder.String()
-			}
-			_, isCoreBidder := knownBidders[bidderName]
-			_, isAlias := knownAliases[bidder]
+			bidderNormalized, _ := deps.normalizeBidderName(bidder)
+			_, isCoreBidder := knownBidders[bidderNormalized.String()]
+			_, isAlias := knownRequestAliases[bidder]
 			if !isCoreBidder && !isAlias {
 				return fmt.Errorf(`unrecognized bidder "%v"`, bidder)
 			}
diff --git a/endpoints/openrtb2/sample-requests/valid-whole/exemplary/eidpermissions-insensitive-bidder-name.json b/endpoints/openrtb2/sample-requests/valid-whole/exemplary/eidpermissions-insensitive-bidder-name.json
deleted file mode 100644
index b06b2593..00000000
--- a/endpoints/openrtb2/sample-requests/valid-whole/exemplary/eidpermissions-insensitive-bidder-name.json
+++ /dev/null
@@ -1,109 +0,0 @@
-{
-    "description": "This demonstrates ext.prebid.data.eidpermissions.bidders with case insensitive bidder names",
-    "config": {
-        "mockBidders": [
-            {
-                "bidderName": "appnexus",
-                "currency": "USD",
-                "price": 1.00
-            },
-            {
-                "bidderName": "rubicon",
-                "currency": "USD",
-                "price": 1.00
-            }
-        ]
-    },
-    "mockBidRequest": {
-        "id": "some-request-id",
-        "site": {
-            "page": "prebid.org"
-        },
-        "user": {
-            "ext": {
-                "consent": "gdpr-consent-string"
-            }
-        },
-        "regs": {
-            "ext": {
-                "gdpr": 1,
-                "us_privacy": "1NYN"
-            }
-        },
-        "imp": [
-            {
-                "id": "some-impression-id",
-                "banner": {
-                    "format": [
-                        {
-                            "w": 300,
-                            "h": 250
-                        },
-                        {
-                            "w": 300,
-                            "h": 600
-                        }
-                    ]
-                },
-                "ext": {
-                    "APPNEXUS": {
-                        "placementId": 12883451
-                    }
-                }
-            }
-        ],
-        "tmax": 500,
-        "ext": {
-            "prebid": {
-                "data": {
-                    "eidpermissions": [
-                        {
-                            "source": "source1",
-                            "bidders": [
-                                "APPNEXUS"
-                            ]
-                        }
-                    ]
-                },
-                "cache": {
-                    "bids": {}
-                },
-                "channel": {
-                    "name": "video",
-                    "version": "1.0"
-                },
-                "targeting": {
-                    "includewinners": false,
-                    "pricegranularity": {
-                        "precision": 2,
-                        "ranges": [
-                            {
-                                "max": 20,
-                                "increment": 0.10
-                            }
-                        ]
-                    }
-                }
-            }
-        }
-    },
-    "expectedBidResponse": {
-        "id": "some-request-id",
-        "seatbid": [
-            {
-                "bid": [
-                    {
-                        "id": "appnexus-bid",
-                        "impid": "some-impression-id",
-                        "price": 1
-                    }
-                ],
-                "seat": "APPNEXUS"
-            }
-        ],
-        "bidid": "test bid id",
-        "cur": "USD",
-        "nbr": 0
-    },
-    "expectedReturnCode": 200
-}
\ No newline at end of file
diff --git a/endpoints/openrtb2/video_auction.go b/endpoints/openrtb2/video_auction.go
index fc6d2a91..8faf1554 100644
--- a/endpoints/openrtb2/video_auction.go
+++ b/endpoints/openrtb2/video_auction.go
@@ -92,7 +92,8 @@ func NewVideoEndpoint(
 		ipValidator,
 		empty_fetcher.EmptyFetcher{},
 		hooks.EmptyPlanBuilder{},
-		tmaxAdjustments}).VideoAuctionEndpoint), nil
+		tmaxAdjustments,
+		openrtb_ext.NormalizeBidderName}).VideoAuctionEndpoint), nil
 }
 
 /*
diff --git a/endpoints/setuid.go b/endpoints/setuid.go
index 1bf3b575..7af70d00 100644
--- a/endpoints/setuid.go
+++ b/endpoints/setuid.go
@@ -18,6 +18,7 @@ import (
 	"github.com/prebid/prebid-server/errortypes"
 	"github.com/prebid/prebid-server/gdpr"
 	"github.com/prebid/prebid-server/metrics"
+	"github.com/prebid/prebid-server/openrtb_ext"
 	"github.com/prebid/prebid-server/privacy"
 	gppPrivacy "github.com/prebid/prebid-server/privacy/gpp"
 	"github.com/prebid/prebid-server/stored_requests"
@@ -329,7 +330,13 @@ func getSyncer(query url.Values, syncersByBidder map[string]usersync.Syncer) (us
 		return nil, "", errors.New(`"bidder" query param is required`)
 	}
 
-	syncer, syncerExists := syncersByBidder[bidder]
+	// case insensitive comparison
+	bidderNormalized, bidderFound := openrtb_ext.NormalizeBidderName(bidder)
+	if !bidderFound {
+		return nil, "", errors.New("The bidder name provided is not supported by Prebid Server")
+	}
+
+	syncer, syncerExists := syncersByBidder[bidderNormalized.String()]
 	if !syncerExists {
 		return nil, "", errors.New("The bidder name provided is not supported by Prebid Server")
 	}
@@ -340,7 +347,7 @@ func getSyncer(query url.Values, syncersByBidder map[string]usersync.Syncer) (us
 func isSyncerPriority(bidderNameFromSyncerQuery string, priorityGroups [][]string) bool {
 	for _, group := range priorityGroups {
 		for _, bidder := range group {
-			if bidderNameFromSyncerQuery == bidder {
+			if strings.EqualFold(bidderNameFromSyncerQuery, bidder) {
 				return true
 			}
 		}
diff --git a/exchange/adapter_builders.go b/exchange/adapter_builders.go
index c5b4b113..d8ab16c1 100755
--- a/exchange/adapter_builders.go
+++ b/exchange/adapter_builders.go
@@ -74,6 +74,7 @@ import (
 	"github.com/prebid/prebid-server/adapters/dianomi"
 	"github.com/prebid/prebid-server/adapters/dmx"
 	evolution "github.com/prebid/prebid-server/adapters/e_volution"
+	"github.com/prebid/prebid-server/adapters/edge226"
 	"github.com/prebid/prebid-server/adapters/emtv"
 	"github.com/prebid/prebid-server/adapters/eplanning"
 	"github.com/prebid/prebid-server/adapters/epom"
@@ -148,6 +149,7 @@ import (
 	"github.com/prebid/prebid-server/adapters/smartadserver"
 	"github.com/prebid/prebid-server/adapters/smarthub"
 	"github.com/prebid/prebid-server/adapters/smartrtb"
+	"github.com/prebid/prebid-server/adapters/smartx"
 	"github.com/prebid/prebid-server/adapters/smartyads"
 	"github.com/prebid/prebid-server/adapters/smilewanted"
 	"github.com/prebid/prebid-server/adapters/sonobi"
@@ -157,6 +159,7 @@ import (
 	"github.com/prebid/prebid-server/adapters/suntContent"
 	"github.com/prebid/prebid-server/adapters/taboola"
 	"github.com/prebid/prebid-server/adapters/tappx"
+	"github.com/prebid/prebid-server/adapters/teads"
 	"github.com/prebid/prebid-server/adapters/telaria"
 	"github.com/prebid/prebid-server/adapters/tpmn"
 	"github.com/prebid/prebid-server/adapters/trafficgate"
@@ -262,6 +265,7 @@ func newAdapterBuilders() map[openrtb_ext.BidderName]adapters.Builder {
 		openrtb_ext.BidderDecenterAds:       decenterads.Builder,
 		openrtb_ext.BidderDeepintent:        deepintent.Builder,
 		openrtb_ext.BidderDianomi:           dianomi.Builder,
+		openrtb_ext.BidderEdge226:           edge226.Builder,
 		openrtb_ext.BidderDmx:               dmx.Builder,
 		openrtb_ext.BidderEmtv:              emtv.Builder,
 		openrtb_ext.BidderEmxDigital:        cadentaperturemx.Builder,
@@ -348,6 +352,7 @@ func newAdapterBuilders() map[openrtb_ext.BidderName]adapters.Builder {
 		openrtb_ext.BidderSmartAdserver:     smartadserver.Builder,
 		openrtb_ext.BidderSmartHub:          smarthub.Builder,
 		openrtb_ext.BidderSmartRTB:          smartrtb.Builder,
+		openrtb_ext.BidderSmartx:            smartx.Builder,
 		openrtb_ext.BidderSmartyAds:         smartyads.Builder,
 		openrtb_ext.BidderSmileWanted:       smilewanted.Builder,
 		openrtb_ext.BidderSonobi:            sonobi.Builder,
@@ -359,6 +364,7 @@ func newAdapterBuilders() map[openrtb_ext.BidderName]adapters.Builder {
 		openrtb_ext.BidderSynacormedia:      imds.Builder,
 		openrtb_ext.BidderTaboola:           taboola.Builder,
 		openrtb_ext.BidderTappx:             tappx.Builder,
+		openrtb_ext.BidderTeads:             teads.Builder,
 		openrtb_ext.BidderTelaria:           telaria.Builder,
 		openrtb_ext.BidderTpmn:              tpmn.Builder,
 		openrtb_ext.BidderTrafficGate:       trafficgate.Builder,
diff --git a/exchange/utils.go b/exchange/utils.go
index 0a38e487..0d9c90cd 100644
--- a/exchange/utils.go
+++ b/exchange/utils.go
@@ -7,6 +7,7 @@ import (
 	"errors"
 	"fmt"
 	"math/rand"
+	"strings"
 
 	"github.com/buger/jsonparser"
 	"github.com/prebid/go-gdpr/vendorconsent"
@@ -710,7 +711,7 @@ func removeUnpermissionedEids(request *openrtb2.BidRequest, bidder string, reque
 		allowed := false
 		if rule, hasRule := eidRules[eid.Source]; hasRule {
 			for _, ruleBidder := range rule {
-				if ruleBidder == "*" || ruleBidder == bidder {
+				if ruleBidder == "*" || strings.EqualFold(ruleBidder, bidder) {
 					allowed = true
 					break
 				}
diff --git a/openrtb_ext/bidders.go b/openrtb_ext/bidders.go
index 67f43ec6..635f17cd 100644
--- a/openrtb_ext/bidders.go
+++ b/openrtb_ext/bidders.go
@@ -92,6 +92,7 @@ var coreBidderNames []BidderName = []BidderName{
 	BidderDecenterAds,
 	BidderDeepintent,
 	BidderDianomi,
+	BidderEdge226,
 	BidderDmx,
 	BidderEmtv,
 	BidderEmxDigital,
@@ -178,6 +179,7 @@ var coreBidderNames []BidderName = []BidderName{
 	BidderSmartAdserver,
 	BidderSmartHub,
 	BidderSmartRTB,
+	BidderSmartx,
 	BidderSmartyAds,
 	BidderSmileWanted,
 	BidderSonobi,
@@ -189,6 +191,7 @@ var coreBidderNames []BidderName = []BidderName{
 	BidderSynacormedia,
 	BidderTaboola,
 	BidderTappx,
+	BidderTeads,
 	BidderTelaria,
 	BidderTpmn,
 	BidderTrafficGate,
@@ -380,6 +383,7 @@ const (
 	BidderDecenterAds       BidderName = "decenterads"
 	BidderDeepintent        BidderName = "deepintent"
 	BidderDianomi           BidderName = "dianomi"
+	BidderEdge226           BidderName = "edge226"
 	BidderDmx               BidderName = "dmx"
 	BidderEmtv              BidderName = "emtv"
 	BidderEmxDigital        BidderName = "emx_digital"
@@ -466,6 +470,7 @@ const (
 	BidderSmartAdserver     BidderName = "smartadserver"
 	BidderSmartHub          BidderName = "smarthub"
 	BidderSmartRTB          BidderName = "smartrtb"
+	BidderSmartx            BidderName = "smartx"
 	BidderSmartyAds         BidderName = "smartyads"
 	BidderSmileWanted       BidderName = "smilewanted"
 	BidderSonobi            BidderName = "sonobi"
@@ -477,6 +482,7 @@ const (
 	BidderSynacormedia      BidderName = "synacormedia"
 	BidderTaboola           BidderName = "taboola"
 	BidderTappx             BidderName = "tappx"
+	BidderTeads             BidderName = "teads"
 	BidderTelaria           BidderName = "telaria"
 	BidderTpmn              BidderName = "tpmn"
 	BidderTrafficGate       BidderName = "trafficgate"
diff --git a/openrtb_ext/imp_edge226.go b/openrtb_ext/imp_edge226.go
new file mode 100644
index 00000000..44f3490e
--- /dev/null
+++ b/openrtb_ext/imp_edge226.go
@@ -0,0 +1,6 @@
+package openrtb_ext
+
+type ImpExtEdge226 struct {
+	PlacementID string `json:"placementId"`
+	EndpointID  string `json:"endpointId"`
+}
diff --git a/openrtb_ext/imp_smartx.go b/openrtb_ext/imp_smartx.go
new file mode 100644
index 00000000..9a2975b0
--- /dev/null
+++ b/openrtb_ext/imp_smartx.go
@@ -0,0 +1,10 @@
+package openrtb_ext
+
+type ExtImpSmartclip struct {
+	TagID       string `json:"tagId"`
+	PublisherID string `json:"publisherId"`
+	SiteID      string `json:"siteId"`
+	AppID       string `json:"appId"`
+	BundleID    string `json:"bundleId"`
+	StoreURL    string `json:"storeUrl"`
+}
diff --git a/openrtb_ext/imp_teads.go b/openrtb_ext/imp_teads.go
new file mode 100644
index 00000000..50d11ae9
--- /dev/null
+++ b/openrtb_ext/imp_teads.go
@@ -0,0 +1,5 @@
+package openrtb_ext
+
+type ExtImpTeads struct {
+	PlacementID string `json:"placementId"`
+}
diff --git a/static/bidder-info/edge226.yaml b/static/bidder-info/edge226.yaml
new file mode 100644
index 00000000..c4fbdefc
--- /dev/null
+++ b/static/bidder-info/edge226.yaml
@@ -0,0 +1,16 @@
+endpoint: "http://ssp.dauup.com/pserver"
+maintainer:
+  email: "audit@edge226.com"
+gvlVendorID: 1202
+capabilities:
+  site:
+    mediaTypes:
+    - banner
+    - video
+    - native
+    
+  app:
+    mediaTypes:
+    - banner
+    - video
+    - native
diff --git a/static/bidder-info/onetag.yaml b/static/bidder-info/onetag.yaml
index 3677921e..bc52faff 100644
--- a/static/bidder-info/onetag.yaml
+++ b/static/bidder-info/onetag.yaml
@@ -1,4 +1,6 @@
 endpoint: "https://prebid-server.onetag-sys.com/prebid-server/{{.PublisherID}}"
+openrtb:
+  version: 2.6
 maintainer:
   email: devops@onetag.com
 gvlVendorID: 241
diff --git a/static/bidder-info/smartx.yaml b/static/bidder-info/smartx.yaml
new file mode 100644
index 00000000..9a387ecf
--- /dev/null
+++ b/static/bidder-info/smartx.yaml
@@ -0,0 +1,12 @@
+endpoint: "https://bid.smartclip.net/bid/1005"
+maintainer:
+  email: "bidding@smartclip.tv"
+gvlVendorID: 115
+modifyingVastXmlAllowed: false
+capabilities:
+  site:
+    mediaTypes:
+      - video
+  app:
+    mediaTypes:
+      - video
diff --git a/static/bidder-info/teads.yaml b/static/bidder-info/teads.yaml
new file mode 100644
index 00000000..5dc428dd
--- /dev/null
+++ b/static/bidder-info/teads.yaml
@@ -0,0 +1,9 @@
+endpoint: "https://a.teads.tv/prebid-server/bid-request"
+maintainer:
+  email: "support-sdk@teads.com"
+gvlVendorID: 132
+capabilities:
+  app:
+    mediaTypes:
+      - banner
+      - video
\ No newline at end of file
diff --git a/static/bidder-info/vrtcal.yaml b/static/bidder-info/vrtcal.yaml
index 2aeb292a..1ce005cd 100644
--- a/static/bidder-info/vrtcal.yaml
+++ b/static/bidder-info/vrtcal.yaml
@@ -14,7 +14,11 @@ capabilities:
       - video
       - native
 userSync:
-  # vrtcal supports user syncing, but requires configuration by the host. contact this
-  # bidder directly at the email address in this file to ask about enabling user sync.
-  supports:
-    - redirect
+  iframe:
+    url: "https://usync.vrtcal.com/i?ssp=1804&synctype=iframe&us_privacy={{.USPrivacy}}&gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&gpp={{.GPP}}&gpp_sid={{.GPPSID}}&surl={{.RedirectURL}}"
+    userMacro: "$$VRTCALUSER$$"
+  redirect:
+    url: "https://usync.vrtcal.com/i?ssp=1804&synctype=redirect&us_privacy={{.USPrivacy}}&gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&gpp={{.GPP}}&gpp_sid={{.GPPSID}}&surl={{.RedirectURL}}"
+    userMacro: "$$VRTCALUSER$$"
+openrtb:
+  gpp-supported: true
diff --git a/static/bidder-params/edge226.json b/static/bidder-params/edge226.json
new file mode 100644
index 00000000..95b0fbda
--- /dev/null
+++ b/static/bidder-params/edge226.json
@@ -0,0 +1,23 @@
+{
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "title": "Edge226 Adapter Params",
+    "description": "A schema which validates params accepted by the Edge226 adapter",
+    "type": "object",
+  
+    "properties": {
+      "placementId": {
+        "type": "string",
+        "minLength": 1,
+        "description": "Placement ID"
+      },
+      "endpointId": {
+        "type": "string",
+        "minLength": 1,
+        "description": "Endpoint ID"
+      }
+    },
+    "oneOf": [
+      { "required": ["placementId"] },
+      { "required": ["endpointId"] }
+    ]
+  }
\ No newline at end of file
diff --git a/static/bidder-params/smartx.json b/static/bidder-params/smartx.json
new file mode 100644
index 00000000..3bd97456
--- /dev/null
+++ b/static/bidder-params/smartx.json
@@ -0,0 +1,37 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "title": "smartclip.tv Adapter Params",
+  "description": "A schema which validates params accepted by the smartclip.tv adapter",
+  "type": "object",
+  "properties": {
+    "tagId": {
+      "type": "string",
+      "description": "Ad tag ID"
+    },
+    "publisherId": {
+      "type": "string",
+      "description": "Publisher ID"
+    },
+    "siteId": {
+      "type": "string",
+      "description": "Site ID"
+    },
+    "appId": {
+      "type": "string",
+      "description": "App ID"
+    },
+    "bundleId": {
+      "type": "string",
+      "description": "Bundle ID"
+    },
+    "storeUrl": {
+      "type": "string",
+      "description": "AppStore URL"
+    }
+  },
+  "oneOf": [
+    { "required": ["siteId"] },
+    { "required": ["appId"] }
+  ],
+  "required": ["tagId", "publisherId"]
+}
\ No newline at end of file
diff --git a/static/bidder-params/teads.json b/static/bidder-params/teads.json
new file mode 100644
index 00000000..2b3f47d8
--- /dev/null
+++ b/static/bidder-params/teads.json
@@ -0,0 +1,15 @@
+{
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "title": "Teads Adapter Params",
+    "description": "A schema which validates params accepted by the Teads adapter",
+  
+    "type": "object",
+    "properties": {
+      "placementId": {
+        "type": "integer",
+        "description": "The placement id.",
+        "minimum": 1
+      }
+    },
+    "required": ["placementId"]
+  }
\ No newline at end of file


Test patch:
diff --git a/adapters/edge226/edge226_test.go b/adapters/edge226/edge226_test.go
new file mode 100644
index 00000000..c5e40ce7
--- /dev/null
+++ b/adapters/edge226/edge226_test.go
@@ -0,0 +1,20 @@
+package edge226
+
+import (
+	"testing"
+
+	"github.com/prebid/prebid-server/adapters/adapterstest"
+	"github.com/prebid/prebid-server/config"
+	"github.com/prebid/prebid-server/openrtb_ext"
+)
+
+func TestJsonSamples(t *testing.T) {
+	bidder, buildErr := Builder(openrtb_ext.BidderEdge226, config.Adapter{
+		Endpoint: "http://test.com/pserver"}, config.Server{ExternalUrl: "http://hosturl.com", GvlID: 1, DataCenter: "2"})
+
+	if buildErr != nil {
+		t.Fatalf("Builder returned unexpected error %v", buildErr)
+	}
+
+	adapterstest.RunJSONBidderTest(t, "edge226test", bidder)
+}
diff --git a/adapters/edge226/edge226test/exemplary/endpointId.json b/adapters/edge226/edge226test/exemplary/endpointId.json
new file mode 100644
index 00000000..741c1f8c
--- /dev/null
+++ b/adapters/edge226/edge226test/exemplary/endpointId.json
@@ -0,0 +1,125 @@
+{
+    "mockBidRequest": {
+        "id": "test-request-id",
+        "device": {
+            "ip": "123.123.123.123",
+            "ua": "iPad"
+        },
+        "app": {
+            "id": "1",
+            "bundle": "com.wls.testwlsapplication"
+        },
+        "imp": [
+            {
+                "id": "test-imp-id",
+                "tagid": "test",
+                "banner": {
+                    "format": [
+                        {
+                            "w": 300,
+                            "h": 250
+                        },
+                        {
+                            "w": 300,
+                            "h": 600
+                        }
+                    ]
+                },
+                "ext": {
+                    "bidder": {
+                        "endpointId": "test"
+                    }
+                }
+            }
+        ]
+    },
+    "httpCalls": [
+        {
+            "expectedRequest": {
+                "uri": "http://test.com/pserver",
+                "body": {
+                    "id": "test-request-id",
+                    "imp": [
+                        {
+                            "id": "test-imp-id",
+                            "tagid": "test",
+                            "banner": {
+                                "format": [
+                                    {
+                                        "w": 300,
+                                        "h": 250
+                                    },
+                                    {
+                                        "w": 300,
+                                        "h": 600
+                                    }
+                                ]
+                            },
+                            "ext": {
+                                "bidder": {
+                                    "endpointId": "test",
+                                    "type": "network"
+                                }
+                            }
+                        }
+                    ],
+                    "app": {
+                        "id": "1",
+                        "bundle": "com.wls.testwlsapplication"
+                    },
+                    "device": {
+                        "ip": "123.123.123.123",
+                        "ua": "iPad"
+                    }
+                }
+            },
+            "mockResponse": {
+                "status": 200,
+                "body": {
+                    "id": "test-request-id",
+                    "seatbid": [
+                        {
+                            "bid": [
+                                {
+                                    "id": "test_bid_id",
+                                    "impid": "test-imp-id",
+                                    "price": 0.27543,
+                                    "adm": "<iframe id=\"adm-banner-16\" width=\"300\" height=\"250\" frameborder=\"0\" marginheight=\"0\" marginwidth=\"0\" style=\"{overflow:hidden}\" src=\"http://test.com/pserver&k=882b2510ed6d6c94fa69c99aa522a708\"></iframe>",
+                                    "cid": "test_cid",
+                                    "crid": "test_crid",
+                                    "dealid": "test_dealid",
+                                    "w": 300,
+                                    "h": 250,
+                                    "mtype": 1
+                                }
+                            ],
+                            "seat": "edge226"
+                        }
+                    ],
+                    "cur": "USD"
+                }
+            }
+        }
+    ],
+    "expectedBidResponses": [
+        {
+            "bids": [
+                {
+                    "bid": {
+                        "id": "test_bid_id",
+                        "impid": "test-imp-id",
+                        "price": 0.27543,
+                        "adm": "<iframe id=\"adm-banner-16\" width=\"300\" height=\"250\" frameborder=\"0\" marginheight=\"0\" marginwidth=\"0\" style=\"{overflow:hidden}\" src=\"http://test.com/pserver&k=882b2510ed6d6c94fa69c99aa522a708\"></iframe>",
+                        "cid": "test_cid",
+                        "crid": "test_crid",
+                        "dealid": "test_dealid",
+                        "w": 300,
+                        "h": 250,
+                        "mtype": 1
+                    },
+                    "type": "banner"
+                }
+            ]
+        }
+    ]
+}
\ No newline at end of file
diff --git a/adapters/edge226/edge226test/exemplary/simple-banner.json b/adapters/edge226/edge226test/exemplary/simple-banner.json
new file mode 100644
index 00000000..741c1f8c
--- /dev/null
+++ b/adapters/edge226/edge226test/exemplary/simple-banner.json
@@ -0,0 +1,125 @@
+{
+    "mockBidRequest": {
+        "id": "test-request-id",
+        "device": {
+            "ip": "123.123.123.123",
+            "ua": "iPad"
+        },
+        "app": {
+            "id": "1",
+            "bundle": "com.wls.testwlsapplication"
+        },
+        "imp": [
+            {
+                "id": "test-imp-id",
+                "tagid": "test",
+                "banner": {
+                    "format": [
+                        {
+                            "w": 300,
+                            "h": 250
+                        },
+                        {
+                            "w": 300,
+                            "h": 600
+                        }
+                    ]
+                },
+                "ext": {
+                    "bidder": {
+                        "endpointId": "test"
+                    }
+                }
+            }
+        ]
+    },
+    "httpCalls": [
+        {
+            "expectedRequest": {
+                "uri": "http://test.com/pserver",
+                "body": {
+                    "id": "test-request-id",
+                    "imp": [
+                        {
+                            "id": "test-imp-id",
+                            "tagid": "test",
+                            "banner": {
+                                "format": [
+                                    {
+                                        "w": 300,
+                                        "h": 250
+                                    },
+                                    {
+                                        "w": 300,
+                                        "h": 600
+                                    }
+                                ]
+                            },
+                            "ext": {
+                                "bidder": {
+                                    "endpointId": "test",
+                                    "type": "network"
+                                }
+                            }
+                        }
+                    ],
+                    "app": {
+                        "id": "1",
+                        "bundle": "com.wls.testwlsapplication"
+                    },
+                    "device": {
+                        "ip": "123.123.123.123",
+                        "ua": "iPad"
+                    }
+                }
+            },
+            "mockResponse": {
+                "status": 200,
+                "body": {
+                    "id": "test-request-id",
+                    "seatbid": [
+                        {
+                            "bid": [
+                                {
+                                    "id": "test_bid_id",
+                                    "impid": "test-imp-id",
+                                    "price": 0.27543,
+                                    "adm": "<iframe id=\"adm-banner-16\" width=\"300\" height=\"250\" frameborder=\"0\" marginheight=\"0\" marginwidth=\"0\" style=\"{overflow:hidden}\" src=\"http://test.com/pserver&k=882b2510ed6d6c94fa69c99aa522a708\"></iframe>",
+                                    "cid": "test_cid",
+                                    "crid": "test_crid",
+                                    "dealid": "test_dealid",
+                                    "w": 300,
+                                    "h": 250,
+                                    "mtype": 1
+                                }
+                            ],
+                            "seat": "edge226"
+                        }
+                    ],
+                    "cur": "USD"
+                }
+            }
+        }
+    ],
+    "expectedBidResponses": [
+        {
+            "bids": [
+                {
+                    "bid": {
+                        "id": "test_bid_id",
+                        "impid": "test-imp-id",
+                        "price": 0.27543,
+                        "adm": "<iframe id=\"adm-banner-16\" width=\"300\" height=\"250\" frameborder=\"0\" marginheight=\"0\" marginwidth=\"0\" style=\"{overflow:hidden}\" src=\"http://test.com/pserver&k=882b2510ed6d6c94fa69c99aa522a708\"></iframe>",
+                        "cid": "test_cid",
+                        "crid": "test_crid",
+                        "dealid": "test_dealid",
+                        "w": 300,
+                        "h": 250,
+                        "mtype": 1
+                    },
+                    "type": "banner"
+                }
+            ]
+        }
+    ]
+}
\ No newline at end of file
diff --git a/adapters/edge226/edge226test/exemplary/simple-native.json b/adapters/edge226/edge226test/exemplary/simple-native.json
new file mode 100644
index 00000000..581864cd
--- /dev/null
+++ b/adapters/edge226/edge226test/exemplary/simple-native.json
@@ -0,0 +1,109 @@
+{
+    "mockBidRequest": {
+        "id": "test-request-id",
+        "device": {
+            "ip": "123.123.123.123",
+            "ua": "iPad"
+        },
+        "app": {
+            "id": "1",
+            "bundle": "com.wls.testwlsapplication"
+        },
+        "imp": [
+            {
+                "id": "test-imp-id",
+                "tagid": "test",
+                "native": {
+                    "request": "{\"ver\":\"1.1\",\"layout\":1,\"adunit\":2,\"plcmtcnt\":6,\"plcmttype\":4,\"assets\":[{\"id\":1,\"required\":1,\"title\":{\"len\":75}},{\"id\":2,\"required\":1,\"img\":{\"wmin\":492,\"hmin\":328,\"type\":3,\"mimes\":[\"image/jpeg\",\"image/jpg\",\"image/png\"]}},{\"id\":4,\"required\":0,\"data\":{\"type\":6}},{\"id\":5,\"required\":0,\"data\":{\"type\":7}},{\"id\":6,\"required\":0,\"data\":{\"type\":1,\"len\":20}}]}",
+                    "ver": "1.1"
+                },
+                "ext": {
+                    "bidder": {
+                        "placementId": "test"
+                    }
+                }
+            }
+        ]
+    },
+    "httpCalls": [
+        {
+            "expectedRequest": {
+                "uri": "http://test.com/pserver",
+                "body": {
+                    "id": "test-request-id",
+                    "imp": [
+                        {
+                            "id": "test-imp-id",
+                            "tagid": "test",
+                            "native": {
+                                "request": "{\"ver\":\"1.1\",\"layout\":1,\"adunit\":2,\"plcmtcnt\":6,\"plcmttype\":4,\"assets\":[{\"id\":1,\"required\":1,\"title\":{\"len\":75}},{\"id\":2,\"required\":1,\"img\":{\"wmin\":492,\"hmin\":328,\"type\":3,\"mimes\":[\"image/jpeg\",\"image/jpg\",\"image/png\"]}},{\"id\":4,\"required\":0,\"data\":{\"type\":6}},{\"id\":5,\"required\":0,\"data\":{\"type\":7}},{\"id\":6,\"required\":0,\"data\":{\"type\":1,\"len\":20}}]}",
+                                "ver": "1.1"
+                            },
+                            "ext": {
+                                "bidder": {
+                                    "placementId": "test",
+                                    "type": "publisher"
+                                }
+                            }
+                        }
+                    ],
+                    "app": {
+                        "id": "1",
+                        "bundle": "com.wls.testwlsapplication"
+                    },
+                    "device": {
+                        "ip": "123.123.123.123",
+                        "ua": "iPad"
+                    }
+                }
+            },
+            "mockResponse": {
+                "status": 200,
+                "body": {
+                    "id": "test-request-id",
+                    "seatbid": [
+                        {
+                            "bid": [
+                                {
+                                    "id": "test_bid_id",
+                                    "impid": "test-imp-id",
+                                    "price": 0.27543,
+                                    "adm": "<iframe id=\"adm-banner-16\" width=\"300\" height=\"250\" frameborder=\"0\" marginheight=\"0\" marginwidth=\"0\" style=\"{overflow:hidden}\" src=\"http://test.com/pserver&k=882b2510ed6d6c94fa69c99aa522a708\"></iframe>",
+                                    "cid": "test_cid",
+                                    "crid": "test_crid",
+                                    "dealid": "test_dealid",
+                                    "w": 300,
+                                    "h": 250,
+                                    "mtype": 4
+                                }
+                            ],
+                            "seat": "edge226"
+                        }
+                    ],
+                    "cur": "USD"
+                }
+            }
+        }
+    ],
+    "expectedBidResponses": [
+        {
+            "bids": [
+                {
+                    "bid": {
+                        "id": "test_bid_id",
+                        "impid": "test-imp-id",
+                        "price": 0.27543,
+                        "adm": "<iframe id=\"adm-banner-16\" width=\"300\" height=\"250\" frameborder=\"0\" marginheight=\"0\" marginwidth=\"0\" style=\"{overflow:hidden}\" src=\"http://test.com/pserver&k=882b2510ed6d6c94fa69c99aa522a708\"></iframe>",
+                        "cid": "test_cid",
+                        "crid": "test_crid",
+                        "dealid": "test_dealid",
+                        "w": 300,
+                        "h": 250,
+                        "mtype": 4
+                    },
+                    "type": "native"
+                }
+            ]
+        }
+    ]
+}
\ No newline at end of file
diff --git a/adapters/edge226/edge226test/exemplary/simple-video.json b/adapters/edge226/edge226test/exemplary/simple-video.json
new file mode 100644
index 00000000..c14a1bd9
--- /dev/null
+++ b/adapters/edge226/edge226test/exemplary/simple-video.json
@@ -0,0 +1,120 @@
+{
+    "mockBidRequest": {
+        "id": "test-request-id",
+        "device": {
+            "ip": "123.123.123.123",
+            "ua": "iPad"
+        },
+        "app": {
+            "id": "1",
+            "bundle": "com.wls.testwlsapplication"
+        },
+        "imp": [
+            {
+                "id": "test-imp-id",
+                "tagid": "test",
+                "video": {
+                    "mimes": [
+                        "video/mp4"
+                    ],
+                    "protocols": [
+                        2,
+                        5
+                    ],
+                    "w": 1024,
+                    "h": 576
+                },
+                "ext": {
+                    "bidder": {
+                        "placementId": "test"
+                    }
+                }
+            }
+        ]
+    },
+    "httpCalls": [
+        {
+            "expectedRequest": {
+                "uri": "http://test.com/pserver",
+                "body": {
+                    "id": "test-request-id",
+                    "device": {
+                        "ip": "123.123.123.123",
+                        "ua": "iPad"
+                    },
+                    "app": {
+                        "id": "1",
+                        "bundle": "com.wls.testwlsapplication"
+                    },
+                    "imp": [
+                        {
+                            "id": "test-imp-id",
+                            "tagid": "test",
+                            "video": {
+                                "mimes": [
+                                    "video/mp4"
+                                ],
+                                "protocols": [
+                                    2,
+                                    5
+                                ],
+                                "w": 1024,
+                                "h": 576
+                            },
+                            "ext": {
+                                "bidder": {
+                                    "placementId": "test",
+                                    "type": "publisher"
+                                }
+                            }
+                        }
+                    ]
+                }
+            },
+            "mockResponse": {
+                "status": 200,
+                "body": {
+                    "id": "test-request-id",
+                    "seatbid": [
+                        {
+                            "bid": [
+                                {
+                                    "id": "test_bid_id",
+                                    "impid": "test-imp-id",
+                                    "price": 0.27543,
+                                    "adm": "<VAST version=\"3.0\"><Ad id=\"20001\" sequence=\"1\"><InLine><AdSystem version=\"4.0\"><![CDATA[iabtechlab]]></AdSystem><AdTitle><![CDATA[Inline Simple Ad]]></AdTitle><Impression><![CDATA[]]></Impression><Creatives><Creative id=\"5480\" sequence=\"1\"><Linear><Duration>00:01:00</Duration><MediaFiles><MediaFile id=\"5246\" delivery=\"progressive\" type=\"video/mp4\" bitrate=\"600\" width=\"640\" height=\"360\" minBitrate=\"500\" maxBitrate=\"700\" scalable=\"1\" maintainAspectRatio=\"1\" codec=\"0\"><![CDATA[https://s0.2mdn.net/4253510/google_ddm_animation_480P.mp4]]></MediaFile></MediaFiles><VideoClicks><ClickThrough id=\"blog\"><![CDATA[https://example.com]]></ClickThrough></VideoClicks></Linear></Creative></Creatives></InLine></Ad></VAST>",
+                                    "cid": "test_cid",
+                                    "crid": "test_crid",
+                                    "dealid": "test_dealid",
+                                    "mtype": 2
+                                }
+                            ],
+                            "seat": "edge226"
+                        }
+                    ],
+                    "cur": "USD"
+                }
+            }
+        }
+    ],
+    "expectedBidResponses": [
+        {
+            "currency": "USD",
+            "bids": [
+                {
+                    "bid": {
+                        "id": "test_bid_id",
+                        "impid": "test-imp-id",
+                        "price": 0.27543,
+                        "adm": "<VAST version=\"3.0\"><Ad id=\"20001\" sequence=\"1\"><InLine><AdSystem version=\"4.0\"><![CDATA[iabtechlab]]></AdSystem><AdTitle><![CDATA[Inline Simple Ad]]></AdTitle><Impression><![CDATA[]]></Impression><Creatives><Creative id=\"5480\" sequence=\"1\"><Linear><Duration>00:01:00</Duration><MediaFiles><MediaFile id=\"5246\" delivery=\"progressive\" type=\"video/mp4\" bitrate=\"600\" width=\"640\" height=\"360\" minBitrate=\"500\" maxBitrate=\"700\" scalable=\"1\" maintainAspectRatio=\"1\" codec=\"0\"><![CDATA[https://s0.2mdn.net/4253510/google_ddm_animation_480P.mp4]]></MediaFile></MediaFiles><VideoClicks><ClickThrough id=\"blog\"><![CDATA[https://example.com]]></ClickThrough></VideoClicks></Linear></Creative></Creatives></InLine></Ad></VAST>",
+                        "cid": "test_cid",
+                        "crid": "test_crid",
+                        "dealid": "test_dealid",
+                        "mtype": 2
+                    },
+                    "type": "video"
+                }
+            ]
+        }
+    ]
+}
\ No newline at end of file
diff --git a/adapters/edge226/edge226test/exemplary/simple-web-banner.json b/adapters/edge226/edge226test/exemplary/simple-web-banner.json
new file mode 100644
index 00000000..6cc72950
--- /dev/null
+++ b/adapters/edge226/edge226test/exemplary/simple-web-banner.json
@@ -0,0 +1,125 @@
+{
+    "mockBidRequest": {
+        "id": "test-request-id",
+        "imp": [
+            {
+                "id": "test-imp-id",
+                "tagid": "test",
+                "banner": {
+                    "format": [
+                        {
+                            "w": 300,
+                            "h": 250
+                        },
+                        {
+                            "w": 300,
+                            "h": 600
+                        }
+                    ]
+                },
+                "ext": {
+                    "bidder": {
+                        "placementId": "test"
+                    }
+                }
+            }
+        ],
+        "site": {
+            "id": "1",
+            "domain": "test.com"
+        },
+        "device": {
+            "ip": "123.123.123.123",
+            "ua": "Ubuntu"
+        }
+    },
+    "httpCalls": [
+        {
+            "expectedRequest": {
+                "uri": "http://test.com/pserver",
+                "body": {
+                    "id": "test-request-id",
+                    "imp": [
+                        {
+                            "id": "test-imp-id",
+                            "tagid": "test",
+                            "banner": {
+                                "format": [
+                                    {
+                                        "w": 300,
+                                        "h": 250
+                                    },
+                                    {
+                                        "w": 300,
+                                        "h": 600
+                                    }
+                                ]
+                            },
+                            "ext": {
+                                "bidder": {
+                                    "placementId": "test",
+                                    "type": "publisher"
+                                }
+                            }
+                        }
+                    ],
+                    "site": {
+                        "id": "1",
+                        "domain": "test.com"
+                    },
+                    "device": {
+                        "ip": "123.123.123.123",
+                        "ua": "Ubuntu"
+                    }
+                }
+            },
+            "mockResponse": {
+                "status": 200,
+                "body": {
+                    "id": "test-request-id",
+                    "seatbid": [
+                        {
+                            "bid": [
+                                {
+                                    "id": "test_bid_id",
+                                    "impid": "test-imp-id",
+                                    "price": 0.27543,
+                                    "adm": "<iframe id=\"adm-banner-1\" width=\"468\" height=\"60\" frameborder=\"0\" marginheight=\"0\" marginwidth=\"0\" style=\"{overflow:hidden}\" src=\"http://test.com/pserver&k=bc2d316f39931a07d9a8dd249bf85fc0\"></iframe>",
+                                    "cid": "test_cid",
+                                    "crid": "test_crid",
+                                    "dealid": "test_dealid",
+                                    "w": 468,
+                                    "h": 60,
+                                    "mtype": 1
+                                }
+                            ],
+                            "seat": "edge226"
+                        }
+                    ],
+                    "cur": "USD"
+                }
+            }
+        }
+    ],
+    "expectedBidResponses": [
+        {
+            "bids": [
+                {
+                    "bid": {
+                        "id": "test_bid_id",
+                        "impid": "test-imp-id",
+                        "price": 0.27543,
+                        "adm": "<iframe id=\"adm-banner-1\" width=\"468\" height=\"60\" frameborder=\"0\" marginheight=\"0\" marginwidth=\"0\" style=\"{overflow:hidden}\" src=\"http://test.com/pserver&k=bc2d316f39931a07d9a8dd249bf85fc0\"></iframe>",
+                        "cid": "test_cid",
+                        "crid": "test_crid",
+                        "dealid": "test_dealid",
+                        "w": 468,
+                        "h": 60,
+                        "mtype": 1
+                    },
+                    "type": "banner"
+                }
+            ]
+        }
+    ]
+}
\ No newline at end of file
diff --git a/adapters/edge226/edge226test/supplemental/bad_media_type.json b/adapters/edge226/edge226test/supplemental/bad_media_type.json
new file mode 100644
index 00000000..75b13412
--- /dev/null
+++ b/adapters/edge226/edge226test/supplemental/bad_media_type.json
@@ -0,0 +1,82 @@
+{
+  "mockBidRequest": {
+    "id": "test-request-id",
+    "imp": [
+      {
+        "id": "test-imp-id",
+        "ext": {
+          "bidder": {
+            "placementId": "test"
+          }
+        }
+      }
+    ],
+    "app": {
+      "id": "1",
+      "bundle": "com.wls.testwlsapplication"
+    },
+    "device": {
+      "ip": "123.123.123.123",
+      "ifa": "sdjfksdf-dfsds-dsdg-dsgg"
+    }
+  },
+  "httpCalls": [{
+    "expectedRequest": {
+      "uri": "http://test.com/pserver",
+      "body": {
+        "id": "test-request-id",
+        "imp": [
+          {
+            "id": "test-imp-id",
+            "ext": {
+              "bidder": {
+                "placementId": "test",
+                "type": "publisher"
+              }
+            }
+          }
+        ],
+        "app": {
+          "id": "1",
+          "bundle": "com.wls.testwlsapplication"
+        },
+        "device": {
+          "ip": "123.123.123.123",
+          "ifa": "sdjfksdf-dfsds-dsdg-dsgg"
+        }
+      }
+    },
+    "mockResponse": {
+      "status": 200,
+      "body": {
+        "id": "test-request-id",
+        "seatbid": [
+          {
+            "bid": [
+              {
+                "id": "test_bid_id",
+                "impid": "test-imp-id",
+                "price": 0.27543,
+                "adm": "<iframe id=\"adm-banner-16\" width=\"300\" height=\"250\" frameborder=\"0\" marginheight=\"0\" marginwidth=\"0\" style=\"{overflow:hidden}\" src=\"http://test.com/pserver&k=882b2510ed6d6c94fa69c99aa522a708\"></iframe>",
+                "cid": "test_cid",
+                "crid": "test_crid",
+                "dealid": "test_dealid",
+                "w": 300,
+                "h": 250,
+                "ext": {}
+              }
+            ],
+            "seat": "edge226"
+          }
+        ],
+        "cur": "USD"
+      }
+    }
+  }],
+  "expectedMakeBidsErrors": [
+    {
+      "value": "Unable to fetch mediaType in multi-format: test-imp-id",
+      "comparison": "literal"
+    }
+  ]
+}
diff --git a/adapters/edge226/edge226test/supplemental/bad_response.json b/adapters/edge226/edge226test/supplemental/bad_response.json
new file mode 100644
index 00000000..1e5664ba
--- /dev/null
+++ b/adapters/edge226/edge226test/supplemental/bad_response.json
@@ -0,0 +1,84 @@
+{
+  "mockBidRequest": {
+    "id": "test-request-id",
+    "imp": [
+      {
+        "id": "test-imp-id",
+        "banner": {
+          "format": [
+            {
+              "w": 300,
+              "h": 250
+            },
+            {
+              "w": 300,
+              "h": 600
+            }
+          ]
+        },
+        "ext": {
+          "bidder": {
+            "placementId": "test"
+          }
+        }
+      }
+    ],
+    "app": {
+      "id": "1",
+      "bundle": "com.wls.testwlsapplication"
+    },
+    "device": {
+      "ip": "123.123.123.123",
+      "ifa": "sdjfksdf-dfsds-dsdg-dsgg"
+    }
+  },
+  "httpCalls": [{
+    "expectedRequest": {
+      "uri": "http://test.com/pserver",
+      "body": {
+        "id": "test-request-id",
+        "imp": [
+          {
+            "id": "test-imp-id",
+            "banner": {
+              "format": [
+                {
+                  "w": 300,
+                  "h": 250
+                },
+                {
+                  "w": 300,
+                  "h": 600
+                }
+              ]
+            },
+            "ext": {
+              "bidder": {
+                "placementId": "test",
+                "type": "publisher"
+              }
+            }
+          }
+        ],
+        "app": {
+          "id": "1",
+          "bundle": "com.wls.testwlsapplication"
+        },
+        "device": {
+          "ip": "123.123.123.123",
+          "ifa": "sdjfksdf-dfsds-dsdg-dsgg"
+        }
+      }
+    },
+    "mockResponse": {
+      "status": 200,
+      "body": ""
+    }
+  }],
+  "expectedMakeBidsErrors": [
+    {
+      "value": "json: cannot unmarshal string into Go value of type openrtb2.BidResponse",
+      "comparison": "literal"
+    }
+  ]
+}
diff --git a/adapters/edge226/edge226test/supplemental/status-204.json b/adapters/edge226/edge226test/supplemental/status-204.json
new file mode 100644
index 00000000..da929ce6
--- /dev/null
+++ b/adapters/edge226/edge226test/supplemental/status-204.json
@@ -0,0 +1,79 @@
+{
+  "mockBidRequest": {
+    "id": "test-request-id",
+    "imp": [
+      {
+        "id": "test-imp-id",
+        "banner": {
+          "format": [
+            {
+              "w": 300,
+              "h": 250
+            },
+            {
+              "w": 300,
+              "h": 600
+            }
+          ]
+        },
+        "ext": {
+          "bidder": {
+            "placementId": "test"
+          }
+        }
+      }
+    ],
+    "app": {
+      "id": "1",
+      "bundle": "com.wls.testwlsapplication"
+    },
+    "device": {
+      "ip": "123.123.123.123",
+      "ifa": "sdjfksdf-dfsds-dsdg-dsgg"
+    }
+  },
+  "httpCalls": [{
+    "expectedRequest": {
+      "uri": "http://test.com/pserver",
+      "body": {
+        "id": "test-request-id",
+        "imp": [
+          {
+            "id": "test-imp-id",
+            "banner": {
+              "format": [
+                {
+                  "w": 300,
+                  "h": 250
+                },
+                {
+                  "w": 300,
+                  "h": 600
+                }
+              ]
+            },
+            "ext": {
+              "bidder": {
+                "placementId": "test",
+                "type": "publisher"
+              }
+            }
+          }
+        ],
+        "app": {
+          "id": "1",
+          "bundle": "com.wls.testwlsapplication"
+        },
+        "device": {
+          "ip": "123.123.123.123",
+          "ifa": "sdjfksdf-dfsds-dsdg-dsgg"
+        }
+      }
+    },
+    "mockResponse": {
+      "status": 204,
+      "body": {}
+    }
+  }],
+  "expectedBidResponses": []
+}
diff --git a/adapters/edge226/edge226test/supplemental/status-not-200.json b/adapters/edge226/edge226test/supplemental/status-not-200.json
new file mode 100644
index 00000000..cf1847c2
--- /dev/null
+++ b/adapters/edge226/edge226test/supplemental/status-not-200.json
@@ -0,0 +1,84 @@
+{
+  "mockBidRequest": {
+    "id": "test-request-id",
+    "imp": [
+      {
+        "id": "test-imp-id",
+        "banner": {
+          "format": [
+            {
+              "w": 300,
+              "h": 250
+            },
+            {
+              "w": 300,
+              "h": 600
+            }
+          ]
+        },
+        "ext": {
+          "bidder": {
+            "placementId": "test"
+          }
+        }
+      }
+    ],
+    "app": {
+      "id": "1",
+      "bundle": "com.wls.testwlsapplication"
+    },
+    "device": {
+      "ip": "123.123.123.123",
+      "ifa": "sdjfksdf-dfsds-dsdg-dsgg"
+    }
+  },
+  "httpCalls": [{
+    "expectedRequest": {
+      "uri": "http://test.com/pserver",
+      "body": {
+        "id": "test-request-id",
+        "imp": [
+          {
+            "id": "test-imp-id",
+            "banner": {
+              "format": [
+                {
+                  "w": 300,
+                  "h": 250
+                },
+                {
+                  "w": 300,
+                  "h": 600
+                }
+              ]
+            },
+            "ext": {
+              "bidder": {
+                "placementId": "test",
+                "type": "publisher"
+              }
+            }
+          }
+        ],
+        "app": {
+          "id": "1",
+          "bundle": "com.wls.testwlsapplication"
+        },
+        "device": {
+          "ip": "123.123.123.123",
+          "ifa": "sdjfksdf-dfsds-dsdg-dsgg"
+        }
+      }
+    },
+    "mockResponse": {
+      "status": 404,
+      "body": {}
+    }
+  }],
+  "expectedMakeBidsErrors": [
+    {
+      "value": "Unexpected status code: 404. Run with request.debug = 1 for more info",
+      "comparison": "literal"
+    }
+  ]
+}
diff --git a/adapters/edge226/params_test.go b/adapters/edge226/params_test.go
new file mode 100644
index 00000000..3191bc62
--- /dev/null
+++ b/adapters/edge226/params_test.go
@@ -0,0 +1,47 @@
+package edge226
+
+import (
+	"encoding/json"
+	"testing"
+
+	"github.com/prebid/prebid-server/openrtb_ext"
+)
+
+func TestValidParams(t *testing.T) {
+	validator, err := openrtb_ext.NewBidderParamsValidator("../../static/bidder-params")
+	if err != nil {
+		t.Fatalf("Failed to fetch the json schema. %v", err)
+	}
+
+	for _, p := range validParams {
+		if err := validator.Validate(openrtb_ext.BidderEdge226, json.RawMessage(p)); err != nil {
+			t.Errorf("Schema rejected valid params: %s", p)
+		}
+	}
+}
+
+func TestInvalidParams(t *testing.T) {
+	validator, err := openrtb_ext.NewBidderParamsValidator("../../static/bidder-params")
+	if err != nil {
+		t.Fatalf("Failed to fetch the json schema. %v", err)
+	}
+
+	for _, p := range invalidParams {
+		if err := validator.Validate(openrtb_ext.BidderEdge226, json.RawMessage(p)); err == nil {
+			t.Errorf("Schema allowed invalid params: %s", p)
+		}
+	}
+}
+
+var validParams = []string{
+	`{"placementId": "test"}`,
+	`{"placementId": "1"}`,
+	`{"endpointId": "test"}`,
+	`{"endpointId": "1"}`,
+}
+
+var invalidParams = []string{
+	`{"placementId": 42}`,
+	`{"endpointId": 42}`,
+	`{"placementId": "1", "endpointId": "1"}`,
+}
diff --git a/adapters/pubmatic/pubmatictest/exemplary/fledge.json b/adapters/pubmatic/pubmatictest/exemplary/fledge.json
new file mode 100644
index 00000000..793f0984
--- /dev/null
+++ b/adapters/pubmatic/pubmatictest/exemplary/fledge.json
@@ -0,0 +1,166 @@
+{
+  "mockBidRequest": {
+    "id": "test-request-id",
+    "imp": [
+      {
+        "id": "test-imp-id",
+        "banner": {
+          "format": [
+            {
+              "w": 728,
+              "h": 90
+            }
+          ]
+        },
+        "ext": {
+          "ae": 1,
+          "bidder": {
+            "publisherId": "999",
+            "adSlot": "AdTag_Div1@300x250"
+          }
+        }
+      }
+    ]
+  },
+  "httpCalls": [
+    {
+      "expectedRequest": {
+        "uri": "https://hbopenbid.pubmatic.com/translator?source=prebid-server",
+        "body": {
+          "id": "test-request-id",
+          "imp": [
+            {
+              "id": "test-imp-id",
+              "banner": {
+                "format": [
+                  {
+                    "w": 728,
+                    "h": 90
+                  }
+                ],
+                "h": 250,
+                "w": 300
+              },
+              "tagid": "AdTag_Div1",
+              "ext": {
+                "ae": 1
+              }
+            }
+          ],
+          "ext": {"prebid":{}}
+        }
+      },
+      "mockResponse": {
+        "status": 200,
+        "body": {
+          "id": "test-request-id",
+          "seatbid": [
+            {
+              "seat": "pubmatic",
+              "bid": [
+                {
+                  "id": "9d8e77c2-ee0f-4781-af59-5359493b11af",
+                  "impid": "test-imp-id",
+                  "price": 1.1,
+                  "adm": "some-test-ad",
+                  "crid": "crid_10",
+                  "h": 90,
+                  "w": 728,
+                  "ext": {}
+                }
+              ]
+            }
+          ],
+          "cur": "USD",
+          "ext": {
+            "fledge_auction_configs": {
+              "test-imp-id": {
+                "seller": "PUBMATIC_SELLER_CONSTANT_STRING",
+                "sellerTimeout": 123,
+                "decisionLogicUrl": "PUBMATIC_URL_CONSTANT_STRING",
+                "interestGroupBuyers": [
+                  "somedomain1.com",
+                  "somedomain2.com",
+                  "somedomain3.com",
+                  "somedomain4.com"
+                ],
+                "perBuyerSignals": {
+                  "somedomain1.com": {
+                    "multiplier": 1,
+                    "win_reporting_id": "1234"
+                  },
+                  "somedomain2.com": {
+                    "multiplier": 2,
+                    "win_reporting_id": "2345"
+                  },
+                  "somedomain3.com": {
+                    "multiplier": 3,
+                    "win_reporting_id": "3456"
+                  },
+                  "somedomain4.com": {
+                    "multiplier": 4,
+                    "win_reporting_id": "4567"
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  ],
+  "expectedBidResponses": [
+    {
+      "currency": "USD",
+      "bids": [
+        {
+          "bid": {
+            "id": "9d8e77c2-ee0f-4781-af59-5359493b11af",
+            "impid": "test-imp-id",
+            "price": 1.1,
+            "adm": "some-test-ad",
+            "crid": "crid_10",
+            "w": 728,
+            "h": 90,
+            "ext": {}
+          },
+          "type": "banner"
+        }
+      ],
+      "fledgeauctionconfigs": [
+        {
+          "impid": "test-imp-id",
+          "config": {
+            "seller": "PUBMATIC_SELLER_CONSTANT_STRING",
+            "sellerTimeout": 123,
+            "decisionLogicUrl": "PUBMATIC_URL_CONSTANT_STRING",
+            "interestGroupBuyers": [
+              "somedomain1.com",
+              "somedomain2.com",
+              "somedomain3.com",
+              "somedomain4.com"
+            ],
+            "perBuyerSignals": {
+              "somedomain1.com": {
+                "multiplier": 1,
+                "win_reporting_id": "1234"
+              },
+              "somedomain2.com": {
+                "multiplier": 2,
+                "win_reporting_id": "2345"
+              },
+              "somedomain3.com": {
+                "multiplier": 3,
+                "win_reporting_id": "3456"
+              },
+              "somedomain4.com": {
+                "multiplier": 4,
+                "win_reporting_id": "4567"
+              }
+            }
+          }
+        }
+      ]
+    }
+  ]
+}
\ No newline at end of file
diff --git a/adapters/smartx/params_test.go b/adapters/smartx/params_test.go
new file mode 100644
index 00000000..fd28f4ea
--- /dev/null
+++ b/adapters/smartx/params_test.go
@@ -0,0 +1,58 @@
+package smartx
+
+import (
+	"encoding/json"
+	"testing"
+
+	"github.com/prebid/prebid-server/openrtb_ext"
+)
+
+var validParams = []string{
+	`{"tagId":"Nu68JuOWAvrbzoyrOR9a7A", "publisherId":"11986", "siteId":"22860"}`,
+	`{"tagId":"Nu68JuOWAvrbzoyrOR9a7A", "publisherId":"11986", "appId":"22860"}`,
+}
+
+func TestValidParams(t *testing.T) {
+	validator, err := openrtb_ext.NewBidderParamsValidator("../../static/bidder-params")
+	if err != nil {
+		t.Fatalf("Failed to fetch the json-schemas. %v", err)
+	}
+
+	for _, validParam := range validParams {
+		if err := validator.Validate(openrtb_ext.BidderSmartx, json.RawMessage(validParam)); err != nil {
+			t.Errorf("Schema rejected smartx params: %s", validParam)
+		}
+	}
+}
+
+var invalidParams = []string{
+	``,
+	`null`,
+	`true`,
+	`5`,
+	`[]`,
+	`{}`,
+	`{"anyparam": "anyvalue"}`,
+	`{"tagId":"Nu68JuOWAvrbzoyrOR9a7A"}`,
+	`{"publisherId":"11986"}`,
+	`{"siteId":"22860"}`,
+	`{"appId":"22860"}`,
+	`{"tagId":"Nu68JuOWAvrbzoyrOR9a7A", "publisherId":"11986"}`,
+	`{"tagId":"Nu68JuOWAvrbzoyrOR9a7A", "siteId":"22860"}`,
+	`{"tagId":"Nu68JuOWAvrbzoyrOR9a7A", "appId":"22860"}`,
+	`{"publisherId":"11986", "appId":"22860"}`,
+	`{"publisherId":"11986", "appId":"22860"}`,
+}
+
+func TestInvalidParams(t *testing.T) {
+	validator, err := openrtb_ext.NewBidderParamsValidator("../../static/bidder-params")
+	if err != nil {
+		t.Fatalf("Failed to fetch the json-schemas. %v", err)
+	}
+
+	for _, invalidParam := range invalidParams {
+		if err := validator.Validate(openrtb_ext.BidderSmartHub, json.RawMessage(invalidParam)); err == nil {
+			t.Errorf("Schema allowed unexpected params: %s", invalidParam)
+		}
+	}
+}
diff --git a/adapters/smartx/smartx_test.go b/adapters/smartx/smartx_test.go
new file mode 100644
index 00000000..ba6f6ba7
--- /dev/null
+++ b/adapters/smartx/smartx_test.go
@@ -0,0 +1,24 @@
+package smartx
+
+import (
+	"testing"
+
+	"github.com/prebid/prebid-server/adapters/adapterstest"
+	"github.com/prebid/prebid-server/config"
+	"github.com/prebid/prebid-server/openrtb_ext"
+)
+
+const testsDir = "smartxtest"
+const testsBidderEndpoint = "https://bid.smartclip.net/bid/1005"
+
+func TestJsonSamples(t *testing.T) {
+	bidder, buildErr := Builder(
+		openrtb_ext.BidderRise,
+		config.Adapter{Endpoint: testsBidderEndpoint},
+		config.Server{ExternalUrl: "http://hosturl.com", GvlID: 115, DataCenter: "2"})
+	if buildErr != nil {
+		t.Fatalf("Builder returned unexpected error %v", buildErr)
+	}
+
+	adapterstest.RunJSONBidderTest(t, testsDir, bidder)
+}
diff --git a/adapters/smartx/smartxtest/exemplary/01-video.json b/adapters/smartx/smartxtest/exemplary/01-video.json
new file mode 100644
index 00000000..c4d3f9c5
--- /dev/null
+++ b/adapters/smartx/smartxtest/exemplary/01-video.json
@@ -0,0 +1,77 @@
+{
+  "mockBidRequest":{
+    "id":"test-request-id-video",
+    "imp":[
+      {
+        "id":"test-imp-id",
+        "video":{
+          "mimes":[
+            "video/mp4"
+          ]
+        }
+      }
+    ]
+  },
+  "httpCalls":[
+    {
+      "expectedRequest":{
+        "uri":"https://bid.smartclip.net/bid/1005",
+        "body":{
+          "id":"test-request-id-video",
+          "imp":[
+            {
+              "id":"test-imp-id",
+              "video":{
+                "mimes":[
+                  "video/mp4"
+                ]
+              }
+            }
+          ]
+        }
+      },
+      "mockResponse":{
+        "status":200,
+        "body":{
+          "id":"test-request-id-video",
+          "seatbid":[
+            {
+              "seat":"smartadserver",
+              "bid":[
+                {
+                  "id":"8ee514f1-b2b8-4abb-89fd-084437d1e800",
+                  "impid":"test-imp-id-video",
+                  "price":0.500000,
+                  "adm":"some-test-ad",
+                  "crid":"crid_10",
+                  "h":576,
+                  "w":1024,
+                  "mtype":2
+                }
+              ]
+            }
+          ],
+          "cur":"EUR"
+        }
+      }
+    }
+  ],
+  "expectedBidResponses":[
+    {
+      "bids":[{
+        "bid":{
+            "id":"8ee514f1-b2b8-4abb-89fd-084437d1e800",
+            "impid":"test-imp-id-video",
+            "price":0.500000,
+            "adm":"some-test-ad",
+            "crid":"crid_10",
+            "h":576,
+            "w":1024,
+            "mtype":2
+        },
+        "currency":"EUR",
+        "type": "video"
+      }]
+    }
+  ]
+}
\ No newline at end of file
diff --git a/adapters/smartx/smartxtest/exemplary/02-consent.json b/adapters/smartx/smartxtest/exemplary/02-consent.json
new file mode 100644
index 00000000..bc0e5604
--- /dev/null
+++ b/adapters/smartx/smartxtest/exemplary/02-consent.json
@@ -0,0 +1,124 @@
+{
+	"mockBidRequest": {
+		"id": "test-request-id",
+		"imp": [
+			{
+				"id": "test-imp-id",
+				"banner": {
+					"w": 300,
+					"h": 250
+				},
+				"ext": {
+					"prebid": {
+						"bidder": {
+							"smartx": {
+								"publisherId": "11986",
+								"tagId": "Nu68JuOWAvrbzoyrOR9a7A",
+								"siteId": "22860"
+							}
+						}
+					}
+				}
+			}
+		],
+		"user": {
+			"ext": {
+				"consent": "COvFyGBOvFyGBAbAAAENAPCAAOAAAAAAAAAAAEEUACCKAAA.IFoEUQQgAIQwgIwQABAEAAAAOIAACAIAAAAQAIAgEAACEAAAAAgAQBAAAAAAAGBAAgAAAAAAAFAAECAAAgAAQARAEQAAAAAJAAIAAgAAAYQEAAAQmAgBC3ZAYzUw"
+			}
+		}
+	},
+	"httpCalls": [
+		{
+			"expectedRequest": {
+				"uri": "https://bid.smartclip.net/bid/1005",
+				"body": {
+					"id": "test-request-id",
+					"imp": [
+						{
+							"id": "test-imp-id",
+							"banner": {
+								"w": 300,
+								"h": 250
+							},
+							"ext": {
+								"prebid": {
+									"bidder": {
+										"smartx": {
+											"publisherId": "11986",
+											"tagId": "Nu68JuOWAvrbzoyrOR9a7A",
+											"siteId": "22860"
+										}
+									}
+								}
+							}
+						}
+					],
+					"user": {
+						"ext": {
+							"consent": "COvFyGBOvFyGBAbAAAENAPCAAOAAAAAAAAAAAEEUACCKAAA.IFoEUQQgAIQwgIwQABAEAAAAOIAACAIAAAAQAIAgEAACEAAAAAgAQBAAAAAAAGBAAgAAAAAAAFAAECAAAgAAQARAEQAAAAAJAAIAAgAAAYQEAAAQmAgBC3ZAYzUw"
+						}
+					}
+				}
+			},
+			"mockResponse": {
+				"status": 200,
+				"body": {
+					"id": "test-request-id",
+					"seatbid": [
+						{
+							"seat": "958",
+							"bid": [
+								{
+									"id": "7706636740145184841",
+									"impid": "test-imp-id",
+									"price": 0.5,
+									"adid": "29681110",
+									"adm": "some-test-ad",
+									"adomain": [
+										"https://advertiser.example.com"
+									],
+									"cid": "958",
+									"crid": "29681110",
+									"h": 250,
+									"w": 300,
+									"ext": {
+										"ix": {}
+									}
+								}
+							]
+						}
+					],
+					"bidid": "5778926625248726496",
+					"cur": "USD"
+				}
+			}
+		}
+	],
+	"expectedBidResponses": [
+		{
+			"currency": "USD",
+			"bids": [
+				{
+					"bid": {
+						"id": "7706636740145184841",
+						"impid": "test-imp-id",
+						"price": 0.5,
+						"adm": "some-test-ad",
+						"adid": "29681110",
+						"adomain": [
+							"https://advertiser.example.com"
+						],
+						"cid": "958",
+						"crid": "29681110",
+						"w": 300,
+						"h": 250,
+						"ext": {
+							"ix": {}
+						}
+					},
+					"type": "video"
+				}
+			]
+		}
+	]
+}
\ No newline at end of file
diff --git a/adapters/smartx/smartxtest/exemplary/03-device.json b/adapters/smartx/smartxtest/exemplary/03-device.json
new file mode 100644
index 00000000..f45cc76c
--- /dev/null
+++ b/adapters/smartx/smartxtest/exemplary/03-device.json
@@ -0,0 +1,121 @@
+{
+  "mockBidRequest": {
+    "id": "test-request-id-video",
+    "device": {
+      "ua": "Mozilla/5.0 (Linux; Android 12; SAMSUNG SM-G780G) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/17.0 Chrome/96.0.4664.104 Mobile Safari/537.36",
+      "geo": {
+        "lat": 48.1663,
+        "lon": 11.5683,
+        "type": 2,
+        "country": "DEU",
+        "region": "BY",
+        "city": "Munich",
+        "zip": "81249",
+        "ipservice": 3
+      },
+      "dnt": 0,
+      "lmt": 0,
+      "ip": "0.0.0.0",
+      "devicetype": 4,
+      "make": "Samsung",
+      "model": "SM-G780G",
+      "os": "Android",
+      "language": "en"
+    },
+    "imp": [
+      {
+        "id": "test-imp-id",
+        "video": {
+          "mimes": [
+            "video/mp4"
+          ]
+        }
+      }
+    ]
+  },
+  "httpCalls": [
+    {
+      "expectedRequest": {
+        "uri": "https://bid.smartclip.net/bid/1005",
+        "body": {
+          "id": "test-request-id-video",
+          "device": {
+            "ua": "Mozilla/5.0 (Linux; Android 12; SAMSUNG SM-G780G) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/17.0 Chrome/96.0.4664.104 Mobile Safari/537.36",
+            "geo": {
+              "lat": 48.1663,
+              "lon": 11.5683,
+              "type": 2,
+              "country": "DEU",
+              "region": "BY",
+              "city": "Munich",
+              "zip": "81249",
+              "ipservice": 3
+            },
+            "dnt": 0,
+            "lmt": 0,
+            "ip": "0.0.0.0",
+            "devicetype": 4,
+            "make": "Samsung",
+            "model": "SM-G780G",
+            "os": "Android",
+            "language": "en"
+          },
+          "imp": [
+            {
+              "id": "test-imp-id",
+              "video": {
+                "mimes": [
+                  "video/mp4"
+                ]
+              }
+            }
+          ]
+        }
+      },
+      "mockResponse": {
+        "status": 200,
+        "body": {
+          "id": "test-request-id-video",
+          "seatbid": [
+            {
+              "seat": "smartadserver",
+              "bid": [
+                {
+                  "id": "8ee514f1-b2b8-4abb-89fd-084437d1e800",
+                  "impid": "test-imp-id-video",
+                  "price": 0.500000,
+                  "adm": "some-test-ad",
+                  "crid": "crid_10",
+                  "h": 576,
+                  "w": 1024,
+                  "mtype": 2
+                }
+              ]
+            }
+          ],
+          "cur": "EUR"
+        }
+      }
+    }
+  ],
+  "expectedBidResponses": [
+    {
+      "bids": [
+        {
+          "bid": {
+            "id": "8ee514f1-b2b8-4abb-89fd-084437d1e800",
+            "impid": "test-imp-id-video",
+            "price": 0.500000,
+            "adm": "some-test-ad",
+            "crid": "crid_10",
+            "h": 576,
+            "w": 1024,
+            "mtype": 2
+          },
+          "currency": "EUR",
+          "type": "video"
+        }
+      ]
+    }
+  ]
+}
\ No newline at end of file
diff --git a/adapters/smartx/smartxtest/supplemental/02-internal-server-error.json b/adapters/smartx/smartxtest/supplemental/02-internal-server-error.json
new file mode 100644
index 00000000..d44ef7f7
--- /dev/null
+++ b/adapters/smartx/smartxtest/supplemental/02-internal-server-error.json
@@ -0,0 +1,45 @@
+{
+  "mockBidRequest": {
+    "id": "test-internal-server-error-id",
+    "imp": [
+      {
+        "id": "test-imp-id",
+        "video": {
+          "mimes": [
+            "video/mp4"
+          ]
+        }
+      }
+    ]
+  },
+  "httpCalls": [
+    {
+      "expectedRequest": {
+        "uri": "https://bid.smartclip.net/bid/1005",
+        "body": {
+          "id": "test-internal-server-error-id",
+          "imp": [
+            {
+              "id": "test-imp-id",
+              "video": {
+                "mimes": [
+                  "video/mp4"
+                ]
+              }
+            }
+          ]
+        }
+      },
+      "mockResponse": {
+        "status": 400,
+        "body": {}
+      }
+    }
+  ],
+  "expectedMakeBidsErrors": [
+    {
+      "value": "Unexpected status code: 400. Run with request.debug = 1 for more info",
+      "comparison": "literal"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/adapters/smartx/smartxtest/supplemental/03-missing-bidder-in-response.json b/adapters/smartx/smartxtest/supplemental/03-missing-bidder-in-response.json
new file mode 100644
index 00000000..71875f12
--- /dev/null
+++ b/adapters/smartx/smartxtest/supplemental/03-missing-bidder-in-response.json
@@ -0,0 +1,47 @@
+{
+  "mockBidRequest": {
+    "id": "test-missing-bidder-in-response-id",
+    "imp": [
+      {
+        "id": "test-imp-id",
+        "video": {
+          "mimes": [
+            "video/mp4"
+          ]
+        }
+      }
+    ]
+  },
+  "httpCalls": [
+    {
+      "expectedRequest": {
+        "uri": "https://bid.smartclip.net/bid/1005",
+        "body": {
+          "id": "test-missing-bidder-in-response-id",
+          "imp": [
+            {
+              "id": "test-imp-id",
+              "video": {
+                "mimes": [
+                  "video/mp4"
+                ]
+              }
+            }
+          ]
+        }
+      },
+      "mockResponse": {
+        "body": {
+          "seatbid": []
+        },
+        "status": 200
+      }
+    }
+  ],
+  "expectedMakeBidsErrors": [
+    {
+      "value": "no bidders found in JSON response",
+      "comparison": "literal"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/adapters/teads/teads_test.go b/adapters/teads/teads_test.go
new file mode 100644
index 00000000..791ce7ae
--- /dev/null
+++ b/adapters/teads/teads_test.go
@@ -0,0 +1,27 @@
+package teads
+
+import (
+	"github.com/prebid/prebid-server/adapters/adapterstest"
+	"github.com/prebid/prebid-server/config"
+	"github.com/prebid/prebid-server/openrtb_ext"
+	"github.com/stretchr/testify/assert"
+	"testing"
+)
+
+func TestJsonSamples(t *testing.T) {
+	bidder, buildErr := Builder(openrtb_ext.BidderTeads, config.Adapter{
+		Endpoint: "https://a.teads.tv/prebid-server/bid-request"}, config.Server{ExternalUrl: "https://a.teads.tv/prebid-server/bid-request", GvlID: 1, DataCenter: "2"})
+
+	if buildErr != nil {
+		t.Fatalf("Builder returned unexpected error %v", buildErr)
+	}
+
+	adapterstest.RunJSONBidderTest(t, "teadstest", bidder)
+}
+
+func TestEndpointTemplateMalformed(t *testing.T) {
+	_, buildErr := Builder(openrtb_ext.BidderTeads, config.Adapter{
+		Endpoint: "{{Malformed}}"}, config.Server{ExternalUrl: "https://a.teads.tv/prebid-server/bid-request", GvlID: 1, DataCenter: "2"})
+
+	assert.Error(t, buildErr)
+}
diff --git a/adapters/teads/teadstest/exemplary/simple-banner-with-format.json b/adapters/teads/teadstest/exemplary/simple-banner-with-format.json
new file mode 100644
index 00000000..b2677e6f
--- /dev/null
+++ b/adapters/teads/teadstest/exemplary/simple-banner-with-format.json
@@ -0,0 +1,168 @@
+{
+  "mockBidRequest": {
+    "id": "test-request-id",
+    "imp": [
+      {
+        "id": "b6321d41-3840-4cb3-baad-b6fc5b0c8553",
+        "banner": {
+          "format": [
+            {
+              "w": 300,
+              "h": 250
+            }
+          ]
+        },
+        "ext": {
+          "bidder": {
+            "placementId": 125
+          }
+        }
+      }
+    ],
+    "ext": {
+      "prebid": {
+        "sdk": {
+          "renderers": [
+            {
+              "name": "teads",
+              "version": "5.0.25",
+              "data": {
+                "resize": true,
+                "sdkEngineVersion": "189"
+              }
+            }
+          ]
+        }
+      }
+    }
+  },
+  "httpCalls": [
+    {
+      "expectedRequest": {
+        "uri": "https://a.teads.tv/prebid-server/bid-request",
+        "body": {
+          "id": "test-request-id",
+          "imp": [
+            {
+              "id": "b6321d41-3840-4cb3-baad-b6fc5b0c8553",
+              "tagid": "125",
+              "banner": {
+                "w": 300,
+                "h": 250,
+                "format": [
+                  {
+                    "w": 300,
+                    "h": 250
+                  }
+                ]
+              },
+              "ext": {
+                "kv": {
+                  "placementId": 125
+                }
+              }
+            }
+          ],
+          "ext": {
+            "prebid": {
+              "sdk": {
+                "renderers": [
+                  {
+                    "name": "teads",
+                    "version": "5.0.25",
+                    "data": {
+                      "resize": true,
+                      "sdkEngineVersion": "189"
+                    }
+                  }
+                ]
+              }
+            }
+          }
+        }
+      },
+      "mockResponse": {
+        "status": 200,
+        "body": {
+          "id": "39312703-e970-4914-ae56-8e7d7d1fd16b",
+          "tagid": "125",
+          "seatbid": [
+            {
+              "seat": "teads",
+              "bid": [
+                {
+                  "id": "695ac187-fb3f-4d1f-8d5d-099c5e4c4d28",
+                  "impid": "b6321d41-3840-4cb3-baad-b6fc5b0c8553",
+                  "price": 33,
+                  "nurl": "https://localhost:8080/prebid-server/win-notice?data=base64&clearingPrice=${AUCTION_PRICE}",
+                  "adm": "{\"settings\":{\"values\":{\"animations\":{\"expand\":0,\"collapse\":0.5},\"placementId\":2,\"adType\":\"video\",\"placementFormat\":\"inread\",\"allowedPlayer\":\"any\",\"pageId\":2},\"components\":{\"closeButton\":{\"display\":false,\"countdown\":0},\"credits\":{\"display\":false},\"soundButton\":{\"display\":true,\"countdown\":0,\"type\":\"equalizer\"},\"label\":{\"display\":false},\"slider\":{\"closeButtonDisplay\":false}},\"behaviors\":{\"smartPosition\":{\"top\":false,\"corner\":false,\"mustBypassWhitelist\":true},\"slider\":{\"enable\":false},\"friendly\":false,\"playerClick\":\"fullscreen\",\"soundStart\":{\"type\":\"mute\"},\"soundMute\":\"threshold\",\"soundOver\":\"over\",\"launch\":\"auto\",\"videoStart\":\"threshold\",\"videoPause\":\"threshold\",\"secure\":false}},\"ads\":[{\"settings\":{\"values\":{\"animations\":{\"expand\":0,\"collapse\":0.5},\"placementId\":2,\"adType\":\"video\",\"placementFormat\":\"inread\",\"allowedPlayer\":\"any\",\"pageId\":2},\"components\":{\"closeButton\":{\"display\":false,\"countdown\":0},\"credits\":{\"display\":false},\"soundButton\":{\"display\":true,\"countdown\":0,\"type\":\"equalizer\"},\"label\":{\"display\":false},\"slider\":{\"closeButtonDisplay\":false}},\"behaviors\":{\"smartPosition\":{\"top\":false,\"corner\":false,\"mustBypassWhitelist\":true},\"slider\":{\"enable\":false},\"friendly\":false,\"playerClick\":\"fullscreen\",\"soundStart\":{\"type\":\"mute\"},\"soundMute\":\"threshold\",\"soundOver\":\"over\",\"launch\":\"auto\",\"videoStart\":\"threshold\",\"videoPause\":\"threshold\",\"secure\":false}},\"type\":\"VastXml\",\"content\":\"<VAST version=\\\"3.0\\\"><Ad id=\\\"1\\\"><Wrapper><AdSystem>Teads Technology</AdSystem><VASTAdTagURI><![CDATA[http://vast.tv?auction_publisher_cost=LlBEcMjl2WSVYTIV0ZvZwFta&auction_publisher_cost_currency=USD&auction_ssb_provider_fee=&auction_ssb_provider_fee_currency=&auction_price=74Xz11zXoN9S_a18chCl1DB6&auction_currency=USD]]></VASTAdTagURI><Error><![CDATA[https://localhost:18281/track?action=error-vast&code=[ERRORCODE]&pid=2&vid=708ca808-ec55-4d97-ab81-9c4777e16058&pfid=971104812&mediaFileType=[MEDIAFILETYPE]&auctid=39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6&sid=0&scid=971105412&pscid=971105411&psid=971105457&hb_provider=prebid-server&hb_ad_unit_code=742d38c4-7994-4c2b-ac82-18d3a64ba3c7&dsp_campaign_id=1&dsp_creative_id=1&env=thirdparty-inapp&p=GmbtDz8E6SttqPqekGLm3vHN7muObx7-w6kGLgR8KMiWgUo78VfzNzYlcfjjRwTen7Oad6lYvgPUaiHwDV0lZcpu7lXO4Y7at1NIyIPxfcgdBw&cts=1685971107728&1685971107728]]></Error><Creatives></Creatives></Wrapper></Ad></VAST>\",\"scenario_id\":971105412,\"dsp_campaign_id\":\"1\",\"dsp_creative_id\":\"1\",\"insertion_id\":1,\"placement_id\":2,\"portfolio_item_id\":971104812}],\"wigoEnabled\":false,\"placementMetadata\":{\"2\":{\"adCallTrackingUrl\":\"https://localhost:18281/track?action=adCall&pid=2&pageId=2&auctid=39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6&vid=708ca808-ec55-4d97-ab81-9c4777e16058&hb_provider=prebid-server&hb_ad_unit_code=742d38c4-7994-4c2b-ac82-18d3a64ba3c7&env=thirdparty-inapp&gtc=1&gdpr_apply=false&gac=1&gap=1&ca=false&bsg=uncat&bsias=uncat&pfid=971104812&gid=1&brid=0&cid=1&rpm_reason=3&ut=1&p=5fwoPMJCquIB-txdmwQS0l79-hhHVnlTzyR9mmnBMtZRceP6-q31KzCfLpS8WTNaw_sXr-hkOFBxaxa-jyLblbVc&cts=1685971107773&cs=267268361555465193905\",\"auctionId\":\"39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6\"}},\"viewerId\":\"708ca808-ec55-4d97-ab81-9c4777e16058\"}",
+                  "adid": "1",
+                  "adomain": [
+                    "teads.com"
+                  ],
+                  "cid": "1",
+                  "crid": "1",
+                  "cat": [
+                    "IAB1-6",
+                    "IAB10-5"
+                  ],
+                  "ext": {
+                    "prebid": {
+                      "meta": {
+                        "rendererName": "teads",
+                        "rendererVersion": "5.0.25",
+                        "rendererData": {
+                          "resize": true,
+                          "sdkEngineVersion": "189"
+                        }
+                      }
+                    }
+                  }
+                }
+              ]
+            }
+          ]
+        }
+      }
+    }
+  ],
+  "expectedBidResponses": [
+    {
+      "currency": "USD",
+      "bids": [
+        {
+          "bid": {
+            "id": "695ac187-fb3f-4d1f-8d5d-099c5e4c4d28",
+            "impid": "b6321d41-3840-4cb3-baad-b6fc5b0c8553",
+            "price": 33,
+            "nurl": "https://localhost:8080/prebid-server/win-notice?data=base64&clearingPrice=${AUCTION_PRICE}",
+            "adm": "{\"settings\":{\"values\":{\"animations\":{\"expand\":0,\"collapse\":0.5},\"placementId\":2,\"adType\":\"video\",\"placementFormat\":\"inread\",\"allowedPlayer\":\"any\",\"pageId\":2},\"components\":{\"closeButton\":{\"display\":false,\"countdown\":0},\"credits\":{\"display\":false},\"soundButton\":{\"display\":true,\"countdown\":0,\"type\":\"equalizer\"},\"label\":{\"display\":false},\"slider\":{\"closeButtonDisplay\":false}},\"behaviors\":{\"smartPosition\":{\"top\":false,\"corner\":false,\"mustBypassWhitelist\":true},\"slider\":{\"enable\":false},\"friendly\":false,\"playerClick\":\"fullscreen\",\"soundStart\":{\"type\":\"mute\"},\"soundMute\":\"threshold\",\"soundOver\":\"over\",\"launch\":\"auto\",\"videoStart\":\"threshold\",\"videoPause\":\"threshold\",\"secure\":false}},\"ads\":[{\"settings\":{\"values\":{\"animations\":{\"expand\":0,\"collapse\":0.5},\"placementId\":2,\"adType\":\"video\",\"placementFormat\":\"inread\",\"allowedPlayer\":\"any\",\"pageId\":2},\"components\":{\"closeButton\":{\"display\":false,\"countdown\":0},\"credits\":{\"display\":false},\"soundButton\":{\"display\":true,\"countdown\":0,\"type\":\"equalizer\"},\"label\":{\"display\":false},\"slider\":{\"closeButtonDisplay\":false}},\"behaviors\":{\"smartPosition\":{\"top\":false,\"corner\":false,\"mustBypassWhitelist\":true},\"slider\":{\"enable\":false},\"friendly\":false,\"playerClick\":\"fullscreen\",\"soundStart\":{\"type\":\"mute\"},\"soundMute\":\"threshold\",\"soundOver\":\"over\",\"launch\":\"auto\",\"videoStart\":\"threshold\",\"videoPause\":\"threshold\",\"secure\":false}},\"type\":\"VastXml\",\"content\":\"<VAST version=\\\"3.0\\\"><Ad id=\\\"1\\\"><Wrapper><AdSystem>Teads Technology</AdSystem><VASTAdTagURI><![CDATA[http://vast.tv?auction_publisher_cost=LlBEcMjl2WSVYTIV0ZvZwFta&auction_publisher_cost_currency=USD&auction_ssb_provider_fee=&auction_ssb_provider_fee_currency=&auction_price=74Xz11zXoN9S_a18chCl1DB6&auction_currency=USD]]></VASTAdTagURI><Error><![CDATA[https://localhost:18281/track?action=error-vast&code=[ERRORCODE]&pid=2&vid=708ca808-ec55-4d97-ab81-9c4777e16058&pfid=971104812&mediaFileType=[MEDIAFILETYPE]&auctid=39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6&sid=0&scid=971105412&pscid=971105411&psid=971105457&hb_provider=prebid-server&hb_ad_unit_code=742d38c4-7994-4c2b-ac82-18d3a64ba3c7&dsp_campaign_id=1&dsp_creative_id=1&env=thirdparty-inapp&p=GmbtDz8E6SttqPqekGLm3vHN7muObx7-w6kGLgR8KMiWgUo78VfzNzYlcfjjRwTen7Oad6lYvgPUaiHwDV0lZcpu7lXO4Y7at1NIyIPxfcgdBw&cts=1685971107728&1685971107728]]></Error><Creatives></Creatives></Wrapper></Ad></VAST>\",\"scenario_id\":971105412,\"dsp_campaign_id\":\"1\",\"dsp_creative_id\":\"1\",\"insertion_id\":1,\"placement_id\":2,\"portfolio_item_id\":971104812}],\"wigoEnabled\":false,\"placementMetadata\":{\"2\":{\"adCallTrackingUrl\":\"https://localhost:18281/track?action=adCall&pid=2&pageId=2&auctid=39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6&vid=708ca808-ec55-4d97-ab81-9c4777e16058&hb_provider=prebid-server&hb_ad_unit_code=742d38c4-7994-4c2b-ac82-18d3a64ba3c7&env=thirdparty-inapp&gtc=1&gdpr_apply=false&gac=1&gap=1&ca=false&bsg=uncat&bsias=uncat&pfid=971104812&gid=1&brid=0&cid=1&rpm_reason=3&ut=1&p=5fwoPMJCquIB-txdmwQS0l79-hhHVnlTzyR9mmnBMtZRceP6-q31KzCfLpS8WTNaw_sXr-hkOFBxaxa-jyLblbVc&cts=1685971107773&cs=267268361555465193905\",\"auctionId\":\"39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6\"}},\"viewerId\":\"708ca808-ec55-4d97-ab81-9c4777e16058\"}",
+            "adid": "1",
+            "adomain": [
+              "teads.com"
+            ],
+            "cid": "1",
+            "crid": "1",
+            "cat": [
+              "IAB1-6",
+              "IAB10-5"
+            ],
+            "ext": {
+              "prebid": {
+                "meta": {
+                  "rendererName": "teads",
+                  "rendererVersion": "5.0.25",
+                  "rendererData": {
+                    "resize": true,
+                    "sdkEngineVersion": "189"
+                  }
+                }
+              }
+            }
+          },
+          "type": "banner"
+        }
+      ]
+    }
+  ]
+}
\ No newline at end of file
diff --git a/adapters/teads/teadstest/exemplary/simple-banner.json b/adapters/teads/teadstest/exemplary/simple-banner.json
new file mode 100644
index 00000000..2d9be7c7
--- /dev/null
+++ b/adapters/teads/teadstest/exemplary/simple-banner.json
@@ -0,0 +1,158 @@
+{
+  "mockBidRequest": {
+    "id": "test-request-id",
+    "imp": [
+      {
+        "id": "b6321d41-3840-4cb3-baad-b6fc5b0c8553",
+        "banner": {
+          "w": 300,
+          "h": 250
+        },
+        "ext": {
+          "bidder": {
+            "placementId": 125
+          }
+        }
+      }
+    ],
+    "ext": {
+      "prebid": {
+        "sdk": {
+          "renderers": [
+            {
+              "name": "teads",
+              "version": "5.0.25",
+              "data": {
+                "resize": true,
+                "sdkEngineVersion": "189"
+              }
+            }
+          ]
+        }
+      }
+    }
+  },
+  "httpCalls": [
+    {
+      "expectedRequest": {
+        "uri": "https://a.teads.tv/prebid-server/bid-request",
+        "body": {
+          "id": "test-request-id",
+          "imp": [
+            {
+              "id": "b6321d41-3840-4cb3-baad-b6fc5b0c8553",
+              "tagid": "125",
+              "banner": {
+                "w": 300,
+                "h": 250
+              },
+              "ext": {
+                "kv": {
+                  "placementId": 125
+                }
+              }
+            }
+          ],
+          "ext": {
+            "prebid": {
+              "sdk": {
+                "renderers": [
+                  {
+                    "name": "teads",
+                    "version": "5.0.25",
+                    "data": {
+                      "resize": true,
+                      "sdkEngineVersion": "189"
+                    }
+                  }
+                ]
+              }
+            }
+          }
+        }
+      },
+      "mockResponse": {
+        "status": 200,
+        "body": {
+          "id": "39312703-e970-4914-ae56-8e7d7d1fd16b",
+          "tagid": "125",
+          "seatbid": [
+            {
+              "seat": "teads",
+              "bid": [
+                {
+                  "id": "695ac187-fb3f-4d1f-8d5d-099c5e4c4d28",
+                  "impid": "b6321d41-3840-4cb3-baad-b6fc5b0c8553",
+                  "price": 33,
+                  "nurl": "https://localhost:8080/prebid-server/win-notice?data=base64&clearingPrice=${AUCTION_PRICE}",
+                  "adm": "{\"settings\":{\"values\":{\"animations\":{\"expand\":0,\"collapse\":0.5},\"placementId\":2,\"adType\":\"video\",\"placementFormat\":\"inread\",\"allowedPlayer\":\"any\",\"pageId\":2},\"components\":{\"closeButton\":{\"display\":false,\"countdown\":0},\"credits\":{\"display\":false},\"soundButton\":{\"display\":true,\"countdown\":0,\"type\":\"equalizer\"},\"label\":{\"display\":false},\"slider\":{\"closeButtonDisplay\":false}},\"behaviors\":{\"smartPosition\":{\"top\":false,\"corner\":false,\"mustBypassWhitelist\":true},\"slider\":{\"enable\":false},\"friendly\":false,\"playerClick\":\"fullscreen\",\"soundStart\":{\"type\":\"mute\"},\"soundMute\":\"threshold\",\"soundOver\":\"over\",\"launch\":\"auto\",\"videoStart\":\"threshold\",\"videoPause\":\"threshold\",\"secure\":false}},\"ads\":[{\"settings\":{\"values\":{\"animations\":{\"expand\":0,\"collapse\":0.5},\"placementId\":2,\"adType\":\"video\",\"placementFormat\":\"inread\",\"allowedPlayer\":\"any\",\"pageId\":2},\"components\":{\"closeButton\":{\"display\":false,\"countdown\":0},\"credits\":{\"display\":false},\"soundButton\":{\"display\":true,\"countdown\":0,\"type\":\"equalizer\"},\"label\":{\"display\":false},\"slider\":{\"closeButtonDisplay\":false}},\"behaviors\":{\"smartPosition\":{\"top\":false,\"corner\":false,\"mustBypassWhitelist\":true},\"slider\":{\"enable\":false},\"friendly\":false,\"playerClick\":\"fullscreen\",\"soundStart\":{\"type\":\"mute\"},\"soundMute\":\"threshold\",\"soundOver\":\"over\",\"launch\":\"auto\",\"videoStart\":\"threshold\",\"videoPause\":\"threshold\",\"secure\":false}},\"type\":\"VastXml\",\"content\":\"<VAST version=\\\"3.0\\\"><Ad id=\\\"1\\\"><Wrapper><AdSystem>Teads Technology</AdSystem><VASTAdTagURI><![CDATA[http://vast.tv?auction_publisher_cost=LlBEcMjl2WSVYTIV0ZvZwFta&auction_publisher_cost_currency=USD&auction_ssb_provider_fee=&auction_ssb_provider_fee_currency=&auction_price=74Xz11zXoN9S_a18chCl1DB6&auction_currency=USD]]></VASTAdTagURI><Error><![CDATA[https://localhost:18281/track?action=error-vast&code=[ERRORCODE]&pid=2&vid=708ca808-ec55-4d97-ab81-9c4777e16058&pfid=971104812&mediaFileType=[MEDIAFILETYPE]&auctid=39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6&sid=0&scid=971105412&pscid=971105411&psid=971105457&hb_provider=prebid-server&hb_ad_unit_code=742d38c4-7994-4c2b-ac82-18d3a64ba3c7&dsp_campaign_id=1&dsp_creative_id=1&env=thirdparty-inapp&p=GmbtDz8E6SttqPqekGLm3vHN7muObx7-w6kGLgR8KMiWgUo78VfzNzYlcfjjRwTen7Oad6lYvgPUaiHwDV0lZcpu7lXO4Y7at1NIyIPxfcgdBw&cts=1685971107728&1685971107728]]></Error><Creatives></Creatives></Wrapper></Ad></VAST>\",\"scenario_id\":971105412,\"dsp_campaign_id\":\"1\",\"dsp_creative_id\":\"1\",\"insertion_id\":1,\"placement_id\":2,\"portfolio_item_id\":971104812}],\"wigoEnabled\":false,\"placementMetadata\":{\"2\":{\"adCallTrackingUrl\":\"https://localhost:18281/track?action=adCall&pid=2&pageId=2&auctid=39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6&vid=708ca808-ec55-4d97-ab81-9c4777e16058&hb_provider=prebid-server&hb_ad_unit_code=742d38c4-7994-4c2b-ac82-18d3a64ba3c7&env=thirdparty-inapp&gtc=1&gdpr_apply=false&gac=1&gap=1&ca=false&bsg=uncat&bsias=uncat&pfid=971104812&gid=1&brid=0&cid=1&rpm_reason=3&ut=1&p=5fwoPMJCquIB-txdmwQS0l79-hhHVnlTzyR9mmnBMtZRceP6-q31KzCfLpS8WTNaw_sXr-hkOFBxaxa-jyLblbVc&cts=1685971107773&cs=267268361555465193905\",\"auctionId\":\"39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6\"}},\"viewerId\":\"708ca808-ec55-4d97-ab81-9c4777e16058\"}",
+                  "adid": "1",
+                  "adomain": [
+                    "teads.com"
+                  ],
+                  "cid": "1",
+                  "crid": "1",
+                  "cat": [
+                    "IAB1-6",
+                    "IAB10-5"
+                  ],
+                  "ext": {
+                    "prebid": {
+                      "meta": {
+                        "rendererName": "teads",
+                        "rendererVersion": "5.0.25",
+                        "rendererData": {
+                          "resize": true,
+                          "sdkEngineVersion": "189"
+                        }
+                      }
+                    }
+                  }
+                }
+              ]
+            }
+          ]
+        }
+      }
+    }
+  ],
+  "expectedBidResponses": [
+    {
+      "currency": "USD",
+      "bids": [
+        {
+          "bid": {
+            "id": "695ac187-fb3f-4d1f-8d5d-099c5e4c4d28",
+            "impid": "b6321d41-3840-4cb3-baad-b6fc5b0c8553",
+            "price": 33,
+            "nurl": "https://localhost:8080/prebid-server/win-notice?data=base64&clearingPrice=${AUCTION_PRICE}",
+            "adm": "{\"settings\":{\"values\":{\"animations\":{\"expand\":0,\"collapse\":0.5},\"placementId\":2,\"adType\":\"video\",\"placementFormat\":\"inread\",\"allowedPlayer\":\"any\",\"pageId\":2},\"components\":{\"closeButton\":{\"display\":false,\"countdown\":0},\"credits\":{\"display\":false},\"soundButton\":{\"display\":true,\"countdown\":0,\"type\":\"equalizer\"},\"label\":{\"display\":false},\"slider\":{\"closeButtonDisplay\":false}},\"behaviors\":{\"smartPosition\":{\"top\":false,\"corner\":false,\"mustBypassWhitelist\":true},\"slider\":{\"enable\":false},\"friendly\":false,\"playerClick\":\"fullscreen\",\"soundStart\":{\"type\":\"mute\"},\"soundMute\":\"threshold\",\"soundOver\":\"over\",\"launch\":\"auto\",\"videoStart\":\"threshold\",\"videoPause\":\"threshold\",\"secure\":false}},\"ads\":[{\"settings\":{\"values\":{\"animations\":{\"expand\":0,\"collapse\":0.5},\"placementId\":2,\"adType\":\"video\",\"placementFormat\":\"inread\",\"allowedPlayer\":\"any\",\"pageId\":2},\"components\":{\"closeButton\":{\"display\":false,\"countdown\":0},\"credits\":{\"display\":false},\"soundButton\":{\"display\":true,\"countdown\":0,\"type\":\"equalizer\"},\"label\":{\"display\":false},\"slider\":{\"closeButtonDisplay\":false}},\"behaviors\":{\"smartPosition\":{\"top\":false,\"corner\":false,\"mustBypassWhitelist\":true},\"slider\":{\"enable\":false},\"friendly\":false,\"playerClick\":\"fullscreen\",\"soundStart\":{\"type\":\"mute\"},\"soundMute\":\"threshold\",\"soundOver\":\"over\",\"launch\":\"auto\",\"videoStart\":\"threshold\",\"videoPause\":\"threshold\",\"secure\":false}},\"type\":\"VastXml\",\"content\":\"<VAST version=\\\"3.0\\\"><Ad id=\\\"1\\\"><Wrapper><AdSystem>Teads Technology</AdSystem><VASTAdTagURI><![CDATA[http://vast.tv?auction_publisher_cost=LlBEcMjl2WSVYTIV0ZvZwFta&auction_publisher_cost_currency=USD&auction_ssb_provider_fee=&auction_ssb_provider_fee_currency=&auction_price=74Xz11zXoN9S_a18chCl1DB6&auction_currency=USD]]></VASTAdTagURI><Error><![CDATA[https://localhost:18281/track?action=error-vast&code=[ERRORCODE]&pid=2&vid=708ca808-ec55-4d97-ab81-9c4777e16058&pfid=971104812&mediaFileType=[MEDIAFILETYPE]&auctid=39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6&sid=0&scid=971105412&pscid=971105411&psid=971105457&hb_provider=prebid-server&hb_ad_unit_code=742d38c4-7994-4c2b-ac82-18d3a64ba3c7&dsp_campaign_id=1&dsp_creative_id=1&env=thirdparty-inapp&p=GmbtDz8E6SttqPqekGLm3vHN7muObx7-w6kGLgR8KMiWgUo78VfzNzYlcfjjRwTen7Oad6lYvgPUaiHwDV0lZcpu7lXO4Y7at1NIyIPxfcgdBw&cts=1685971107728&1685971107728]]></Error><Creatives></Creatives></Wrapper></Ad></VAST>\",\"scenario_id\":971105412,\"dsp_campaign_id\":\"1\",\"dsp_creative_id\":\"1\",\"insertion_id\":1,\"placement_id\":2,\"portfolio_item_id\":971104812}],\"wigoEnabled\":false,\"placementMetadata\":{\"2\":{\"adCallTrackingUrl\":\"https://localhost:18281/track?action=adCall&pid=2&pageId=2&auctid=39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6&vid=708ca808-ec55-4d97-ab81-9c4777e16058&hb_provider=prebid-server&hb_ad_unit_code=742d38c4-7994-4c2b-ac82-18d3a64ba3c7&env=thirdparty-inapp&gtc=1&gdpr_apply=false&gac=1&gap=1&ca=false&bsg=uncat&bsias=uncat&pfid=971104812&gid=1&brid=0&cid=1&rpm_reason=3&ut=1&p=5fwoPMJCquIB-txdmwQS0l79-hhHVnlTzyR9mmnBMtZRceP6-q31KzCfLpS8WTNaw_sXr-hkOFBxaxa-jyLblbVc&cts=1685971107773&cs=267268361555465193905\",\"auctionId\":\"39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6\"}},\"viewerId\":\"708ca808-ec55-4d97-ab81-9c4777e16058\"}",
+            "adid": "1",
+            "adomain": [
+              "teads.com"
+            ],
+            "cid": "1",
+            "crid": "1",
+            "cat": [
+              "IAB1-6",
+              "IAB10-5"
+            ],
+            "ext": {
+              "prebid": {
+                "meta": {
+                  "rendererName": "teads",
+                  "rendererVersion": "5.0.25",
+                  "rendererData": {
+                    "resize": true,
+                    "sdkEngineVersion": "189"
+                  }
+                }
+              }
+            }
+          },
+          "type": "banner"
+        }
+      ]
+    }
+  ]
+}
\ No newline at end of file
diff --git a/adapters/teads/teadstest/exemplary/simple-video.json b/adapters/teads/teadstest/exemplary/simple-video.json
new file mode 100644
index 00000000..814569a4
--- /dev/null
+++ b/adapters/teads/teadstest/exemplary/simple-video.json
@@ -0,0 +1,184 @@
+{
+  "mockBidRequest": {
+    "id": "test-request-id",
+    "imp": [
+      {
+        "id": "b6321d41-3840-4cb3-baad-b6fc5b0c8553",
+        "video": {
+          "mimes": [
+            "video/mp4"
+          ],
+          "minduration": 15,
+          "maxduration": 30,
+          "protocols": [
+            2,
+            3,
+            5,
+            6,
+            7,
+            8
+          ],
+          "w": 940,
+          "h": 560
+        },
+        "ext": {
+          "bidder": {
+            "placementId": 125
+          }
+        }
+      }
+    ],
+    "ext": {
+      "prebid": {
+        "sdk": {
+          "renderers": [
+            {
+              "name": "teads",
+              "version": "5.0.25",
+              "data": {
+                "resize": true,
+                "sdkEngineVersion": "189"
+              }
+            }
+          ]
+        }
+      }
+    }
+  },
+  "httpCalls": [
+    {
+      "expectedRequest": {
+        "uri": "https://a.teads.tv/prebid-server/bid-request",
+        "body": {
+          "id": "test-request-id",
+          "imp": [
+            {
+              "id": "b6321d41-3840-4cb3-baad-b6fc5b0c8553",
+              "tagid": "125",
+              "video": {
+                "mimes": [
+                  "video/mp4"
+                ],
+                "minduration": 15,
+                "maxduration": 30,
+                "protocols": [
+                  2,
+                  3,
+                  5,
+                  6,
+                  7,
+                  8
+                ],
+                "w": 940,
+                "h": 560
+              },
+              "ext": {
+                "kv": {
+                  "placementId": 125
+                }
+              }
+            }
+          ],
+          "ext": {
+            "prebid": {
+              "sdk": {
+                "renderers": [
+                  {
+                    "name": "teads",
+                    "version": "5.0.25",
+                    "data": {
+                      "resize": true,
+                      "sdkEngineVersion": "189"
+                    }
+                  }
+                ]
+              }
+            }
+          }
+        }
+      },
+      "mockResponse": {
+        "status": 200,
+        "body": {
+          "id": "39312703-e970-4914-ae56-8e7d7d1fd16b",
+          "tagid": "125",
+          "seatbid": [
+            {
+              "seat": "teads",
+              "bid": [
+                {
+                  "id": "695ac187-fb3f-4d1f-8d5d-099c5e4c4d28",
+                  "impid": "b6321d41-3840-4cb3-baad-b6fc5b0c8553",
+                  "price": 33,
+                  "nurl": "https://localhost:8080/prebid-server/win-notice?data=base64&clearingPrice=${AUCTION_PRICE}",
+                  "adm": "{\"settings\":{\"values\":{\"animations\":{\"expand\":0,\"collapse\":0.5},\"placementId\":2,\"adType\":\"video\",\"placementFormat\":\"inread\",\"allowedPlayer\":\"any\",\"pageId\":2},\"components\":{\"closeButton\":{\"display\":false,\"countdown\":0},\"credits\":{\"display\":false},\"soundButton\":{\"display\":true,\"countdown\":0,\"type\":\"equalizer\"},\"label\":{\"display\":false},\"slider\":{\"closeButtonDisplay\":false}},\"behaviors\":{\"smartPosition\":{\"top\":false,\"corner\":false,\"mustBypassWhitelist\":true},\"slider\":{\"enable\":false},\"friendly\":false,\"playerClick\":\"fullscreen\",\"soundStart\":{\"type\":\"mute\"},\"soundMute\":\"threshold\",\"soundOver\":\"over\",\"launch\":\"auto\",\"videoStart\":\"threshold\",\"videoPause\":\"threshold\",\"secure\":false}},\"ads\":[{\"settings\":{\"values\":{\"animations\":{\"expand\":0,\"collapse\":0.5},\"placementId\":2,\"adType\":\"video\",\"placementFormat\":\"inread\",\"allowedPlayer\":\"any\",\"pageId\":2},\"components\":{\"closeButton\":{\"display\":false,\"countdown\":0},\"credits\":{\"display\":false},\"soundButton\":{\"display\":true,\"countdown\":0,\"type\":\"equalizer\"},\"label\":{\"display\":false},\"slider\":{\"closeButtonDisplay\":false}},\"behaviors\":{\"smartPosition\":{\"top\":false,\"corner\":false,\"mustBypassWhitelist\":true},\"slider\":{\"enable\":false},\"friendly\":false,\"playerClick\":\"fullscreen\",\"soundStart\":{\"type\":\"mute\"},\"soundMute\":\"threshold\",\"soundOver\":\"over\",\"launch\":\"auto\",\"videoStart\":\"threshold\",\"videoPause\":\"threshold\",\"secure\":false}},\"type\":\"VastXml\",\"content\":\"<VAST version=\\\"3.0\\\"><Ad id=\\\"1\\\"><Wrapper><AdSystem>Teads Technology</AdSystem><VASTAdTagURI><![CDATA[http://vast.tv?auction_publisher_cost=LlBEcMjl2WSVYTIV0ZvZwFta&auction_publisher_cost_currency=USD&auction_ssb_provider_fee=&auction_ssb_provider_fee_currency=&auction_price=74Xz11zXoN9S_a18chCl1DB6&auction_currency=USD]]></VASTAdTagURI><Error><![CDATA[https://localhost:18281/track?action=error-vast&code=[ERRORCODE]&pid=2&vid=708ca808-ec55-4d97-ab81-9c4777e16058&pfid=971104812&mediaFileType=[MEDIAFILETYPE]&auctid=39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6&sid=0&scid=971105412&pscid=971105411&psid=971105457&hb_provider=prebid-server&hb_ad_unit_code=742d38c4-7994-4c2b-ac82-18d3a64ba3c7&dsp_campaign_id=1&dsp_creative_id=1&env=thirdparty-inapp&p=GmbtDz8E6SttqPqekGLm3vHN7muObx7-w6kGLgR8KMiWgUo78VfzNzYlcfjjRwTen7Oad6lYvgPUaiHwDV0lZcpu7lXO4Y7at1NIyIPxfcgdBw&cts=1685971107728&1685971107728]]></Error><Creatives></Creatives></Wrapper></Ad></VAST>\",\"scenario_id\":971105412,\"dsp_campaign_id\":\"1\",\"dsp_creative_id\":\"1\",\"insertion_id\":1,\"placement_id\":2,\"portfolio_item_id\":971104812}],\"wigoEnabled\":false,\"placementMetadata\":{\"2\":{\"adCallTrackingUrl\":\"https://localhost:18281/track?action=adCall&pid=2&pageId=2&auctid=39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6&vid=708ca808-ec55-4d97-ab81-9c4777e16058&hb_provider=prebid-server&hb_ad_unit_code=742d38c4-7994-4c2b-ac82-18d3a64ba3c7&env=thirdparty-inapp&gtc=1&gdpr_apply=false&gac=1&gap=1&ca=false&bsg=uncat&bsias=uncat&pfid=971104812&gid=1&brid=0&cid=1&rpm_reason=3&ut=1&p=5fwoPMJCquIB-txdmwQS0l79-hhHVnlTzyR9mmnBMtZRceP6-q31KzCfLpS8WTNaw_sXr-hkOFBxaxa-jyLblbVc&cts=1685971107773&cs=267268361555465193905\",\"auctionId\":\"39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6\"}},\"viewerId\":\"708ca808-ec55-4d97-ab81-9c4777e16058\"}",
+                  "adid": "1",
+                  "adomain": [
+                    "teads.com"
+                  ],
+                  "cid": "1",
+                  "crid": "1",
+                  "cat": [
+                    "IAB1-6",
+                    "IAB10-5"
+                  ],
+                  "ext": {
+                    "prebid": {
+                      "meta": {
+                        "rendererName": "teads",
+                        "rendererVersion": "5.0.25",
+                        "rendererData": {
+                          "resize": true,
+                          "sdkEngineVersion": "189"
+                        }
+                      }
+                    }
+                  }
+                }
+              ]
+            }
+          ]
+        }
+      }
+    }
+  ],
+  "expectedBidResponses": [
+    {
+      "currency": "USD",
+      "bids": [
+        {
+          "bid": {
+            "id": "695ac187-fb3f-4d1f-8d5d-099c5e4c4d28",
+            "impid": "b6321d41-3840-4cb3-baad-b6fc5b0c8553",
+            "price": 33,
+            "nurl": "https://localhost:8080/prebid-server/win-notice?data=base64&clearingPrice=${AUCTION_PRICE}",
+            "adm": "{\"settings\":{\"values\":{\"animations\":{\"expand\":0,\"collapse\":0.5},\"placementId\":2,\"adType\":\"video\",\"placementFormat\":\"inread\",\"allowedPlayer\":\"any\",\"pageId\":2},\"components\":{\"closeButton\":{\"display\":false,\"countdown\":0},\"credits\":{\"display\":false},\"soundButton\":{\"display\":true,\"countdown\":0,\"type\":\"equalizer\"},\"label\":{\"display\":false},\"slider\":{\"closeButtonDisplay\":false}},\"behaviors\":{\"smartPosition\":{\"top\":false,\"corner\":false,\"mustBypassWhitelist\":true},\"slider\":{\"enable\":false},\"friendly\":false,\"playerClick\":\"fullscreen\",\"soundStart\":{\"type\":\"mute\"},\"soundMute\":\"threshold\",\"soundOver\":\"over\",\"launch\":\"auto\",\"videoStart\":\"threshold\",\"videoPause\":\"threshold\",\"secure\":false}},\"ads\":[{\"settings\":{\"values\":{\"animations\":{\"expand\":0,\"collapse\":0.5},\"placementId\":2,\"adType\":\"video\",\"placementFormat\":\"inread\",\"allowedPlayer\":\"any\",\"pageId\":2},\"components\":{\"closeButton\":{\"display\":false,\"countdown\":0},\"credits\":{\"display\":false},\"soundButton\":{\"display\":true,\"countdown\":0,\"type\":\"equalizer\"},\"label\":{\"display\":false},\"slider\":{\"closeButtonDisplay\":false}},\"behaviors\":{\"smartPosition\":{\"top\":false,\"corner\":false,\"mustBypassWhitelist\":true},\"slider\":{\"enable\":false},\"friendly\":false,\"playerClick\":\"fullscreen\",\"soundStart\":{\"type\":\"mute\"},\"soundMute\":\"threshold\",\"soundOver\":\"over\",\"launch\":\"auto\",\"videoStart\":\"threshold\",\"videoPause\":\"threshold\",\"secure\":false}},\"type\":\"VastXml\",\"content\":\"<VAST version=\\\"3.0\\\"><Ad id=\\\"1\\\"><Wrapper><AdSystem>Teads Technology</AdSystem><VASTAdTagURI><![CDATA[http://vast.tv?auction_publisher_cost=LlBEcMjl2WSVYTIV0ZvZwFta&auction_publisher_cost_currency=USD&auction_ssb_provider_fee=&auction_ssb_provider_fee_currency=&auction_price=74Xz11zXoN9S_a18chCl1DB6&auction_currency=USD]]></VASTAdTagURI><Error><![CDATA[https://localhost:18281/track?action=error-vast&code=[ERRORCODE]&pid=2&vid=708ca808-ec55-4d97-ab81-9c4777e16058&pfid=971104812&mediaFileType=[MEDIAFILETYPE]&auctid=39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6&sid=0&scid=971105412&pscid=971105411&psid=971105457&hb_provider=prebid-server&hb_ad_unit_code=742d38c4-7994-4c2b-ac82-18d3a64ba3c7&dsp_campaign_id=1&dsp_creative_id=1&env=thirdparty-inapp&p=GmbtDz8E6SttqPqekGLm3vHN7muObx7-w6kGLgR8KMiWgUo78VfzNzYlcfjjRwTen7Oad6lYvgPUaiHwDV0lZcpu7lXO4Y7at1NIyIPxfcgdBw&cts=1685971107728&1685971107728]]></Error><Creatives></Creatives></Wrapper></Ad></VAST>\",\"scenario_id\":971105412,\"dsp_campaign_id\":\"1\",\"dsp_creative_id\":\"1\",\"insertion_id\":1,\"placement_id\":2,\"portfolio_item_id\":971104812}],\"wigoEnabled\":false,\"placementMetadata\":{\"2\":{\"adCallTrackingUrl\":\"https://localhost:18281/track?action=adCall&pid=2&pageId=2&auctid=39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6&vid=708ca808-ec55-4d97-ab81-9c4777e16058&hb_provider=prebid-server&hb_ad_unit_code=742d38c4-7994-4c2b-ac82-18d3a64ba3c7&env=thirdparty-inapp&gtc=1&gdpr_apply=false&gac=1&gap=1&ca=false&bsg=uncat&bsias=uncat&pfid=971104812&gid=1&brid=0&cid=1&rpm_reason=3&ut=1&p=5fwoPMJCquIB-txdmwQS0l79-hhHVnlTzyR9mmnBMtZRceP6-q31KzCfLpS8WTNaw_sXr-hkOFBxaxa-jyLblbVc&cts=1685971107773&cs=267268361555465193905\",\"auctionId\":\"39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6\"}},\"viewerId\":\"708ca808-ec55-4d97-ab81-9c4777e16058\"}",
+            "adid": "1",
+            "adomain": [
+              "teads.com"
+            ],
+            "cid": "1",
+            "crid": "1",
+            "cat": [
+              "IAB1-6",
+              "IAB10-5"
+            ],
+            "ext": {
+              "prebid": {
+                "meta": {
+                  "rendererName": "teads",
+                  "rendererVersion": "5.0.25",
+                  "rendererData": {
+                    "resize": true,
+                    "sdkEngineVersion": "189"
+                  }
+                }
+              }
+            }
+          },
+          "type": "video"
+        }
+      ]
+    }
+  ]
+}
\ No newline at end of file
diff --git a/adapters/teads/teadstest/supplemental/bid-id-does-not-match.json b/adapters/teads/teadstest/supplemental/bid-id-does-not-match.json
new file mode 100644
index 00000000..384e72fb
--- /dev/null
+++ b/adapters/teads/teadstest/supplemental/bid-id-does-not-match.json
@@ -0,0 +1,152 @@
+{
+  "mockBidRequest": {
+    "id": "test-request-id",
+    "imp": [
+      {
+        "id": "b6321d41-3840-4cb3-baad-b6fc5b0c8553",
+        "video": {
+          "mimes": [
+            "video/mp4"
+          ],
+          "minduration": 15,
+          "maxduration": 30,
+          "protocols": [
+            2,
+            3,
+            5,
+            6,
+            7,
+            8
+          ],
+          "w": 940,
+          "h": 560
+        },
+        "ext": {
+          "bidder": {
+            "placementId": 125
+          }
+        }
+      }
+    ],
+    "ext": {
+      "prebid": {
+        "sdk": {
+          "renderers": [
+            {
+              "name": "teads",
+              "version": "5.0.25",
+              "data": {
+                "resize": true,
+                "sdkEngineVersion": "189"
+              }
+            }
+          ]
+        }
+      }
+    }
+  },
+  "httpCalls": [
+    {
+      "expectedRequest": {
+        "uri": "https://a.teads.tv/prebid-server/bid-request",
+        "body": {
+          "id": "test-request-id",
+          "imp": [
+            {
+              "id": "b6321d41-3840-4cb3-baad-b6fc5b0c8553",
+              "tagid": "125",
+              "video": {
+                "mimes": [
+                  "video/mp4"
+                ],
+                "minduration": 15,
+                "maxduration": 30,
+                "protocols": [
+                  2,
+                  3,
+                  5,
+                  6,
+                  7,
+                  8
+                ],
+                "w": 940,
+                "h": 560
+              },
+              "ext": {
+                "kv": {
+                  "placementId": 125
+                }
+              }
+            }
+          ],
+          "ext": {
+            "prebid": {
+              "sdk": {
+                "renderers": [
+                  {
+                    "name": "teads",
+                    "version": "5.0.25",
+                    "data": {
+                      "resize": true,
+                      "sdkEngineVersion": "189"
+                    }
+                  }
+                ]
+              }
+            }
+          }
+        }
+      },
+      "mockResponse": {
+        "status": 200,
+        "body": {
+          "id": "39312703-e970-4914-ae56-8e7d7d1fd16b",
+          "cur": "EUR",
+          "tagid": "125",
+          "seatbid": [
+            {
+              "seat": "teads",
+              "bid": [
+                {
+                  "id": "695ac187-fb3f-4d1f-8d5d-099c5e4c4d28",
+                  "impid": "does-not-match",
+                  "price": 33,
+                  "nurl": "https://localhost:8080/prebid-server/win-notice?data=base64&clearingPrice=${AUCTION_PRICE}",
+                  "adm": "{\"settings\":{\"values\":{\"animations\":{\"expand\":0,\"collapse\":0.5},\"placementId\":2,\"adType\":\"video\",\"placementFormat\":\"inread\",\"allowedPlayer\":\"any\",\"pageId\":2},\"components\":{\"closeButton\":{\"display\":false,\"countdown\":0},\"credits\":{\"display\":false},\"soundButton\":{\"display\":true,\"countdown\":0,\"type\":\"equalizer\"},\"label\":{\"display\":false},\"slider\":{\"closeButtonDisplay\":false}},\"behaviors\":{\"smartPosition\":{\"top\":false,\"corner\":false,\"mustBypassWhitelist\":true},\"slider\":{\"enable\":false},\"friendly\":false,\"playerClick\":\"fullscreen\",\"soundStart\":{\"type\":\"mute\"},\"soundMute\":\"threshold\",\"soundOver\":\"over\",\"launch\":\"auto\",\"videoStart\":\"threshold\",\"videoPause\":\"threshold\",\"secure\":false}},\"ads\":[{\"settings\":{\"values\":{\"animations\":{\"expand\":0,\"collapse\":0.5},\"placementId\":2,\"adType\":\"video\",\"placementFormat\":\"inread\",\"allowedPlayer\":\"any\",\"pageId\":2},\"components\":{\"closeButton\":{\"display\":false,\"countdown\":0},\"credits\":{\"display\":false},\"soundButton\":{\"display\":true,\"countdown\":0,\"type\":\"equalizer\"},\"label\":{\"display\":false},\"slider\":{\"closeButtonDisplay\":false}},\"behaviors\":{\"smartPosition\":{\"top\":false,\"corner\":false,\"mustBypassWhitelist\":true},\"slider\":{\"enable\":false},\"friendly\":false,\"playerClick\":\"fullscreen\",\"soundStart\":{\"type\":\"mute\"},\"soundMute\":\"threshold\",\"soundOver\":\"over\",\"launch\":\"auto\",\"videoStart\":\"threshold\",\"videoPause\":\"threshold\",\"secure\":false}},\"type\":\"VastXml\",\"content\":\"<VAST version=\\\"3.0\\\"><Ad id=\\\"1\\\"><Wrapper><AdSystem>Teads Technology</AdSystem><VASTAdTagURI><![CDATA[http://vast.tv?auction_publisher_cost=LlBEcMjl2WSVYTIV0ZvZwFta&auction_publisher_cost_currency=USD&auction_ssb_provider_fee=&auction_ssb_provider_fee_currency=&auction_price=74Xz11zXoN9S_a18chCl1DB6&auction_currency=USD]]></VASTAdTagURI><Error><![CDATA[https://localhost:18281/track?action=error-vast&code=[ERRORCODE]&pid=2&vid=708ca808-ec55-4d97-ab81-9c4777e16058&pfid=971104812&mediaFileType=[MEDIAFILETYPE]&auctid=39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6&sid=0&scid=971105412&pscid=971105411&psid=971105457&hb_provider=prebid-server&hb_ad_unit_code=742d38c4-7994-4c2b-ac82-18d3a64ba3c7&dsp_campaign_id=1&dsp_creative_id=1&env=thirdparty-inapp&p=GmbtDz8E6SttqPqekGLm3vHN7muObx7-w6kGLgR8KMiWgUo78VfzNzYlcfjjRwTen7Oad6lYvgPUaiHwDV0lZcpu7lXO4Y7at1NIyIPxfcgdBw&cts=1685971107728&1685971107728]]></Error><Creatives></Creatives></Wrapper></Ad></VAST>\",\"scenario_id\":971105412,\"dsp_campaign_id\":\"1\",\"dsp_creative_id\":\"1\",\"insertion_id\":1,\"placement_id\":2,\"portfolio_item_id\":971104812}],\"wigoEnabled\":false,\"placementMetadata\":{\"2\":{\"adCallTrackingUrl\":\"https://localhost:18281/track?action=adCall&pid=2&pageId=2&auctid=39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6&vid=708ca808-ec55-4d97-ab81-9c4777e16058&hb_provider=prebid-server&hb_ad_unit_code=742d38c4-7994-4c2b-ac82-18d3a64ba3c7&env=thirdparty-inapp&gtc=1&gdpr_apply=false&gac=1&gap=1&ca=false&bsg=uncat&bsias=uncat&pfid=971104812&gid=1&brid=0&cid=1&rpm_reason=3&ut=1&p=5fwoPMJCquIB-txdmwQS0l79-hhHVnlTzyR9mmnBMtZRceP6-q31KzCfLpS8WTNaw_sXr-hkOFBxaxa-jyLblbVc&cts=1685971107773&cs=267268361555465193905\",\"auctionId\":\"39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6\"}},\"viewerId\":\"708ca808-ec55-4d97-ab81-9c4777e16058\"}",
+                  "adid": "1",
+                  "adomain": [
+                    "teads.com"
+                  ],
+                  "cid": "1",
+                  "crid": "1",
+                  "cat": [
+                    "IAB1-6",
+                    "IAB10-5"
+                  ],
+                  "ext": {
+                    "prebid": {
+                      "meta": {
+                        "rendererName": "teads",
+                        "rendererVersion": "5.0.25",
+                        "rendererData": {
+                          "resize": true,
+                          "sdkEngineVersion": "189"
+                        }
+                      }
+                    }
+                  }
+                }
+              ]
+            }
+          ]
+        }
+      }
+    }
+  ],
+  "expectedMakeBidsErrors": [
+    {
+      "value": "Imp ids were not equals",
+      "comparison": "literal"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/adapters/teads/teadstest/supplemental/currency-empty-string.json b/adapters/teads/teadstest/supplemental/currency-empty-string.json
new file mode 100644
index 00000000..5f0d700b
--- /dev/null
+++ b/adapters/teads/teadstest/supplemental/currency-empty-string.json
@@ -0,0 +1,185 @@
+{
+  "mockBidRequest": {
+    "id": "test-request-id",
+    "imp": [
+      {
+        "id": "b6321d41-3840-4cb3-baad-b6fc5b0c8553",
+        "video": {
+          "mimes": [
+            "video/mp4"
+          ],
+          "minduration": 15,
+          "maxduration": 30,
+          "protocols": [
+            2,
+            3,
+            5,
+            6,
+            7,
+            8
+          ],
+          "w": 940,
+          "h": 560
+        },
+        "ext": {
+          "bidder": {
+            "placementId": 125
+          }
+        }
+      }
+    ],
+    "ext": {
+      "prebid": {
+        "sdk": {
+          "renderers": [
+            {
+              "name": "teads",
+              "version": "5.0.25",
+              "data": {
+                "resize": true,
+                "sdkEngineVersion": "189"
+              }
+            }
+          ]
+        }
+      }
+    }
+  },
+  "httpCalls": [
+    {
+      "expectedRequest": {
+        "uri": "https://a.teads.tv/prebid-server/bid-request",
+        "body": {
+          "id": "test-request-id",
+          "imp": [
+            {
+              "id": "b6321d41-3840-4cb3-baad-b6fc5b0c8553",
+              "tagid": "125",
+              "video": {
+                "mimes": [
+                  "video/mp4"
+                ],
+                "minduration": 15,
+                "maxduration": 30,
+                "protocols": [
+                  2,
+                  3,
+                  5,
+                  6,
+                  7,
+                  8
+                ],
+                "w": 940,
+                "h": 560
+              },
+              "ext": {
+                "kv": {
+                  "placementId": 125
+                }
+              }
+            }
+          ],
+          "ext": {
+            "prebid": {
+              "sdk": {
+                "renderers": [
+                  {
+                    "name": "teads",
+                    "version": "5.0.25",
+                    "data": {
+                      "resize": true,
+                      "sdkEngineVersion": "189"
+                    }
+                  }
+                ]
+              }
+            }
+          }
+        }
+      },
+      "mockResponse": {
+        "status": 200,
+        "body": {
+          "id": "39312703-e970-4914-ae56-8e7d7d1fd16b",
+          "cur": "EUR",
+          "tagid": "125",
+          "seatbid": [
+            {
+              "seat": "teads",
+              "bid": [
+                {
+                  "id": "695ac187-fb3f-4d1f-8d5d-099c5e4c4d28",
+                  "impid": "b6321d41-3840-4cb3-baad-b6fc5b0c8553",
+                  "price": 33,
+                  "nurl": "https://localhost:8080/prebid-server/win-notice?data=base64&clearingPrice=${AUCTION_PRICE}",
+                  "adm": "{\"settings\":{\"values\":{\"animations\":{\"expand\":0,\"collapse\":0.5},\"placementId\":2,\"adType\":\"video\",\"placementFormat\":\"inread\",\"allowedPlayer\":\"any\",\"pageId\":2},\"components\":{\"closeButton\":{\"display\":false,\"countdown\":0},\"credits\":{\"display\":false},\"soundButton\":{\"display\":true,\"countdown\":0,\"type\":\"equalizer\"},\"label\":{\"display\":false},\"slider\":{\"closeButtonDisplay\":false}},\"behaviors\":{\"smartPosition\":{\"top\":false,\"corner\":false,\"mustBypassWhitelist\":true},\"slider\":{\"enable\":false},\"friendly\":false,\"playerClick\":\"fullscreen\",\"soundStart\":{\"type\":\"mute\"},\"soundMute\":\"threshold\",\"soundOver\":\"over\",\"launch\":\"auto\",\"videoStart\":\"threshold\",\"videoPause\":\"threshold\",\"secure\":false}},\"ads\":[{\"settings\":{\"values\":{\"animations\":{\"expand\":0,\"collapse\":0.5},\"placementId\":2,\"adType\":\"video\",\"placementFormat\":\"inread\",\"allowedPlayer\":\"any\",\"pageId\":2},\"components\":{\"closeButton\":{\"display\":false,\"countdown\":0},\"credits\":{\"display\":false},\"soundButton\":{\"display\":true,\"countdown\":0,\"type\":\"equalizer\"},\"label\":{\"display\":false},\"slider\":{\"closeButtonDisplay\":false}},\"behaviors\":{\"smartPosition\":{\"top\":false,\"corner\":false,\"mustBypassWhitelist\":true},\"slider\":{\"enable\":false},\"friendly\":false,\"playerClick\":\"fullscreen\",\"soundStart\":{\"type\":\"mute\"},\"soundMute\":\"threshold\",\"soundOver\":\"over\",\"launch\":\"auto\",\"videoStart\":\"threshold\",\"videoPause\":\"threshold\",\"secure\":false}},\"type\":\"VastXml\",\"content\":\"<VAST version=\\\"3.0\\\"><Ad id=\\\"1\\\"><Wrapper><AdSystem>Teads Technology</AdSystem><VASTAdTagURI><![CDATA[http://vast.tv?auction_publisher_cost=LlBEcMjl2WSVYTIV0ZvZwFta&auction_publisher_cost_currency=USD&auction_ssb_provider_fee=&auction_ssb_provider_fee_currency=&auction_price=74Xz11zXoN9S_a18chCl1DB6&auction_currency=USD]]></VASTAdTagURI><Error><![CDATA[https://localhost:18281/track?action=error-vast&code=[ERRORCODE]&pid=2&vid=708ca808-ec55-4d97-ab81-9c4777e16058&pfid=971104812&mediaFileType=[MEDIAFILETYPE]&auctid=39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6&sid=0&scid=971105412&pscid=971105411&psid=971105457&hb_provider=prebid-server&hb_ad_unit_code=742d38c4-7994-4c2b-ac82-18d3a64ba3c7&dsp_campaign_id=1&dsp_creative_id=1&env=thirdparty-inapp&p=GmbtDz8E6SttqPqekGLm3vHN7muObx7-w6kGLgR8KMiWgUo78VfzNzYlcfjjRwTen7Oad6lYvgPUaiHwDV0lZcpu7lXO4Y7at1NIyIPxfcgdBw&cts=1685971107728&1685971107728]]></Error><Creatives></Creatives></Wrapper></Ad></VAST>\",\"scenario_id\":971105412,\"dsp_campaign_id\":\"1\",\"dsp_creative_id\":\"1\",\"insertion_id\":1,\"placement_id\":2,\"portfolio_item_id\":971104812}],\"wigoEnabled\":false,\"placementMetadata\":{\"2\":{\"adCallTrackingUrl\":\"https://localhost:18281/track?action=adCall&pid=2&pageId=2&auctid=39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6&vid=708ca808-ec55-4d97-ab81-9c4777e16058&hb_provider=prebid-server&hb_ad_unit_code=742d38c4-7994-4c2b-ac82-18d3a64ba3c7&env=thirdparty-inapp&gtc=1&gdpr_apply=false&gac=1&gap=1&ca=false&bsg=uncat&bsias=uncat&pfid=971104812&gid=1&brid=0&cid=1&rpm_reason=3&ut=1&p=5fwoPMJCquIB-txdmwQS0l79-hhHVnlTzyR9mmnBMtZRceP6-q31KzCfLpS8WTNaw_sXr-hkOFBxaxa-jyLblbVc&cts=1685971107773&cs=267268361555465193905\",\"auctionId\":\"39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6\"}},\"viewerId\":\"708ca808-ec55-4d97-ab81-9c4777e16058\"}",
+                  "adid": "1",
+                  "adomain": [
+                    "teads.com"
+                  ],
+                  "cid": "1",
+                  "crid": "1",
+                  "cat": [
+                    "IAB1-6",
+                    "IAB10-5"
+                  ],
+                  "ext": {
+                    "prebid": {
+                      "meta": {
+                        "rendererName": "teads",
+                        "rendererVersion": "5.0.25",
+                        "rendererData": {
+                          "resize": true,
+                          "sdkEngineVersion": "189"
+                        }
+                      }
+                    }
+                  }
+                }
+              ]
+            }
+          ]
+        }
+      }
+    }
+  ],
+  "expectedBidResponses": [
+    {
+      "currency": "EUR",
+      "bids": [
+        {
+          "bid": {
+            "id": "695ac187-fb3f-4d1f-8d5d-099c5e4c4d28",
+            "impid": "b6321d41-3840-4cb3-baad-b6fc5b0c8553",
+            "price": 33,
+            "nurl": "https://localhost:8080/prebid-server/win-notice?data=base64&clearingPrice=${AUCTION_PRICE}",
+            "adm": "{\"settings\":{\"values\":{\"animations\":{\"expand\":0,\"collapse\":0.5},\"placementId\":2,\"adType\":\"video\",\"placementFormat\":\"inread\",\"allowedPlayer\":\"any\",\"pageId\":2},\"components\":{\"closeButton\":{\"display\":false,\"countdown\":0},\"credits\":{\"display\":false},\"soundButton\":{\"display\":true,\"countdown\":0,\"type\":\"equalizer\"},\"label\":{\"display\":false},\"slider\":{\"closeButtonDisplay\":false}},\"behaviors\":{\"smartPosition\":{\"top\":false,\"corner\":false,\"mustBypassWhitelist\":true},\"slider\":{\"enable\":false},\"friendly\":false,\"playerClick\":\"fullscreen\",\"soundStart\":{\"type\":\"mute\"},\"soundMute\":\"threshold\",\"soundOver\":\"over\",\"launch\":\"auto\",\"videoStart\":\"threshold\",\"videoPause\":\"threshold\",\"secure\":false}},\"ads\":[{\"settings\":{\"values\":{\"animations\":{\"expand\":0,\"collapse\":0.5},\"placementId\":2,\"adType\":\"video\",\"placementFormat\":\"inread\",\"allowedPlayer\":\"any\",\"pageId\":2},\"components\":{\"closeButton\":{\"display\":false,\"countdown\":0},\"credits\":{\"display\":false},\"soundButton\":{\"display\":true,\"countdown\":0,\"type\":\"equalizer\"},\"label\":{\"display\":false},\"slider\":{\"closeButtonDisplay\":false}},\"behaviors\":{\"smartPosition\":{\"top\":false,\"corner\":false,\"mustBypassWhitelist\":true},\"slider\":{\"enable\":false},\"friendly\":false,\"playerClick\":\"fullscreen\",\"soundStart\":{\"type\":\"mute\"},\"soundMute\":\"threshold\",\"soundOver\":\"over\",\"launch\":\"auto\",\"videoStart\":\"threshold\",\"videoPause\":\"threshold\",\"secure\":false}},\"type\":\"VastXml\",\"content\":\"<VAST version=\\\"3.0\\\"><Ad id=\\\"1\\\"><Wrapper><AdSystem>Teads Technology</AdSystem><VASTAdTagURI><![CDATA[http://vast.tv?auction_publisher_cost=LlBEcMjl2WSVYTIV0ZvZwFta&auction_publisher_cost_currency=USD&auction_ssb_provider_fee=&auction_ssb_provider_fee_currency=&auction_price=74Xz11zXoN9S_a18chCl1DB6&auction_currency=USD]]></VASTAdTagURI><Error><![CDATA[https://localhost:18281/track?action=error-vast&code=[ERRORCODE]&pid=2&vid=708ca808-ec55-4d97-ab81-9c4777e16058&pfid=971104812&mediaFileType=[MEDIAFILETYPE]&auctid=39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6&sid=0&scid=971105412&pscid=971105411&psid=971105457&hb_provider=prebid-server&hb_ad_unit_code=742d38c4-7994-4c2b-ac82-18d3a64ba3c7&dsp_campaign_id=1&dsp_creative_id=1&env=thirdparty-inapp&p=GmbtDz8E6SttqPqekGLm3vHN7muObx7-w6kGLgR8KMiWgUo78VfzNzYlcfjjRwTen7Oad6lYvgPUaiHwDV0lZcpu7lXO4Y7at1NIyIPxfcgdBw&cts=1685971107728&1685971107728]]></Error><Creatives></Creatives></Wrapper></Ad></VAST>\",\"scenario_id\":971105412,\"dsp_campaign_id\":\"1\",\"dsp_creative_id\":\"1\",\"insertion_id\":1,\"placement_id\":2,\"portfolio_item_id\":971104812}],\"wigoEnabled\":false,\"placementMetadata\":{\"2\":{\"adCallTrackingUrl\":\"https://localhost:18281/track?action=adCall&pid=2&pageId=2&auctid=39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6&vid=708ca808-ec55-4d97-ab81-9c4777e16058&hb_provider=prebid-server&hb_ad_unit_code=742d38c4-7994-4c2b-ac82-18d3a64ba3c7&env=thirdparty-inapp&gtc=1&gdpr_apply=false&gac=1&gap=1&ca=false&bsg=uncat&bsias=uncat&pfid=971104812&gid=1&brid=0&cid=1&rpm_reason=3&ut=1&p=5fwoPMJCquIB-txdmwQS0l79-hhHVnlTzyR9mmnBMtZRceP6-q31KzCfLpS8WTNaw_sXr-hkOFBxaxa-jyLblbVc&cts=1685971107773&cs=267268361555465193905\",\"auctionId\":\"39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6\"}},\"viewerId\":\"708ca808-ec55-4d97-ab81-9c4777e16058\"}",
+            "adid": "1",
+            "adomain": [
+              "teads.com"
+            ],
+            "cid": "1",
+            "crid": "1",
+            "cat": [
+              "IAB1-6",
+              "IAB10-5"
+            ],
+            "ext": {
+              "prebid": {
+                "meta": {
+                  "rendererName": "teads",
+                  "rendererVersion": "5.0.25",
+                  "rendererData": {
+                    "resize": true,
+                    "sdkEngineVersion": "189"
+                  }
+                }
+              }
+            }
+          },
+          "type": "video"
+        }
+      ]
+    }
+  ]
+}
\ No newline at end of file
diff --git a/adapters/teads/teadstest/supplemental/no-impression-response.json b/adapters/teads/teadstest/supplemental/no-impression-response.json
new file mode 100644
index 00000000..814569a4
--- /dev/null
+++ b/adapters/teads/teadstest/supplemental/no-impression-response.json
@@ -0,0 +1,184 @@
+{
+  "mockBidRequest": {
+    "id": "test-request-id",
+    "imp": [
+      {
+        "id": "b6321d41-3840-4cb3-baad-b6fc5b0c8553",
+        "video": {
+          "mimes": [
+            "video/mp4"
+          ],
+          "minduration": 15,
+          "maxduration": 30,
+          "protocols": [
+            2,
+            3,
+            5,
+            6,
+            7,
+            8
+          ],
+          "w": 940,
+          "h": 560
+        },
+        "ext": {
+          "bidder": {
+            "placementId": 125
+          }
+        }
+      }
+    ],
+    "ext": {
+      "prebid": {
+        "sdk": {
+          "renderers": [
+            {
+              "name": "teads",
+              "version": "5.0.25",
+              "data": {
+                "resize": true,
+                "sdkEngineVersion": "189"
+              }
+            }
+          ]
+        }
+      }
+    }
+  },
+  "httpCalls": [
+    {
+      "expectedRequest": {
+        "uri": "https://a.teads.tv/prebid-server/bid-request",
+        "body": {
+          "id": "test-request-id",
+          "imp": [
+            {
+              "id": "b6321d41-3840-4cb3-baad-b6fc5b0c8553",
+              "tagid": "125",
+              "video": {
+                "mimes": [
+                  "video/mp4"
+                ],
+                "minduration": 15,
+                "maxduration": 30,
+                "protocols": [
+                  2,
+                  3,
+                  5,
+                  6,
+                  7,
+                  8
+                ],
+                "w": 940,
+                "h": 560
+              },
+              "ext": {
+                "kv": {
+                  "placementId": 125
+                }
+              }
+            }
+          ],
+          "ext": {
+            "prebid": {
+              "sdk": {
+                "renderers": [
+                  {
+                    "name": "teads",
+                    "version": "5.0.25",
+                    "data": {
+                      "resize": true,
+                      "sdkEngineVersion": "189"
+                    }
+                  }
+                ]
+              }
+            }
+          }
+        }
+      },
+      "mockResponse": {
+        "status": 200,
+        "body": {
+          "id": "39312703-e970-4914-ae56-8e7d7d1fd16b",
+          "tagid": "125",
+          "seatbid": [
+            {
+              "seat": "teads",
+              "bid": [
+                {
+                  "id": "695ac187-fb3f-4d1f-8d5d-099c5e4c4d28",
+                  "impid": "b6321d41-3840-4cb3-baad-b6fc5b0c8553",
+                  "price": 33,
+                  "nurl": "https://localhost:8080/prebid-server/win-notice?data=base64&clearingPrice=${AUCTION_PRICE}",
+                  "adm": "{\"settings\":{\"values\":{\"animations\":{\"expand\":0,\"collapse\":0.5},\"placementId\":2,\"adType\":\"video\",\"placementFormat\":\"inread\",\"allowedPlayer\":\"any\",\"pageId\":2},\"components\":{\"closeButton\":{\"display\":false,\"countdown\":0},\"credits\":{\"display\":false},\"soundButton\":{\"display\":true,\"countdown\":0,\"type\":\"equalizer\"},\"label\":{\"display\":false},\"slider\":{\"closeButtonDisplay\":false}},\"behaviors\":{\"smartPosition\":{\"top\":false,\"corner\":false,\"mustBypassWhitelist\":true},\"slider\":{\"enable\":false},\"friendly\":false,\"playerClick\":\"fullscreen\",\"soundStart\":{\"type\":\"mute\"},\"soundMute\":\"threshold\",\"soundOver\":\"over\",\"launch\":\"auto\",\"videoStart\":\"threshold\",\"videoPause\":\"threshold\",\"secure\":false}},\"ads\":[{\"settings\":{\"values\":{\"animations\":{\"expand\":0,\"collapse\":0.5},\"placementId\":2,\"adType\":\"video\",\"placementFormat\":\"inread\",\"allowedPlayer\":\"any\",\"pageId\":2},\"components\":{\"closeButton\":{\"display\":false,\"countdown\":0},\"credits\":{\"display\":false},\"soundButton\":{\"display\":true,\"countdown\":0,\"type\":\"equalizer\"},\"label\":{\"display\":false},\"slider\":{\"closeButtonDisplay\":false}},\"behaviors\":{\"smartPosition\":{\"top\":false,\"corner\":false,\"mustBypassWhitelist\":true},\"slider\":{\"enable\":false},\"friendly\":false,\"playerClick\":\"fullscreen\",\"soundStart\":{\"type\":\"mute\"},\"soundMute\":\"threshold\",\"soundOver\":\"over\",\"launch\":\"auto\",\"videoStart\":\"threshold\",\"videoPause\":\"threshold\",\"secure\":false}},\"type\":\"VastXml\",\"content\":\"<VAST version=\\\"3.0\\\"><Ad id=\\\"1\\\"><Wrapper><AdSystem>Teads Technology</AdSystem><VASTAdTagURI><![CDATA[http://vast.tv?auction_publisher_cost=LlBEcMjl2WSVYTIV0ZvZwFta&auction_publisher_cost_currency=USD&auction_ssb_provider_fee=&auction_ssb_provider_fee_currency=&auction_price=74Xz11zXoN9S_a18chCl1DB6&auction_currency=USD]]></VASTAdTagURI><Error><![CDATA[https://localhost:18281/track?action=error-vast&code=[ERRORCODE]&pid=2&vid=708ca808-ec55-4d97-ab81-9c4777e16058&pfid=971104812&mediaFileType=[MEDIAFILETYPE]&auctid=39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6&sid=0&scid=971105412&pscid=971105411&psid=971105457&hb_provider=prebid-server&hb_ad_unit_code=742d38c4-7994-4c2b-ac82-18d3a64ba3c7&dsp_campaign_id=1&dsp_creative_id=1&env=thirdparty-inapp&p=GmbtDz8E6SttqPqekGLm3vHN7muObx7-w6kGLgR8KMiWgUo78VfzNzYlcfjjRwTen7Oad6lYvgPUaiHwDV0lZcpu7lXO4Y7at1NIyIPxfcgdBw&cts=1685971107728&1685971107728]]></Error><Creatives></Creatives></Wrapper></Ad></VAST>\",\"scenario_id\":971105412,\"dsp_campaign_id\":\"1\",\"dsp_creative_id\":\"1\",\"insertion_id\":1,\"placement_id\":2,\"portfolio_item_id\":971104812}],\"wigoEnabled\":false,\"placementMetadata\":{\"2\":{\"adCallTrackingUrl\":\"https://localhost:18281/track?action=adCall&pid=2&pageId=2&auctid=39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6&vid=708ca808-ec55-4d97-ab81-9c4777e16058&hb_provider=prebid-server&hb_ad_unit_code=742d38c4-7994-4c2b-ac82-18d3a64ba3c7&env=thirdparty-inapp&gtc=1&gdpr_apply=false&gac=1&gap=1&ca=false&bsg=uncat&bsias=uncat&pfid=971104812&gid=1&brid=0&cid=1&rpm_reason=3&ut=1&p=5fwoPMJCquIB-txdmwQS0l79-hhHVnlTzyR9mmnBMtZRceP6-q31KzCfLpS8WTNaw_sXr-hkOFBxaxa-jyLblbVc&cts=1685971107773&cs=267268361555465193905\",\"auctionId\":\"39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6\"}},\"viewerId\":\"708ca808-ec55-4d97-ab81-9c4777e16058\"}",
+                  "adid": "1",
+                  "adomain": [
+                    "teads.com"
+                  ],
+                  "cid": "1",
+                  "crid": "1",
+                  "cat": [
+                    "IAB1-6",
+                    "IAB10-5"
+                  ],
+                  "ext": {
+                    "prebid": {
+                      "meta": {
+                        "rendererName": "teads",
+                        "rendererVersion": "5.0.25",
+                        "rendererData": {
+                          "resize": true,
+                          "sdkEngineVersion": "189"
+                        }
+                      }
+                    }
+                  }
+                }
+              ]
+            }
+          ]
+        }
+      }
+    }
+  ],
+  "expectedBidResponses": [
+    {
+      "currency": "USD",
+      "bids": [
+        {
+          "bid": {
+            "id": "695ac187-fb3f-4d1f-8d5d-099c5e4c4d28",
+            "impid": "b6321d41-3840-4cb3-baad-b6fc5b0c8553",
+            "price": 33,
+            "nurl": "https://localhost:8080/prebid-server/win-notice?data=base64&clearingPrice=${AUCTION_PRICE}",
+            "adm": "{\"settings\":{\"values\":{\"animations\":{\"expand\":0,\"collapse\":0.5},\"placementId\":2,\"adType\":\"video\",\"placementFormat\":\"inread\",\"allowedPlayer\":\"any\",\"pageId\":2},\"components\":{\"closeButton\":{\"display\":false,\"countdown\":0},\"credits\":{\"display\":false},\"soundButton\":{\"display\":true,\"countdown\":0,\"type\":\"equalizer\"},\"label\":{\"display\":false},\"slider\":{\"closeButtonDisplay\":false}},\"behaviors\":{\"smartPosition\":{\"top\":false,\"corner\":false,\"mustBypassWhitelist\":true},\"slider\":{\"enable\":false},\"friendly\":false,\"playerClick\":\"fullscreen\",\"soundStart\":{\"type\":\"mute\"},\"soundMute\":\"threshold\",\"soundOver\":\"over\",\"launch\":\"auto\",\"videoStart\":\"threshold\",\"videoPause\":\"threshold\",\"secure\":false}},\"ads\":[{\"settings\":{\"values\":{\"animations\":{\"expand\":0,\"collapse\":0.5},\"placementId\":2,\"adType\":\"video\",\"placementFormat\":\"inread\",\"allowedPlayer\":\"any\",\"pageId\":2},\"components\":{\"closeButton\":{\"display\":false,\"countdown\":0},\"credits\":{\"display\":false},\"soundButton\":{\"display\":true,\"countdown\":0,\"type\":\"equalizer\"},\"label\":{\"display\":false},\"slider\":{\"closeButtonDisplay\":false}},\"behaviors\":{\"smartPosition\":{\"top\":false,\"corner\":false,\"mustBypassWhitelist\":true},\"slider\":{\"enable\":false},\"friendly\":false,\"playerClick\":\"fullscreen\",\"soundStart\":{\"type\":\"mute\"},\"soundMute\":\"threshold\",\"soundOver\":\"over\",\"launch\":\"auto\",\"videoStart\":\"threshold\",\"videoPause\":\"threshold\",\"secure\":false}},\"type\":\"VastXml\",\"content\":\"<VAST version=\\\"3.0\\\"><Ad id=\\\"1\\\"><Wrapper><AdSystem>Teads Technology</AdSystem><VASTAdTagURI><![CDATA[http://vast.tv?auction_publisher_cost=LlBEcMjl2WSVYTIV0ZvZwFta&auction_publisher_cost_currency=USD&auction_ssb_provider_fee=&auction_ssb_provider_fee_currency=&auction_price=74Xz11zXoN9S_a18chCl1DB6&auction_currency=USD]]></VASTAdTagURI><Error><![CDATA[https://localhost:18281/track?action=error-vast&code=[ERRORCODE]&pid=2&vid=708ca808-ec55-4d97-ab81-9c4777e16058&pfid=971104812&mediaFileType=[MEDIAFILETYPE]&auctid=39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6&sid=0&scid=971105412&pscid=971105411&psid=971105457&hb_provider=prebid-server&hb_ad_unit_code=742d38c4-7994-4c2b-ac82-18d3a64ba3c7&dsp_campaign_id=1&dsp_creative_id=1&env=thirdparty-inapp&p=GmbtDz8E6SttqPqekGLm3vHN7muObx7-w6kGLgR8KMiWgUo78VfzNzYlcfjjRwTen7Oad6lYvgPUaiHwDV0lZcpu7lXO4Y7at1NIyIPxfcgdBw&cts=1685971107728&1685971107728]]></Error><Creatives></Creatives></Wrapper></Ad></VAST>\",\"scenario_id\":971105412,\"dsp_campaign_id\":\"1\",\"dsp_creative_id\":\"1\",\"insertion_id\":1,\"placement_id\":2,\"portfolio_item_id\":971104812}],\"wigoEnabled\":false,\"placementMetadata\":{\"2\":{\"adCallTrackingUrl\":\"https://localhost:18281/track?action=adCall&pid=2&pageId=2&auctid=39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6&vid=708ca808-ec55-4d97-ab81-9c4777e16058&hb_provider=prebid-server&hb_ad_unit_code=742d38c4-7994-4c2b-ac82-18d3a64ba3c7&env=thirdparty-inapp&gtc=1&gdpr_apply=false&gac=1&gap=1&ca=false&bsg=uncat&bsias=uncat&pfid=971104812&gid=1&brid=0&cid=1&rpm_reason=3&ut=1&p=5fwoPMJCquIB-txdmwQS0l79-hhHVnlTzyR9mmnBMtZRceP6-q31KzCfLpS8WTNaw_sXr-hkOFBxaxa-jyLblbVc&cts=1685971107773&cs=267268361555465193905\",\"auctionId\":\"39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6\"}},\"viewerId\":\"708ca808-ec55-4d97-ab81-9c4777e16058\"}",
+            "adid": "1",
+            "adomain": [
+              "teads.com"
+            ],
+            "cid": "1",
+            "crid": "1",
+            "cat": [
+              "IAB1-6",
+              "IAB10-5"
+            ],
+            "ext": {
+              "prebid": {
+                "meta": {
+                  "rendererName": "teads",
+                  "rendererVersion": "5.0.25",
+                  "rendererData": {
+                    "resize": true,
+                    "sdkEngineVersion": "189"
+                  }
+                }
+              }
+            }
+          },
+          "type": "video"
+        }
+      ]
+    }
+  ]
+}
\ No newline at end of file
diff --git a/adapters/teads/teadstest/supplemental/no-impression.json b/adapters/teads/teadstest/supplemental/no-impression.json
new file mode 100644
index 00000000..7b1cdceb
--- /dev/null
+++ b/adapters/teads/teadstest/supplemental/no-impression.json
@@ -0,0 +1,12 @@
+{
+  "mockBidRequest": {
+    "id": "test-request-id"
+  },
+
+  "expectedMakeRequestsErrors": [
+    {
+      "value": "No impression in the bid request",
+      "comparison": "literal"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/adapters/teads/teadstest/supplemental/no-placementId.json b/adapters/teads/teadstest/supplemental/no-placementId.json
new file mode 100644
index 00000000..e343bc82
--- /dev/null
+++ b/adapters/teads/teadstest/supplemental/no-placementId.json
@@ -0,0 +1,28 @@
+{
+  "mockBidRequest": {
+    "id": "test-request-id",
+    "imp": [
+      {
+        "id": "test-imp-id-1",
+        "banner": {
+          "format": [
+            {
+              "w": 300,
+              "h": 250
+            }
+          ]
+        },
+        "ext": {
+          "bidder": {}
+        }
+      }
+    ]
+  },
+
+  "expectedMakeRequestsErrors": [
+    {
+      "value": "placementId should not be 0.",
+      "comparison": "literal"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/adapters/teads/teadstest/supplemental/renderer-name-empty.json b/adapters/teads/teadstest/supplemental/renderer-name-empty.json
new file mode 100644
index 00000000..da4ee9a5
--- /dev/null
+++ b/adapters/teads/teadstest/supplemental/renderer-name-empty.json
@@ -0,0 +1,143 @@
+{
+  "mockBidRequest": {
+    "id": "test-request-id",
+    "imp": [
+      {
+        "id": "b6321d41-3840-4cb3-baad-b6fc5b0c8553",
+        "video": {
+          "mimes": [
+            "video/mp4"
+          ],
+          "minduration": 15,
+          "maxduration": 30,
+          "protocols": [
+            2,
+            3
+          ],
+          "w": 940,
+          "h": 560
+        },
+        "ext": {
+          "bidder": {
+            "placementId": 125
+          }
+        }
+      }
+    ],
+    "ext": {
+      "prebid": {
+        "sdk": {
+          "renderers": [
+            {
+              "name": "",
+              "version": "5.0.25",
+              "data": {
+                "resize": true,
+                "sdkEngineVersion": "189"
+              }
+            }
+          ]
+        }
+      }
+    }
+  },
+  "httpCalls": [
+    {
+      "expectedRequest": {
+        "uri": "https://a.teads.tv/prebid-server/bid-request",
+        "body": {
+          "id": "test-request-id",
+          "imp": [
+            {
+              "id": "b6321d41-3840-4cb3-baad-b6fc5b0c8553",
+              "tagid": "125",
+              "video": {
+                "mimes": [
+                  "video/mp4"
+                ],
+                "minduration": 15,
+                "maxduration": 30,
+                "protocols": [
+                  2,
+                  3
+                ],
+                "w": 940,
+                "h": 560
+              },
+              "ext": {
+                "kv": {
+                  "placementId": 125
+                }
+              }
+            }
+          ],
+          "ext": {
+            "prebid": {
+              "sdk": {
+                "renderers": [
+                  {
+                    "name": "",
+                    "version": "5.0.25",
+                    "data": {
+                      "resize": true,
+                      "sdkEngineVersion": "189"
+                    }
+                  }
+                ]
+              }
+            }
+          }
+        }
+      },
+      "mockResponse": {
+        "status": 200,
+        "body": {
+          "id": "39312703-e970-4914-ae56-8e7d7d1fd16b",
+          "tagid": "125",
+          "seatbid": [
+            {
+              "seat": "teads",
+              "bid": [
+                {
+                  "id": "695ac187-fb3f-4d1f-8d5d-099c5e4c4d28",
+                  "impid": "b6321d41-3840-4cb3-baad-b6fc5b0c8553",
+                  "price": 33,
+                  "nurl": "https://localhost:8080/prebid-server/win-notice?data=base64&clearingPrice=${AUCTION_PRICE}",
+                  "adm": "{\"settings\":{\"values\":{\"animations\":{\"expand\":0,\"collapse\":0.5},\"placementId\":2,\"adType\":\"video\",\"placementFormat\":\"inread\",\"allowedPlayer\":\"any\",\"pageId\":2},\"components\":{\"closeButton\":{\"display\":false,\"countdown\":0},\"credits\":{\"display\":false},\"soundButton\":{\"display\":true,\"countdown\":0,\"type\":\"equalizer\"},\"label\":{\"display\":false},\"slider\":{\"closeButtonDisplay\":false}},\"behaviors\":{\"smartPosition\":{\"top\":false,\"corner\":false,\"mustBypassWhitelist\":true},\"slider\":{\"enable\":false},\"friendly\":false,\"playerClick\":\"fullscreen\",\"soundStart\":{\"type\":\"mute\"},\"soundMute\":\"threshold\",\"soundOver\":\"over\",\"launch\":\"auto\",\"videoStart\":\"threshold\",\"videoPause\":\"threshold\",\"secure\":false}},\"ads\":[{\"settings\":{\"values\":{\"animations\":{\"expand\":0,\"collapse\":0.5},\"placementId\":2,\"adType\":\"video\",\"placementFormat\":\"inread\",\"allowedPlayer\":\"any\",\"pageId\":2},\"components\":{\"closeButton\":{\"display\":false,\"countdown\":0},\"credits\":{\"display\":false},\"soundButton\":{\"display\":true,\"countdown\":0,\"type\":\"equalizer\"},\"label\":{\"display\":false},\"slider\":{\"closeButtonDisplay\":false}},\"behaviors\":{\"smartPosition\":{\"top\":false,\"corner\":false,\"mustBypassWhitelist\":true},\"slider\":{\"enable\":false},\"friendly\":false,\"playerClick\":\"fullscreen\",\"soundStart\":{\"type\":\"mute\"},\"soundMute\":\"threshold\",\"soundOver\":\"over\",\"launch\":\"auto\",\"videoStart\":\"threshold\",\"videoPause\":\"threshold\",\"secure\":false}},\"type\":\"VastXml\",\"content\":\"<VAST version=\\\"3.0\\\"><Ad id=\\\"1\\\"><Wrapper><AdSystem>Teads Technology</AdSystem><VASTAdTagURI><![CDATA[http://vast.tv?auction_publisher_cost=LlBEcMjl2WSVYTIV0ZvZwFta&auction_publisher_cost_currency=USD&auction_ssb_provider_fee=&auction_ssb_provider_fee_currency=&auction_price=74Xz11zXoN9S_a18chCl1DB6&auction_currency=USD]]></VASTAdTagURI><Error><![CDATA[https://localhost:18281/track?action=error-vast&code=[ERRORCODE]&pid=2&vid=708ca808-ec55-4d97-ab81-9c4777e16058&pfid=971104812&mediaFileType=[MEDIAFILETYPE]&auctid=39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6&sid=0&scid=971105412&pscid=971105411&psid=971105457&hb_provider=prebid-server&hb_ad_unit_code=742d38c4-7994-4c2b-ac82-18d3a64ba3c7&dsp_campaign_id=1&dsp_creative_id=1&env=thirdparty-inapp&p=GmbtDz8E6SttqPqekGLm3vHN7muObx7-w6kGLgR8KMiWgUo78VfzNzYlcfjjRwTen7Oad6lYvgPUaiHwDV0lZcpu7lXO4Y7at1NIyIPxfcgdBw&cts=1685971107728&1685971107728]]></Error><Creatives></Creatives></Wrapper></Ad></VAST>\",\"scenario_id\":971105412,\"dsp_campaign_id\":\"1\",\"dsp_creative_id\":\"1\",\"insertion_id\":1,\"placement_id\":2,\"portfolio_item_id\":971104812}],\"wigoEnabled\":false,\"placementMetadata\":{\"2\":{\"adCallTrackingUrl\":\"https://localhost:18281/track?action=adCall&pid=2&pageId=2&auctid=39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6&vid=708ca808-ec55-4d97-ab81-9c4777e16058&hb_provider=prebid-server&hb_ad_unit_code=742d38c4-7994-4c2b-ac82-18d3a64ba3c7&env=thirdparty-inapp&gtc=1&gdpr_apply=false&gac=1&gap=1&ca=false&bsg=uncat&bsias=uncat&pfid=971104812&gid=1&brid=0&cid=1&rpm_reason=3&ut=1&p=5fwoPMJCquIB-txdmwQS0l79-hhHVnlTzyR9mmnBMtZRceP6-q31KzCfLpS8WTNaw_sXr-hkOFBxaxa-jyLblbVc&cts=1685971107773&cs=267268361555465193905\",\"auctionId\":\"39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6\"}},\"viewerId\":\"708ca808-ec55-4d97-ab81-9c4777e16058\"}",
+                  "adid": "1",
+                  "adomain": [
+                    "teads.com"
+                  ],
+                  "cid": "1",
+                  "crid": "1",
+                  "cat": [
+                    "IAB1-6",
+                    "IAB10-5"
+                  ],
+                  "ext": {
+                    "prebid": {
+                      "meta": {
+                        "rendererName": "",
+                        "rendererVersion": "5.0.25",
+                        "rendererData": {
+                          "resize": true,
+                          "sdkEngineVersion": "189"
+                        }
+                      }
+                    }
+                  }
+                }
+              ]
+            }
+          ]
+        }
+      }
+    }
+  ],
+  "expectedMakeBidsErrors": [
+    {
+      "value": "RendererName should not be empty if present",
+      "comparison": "literal"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/adapters/teads/teadstest/supplemental/renderer-version-empty.json b/adapters/teads/teadstest/supplemental/renderer-version-empty.json
new file mode 100644
index 00000000..e9e7b278
--- /dev/null
+++ b/adapters/teads/teadstest/supplemental/renderer-version-empty.json
@@ -0,0 +1,143 @@
+{
+  "mockBidRequest": {
+    "id": "test-request-id",
+    "imp": [
+      {
+        "id": "b6321d41-3840-4cb3-baad-b6fc5b0c8553",
+        "video": {
+          "mimes": [
+            "video/mp4"
+          ],
+          "minduration": 15,
+          "maxduration": 30,
+          "protocols": [
+            2,
+            3
+          ],
+          "w": 940,
+          "h": 560
+        },
+        "ext": {
+          "bidder": {
+            "placementId": 125
+          }
+        }
+      }
+    ],
+    "ext": {
+      "prebid": {
+        "sdk": {
+          "renderers": [
+            {
+              "name": "teads",
+              "version": "",
+              "data": {
+                "resize": true,
+                "sdkEngineVersion": "189"
+              }
+            }
+          ]
+        }
+      }
+    }
+  },
+  "httpCalls": [
+    {
+      "expectedRequest": {
+        "uri": "https://a.teads.tv/prebid-server/bid-request",
+        "body": {
+          "id": "test-request-id",
+          "imp": [
+            {
+              "id": "b6321d41-3840-4cb3-baad-b6fc5b0c8553",
+              "tagid": "125",
+              "video": {
+                "mimes": [
+                  "video/mp4"
+                ],
+                "minduration": 15,
+                "maxduration": 30,
+                "protocols": [
+                  2,
+                  3
+                ],
+                "w": 940,
+                "h": 560
+              },
+              "ext": {
+                "kv": {
+                  "placementId": 125
+                }
+              }
+            }
+          ],
+          "ext": {
+            "prebid": {
+              "sdk": {
+                "renderers": [
+                  {
+                    "name": "teads",
+                    "version": "",
+                    "data": {
+                      "resize": true,
+                      "sdkEngineVersion": "189"
+                    }
+                  }
+                ]
+              }
+            }
+          }
+        }
+      },
+      "mockResponse": {
+        "status": 200,
+        "body": {
+          "id": "39312703-e970-4914-ae56-8e7d7d1fd16b",
+          "tagid": "125",
+          "seatbid": [
+            {
+              "seat": "teads",
+              "bid": [
+                {
+                  "id": "695ac187-fb3f-4d1f-8d5d-099c5e4c4d28",
+                  "impid": "b6321d41-3840-4cb3-baad-b6fc5b0c8553",
+                  "price": 33,
+                  "nurl": "https://localhost:8080/prebid-server/win-notice?data=base64&clearingPrice=${AUCTION_PRICE}",
+                  "adm": "{\"settings\":{\"values\":{\"animations\":{\"expand\":0,\"collapse\":0.5},\"placementId\":2,\"adType\":\"video\",\"placementFormat\":\"inread\",\"allowedPlayer\":\"any\",\"pageId\":2},\"components\":{\"closeButton\":{\"display\":false,\"countdown\":0},\"credits\":{\"display\":false},\"soundButton\":{\"display\":true,\"countdown\":0,\"type\":\"equalizer\"},\"label\":{\"display\":false},\"slider\":{\"closeButtonDisplay\":false}},\"behaviors\":{\"smartPosition\":{\"top\":false,\"corner\":false,\"mustBypassWhitelist\":true},\"slider\":{\"enable\":false},\"friendly\":false,\"playerClick\":\"fullscreen\",\"soundStart\":{\"type\":\"mute\"},\"soundMute\":\"threshold\",\"soundOver\":\"over\",\"launch\":\"auto\",\"videoStart\":\"threshold\",\"videoPause\":\"threshold\",\"secure\":false}},\"ads\":[{\"settings\":{\"values\":{\"animations\":{\"expand\":0,\"collapse\":0.5},\"placementId\":2,\"adType\":\"video\",\"placementFormat\":\"inread\",\"allowedPlayer\":\"any\",\"pageId\":2},\"components\":{\"closeButton\":{\"display\":false,\"countdown\":0},\"credits\":{\"display\":false},\"soundButton\":{\"display\":true,\"countdown\":0,\"type\":\"equalizer\"},\"label\":{\"display\":false},\"slider\":{\"closeButtonDisplay\":false}},\"behaviors\":{\"smartPosition\":{\"top\":false,\"corner\":false,\"mustBypassWhitelist\":true},\"slider\":{\"enable\":false},\"friendly\":false,\"playerClick\":\"fullscreen\",\"soundStart\":{\"type\":\"mute\"},\"soundMute\":\"threshold\",\"soundOver\":\"over\",\"launch\":\"auto\",\"videoStart\":\"threshold\",\"videoPause\":\"threshold\",\"secure\":false}},\"type\":\"VastXml\",\"content\":\"<VAST version=\\\"3.0\\\"><Ad id=\\\"1\\\"><Wrapper><AdSystem>Teads Technology</AdSystem><VASTAdTagURI><![CDATA[http://vast.tv?auction_publisher_cost=LlBEcMjl2WSVYTIV0ZvZwFta&auction_publisher_cost_currency=USD&auction_ssb_provider_fee=&auction_ssb_provider_fee_currency=&auction_price=74Xz11zXoN9S_a18chCl1DB6&auction_currency=USD]]></VASTAdTagURI><Error><![CDATA[https://localhost:18281/track?action=error-vast&code=[ERRORCODE]&pid=2&vid=708ca808-ec55-4d97-ab81-9c4777e16058&pfid=971104812&mediaFileType=[MEDIAFILETYPE]&auctid=39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6&sid=0&scid=971105412&pscid=971105411&psid=971105457&hb_provider=prebid-server&hb_ad_unit_code=742d38c4-7994-4c2b-ac82-18d3a64ba3c7&dsp_campaign_id=1&dsp_creative_id=1&env=thirdparty-inapp&p=GmbtDz8E6SttqPqekGLm3vHN7muObx7-w6kGLgR8KMiWgUo78VfzNzYlcfjjRwTen7Oad6lYvgPUaiHwDV0lZcpu7lXO4Y7at1NIyIPxfcgdBw&cts=1685971107728&1685971107728]]></Error><Creatives></Creatives></Wrapper></Ad></VAST>\",\"scenario_id\":971105412,\"dsp_campaign_id\":\"1\",\"dsp_creative_id\":\"1\",\"insertion_id\":1,\"placement_id\":2,\"portfolio_item_id\":971104812}],\"wigoEnabled\":false,\"placementMetadata\":{\"2\":{\"adCallTrackingUrl\":\"https://localhost:18281/track?action=adCall&pid=2&pageId=2&auctid=39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6&vid=708ca808-ec55-4d97-ab81-9c4777e16058&hb_provider=prebid-server&hb_ad_unit_code=742d38c4-7994-4c2b-ac82-18d3a64ba3c7&env=thirdparty-inapp&gtc=1&gdpr_apply=false&gac=1&gap=1&ca=false&bsg=uncat&bsias=uncat&pfid=971104812&gid=1&brid=0&cid=1&rpm_reason=3&ut=1&p=5fwoPMJCquIB-txdmwQS0l79-hhHVnlTzyR9mmnBMtZRceP6-q31KzCfLpS8WTNaw_sXr-hkOFBxaxa-jyLblbVc&cts=1685971107773&cs=267268361555465193905\",\"auctionId\":\"39312703-e970-4914-ae56-8e7d7d1fd16b__b6321d41-3840-4cb3-baad-b6fc5b0c8553__c0f2e6ba-63d0-4e20-ab41-fe0822eb65a6\"}},\"viewerId\":\"708ca808-ec55-4d97-ab81-9c4777e16058\"}",
+                  "adid": "1",
+                  "adomain": [
+                    "teads.com"
+                  ],
+                  "cid": "1",
+                  "crid": "1",
+                  "cat": [
+                    "IAB1-6",
+                    "IAB10-5"
+                  ],
+                  "ext": {
+                    "prebid": {
+                      "meta": {
+                        "rendererName": "teads",
+                        "rendererVersion": "",
+                        "rendererData": {
+                          "resize": true,
+                          "sdkEngineVersion": "189"
+                        }
+                      }
+                    }
+                  }
+                }
+              ]
+            }
+          ]
+        }
+      }
+    }
+  ],
+  "expectedMakeBidsErrors": [
+    {
+      "value": "RendererVersion should not be empty if present",
+      "comparison": "literal"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/adapters/teads/teadstest/supplemental/status-400.json b/adapters/teads/teadstest/supplemental/status-400.json
new file mode 100644
index 00000000..cd9fafff
--- /dev/null
+++ b/adapters/teads/teadstest/supplemental/status-400.json
@@ -0,0 +1,65 @@
+{
+  "mockBidRequest": {
+    "id": "test-request-id",
+    "imp": [
+      {
+        "id": "test-imp-id",
+        "banner": {
+          "format": [
+            {
+              "w": 300,
+              "h": 250
+            }
+          ]
+        },
+        "ext": {
+          "bidder": {
+            "placementId": 1
+          }
+        }
+      }
+    ]
+  },
+
+  "httpCalls": [
+    {
+      "expectedRequest": {
+        "uri": "https://a.teads.tv/prebid-server/bid-request",
+        "body": {
+          "id": "test-request-id",
+          "imp": [
+            {
+              "id": "test-imp-id",
+              "tagid": "1",
+              "banner": {
+                "format": [
+                  {
+                    "w": 300,
+                    "h": 250
+                  }
+                ],
+                "w": 300,
+                "h": 250
+              },
+              "ext": {
+                "kv": {
+                  "placementId": 1
+                }
+              }
+            }
+          ]
+        }
+      },
+      "mockResponse": {
+        "status": 400,
+        "body": {}
+      }
+    }
+  ],
+  "expectedMakeBidsErrors": [
+    {
+      "value": "Unexpected status code: 400. Run with request.debug = 1 for more info",
+      "comparison": "literal"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/adapters/teads/teadstest/supplemental/status-500.json b/adapters/teads/teadstest/supplemental/status-500.json
new file mode 100644
index 00000000..337d4754
--- /dev/null
+++ b/adapters/teads/teadstest/supplemental/status-500.json
@@ -0,0 +1,65 @@
+{
+  "mockBidRequest": {
+    "id": "test-request-id",
+    "imp": [
+      {
+        "id": "test-imp-id",
+        "banner": {
+          "format": [
+            {
+              "w": 300,
+              "h": 250
+            }
+          ]
+        },
+        "ext": {
+          "bidder": {
+            "placementId": 1
+          }
+        }
+      }
+    ]
+  },
+
+  "httpCalls": [
+    {
+      "expectedRequest": {
+        "uri": "https://a.teads.tv/prebid-server/bid-request",
+        "body": {
+          "id": "test-request-id",
+          "imp": [
+            {
+              "id": "test-imp-id",
+              "tagid": "1",
+              "banner": {
+                "format": [
+                  {
+                    "w": 300,
+                    "h": 250
+                  }
+                ],
+                "w": 300,
+                "h": 250
+              },
+              "ext": {
+                "kv": {
+                  "placementId": 1
+                }
+              }
+            }
+          ]
+        }
+      },
+      "mockResponse": {
+        "status": 500,
+        "body": {}
+      }
+    }
+  ],
+  "expectedMakeBidsErrors": [
+    {
+      "value": "Unexpected status code: 500. Run with request.debug = 1 for more info",
+      "comparison": "literal"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/endpoints/openrtb2/auction_test.go b/endpoints/openrtb2/auction_test.go
index 55bf68ff..8204a80e 100644
--- a/endpoints/openrtb2/auction_test.go
+++ b/endpoints/openrtb2/auction_test.go
@@ -1186,6 +1186,7 @@ func TestStoredRequests(t *testing.T) {
 		empty_fetcher.EmptyFetcher{},
 		hooks.EmptyPlanBuilder{},
 		nil,
+		openrtb_ext.NormalizeBidderName,
 	}
 
 	testStoreVideoAttr := []bool{true, true, false, false, false}
@@ -1635,6 +1636,7 @@ func TestValidateRequest(t *testing.T) {
 		empty_fetcher.EmptyFetcher{},
 		hooks.EmptyPlanBuilder{},
 		nil,
+		openrtb_ext.NormalizeBidderName,
 	}
 
 	testCases := []struct {
@@ -2414,6 +2416,7 @@ func TestSetIntegrationType(t *testing.T) {
 		empty_fetcher.EmptyFetcher{},
 		hooks.EmptyPlanBuilder{},
 		nil,
+		openrtb_ext.NormalizeBidderName,
 	}
 
 	testCases := []struct {
@@ -2480,6 +2483,7 @@ func TestStoredRequestGenerateUuid(t *testing.T) {
 		empty_fetcher.EmptyFetcher{},
 		hooks.EmptyPlanBuilder{},
 		nil,
+		openrtb_ext.NormalizeBidderName,
 	}
 
 	req := &openrtb2.BidRequest{}
@@ -2584,6 +2588,7 @@ func TestOversizedRequest(t *testing.T) {
 		empty_fetcher.EmptyFetcher{},
 		hooks.EmptyPlanBuilder{},
 		nil,
+		openrtb_ext.NormalizeBidderName,
 	}
 
 	req := httptest.NewRequest("POST", "/openrtb2/auction", strings.NewReader(reqBody))
@@ -2623,6 +2628,7 @@ func TestRequestSizeEdgeCase(t *testing.T) {
 		empty_fetcher.EmptyFetcher{},
 		hooks.EmptyPlanBuilder{},
 		nil,
+		openrtb_ext.NormalizeBidderName,
 	}
 
 	req := httptest.NewRequest("POST", "/openrtb2/auction", strings.NewReader(reqBody))
@@ -2962,6 +2968,7 @@ func TestValidateImpExt(t *testing.T) {
 		empty_fetcher.EmptyFetcher{},
 		hooks.EmptyPlanBuilder{},
 		nil,
+		openrtb_ext.NormalizeBidderName,
 	}
 
 	for _, group := range testGroups {
@@ -3017,6 +3024,7 @@ func TestCurrencyTrunc(t *testing.T) {
 		empty_fetcher.EmptyFetcher{},
 		hooks.EmptyPlanBuilder{},
 		nil,
+		openrtb_ext.NormalizeBidderName,
 	}
 
 	ui := int64(1)
@@ -3065,6 +3073,7 @@ func TestCCPAInvalid(t *testing.T) {
 		empty_fetcher.EmptyFetcher{},
 		hooks.EmptyPlanBuilder{},
 		nil,
+		openrtb_ext.NormalizeBidderName,
 	}
 
 	ui := int64(1)
@@ -3117,6 +3126,7 @@ func TestNoSaleInvalid(t *testing.T) {
 		empty_fetcher.EmptyFetcher{},
 		hooks.EmptyPlanBuilder{},
 		nil,
+		openrtb_ext.NormalizeBidderName,
 	}
 
 	ui := int64(1)
@@ -3172,6 +3182,7 @@ func TestValidateSourceTID(t *testing.T) {
 		empty_fetcher.EmptyFetcher{},
 		hooks.EmptyPlanBuilder{},
 		nil,
+		openrtb_ext.NormalizeBidderName,
 	}
 
 	ui := int64(1)
@@ -3217,6 +3228,7 @@ func TestSChainInvalid(t *testing.T) {
 		empty_fetcher.EmptyFetcher{},
 		hooks.EmptyPlanBuilder{},
 		nil,
+		openrtb_ext.NormalizeBidderName,
 	}
 
 	ui := int64(1)
@@ -3785,6 +3797,7 @@ func TestEidPermissionsInvalid(t *testing.T) {
 		empty_fetcher.EmptyFetcher{},
 		hooks.EmptyPlanBuilder{},
 		nil,
+		openrtb_ext.NormalizeBidderName,
 	}
 
 	ui := int64(1)
@@ -3853,6 +3866,13 @@ func TestValidateEidPermissions(t *testing.T) {
 			}}}},
 			expectedError: nil,
 		},
+		{
+			description: "Valid - One - Case Insensitive",
+			request: &openrtb_ext.ExtRequest{Prebid: openrtb_ext.ExtRequestPrebid{Data: &openrtb_ext.ExtRequestPrebidData{EidPermissions: []openrtb_ext.ExtRequestPrebidDataEidPermission{
+				{Source: "sourceA", Bidders: []string{"A"}},
+			}}}},
+			expectedError: nil,
+		},
 		{
 			description: "Valid - Many",
 			request: &openrtb_ext.ExtRequest{Prebid: openrtb_ext.ExtRequestPrebid{Data: &openrtb_ext.ExtRequestPrebidData{EidPermissions: []openrtb_ext.ExtRequestPrebidDataEidPermission{
@@ -3901,9 +3921,16 @@ func TestValidateEidPermissions(t *testing.T) {
 			}}}},
 			expectedError: errors.New(`request.ext.prebid.data.eidpermissions[1] contains unrecognized bidder "z"`),
 		},
+		{
+			description: "Valid - Alias Case Sensitive",
+			request: &openrtb_ext.ExtRequest{Prebid: openrtb_ext.ExtRequestPrebid{Data: &openrtb_ext.ExtRequestPrebidData{EidPermissions: []openrtb_ext.ExtRequestPrebidDataEidPermission{
+				{Source: "sourceA", Bidders: []string{"B"}},
+			}}}},
+			expectedError: errors.New(`request.ext.prebid.data.eidpermissions[0] contains unrecognized bidder "B"`),
+		},
 	}
 
-	endpoint := &endpointDeps{bidderMap: knownBidders}
+	endpoint := &endpointDeps{bidderMap: knownBidders, normalizeBidderName: fakeNormalizeBidderName}
 	for _, test := range testCases {
 		result := endpoint.validateEidPermissions(test.request.Prebid.Data, knownAliases)
 		assert.Equal(t, test.expectedError, result, test.description)
@@ -3939,6 +3966,13 @@ func TestValidateBidders(t *testing.T) {
 			knownAliases:  map[string]string{"c": "c"},
 			expectedError: nil,
 		},
+		{
+			description:   "Valid - One Core Bidder - Case Insensitive",
+			bidders:       []string{"A"},
+			knownBidders:  map[string]openrtb_ext.BidderName{"a": openrtb_ext.BidderName("a")},
+			knownAliases:  map[string]string{"c": "c"},
+			expectedError: nil,
+		},
 		{
 			description:   "Valid - Many Core Bidders",
 			bidders:       []string{"a", "b"},
@@ -3953,6 +3987,13 @@ func TestValidateBidders(t *testing.T) {
 			knownAliases:  map[string]string{"c": "c"},
 			expectedError: nil,
 		},
+		{
+			description:   "Valid - One Alias Bidder - Case Sensitive",
+			bidders:       []string{"C"},
+			knownBidders:  map[string]openrtb_ext.BidderName{"a": openrtb_ext.BidderName("a")},
+			knownAliases:  map[string]string{"c": "c"},
+			expectedError: errors.New(`unrecognized bidder "C"`),
+		},
 		{
 			description:   "Valid - Many Alias Bidders",
 			bidders:       []string{"c", "d"},
@@ -3974,13 +4015,6 @@ func TestValidateBidders(t *testing.T) {
 			knownAliases:  map[string]string{"c": "c"},
 			expectedError: errors.New(`unrecognized bidder "z"`),
 		},
-		{
-			description:   "Invalid - Unknown Bidder Case Sensitive",
-			bidders:       []string{"A"},
-			knownBidders:  map[string]openrtb_ext.BidderName{"a": openrtb_ext.BidderName("a")},
-			knownAliases:  map[string]string{"c": "c"},
-			expectedError: errors.New(`unrecognized bidder "A"`),
-		},
 		{
 			description:   "Invalid - Unknown Bidder With Known Bidders",
 			bidders:       []string{"a", "c", "z"},
@@ -4011,8 +4045,9 @@ func TestValidateBidders(t *testing.T) {
 		},
 	}
 
+	endpoint := &endpointDeps{normalizeBidderName: fakeNormalizeBidderName}
 	for _, test := range testCases {
-		result := validateBidders(test.bidders, test.knownBidders, test.knownAliases)
+		result := endpoint.validateBidders(test.bidders, test.knownBidders, test.knownAliases)
 		assert.Equal(t, test.expectedError, result, test.description)
 	}
 }
@@ -4102,6 +4137,7 @@ func TestAuctionWarnings(t *testing.T) {
 		empty_fetcher.EmptyFetcher{},
 		hooks.EmptyPlanBuilder{},
 		nil,
+		openrtb_ext.NormalizeBidderName,
 	}
 	for _, test := range testCases {
 		t.Run(test.name, func(t *testing.T) {
@@ -4148,6 +4184,7 @@ func TestParseRequestParseImpInfoError(t *testing.T) {
 		empty_fetcher.EmptyFetcher{},
 		hooks.EmptyPlanBuilder{},
 		nil,
+		openrtb_ext.NormalizeBidderName,
 	}
 
 	hookExecutor := hookexecution.NewHookExecutor(deps.hookExecutionPlanBuilder, hookexecution.EndpointAuction, deps.metricsEngine)
@@ -4228,6 +4265,7 @@ func TestParseGzipedRequest(t *testing.T) {
 		empty_fetcher.EmptyFetcher{},
 		hooks.EmptyPlanBuilder{},
 		nil,
+		openrtb_ext.NormalizeBidderName,
 	}
 
 	hookExecutor := hookexecution.NewHookExecutor(deps.hookExecutionPlanBuilder, hookexecution.EndpointAuction, deps.metricsEngine)
@@ -4828,6 +4866,7 @@ func TestParseRequestMergeBidderParams(t *testing.T) {
 				empty_fetcher.EmptyFetcher{},
 				hooks.EmptyPlanBuilder{},
 				nil,
+				openrtb_ext.NormalizeBidderName,
 			}
 
 			hookExecutor := hookexecution.NewHookExecutor(deps.hookExecutionPlanBuilder, hookexecution.EndpointAuction, deps.metricsEngine)
@@ -4931,6 +4970,7 @@ func TestParseRequestStoredResponses(t *testing.T) {
 				&mockStoredResponseFetcher{mockStoredResponses},
 				hooks.EmptyPlanBuilder{},
 				nil,
+				openrtb_ext.NormalizeBidderName,
 			}
 
 			hookExecutor := hookexecution.NewHookExecutor(deps.hookExecutionPlanBuilder, hookexecution.EndpointAuction, deps.metricsEngine)
@@ -5029,6 +5069,7 @@ func TestParseRequestStoredBidResponses(t *testing.T) {
 				&mockStoredResponseFetcher{mockStoredBidResponses},
 				hooks.EmptyPlanBuilder{},
 				nil,
+				openrtb_ext.NormalizeBidderName,
 			}
 
 			hookExecutor := hookexecution.NewHookExecutor(deps.hookExecutionPlanBuilder, hookexecution.EndpointAuction, deps.metricsEngine)
@@ -5065,6 +5106,7 @@ func TestValidateStoredResp(t *testing.T) {
 		&mockStoredResponseFetcher{},
 		hooks.EmptyPlanBuilder{},
 		nil,
+		openrtb_ext.NormalizeBidderName,
 	}
 
 	testCases := []struct {
@@ -5878,6 +5920,7 @@ func TestParseRequestMultiBid(t *testing.T) {
 				empty_fetcher.EmptyFetcher{},
 				hooks.EmptyPlanBuilder{},
 				nil,
+				openrtb_ext.NormalizeBidderName,
 			}
 
 			hookExecutor := hookexecution.NewHookExecutor(deps.hookExecutionPlanBuilder, hookexecution.EndpointAuction, deps.metricsEngine)
@@ -6043,3 +6086,7 @@ func TestValidateAliases(t *testing.T) {
 		})
 	}
 }
+
+func fakeNormalizeBidderName(name string) (openrtb_ext.BidderName, bool) {
+	return openrtb_ext.BidderName(strings.ToLower(name)), true
+}
diff --git a/endpoints/openrtb2/video_auction_test.go b/endpoints/openrtb2/video_auction_test.go
index 181a6892..19af821f 100644
--- a/endpoints/openrtb2/video_auction_test.go
+++ b/endpoints/openrtb2/video_auction_test.go
@@ -1227,6 +1227,7 @@ func mockDepsWithMetrics(t *testing.T, ex *mockExchangeVideo) (*endpointDeps, *m
 		empty_fetcher.EmptyFetcher{},
 		hooks.EmptyPlanBuilder{},
 		nil,
+		openrtb_ext.NormalizeBidderName,
 	}
 	return deps, metrics, mockModule
 }
@@ -1274,6 +1275,7 @@ func mockDeps(t *testing.T, ex *mockExchangeVideo) *endpointDeps {
 		empty_fetcher.EmptyFetcher{},
 		hooks.EmptyPlanBuilder{},
 		nil,
+		openrtb_ext.NormalizeBidderName,
 	}
 }
 
@@ -1298,6 +1300,7 @@ func mockDepsAppendBidderNames(t *testing.T, ex *mockExchangeAppendBidderNames)
 		empty_fetcher.EmptyFetcher{},
 		hooks.EmptyPlanBuilder{},
 		nil,
+		openrtb_ext.NormalizeBidderName,
 	}
 
 	return deps
@@ -1324,6 +1327,7 @@ func mockDepsNoBids(t *testing.T, ex *mockExchangeVideoNoBids) *endpointDeps {
 		empty_fetcher.EmptyFetcher{},
 		hooks.EmptyPlanBuilder{},
 		nil,
+		openrtb_ext.NormalizeBidderName,
 	}
 
 	return edep
diff --git a/endpoints/setuid_test.go b/endpoints/setuid_test.go
index 3636f7fb..387de6bd 100644
--- a/endpoints/setuid_test.go
+++ b/endpoints/setuid_test.go
@@ -50,6 +50,16 @@ func TestSetUIDEndpoint(t *testing.T) {
 			expectedHeaders:        map[string]string{"Content-Type": "text/html", "Content-Length": "0"},
 			description:            "Set uid for valid bidder",
 		},
+		{
+			uri:                    "/setuid?bidder=PUBMATIC&uid=123",
+			syncersBidderNameToKey: map[string]string{"pubmatic": "pubmatic"},
+			existingSyncs:          nil,
+			gdprAllowsHostCookies:  true,
+			expectedSyncs:          map[string]string{"pubmatic": "123"},
+			expectedStatusCode:     http.StatusOK,
+			expectedHeaders:        map[string]string{"Content-Type": "text/html", "Content-Length": "0"},
+			description:            "Set uid for valid bidder case insensitive",
+		},
 		{
 			uri:                    "/setuid?bidder=appnexus&uid=123",
 			syncersBidderNameToKey: map[string]string{"appnexus": "adnxs"},
@@ -1458,35 +1468,44 @@ func TestIsSyncerPriority(t *testing.T) {
 		expected                       bool
 	}{
 		{
-			name:                           "bidder-name-is-priority",
-			givenBidderNameFromSyncerQuery: "priorityBidder",
-			givenPriorityGroups: [][]string{
-				{"priorityBidder"},
-				{"2", "3"},
-			},
-			expected: true,
+			name:                           "priority-tier-1",
+			givenBidderNameFromSyncerQuery: "a",
+			givenPriorityGroups:            [][]string{{"a"}},
+			expected:                       true,
 		},
 		{
-			name:                           "bidder-name-is-not-priority",
-			givenBidderNameFromSyncerQuery: "notPriorityBidderName",
-			givenPriorityGroups: [][]string{
-				{"1"},
-				{"2", "3"},
-			},
-			expected: false,
+			name:                           "priority-tier-other",
+			givenBidderNameFromSyncerQuery: "c",
+			givenPriorityGroups:            [][]string{{"a"}, {"b", "c"}},
+			expected:                       true,
 		},
 		{
-			name:                           "no-bidder-name-given",
+			name:                           "priority-case-insensitive",
+			givenBidderNameFromSyncerQuery: "A",
+			givenPriorityGroups:            [][]string{{"a"}},
+			expected:                       true,
+		},
+		{
+			name:                           "not-priority-empty",
+			givenBidderNameFromSyncerQuery: "a",
+			givenPriorityGroups:            [][]string{},
+			expected:                       false,
+		},
+		{
+			name:                           "not-priority-not-defined",
+			givenBidderNameFromSyncerQuery: "a",
+			givenPriorityGroups:            [][]string{{"b"}},
+			expected:                       false,
+		},
+		{
+			name:                           "no-bidder",
 			givenBidderNameFromSyncerQuery: "",
-			givenPriorityGroups: [][]string{
-				{"1"},
-				{"2", "3"},
-			},
-			expected: false,
+			givenPriorityGroups:            [][]string{{"b"}},
+			expected:                       false,
 		},
 		{
-			name:                           "no-priority-groups-given",
-			givenBidderNameFromSyncerQuery: "bidderName",
+			name:                           "no-priority-groups",
+			givenBidderNameFromSyncerQuery: "a",
 			givenPriorityGroups:            [][]string{},
 			expected:                       false,
 		},
diff --git a/exchange/exchangetest/eidpermissions-allowed-alias.json b/exchange/exchangetest/eidpermissions-allowed-alias.json
index f10bdcf8..de3c0e1d 100644
--- a/exchange/exchangetest/eidpermissions-allowed-alias.json
+++ b/exchange/exchangetest/eidpermissions-allowed-alias.json
@@ -10,7 +10,11 @@
                     "eids": [
                         {
                             "source": "source1",
-                            "id": "anyId"
+                            "uids": [
+                                {
+                                    "id": "id1"
+                                }
+                            ]
                         }
                     ]
                 }
@@ -66,7 +70,11 @@
                             "eids": [
                                 {
                                     "source": "source1",
-                                    "id": "anyId"
+                                    "uids": [
+                                        {
+                                            "id": "id1"
+                                        }
+                                    ]
                                 }
                             ]
                         }
diff --git a/exchange/exchangetest/eidpermissions-allowed-case-insensitive.json b/exchange/exchangetest/eidpermissions-allowed-case-insensitive.json
new file mode 100644
index 00000000..86797501
--- /dev/null
+++ b/exchange/exchangetest/eidpermissions-allowed-case-insensitive.json
@@ -0,0 +1,144 @@
+{
+    "incomingRequest": {
+        "ortbRequest": {
+            "id": "some-request-id",
+            "site": {
+                "page": "test.somepage.com"
+            },
+            "user": {
+                "ext": {
+                    "eids": [
+                        {
+                            "source": "source1",
+                            "uids": [
+                                {
+                                    "id": "id1"
+                                }
+                            ]
+                        }
+                    ]
+                }
+            },
+            "ext": {
+                "prebid": {
+                    "data": {
+                        "eidpermissions": [
+                            {
+                                "source": "source1",
+                                "bidders": [
+                                    "APPNEXUS"
+                                ]
+                            }
+                        ]
+                    }
+                }
+            },
+            "imp": [
+                {
+                    "id": "my-imp-id",
+                    "video": {
+                        "mimes": [
+                            "video/mp4"
+                        ]
+                    },
+                    "ext": {
+                        "prebid": {
+                            "bidder": {
+                                "appnexus": {
+                                    "placementId": 1
+                                }
+                            }
+                        }
+                    }
+                }
+            ]
+        }
+    },
+    "outgoingRequests": {
+        "appnexus": {
+            "expectRequest": {
+                "ortbRequest": {
+                    "id": "some-request-id",
+                    "site": {
+                        "page": "test.somepage.com"
+                    },
+                    "user": {
+                        "ext": {
+                            "eids": [
+                                {
+                                    "source": "source1",
+                                    "uids": [
+                                        {
+                                            "id": "id1"
+                                        }
+                                    ]
+                                }
+                            ]
+                        }
+                    },
+                    "imp": [
+                        {
+                            "id": "my-imp-id",
+                            "video": {
+                                "mimes": [
+                                    "video/mp4"
+                                ]
+                            },
+                            "ext": {
+                                "bidder": {
+                                    "placementId": 1
+                                }
+                            }
+                        }
+                    ]
+                }
+            },
+            "mockResponse": {
+                "pbsSeatBids": [
+                    {
+                        "pbsBids": [
+                            {
+                                "ortbBid": {
+                                    "id": "apn-bid",
+                                    "impid": "my-imp-id",
+                                    "price": 0.3,
+                                    "w": 200,
+                                    "h": 250,
+                                    "crid": "creative-1"
+                                },
+                                "bidType": "video"
+                            }
+                        ],
+                        "seat": "appnexus"
+                    }
+                ]
+            }
+        }
+    },
+    "response": {
+        "bids": {
+            "id": "some-request-id",
+            "seatbid": [
+                {
+                    "seat": "appnexus",
+                    "bid": [
+                        {
+                            "id": "apn-bid",
+                            "impid": "my-imp-id",
+                            "price": 0.3,
+                            "w": 200,
+                            "h": 250,
+                            "crid": "creative-1",
+                            "ext": {
+                                "origbidcpm": 0.3,
+                                "prebid": {
+                                    "type": "video"
+                                }
+                            }
+                        }
+                    ]
+                }
+            ]
+        }
+    }
+}
\ No newline at end of file
diff --git a/exchange/exchangetest/eidpermissions-allowed.json b/exchange/exchangetest/eidpermissions-allowed.json
index 6b27212c..9daee27a 100644
--- a/exchange/exchangetest/eidpermissions-allowed.json
+++ b/exchange/exchangetest/eidpermissions-allowed.json
@@ -10,7 +10,11 @@
                     "eids": [
                         {
                             "source": "source1",
-                            "id": "anyId"
+                            "uids": [
+                                {
+                                    "id": "id1"
+                                }
+                            ]
                         }
                     ]
                 }
@@ -63,7 +67,11 @@
                             "eids": [
                                 {
                                     "source": "source1",
-                                    "id": "anyId"
+                                    "uids": [
+                                        {
+                                            "id": "id1"
+                                        }
+                                    ]
                                 }
                             ]
                         }
diff --git a/exchange/exchangetest/eidpermissions-denied.json b/exchange/exchangetest/eidpermissions-denied.json
index df112905..04eb51bb 100644
--- a/exchange/exchangetest/eidpermissions-denied.json
+++ b/exchange/exchangetest/eidpermissions-denied.json
@@ -10,7 +10,11 @@
                     "eids": [
                         {
                             "source": "source1",
-                            "id": "anyId"
+                            "uids": [
+                                {
+                                    "id": "id1"
+                                }
+                            ]
                         }
                     ]
                 }
diff --git a/exchange/utils_test.go b/exchange/utils_test.go
index ee6dad1a..0dbf5b38 100644
--- a/exchange/utils_test.go
+++ b/exchange/utils_test.go
@@ -2768,6 +2768,14 @@ func TestRemoveUnpermissionedEids(t *testing.T) {
 			},
 			expectedUserExt: json.RawMessage(`{"eids":[{"source":"source1","uids":[{"id":"anyID"}]}]}`),
 		},
+		{
+			description: "Allowed By Specific Bidder - Case Insensitive",
+			userExt:     json.RawMessage(`{"eids":[{"source":"source1","uids":[{"id":"anyID"}]}]}`),
+			eidPermissions: []openrtb_ext.ExtRequestPrebidDataEidPermission{
+				{Source: "source1", Bidders: []string{"BIDDERA"}},
+			},
+			expectedUserExt: json.RawMessage(`{"eids":[{"source":"source1","uids":[{"id":"anyID"}]}]}`),
+		},
 		{
 			description: "Allowed By All Bidders",
 			userExt:     json.RawMessage(`{"eids":[{"source":"source1","uids":[{"id":"anyID"}]}]}`),