Repository: prebid/prebid-server
Pull request #2293 (2022-07-07 05:09:56)

 AMP targeting query string
Implementation for https://github.com/prebid/prebid-server/issues/1727


Patch:
diff --git a/adapters/33across/33across.go b/adapters/33across/33across.go
index b6c16b20..72b91059 100644
--- a/adapters/33across/33across.go
+++ b/adapters/33across/33across.go
@@ -5,7 +5,8 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/adcom1"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
@@ -261,7 +262,7 @@ func validateVideoParams(video *openrtb2.Video, prod string) (*openrtb2.Video, e
 		videoCopy.Placement = 1
 
 		if videoCopy.StartDelay == nil {
-			videoCopy.StartDelay = openrtb2.StartDelay.Ptr(0)
+			videoCopy.StartDelay = adcom1.StartDelay.Ptr(0)
 		}
 	}
 
diff --git a/adapters/aax/aax.go b/adapters/aax/aax.go
index 1a15ebd3..ae295fe4 100644
--- a/adapters/aax/aax.go
+++ b/adapters/aax/aax.go
@@ -6,7 +6,7 @@ import (
 	"net/http"
 	"net/url"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/aceex/aceex.go b/adapters/aceex/aceex.go
index abf748a7..452af376 100644
--- a/adapters/aceex/aceex.go
+++ b/adapters/aceex/aceex.go
@@ -6,7 +6,7 @@ import (
 	"net/http"
 	"text/template"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/acuityads/acuityads.go b/adapters/acuityads/acuityads.go
index 84a754fe..888a6d09 100644
--- a/adapters/acuityads/acuityads.go
+++ b/adapters/acuityads/acuityads.go
@@ -6,7 +6,7 @@ import (
 	"net/http"
 	"text/template"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/adf/adf.go b/adapters/adf/adf.go
index bc54f78f..d0646ccc 100644
--- a/adapters/adf/adf.go
+++ b/adapters/adf/adf.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/adgeneration/adgeneration.go b/adapters/adgeneration/adgeneration.go
index 55fafde1..77ebad04 100644
--- a/adapters/adgeneration/adgeneration.go
+++ b/adapters/adgeneration/adgeneration.go
@@ -10,7 +10,7 @@ import (
 	"strconv"
 	"strings"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/adhese/adhese.go b/adapters/adhese/adhese.go
index b23b49b3..6df42a7a 100644
--- a/adapters/adhese/adhese.go
+++ b/adapters/adhese/adhese.go
@@ -11,7 +11,7 @@ import (
 	"text/template"
 
 	"github.com/golang/glog"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/adhese/utils.go b/adapters/adhese/utils.go
index 5a81bb83..3ce49fe6 100644
--- a/adapters/adhese/utils.go
+++ b/adapters/adhese/utils.go
@@ -1,6 +1,6 @@
 package adhese
 
-import "github.com/mxmCherry/openrtb/v15/openrtb2"
+import "github.com/mxmCherry/openrtb/v16/openrtb2"
 
 type AdheseOriginData struct {
 	Priority                  string `json:"priority"`
diff --git a/adapters/adkernel/adkernel.go b/adapters/adkernel/adkernel.go
index 183c31ee..62112382 100644
--- a/adapters/adkernel/adkernel.go
+++ b/adapters/adkernel/adkernel.go
@@ -7,7 +7,7 @@ import (
 	"strconv"
 	"text/template"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/adkernelAdn/adkernelAdn.go b/adapters/adkernelAdn/adkernelAdn.go
index 2c29e69a..263df92d 100644
--- a/adapters/adkernelAdn/adkernelAdn.go
+++ b/adapters/adkernelAdn/adkernelAdn.go
@@ -7,7 +7,7 @@ import (
 	"strconv"
 	"text/template"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/adman/adman.go b/adapters/adman/adman.go
index fd31bc9d..dc175e32 100644
--- a/adapters/adman/adman.go
+++ b/adapters/adman/adman.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/admixer/admixer.go b/adapters/admixer/admixer.go
index 5008b0ce..0909d71d 100644
--- a/adapters/admixer/admixer.go
+++ b/adapters/admixer/admixer.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/adnuntius/adnuntius.go b/adapters/adnuntius/adnuntius.go
index c25eecc9..9fe8cdbf 100644
--- a/adapters/adnuntius/adnuntius.go
+++ b/adapters/adnuntius/adnuntius.go
@@ -8,7 +8,7 @@ import (
 	"strconv"
 	"strings"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/adocean/adocean.go b/adapters/adocean/adocean.go
index d13104b1..f455346a 100644
--- a/adapters/adocean/adocean.go
+++ b/adapters/adocean/adocean.go
@@ -13,7 +13,7 @@ import (
 	"strings"
 	"text/template"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/adoppler/adoppler.go b/adapters/adoppler/adoppler.go
index 20e88c45..059b0e3f 100644
--- a/adapters/adoppler/adoppler.go
+++ b/adapters/adoppler/adoppler.go
@@ -8,7 +8,7 @@ import (
 	"net/url"
 	"text/template"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/adot/adot.go b/adapters/adot/adot.go
index 55aa0b95..ee0553e0 100644
--- a/adapters/adot/adot.go
+++ b/adapters/adot/adot.go
@@ -7,7 +7,7 @@ import (
 	"strconv"
 	"strings"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/adpone/adpone.go b/adapters/adpone/adpone.go
index 972f1576..872133e2 100644
--- a/adapters/adpone/adpone.go
+++ b/adapters/adpone/adpone.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/openrtb_ext"
 
diff --git a/adapters/adprime/adprime.go b/adapters/adprime/adprime.go
index c907380d..fc37c0c3 100644
--- a/adapters/adprime/adprime.go
+++ b/adapters/adprime/adprime.go
@@ -6,7 +6,7 @@ import (
 	"net/http"
 	"strings"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/adtarget/adtarget.go b/adapters/adtarget/adtarget.go
index 24befbfe..c334c2b5 100644
--- a/adapters/adtarget/adtarget.go
+++ b/adapters/adtarget/adtarget.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/adtelligent/adtelligent.go b/adapters/adtelligent/adtelligent.go
index 244742db..d930215d 100644
--- a/adapters/adtelligent/adtelligent.go
+++ b/adapters/adtelligent/adtelligent.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/advangelists/advangelists.go b/adapters/advangelists/advangelists.go
index d6fce56f..a4bb1e5f 100644
--- a/adapters/advangelists/advangelists.go
+++ b/adapters/advangelists/advangelists.go
@@ -6,7 +6,7 @@ import (
 	"net/http"
 	"text/template"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/adview/adview.go b/adapters/adview/adview.go
index e9872981..d11098ad 100644
--- a/adapters/adview/adview.go
+++ b/adapters/adview/adview.go
@@ -7,7 +7,7 @@ import (
 	"strings"
 	"text/template"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/adxcg/adxcg.go b/adapters/adxcg/adxcg.go
index e9f6c94b..1c0cd0b7 100644
--- a/adapters/adxcg/adxcg.go
+++ b/adapters/adxcg/adxcg.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/adyoulike/adyoulike.go b/adapters/adyoulike/adyoulike.go
index 8537c54d..bb191615 100644
--- a/adapters/adyoulike/adyoulike.go
+++ b/adapters/adyoulike/adyoulike.go
@@ -7,7 +7,7 @@ import (
 	"strings"
 
 	"github.com/buger/jsonparser"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/aja/aja.go b/adapters/aja/aja.go
index 6e77fdd5..ec231112 100644
--- a/adapters/aja/aja.go
+++ b/adapters/aja/aja.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/algorix/algorix.go b/adapters/algorix/algorix.go
index d24521b4..af8fea77 100644
--- a/adapters/algorix/algorix.go
+++ b/adapters/algorix/algorix.go
@@ -7,7 +7,7 @@ import (
 	"net/url"
 	"text/template"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/amx/amx.go b/adapters/amx/amx.go
index dc6743a1..24dbc9bb 100644
--- a/adapters/amx/amx.go
+++ b/adapters/amx/amx.go
@@ -6,7 +6,7 @@ import (
 	"net/http"
 	"net/url"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/apacdex/apacdex.go b/adapters/apacdex/apacdex.go
index 294b7188..f598deda 100644
--- a/adapters/apacdex/apacdex.go
+++ b/adapters/apacdex/apacdex.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/applogy/applogy.go b/adapters/applogy/applogy.go
index b144c6b8..ca4c444c 100644
--- a/adapters/applogy/applogy.go
+++ b/adapters/applogy/applogy.go
@@ -6,7 +6,7 @@ import (
 	"net/http"
 	"strconv"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/appnexus/appnexus.go b/adapters/appnexus/appnexus.go
index 3695f541..1c459042 100644
--- a/adapters/appnexus/appnexus.go
+++ b/adapters/appnexus/appnexus.go
@@ -11,7 +11,8 @@ import (
 	"strings"
 
 	"github.com/buger/jsonparser"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/adcom1"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/config"
 
 	"github.com/prebid/prebid-server/adapters"
@@ -308,9 +309,9 @@ func preprocess(imp *openrtb2.Imp, defaultDisplayManagerVer string) (string, boo
 	if imp.Banner != nil {
 		bannerCopy := *imp.Banner
 		if appnexusExt.Position == "above" {
-			bannerCopy.Pos = openrtb2.AdPositionAboveTheFold.Ptr()
+			bannerCopy.Pos = adcom1.PositionAboveFold.Ptr()
 		} else if appnexusExt.Position == "below" {
-			bannerCopy.Pos = openrtb2.AdPositionBelowTheFold.Ptr()
+			bannerCopy.Pos = adcom1.PositionBelowFold.Ptr()
 		}
 
 		// Fixes #307
diff --git a/adapters/audienceNetwork/facebook.go b/adapters/audienceNetwork/facebook.go
index 63138c42..d525849c 100644
--- a/adapters/audienceNetwork/facebook.go
+++ b/adapters/audienceNetwork/facebook.go
@@ -11,7 +11,7 @@ import (
 	"strings"
 
 	"github.com/buger/jsonparser"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/automatad/automatad.go b/adapters/automatad/automatad.go
index 69286b42..5c3e7de9 100644
--- a/adapters/automatad/automatad.go
+++ b/adapters/automatad/automatad.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/avocet/avocet.go b/adapters/avocet/avocet.go
index 7ec4788e..fd1a2cbf 100644
--- a/adapters/avocet/avocet.go
+++ b/adapters/avocet/avocet.go
@@ -5,7 +5,8 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/adcom1"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
@@ -110,7 +111,7 @@ func getBidType(bid openrtb2.Bid, ext avocetBidExt) openrtb_ext.BidType {
 		return openrtb_ext.BidTypeVideo
 	}
 	switch bid.API {
-	case openrtb2.APIFrameworkVPAID10, openrtb2.APIFrameworkVPAID20:
+	case adcom1.APIVPAID10, adcom1.APIVPAID20:
 		return openrtb_ext.BidTypeVideo
 	default:
 		return openrtb_ext.BidTypeBanner
diff --git a/adapters/axonix/axonix.go b/adapters/axonix/axonix.go
index 4a47360f..888cf551 100644
--- a/adapters/axonix/axonix.go
+++ b/adapters/axonix/axonix.go
@@ -7,7 +7,7 @@ import (
 	"net/url"
 	"text/template"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/beachfront/beachfront.go b/adapters/beachfront/beachfront.go
index 6eaf5ad9..1302e6af 100644
--- a/adapters/beachfront/beachfront.go
+++ b/adapters/beachfront/beachfront.go
@@ -8,7 +8,8 @@ import (
 	"strconv"
 	"strings"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/adcom1"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
@@ -60,24 +61,24 @@ type beachfrontVideoRequest struct {
 //              Banner
 // ---------------------------------------------------
 type beachfrontBannerRequest struct {
-	Slots          []beachfrontSlot                         `json:"slots"`
-	Domain         string                                   `json:"domain"`
-	Page           string                                   `json:"page"`
-	Referrer       string                                   `json:"referrer"`
-	Search         string                                   `json:"search"`
-	Secure         int8                                     `json:"secure"`
-	DeviceOs       string                                   `json:"deviceOs"`
-	DeviceModel    string                                   `json:"deviceModel"`
-	IsMobile       int8                                     `json:"isMobile"`
-	UA             string                                   `json:"ua"`
-	Dnt            int8                                     `json:"dnt"`
-	User           openrtb2.User                            `json:"user"`
-	AdapterName    string                                   `json:"adapterName"`
-	AdapterVersion string                                   `json:"adapterVersion"`
-	IP             string                                   `json:"ip"`
-	RequestID      string                                   `json:"requestId"`
-	Real204        bool                                     `json:"real204"`
-	SChain         openrtb_ext.ExtRequestPrebidSChainSChain `json:"schain,omitempty"`
+	Slots          []beachfrontSlot     `json:"slots"`
+	Domain         string               `json:"domain"`
+	Page           string               `json:"page"`
+	Referrer       string               `json:"referrer"`
+	Search         string               `json:"search"`
+	Secure         int8                 `json:"secure"`
+	DeviceOs       string               `json:"deviceOs"`
+	DeviceModel    string               `json:"deviceModel"`
+	IsMobile       int8                 `json:"isMobile"`
+	UA             string               `json:"ua"`
+	Dnt            int8                 `json:"dnt"`
+	User           openrtb2.User        `json:"user"`
+	AdapterName    string               `json:"adapterName"`
+	AdapterVersion string               `json:"adapterVersion"`
+	IP             string               `json:"ip"`
+	RequestID      string               `json:"requestId"`
+	Real204        bool                 `json:"real204"`
+	SChain         openrtb2.SupplyChain `json:"schain,omitempty"`
 }
 
 type beachfrontSlot struct {
@@ -331,7 +332,7 @@ func getBannerRequest(request *openrtb2.BidRequest, reqInfo *adapters.ExtraReque
 
 	var t = fallBackDeviceType(request)
 
-	if t == openrtb2.DeviceTypeMobileTablet {
+	if t == adcom1.DeviceMobile {
 		bfr.Page = request.App.Bundle
 		if request.App.Domain == "" {
 			bfr.Domain = getDomain(request.App.Domain)
@@ -340,7 +341,7 @@ func getBannerRequest(request *openrtb2.BidRequest, reqInfo *adapters.ExtraReque
 		}
 
 		bfr.IsMobile = 1
-	} else if t == openrtb2.DeviceTypePersonalComputer {
+	} else if t == adcom1.DevicePC {
 		bfr.Page = request.Site.Page
 		if request.Site.Domain == "" {
 			bfr.Domain = getDomain(request.Site.Page)
@@ -384,12 +385,12 @@ func getBannerRequest(request *openrtb2.BidRequest, reqInfo *adapters.ExtraReque
 	return bfr, errs
 }
 
-func fallBackDeviceType(request *openrtb2.BidRequest) openrtb2.DeviceType {
+func fallBackDeviceType(request *openrtb2.BidRequest) adcom1.DeviceType {
 	if request.Site != nil {
-		return openrtb2.DeviceTypePersonalComputer
+		return adcom1.DevicePC
 	}
 
-	return openrtb2.DeviceTypeMobileTablet
+	return adcom1.DeviceMobile
 }
 
 func getVideoRequests(request *openrtb2.BidRequest, reqInfo *adapters.ExtraRequestInfo) ([]beachfrontVideoRequest, []error) {
diff --git a/adapters/beintoo/beintoo.go b/adapters/beintoo/beintoo.go
index 60022e73..e783f786 100644
--- a/adapters/beintoo/beintoo.go
+++ b/adapters/beintoo/beintoo.go
@@ -7,7 +7,7 @@ import (
 	"net/url"
 	"strconv"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/between/between.go b/adapters/between/between.go
index f1cdd0ef..1269b7e3 100644
--- a/adapters/between/between.go
+++ b/adapters/between/between.go
@@ -8,7 +8,7 @@ import (
 	"strconv"
 	"text/template"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/bidder.go b/adapters/bidder.go
index a54b8ff2..6a4df525 100644
--- a/adapters/bidder.go
+++ b/adapters/bidder.go
@@ -5,7 +5,7 @@ import (
 	"encoding/json"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/currency"
 	"github.com/prebid/prebid-server/metrics"
diff --git a/adapters/bidmachine/bidmachine.go b/adapters/bidmachine/bidmachine.go
index eae26c60..d2e1172a 100644
--- a/adapters/bidmachine/bidmachine.go
+++ b/adapters/bidmachine/bidmachine.go
@@ -9,7 +9,9 @@ import (
 	"strconv"
 	"text/template"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/adcom1"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
+
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
@@ -100,9 +102,9 @@ func (a *adapter) MakeRequests(request *openrtb2.BidRequest, _ *adapters.ExtraRe
 	return result, errs
 }
 
-func hasRewardedBattr(attr []openrtb2.CreativeAttribute) bool {
+func hasRewardedBattr(attr []adcom1.CreativeAttribute) bool {
 	for i := 0; i < len(attr); i++ {
-		if attr[i] == openrtb2.CreativeAttribute(16) {
+		if attr[i] == adcom1.AttrHasSkipButton {
 			return true
 		}
 	}
@@ -198,10 +200,10 @@ func (a *adapter) buildEndpointURL(params openrtb_ext.ExtImpBidmachine) (string,
 	return uri.String(), nil
 }
 
-func copyBAttrWithRewardedInventory(src []openrtb2.CreativeAttribute) []openrtb2.CreativeAttribute {
-	dst := make([]openrtb2.CreativeAttribute, len(src))
+func copyBAttrWithRewardedInventory(src []adcom1.CreativeAttribute) []adcom1.CreativeAttribute {
+	dst := make([]adcom1.CreativeAttribute, len(src))
 	copy(dst, src)
-	dst = append(dst, openrtb2.CreativeAttribute(16))
+	dst = append(dst, adcom1.AttrHasSkipButton)
 	return dst
 }
 
diff --git a/adapters/bidmyadz/bidmyadz.go b/adapters/bidmyadz/bidmyadz.go
index 829d57e6..e98be16b 100644
--- a/adapters/bidmyadz/bidmyadz.go
+++ b/adapters/bidmyadz/bidmyadz.go
@@ -3,7 +3,7 @@ package bidmyadz
 import (
 	"encoding/json"
 	"fmt"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/bidscube/bidscube.go b/adapters/bidscube/bidscube.go
index 8b1e5e66..f241fe13 100644
--- a/adapters/bidscube/bidscube.go
+++ b/adapters/bidscube/bidscube.go
@@ -8,7 +8,7 @@ import (
 	"strconv"
 
 	"github.com/buger/jsonparser"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/bizzclick/bizzclick.go b/adapters/bizzclick/bizzclick.go
index 70c2bb0c..51149c0c 100644
--- a/adapters/bizzclick/bizzclick.go
+++ b/adapters/bizzclick/bizzclick.go
@@ -6,7 +6,7 @@ import (
 	"net/http"
 	"text/template"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/bliink/bliink.go b/adapters/bliink/bliink.go
index 6e179a3f..dd6ebcf1 100644
--- a/adapters/bliink/bliink.go
+++ b/adapters/bliink/bliink.go
@@ -3,7 +3,7 @@ package bliink
 import (
 	"encoding/json"
 	"fmt"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/bmtm/brightmountainmedia.go b/adapters/bmtm/brightmountainmedia.go
index ffaacd7c..3f8e4848 100644
--- a/adapters/bmtm/brightmountainmedia.go
+++ b/adapters/bmtm/brightmountainmedia.go
@@ -6,7 +6,7 @@ import (
 	"net/http"
 	"strconv"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/brightroll/brightroll.go b/adapters/brightroll/brightroll.go
index 9a64db45..595b4c7e 100644
--- a/adapters/brightroll/brightroll.go
+++ b/adapters/brightroll/brightroll.go
@@ -6,7 +6,8 @@ import (
 	"net/http"
 	"strconv"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/adcom1"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
@@ -199,10 +200,10 @@ func (a *BrightrollAdapter) MakeBids(internalRequest *openrtb2.BidRequest, exter
 	return bidResponse, nil
 }
 
-func getBlockedCreativetypes(attr []int8) []openrtb2.CreativeAttribute {
-	var creativeAttr []openrtb2.CreativeAttribute
+func getBlockedCreativetypes(attr []int8) []adcom1.CreativeAttribute {
+	var creativeAttr []adcom1.CreativeAttribute
 	for i := 0; i < len(attr); i++ {
-		creativeAttr = append(creativeAttr, openrtb2.CreativeAttribute(attr[i]))
+		creativeAttr = append(creativeAttr, adcom1.CreativeAttribute(attr[i]))
 	}
 	return creativeAttr
 }
diff --git a/adapters/coinzilla/coinzilla.go b/adapters/coinzilla/coinzilla.go
index 8535133d..f644f4d5 100644
--- a/adapters/coinzilla/coinzilla.go
+++ b/adapters/coinzilla/coinzilla.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/openrtb_ext"
 
diff --git a/adapters/colossus/colossus.go b/adapters/colossus/colossus.go
index 16fe5e0a..bf61b283 100644
--- a/adapters/colossus/colossus.go
+++ b/adapters/colossus/colossus.go
@@ -6,7 +6,7 @@ import (
 	"net/http"
 
 	"github.com/buger/jsonparser"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/compass/compass.go b/adapters/compass/compass.go
index eed84657..3a0db745 100644
--- a/adapters/compass/compass.go
+++ b/adapters/compass/compass.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/connectad/connectad.go b/adapters/connectad/connectad.go
index 5c30e3a6..5dfb134a 100644
--- a/adapters/connectad/connectad.go
+++ b/adapters/connectad/connectad.go
@@ -7,7 +7,7 @@ import (
 	"net/url"
 	"strconv"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/consumable/adtypes.go b/adapters/consumable/adtypes.go
index 5c5bd425..67d07504 100644
--- a/adapters/consumable/adtypes.go
+++ b/adapters/consumable/adtypes.go
@@ -3,7 +3,7 @@ package consumable
 import (
 	"strconv"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 )
 
 /* Turn array of openrtb formats into consumable's code*/
diff --git a/adapters/consumable/consumable.go b/adapters/consumable/consumable.go
index c2e0c201..90fda397 100644
--- a/adapters/consumable/consumable.go
+++ b/adapters/consumable/consumable.go
@@ -8,7 +8,7 @@ import (
 	"strconv"
 	"strings"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/conversant/conversant.go b/adapters/conversant/conversant.go
index 7cf4ab5d..738a7fc6 100644
--- a/adapters/conversant/conversant.go
+++ b/adapters/conversant/conversant.go
@@ -5,7 +5,8 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/adcom1"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
@@ -56,7 +57,7 @@ func (c ConversantAdapter) MakeRequests(request *openrtb2.BidRequest, reqInfo *a
 	data, err := json.Marshal(request)
 	if err != nil {
 		return nil, []error{&errortypes.BadInput{
-			Message: fmt.Sprintf("Error in packaging request to JSON"),
+			Message: "Error in packaging request to JSON",
 		}}
 	}
 	headers := http.Header{}
@@ -88,9 +89,9 @@ func parseCnvrParams(imp *openrtb2.Imp, cnvrExt openrtb_ext.ExtImpConversant) {
 		imp.Secure = cnvrExt.Secure
 	}
 
-	var position *openrtb2.AdPosition
+	var position *adcom1.PlacementPosition
 	if cnvrExt.Position != nil {
-		position = openrtb2.AdPosition(*cnvrExt.Position).Ptr()
+		position = adcom1.PlacementPosition(*cnvrExt.Position).Ptr()
 	}
 	if imp.Banner != nil {
 		tmpBanner := *imp.Banner
@@ -103,9 +104,9 @@ func parseCnvrParams(imp *openrtb2.Imp, cnvrExt openrtb_ext.ExtImpConversant) {
 		imp.Video.Pos = position
 
 		if len(cnvrExt.API) > 0 {
-			imp.Video.API = make([]openrtb2.APIFramework, 0, len(cnvrExt.API))
+			imp.Video.API = make([]adcom1.APIFramework, 0, len(cnvrExt.API))
 			for _, api := range cnvrExt.API {
-				imp.Video.API = append(imp.Video.API, openrtb2.APIFramework(api))
+				imp.Video.API = append(imp.Video.API, adcom1.APIFramework(api))
 			}
 		}
 
@@ -114,9 +115,9 @@ func parseCnvrParams(imp *openrtb2.Imp, cnvrExt openrtb_ext.ExtImpConversant) {
 		// but are overridden if the custom params object also contains them.
 
 		if len(cnvrExt.Protocols) > 0 {
-			imp.Video.Protocols = make([]openrtb2.Protocol, 0, len(cnvrExt.Protocols))
+			imp.Video.Protocols = make([]adcom1.MediaCreativeSubtype, 0, len(cnvrExt.Protocols))
 			for _, protocol := range cnvrExt.Protocols {
-				imp.Video.Protocols = append(imp.Video.Protocols, openrtb2.Protocol(protocol))
+				imp.Video.Protocols = append(imp.Video.Protocols, adcom1.MediaCreativeSubtype(protocol))
 			}
 		}
 
@@ -151,7 +152,7 @@ func (c ConversantAdapter) MakeBids(internalRequest *openrtb2.BidRequest, extern
 
 	if len(resp.SeatBid) == 0 {
 		return nil, []error{&errortypes.BadServerResponse{
-			Message: fmt.Sprintf("Empty bid request"),
+			Message: "Empty bid request",
 		}}
 	}
 
diff --git a/adapters/cpmstar/cpmstar.go b/adapters/cpmstar/cpmstar.go
index 86c87c4c..f62b2564 100644
--- a/adapters/cpmstar/cpmstar.go
+++ b/adapters/cpmstar/cpmstar.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/criteo/criteo.go b/adapters/criteo/criteo.go
index de5568b9..6aa1771a 100644
--- a/adapters/criteo/criteo.go
+++ b/adapters/criteo/criteo.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/criteo/models.go b/adapters/criteo/models.go
index 0365c0e6..ede2bb88 100644
--- a/adapters/criteo/models.go
+++ b/adapters/criteo/models.go
@@ -5,19 +5,19 @@ import (
 	"fmt"
 	"strings"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/errortypes"
 	"github.com/prebid/prebid-server/openrtb_ext"
 )
 
 type criteoRequest struct {
-	ID          string                   `json:"id,omitempty"`
-	Publisher   criteoPublisher          `json:"publisher,omitempty"`
-	User        criteoUser               `json:"user,omitempty"`
-	GdprConsent criteoGdprConsent        `json:"gdprconsent,omitempty"`
-	Slots       []criteoRequestSlot      `json:"slots,omitempty"`
-	Eids        []openrtb_ext.ExtUserEid `json:"eids,omitempty"`
+	ID          string              `json:"id,omitempty"`
+	Publisher   criteoPublisher     `json:"publisher,omitempty"`
+	User        criteoUser          `json:"user,omitempty"`
+	GdprConsent criteoGdprConsent   `json:"gdprconsent,omitempty"`
+	Slots       []criteoRequestSlot `json:"slots,omitempty"`
+	Eids        []openrtb2.EID      `json:"eids,omitempty"`
 }
 
 func newCriteoRequest(slotIDGenerator slotIDGenerator, request *openrtb2.BidRequest) (criteoRequest, []error) {
diff --git a/adapters/datablocks/datablocks.go b/adapters/datablocks/datablocks.go
index e9d727d7..b38b610c 100644
--- a/adapters/datablocks/datablocks.go
+++ b/adapters/datablocks/datablocks.go
@@ -7,7 +7,7 @@ import (
 	"strconv"
 	"text/template"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/decenterads/decenterads.go b/adapters/decenterads/decenterads.go
index c94c461e..4ed411d8 100644
--- a/adapters/decenterads/decenterads.go
+++ b/adapters/decenterads/decenterads.go
@@ -7,7 +7,7 @@ import (
 	"net/http"
 	"strconv"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/deepintent/deepintent.go b/adapters/deepintent/deepintent.go
index 0853bb8b..a472d002 100644
--- a/adapters/deepintent/deepintent.go
+++ b/adapters/deepintent/deepintent.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/dmx/dmx.go b/adapters/dmx/dmx.go
index adcec4a3..b8ca87c1 100644
--- a/adapters/dmx/dmx.go
+++ b/adapters/dmx/dmx.go
@@ -8,7 +8,8 @@ import (
 	"net/url"
 	"strings"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/adcom1"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
@@ -48,7 +49,7 @@ type dmxParams struct {
 	Bidfloor    float64 `json:"bidfloor,omitempty"`
 }
 
-var protocols = []openrtb2.Protocol{2, 3, 5, 6, 7, 8}
+var protocols = []adcom1.MediaCreativeSubtype{2, 3, 5, 6, 7, 8}
 
 func UserSellerOrPubId(str1, str2 string) string {
 	if str1 != "" {
@@ -351,7 +352,7 @@ func getIdfa(request *openrtb2.BidRequest) (string, bool) {
 	}
 	return "", false
 }
-func checkProtocols(imp *openrtb2.Video) []openrtb2.Protocol {
+func checkProtocols(imp *openrtb2.Video) []adcom1.MediaCreativeSubtype {
 	if len(imp.Protocols) > 0 {
 		return imp.Protocols
 	}
diff --git a/adapters/e_volution/evolution.go b/adapters/e_volution/evolution.go
index 26df301c..1658acb4 100644
--- a/adapters/e_volution/evolution.go
+++ b/adapters/e_volution/evolution.go
@@ -3,7 +3,7 @@ package evolution
 import (
 	"encoding/json"
 	"fmt"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/emx_digital/emx_digital.go b/adapters/emx_digital/emx_digital.go
index 75d74cf6..64ae38cd 100644
--- a/adapters/emx_digital/emx_digital.go
+++ b/adapters/emx_digital/emx_digital.go
@@ -9,7 +9,8 @@ import (
 	"strings"
 	"time"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/adcom1"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
@@ -162,11 +163,11 @@ func buildImpVideo(imp *openrtb2.Imp) error {
 }
 
 // not supporting VAST protocol 7 (VAST 4.0);
-func cleanProtocol(protocols []openrtb2.Protocol) []openrtb2.Protocol {
-	newitems := make([]openrtb2.Protocol, 0, len(protocols))
+func cleanProtocol(protocols []adcom1.MediaCreativeSubtype) []adcom1.MediaCreativeSubtype {
+	newitems := make([]adcom1.MediaCreativeSubtype, 0, len(protocols))
 
 	for _, i := range protocols {
-		if i != openrtb2.ProtocolVAST40 {
+		if i != adcom1.CreativeVAST40 {
 			newitems = append(newitems, i)
 		}
 	}
diff --git a/adapters/engagebdr/engagebdr.go b/adapters/engagebdr/engagebdr.go
index 645773fe..85ced9da 100644
--- a/adapters/engagebdr/engagebdr.go
+++ b/adapters/engagebdr/engagebdr.go
@@ -4,7 +4,7 @@ import (
 	"encoding/json"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/openrtb_ext"
 
diff --git a/adapters/eplanning/eplanning.go b/adapters/eplanning/eplanning.go
index 1e593fb7..e418a10c 100644
--- a/adapters/eplanning/eplanning.go
+++ b/adapters/eplanning/eplanning.go
@@ -11,7 +11,8 @@ import (
 
 	"fmt"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/adcom1"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
@@ -192,7 +193,7 @@ func (adapter *EPlanningAdapter) MakeRequests(request *openrtb2.BidRequest, reqI
 }
 
 func isMobileDevice(request *openrtb2.BidRequest) bool {
-	return request.Device != nil && (request.Device.DeviceType == openrtb2.DeviceTypeMobileTablet || request.Device.DeviceType == openrtb2.DeviceTypePhone || request.Device.DeviceType == openrtb2.DeviceTypeTablet)
+	return request.Device != nil && (request.Device.DeviceType == adcom1.DeviceMobile || request.Device.DeviceType == adcom1.DevicePhone || request.Device.DeviceType == adcom1.DeviceTablet)
 }
 
 func cleanName(name string) string {
diff --git a/adapters/epom/epom.go b/adapters/epom/epom.go
index a8336b64..f33e3212 100644
--- a/adapters/epom/epom.go
+++ b/adapters/epom/epom.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/gamma/gamma.go b/adapters/gamma/gamma.go
index a99a4643..770c8766 100644
--- a/adapters/gamma/gamma.go
+++ b/adapters/gamma/gamma.go
@@ -7,7 +7,8 @@ import (
 	"net/url"
 	"strconv"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb3"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
@@ -30,13 +31,13 @@ type gammaSeatBid struct {
 	Ext   json.RawMessage `json:"ext,omitempty"`
 }
 type gammaBidResponse struct {
-	ID         string                    `json:"id"`
-	SeatBid    []gammaSeatBid            `json:"seatbid,omitempty"`
-	BidID      string                    `json:"bidid,omitempty"`
-	Cur        string                    `json:"cur,omitempty"`
-	CustomData string                    `json:"customdata,omitempty"`
-	NBR        *openrtb2.NoBidReasonCode `json:"nbr,omitempty"`
-	Ext        json.RawMessage           `json:"ext,omitempty"`
+	ID         string                `json:"id"`
+	SeatBid    []gammaSeatBid        `json:"seatbid,omitempty"`
+	BidID      string                `json:"bidid,omitempty"`
+	Cur        string                `json:"cur,omitempty"`
+	CustomData string                `json:"customdata,omitempty"`
+	NBR        *openrtb3.NoBidReason `json:"nbr,omitempty"`
+	Ext        json.RawMessage       `json:"ext,omitempty"`
 }
 
 func checkParams(gammaExt openrtb_ext.ExtImpGamma) error {
diff --git a/adapters/gamoshi/gamoshi.go b/adapters/gamoshi/gamoshi.go
index c3219c1b..a5313515 100644
--- a/adapters/gamoshi/gamoshi.go
+++ b/adapters/gamoshi/gamoshi.go
@@ -7,7 +7,7 @@ import (
 	"strconv"
 
 	"github.com/golang/glog"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/grid/grid.go b/adapters/grid/grid.go
index c46fcbc2..b9ca47e8 100644
--- a/adapters/grid/grid.go
+++ b/adapters/grid/grid.go
@@ -7,7 +7,7 @@ import (
 	"sort"
 	"strings"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/gumgum/gumgum.go b/adapters/gumgum/gumgum.go
index 27533127..7faa7be9 100644
--- a/adapters/gumgum/gumgum.go
+++ b/adapters/gumgum/gumgum.go
@@ -7,7 +7,7 @@ import (
 	"strconv"
 	"strings"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/huaweiads/huaweiads.go b/adapters/huaweiads/huaweiads.go
index a8bd8f89..4b8c70b0 100644
--- a/adapters/huaweiads/huaweiads.go
+++ b/adapters/huaweiads/huaweiads.go
@@ -8,20 +8,21 @@ import (
 	"encoding/json"
 	"errors"
 	"fmt"
-	"github.com/mxmCherry/openrtb/v15/native1"
-	nativeRequests "github.com/mxmCherry/openrtb/v15/native1/request"
-	nativeResponse "github.com/mxmCherry/openrtb/v15/native1/response"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
-	"github.com/prebid/prebid-server/adapters"
-	"github.com/prebid/prebid-server/config"
-	"github.com/prebid/prebid-server/errortypes"
-	"github.com/prebid/prebid-server/openrtb_ext"
 	"net/http"
 	"net/url"
 	"regexp"
 	"strconv"
 	"strings"
 	"time"
+
+	"github.com/mxmCherry/openrtb/v16/native1"
+	nativeRequests "github.com/mxmCherry/openrtb/v16/native1/request"
+	nativeResponse "github.com/mxmCherry/openrtb/v16/native1/response"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
+	"github.com/prebid/prebid-server/adapters"
+	"github.com/prebid/prebid-server/config"
+	"github.com/prebid/prebid-server/errortypes"
+	"github.com/prebid/prebid-server/openrtb_ext"
 )
 
 const huaweiAdxApiVersion = "3.4"
diff --git a/adapters/impactify/impactify.go b/adapters/impactify/impactify.go
index 5d64be03..c609ca3e 100644
--- a/adapters/impactify/impactify.go
+++ b/adapters/impactify/impactify.go
@@ -3,7 +3,7 @@ package impactify
 import (
 	"encoding/json"
 	"fmt"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/improvedigital/improvedigital.go b/adapters/improvedigital/improvedigital.go
index 3d4520e4..b01386ca 100644
--- a/adapters/improvedigital/improvedigital.go
+++ b/adapters/improvedigital/improvedigital.go
@@ -6,7 +6,7 @@ import (
 	"net/http"
 	"strings"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/infoawarebidder.go b/adapters/infoawarebidder.go
index 6a07bda3..5dfd4dd0 100644
--- a/adapters/infoawarebidder.go
+++ b/adapters/infoawarebidder.go
@@ -3,7 +3,7 @@ package adapters
 import (
 	"fmt"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
 	"github.com/prebid/prebid-server/openrtb_ext"
diff --git a/adapters/infytv/infytv.go b/adapters/infytv/infytv.go
index af41958b..d1fb64b9 100644
--- a/adapters/infytv/infytv.go
+++ b/adapters/infytv/infytv.go
@@ -5,7 +5,8 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
+
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/inmobi/inmobi.go b/adapters/inmobi/inmobi.go
index 63baa8a4..6870a8f1 100644
--- a/adapters/inmobi/inmobi.go
+++ b/adapters/inmobi/inmobi.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/interactiveoffers/interactiveoffers.go b/adapters/interactiveoffers/interactiveoffers.go
index e77dfd5a..75a33bdc 100644
--- a/adapters/interactiveoffers/interactiveoffers.go
+++ b/adapters/interactiveoffers/interactiveoffers.go
@@ -6,7 +6,7 @@ import (
 	"net/http"
 	"text/template"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/invibes/invibes.go b/adapters/invibes/invibes.go
index 505ef404..d201042c 100644
--- a/adapters/invibes/invibes.go
+++ b/adapters/invibes/invibes.go
@@ -9,7 +9,7 @@ import (
 	"strings"
 	"text/template"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/iqzone/iqzone.go b/adapters/iqzone/iqzone.go
index 79dc04d8..afcd0d2e 100644
--- a/adapters/iqzone/iqzone.go
+++ b/adapters/iqzone/iqzone.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/ix/ix.go b/adapters/ix/ix.go
index 1cfec693..fd89fc95 100644
--- a/adapters/ix/ix.go
+++ b/adapters/ix/ix.go
@@ -12,9 +12,9 @@ import (
 	"github.com/prebid/prebid-server/errortypes"
 	"github.com/prebid/prebid-server/openrtb_ext"
 
-	"github.com/mxmCherry/openrtb/v15/native1"
-	native1response "github.com/mxmCherry/openrtb/v15/native1/response"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/native1"
+	native1response "github.com/mxmCherry/openrtb/v16/native1/response"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 )
 
 type IxAdapter struct {
diff --git a/adapters/jixie/jixie.go b/adapters/jixie/jixie.go
index b158dbba..c07d6add 100644
--- a/adapters/jixie/jixie.go
+++ b/adapters/jixie/jixie.go
@@ -6,7 +6,7 @@ import (
 	"net/http"
 	"strings"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/kargo/kargo.go b/adapters/kargo/kargo.go
index 8525d771..b15d35ee 100644
--- a/adapters/kargo/kargo.go
+++ b/adapters/kargo/kargo.go
@@ -5,7 +5,8 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
+
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/kayzen/kayzen.go b/adapters/kayzen/kayzen.go
index ea5408aa..10d249a1 100644
--- a/adapters/kayzen/kayzen.go
+++ b/adapters/kayzen/kayzen.go
@@ -6,7 +6,7 @@ import (
 	"net/http"
 	"text/template"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/kidoz/kidoz.go b/adapters/kidoz/kidoz.go
index 43372dc2..246be9f1 100644
--- a/adapters/kidoz/kidoz.go
+++ b/adapters/kidoz/kidoz.go
@@ -6,7 +6,7 @@ import (
 	"net/http"
 	"strconv"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/krushmedia/krushmedia.go b/adapters/krushmedia/krushmedia.go
index 488fd0fa..814ace82 100644
--- a/adapters/krushmedia/krushmedia.go
+++ b/adapters/krushmedia/krushmedia.go
@@ -7,7 +7,7 @@ import (
 	"strconv"
 	"text/template"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/kubient/kubient.go b/adapters/kubient/kubient.go
index a99e9005..d7fb6ebb 100644
--- a/adapters/kubient/kubient.go
+++ b/adapters/kubient/kubient.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/openrtb_ext"
 
diff --git a/adapters/lockerdome/lockerdome.go b/adapters/lockerdome/lockerdome.go
index 28c966be..a9fbe150 100644
--- a/adapters/lockerdome/lockerdome.go
+++ b/adapters/lockerdome/lockerdome.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/logicad/logicad.go b/adapters/logicad/logicad.go
index 982723d0..9393a61a 100644
--- a/adapters/logicad/logicad.go
+++ b/adapters/logicad/logicad.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/lunamedia/lunamedia.go b/adapters/lunamedia/lunamedia.go
index 5c485264..352b6b4a 100644
--- a/adapters/lunamedia/lunamedia.go
+++ b/adapters/lunamedia/lunamedia.go
@@ -6,7 +6,7 @@ import (
 	"net/http"
 	"text/template"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/madvertise/madvertise.go b/adapters/madvertise/madvertise.go
index 6d37ccfc..1c4df788 100644
--- a/adapters/madvertise/madvertise.go
+++ b/adapters/madvertise/madvertise.go
@@ -6,7 +6,8 @@ import (
 	"net/http"
 	"text/template"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/adcom1"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
@@ -149,13 +150,13 @@ func (a *adapter) MakeBids(request *openrtb2.BidRequest, requestData *adapters.R
 	return bidResponse, nil
 }
 
-func getMediaTypeForBid(attr []openrtb2.CreativeAttribute) openrtb_ext.BidType {
+func getMediaTypeForBid(attr []adcom1.CreativeAttribute) openrtb_ext.BidType {
 	for i := 0; i < len(attr); i++ {
-		if attr[i] == openrtb2.CreativeAttribute(16) {
+		if attr[i] == adcom1.AttrHasSkipButton {
 			return openrtb_ext.BidTypeVideo
-		} else if attr[i] == openrtb2.CreativeAttribute(6) {
+		} else if attr[i] == adcom1.AttrVideoAuto {
 			return openrtb_ext.BidTypeVideo
-		} else if attr[i] == openrtb2.CreativeAttribute(7) {
+		} else if attr[i] == adcom1.AttrVideoUser {
 			return openrtb_ext.BidTypeVideo
 		}
 	}
diff --git a/adapters/marsmedia/marsmedia.go b/adapters/marsmedia/marsmedia.go
index 65ffff25..50a87a9d 100644
--- a/adapters/marsmedia/marsmedia.go
+++ b/adapters/marsmedia/marsmedia.go
@@ -6,7 +6,7 @@ import (
 	"net/http"
 	"strconv"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/medianet/medianet.go b/adapters/medianet/medianet.go
index 091cca2f..1298b848 100644
--- a/adapters/medianet/medianet.go
+++ b/adapters/medianet/medianet.go
@@ -6,7 +6,7 @@ import (
 	"net/http"
 	"net/url"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/mgid/mgid.go b/adapters/mgid/mgid.go
index 95ede0ab..e634b4cb 100644
--- a/adapters/mgid/mgid.go
+++ b/adapters/mgid/mgid.go
@@ -6,7 +6,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/mobfoxpb/mobfoxpb.go b/adapters/mobfoxpb/mobfoxpb.go
index 7fcf416a..6255638e 100644
--- a/adapters/mobfoxpb/mobfoxpb.go
+++ b/adapters/mobfoxpb/mobfoxpb.go
@@ -7,7 +7,7 @@ import (
 	"strings"
 
 	"github.com/buger/jsonparser"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/mobilefuse/mobilefuse.go b/adapters/mobilefuse/mobilefuse.go
index 3437a0f6..881fa354 100644
--- a/adapters/mobilefuse/mobilefuse.go
+++ b/adapters/mobilefuse/mobilefuse.go
@@ -7,7 +7,7 @@ import (
 	"strconv"
 	"text/template"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/nanointeractive/nanointeractive.go b/adapters/nanointeractive/nanointeractive.go
index a2ec89b0..0e402cd1 100644
--- a/adapters/nanointeractive/nanointeractive.go
+++ b/adapters/nanointeractive/nanointeractive.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/nextmillennium/nextmillennium.go b/adapters/nextmillennium/nextmillennium.go
index bcb0b287..605da43f 100644
--- a/adapters/nextmillennium/nextmillennium.go
+++ b/adapters/nextmillennium/nextmillennium.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/ninthdecimal/ninthdecimal.go b/adapters/ninthdecimal/ninthdecimal.go
index 17d55edb..6468e0a6 100755
--- a/adapters/ninthdecimal/ninthdecimal.go
+++ b/adapters/ninthdecimal/ninthdecimal.go
@@ -6,7 +6,7 @@ import (
 	"net/http"
 	"text/template"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/nobid/nobid.go b/adapters/nobid/nobid.go
index f8db812d..bfe61257 100644
--- a/adapters/nobid/nobid.go
+++ b/adapters/nobid/nobid.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/onetag/onetag.go b/adapters/onetag/onetag.go
index 30ebf492..e3ef0e0f 100644
--- a/adapters/onetag/onetag.go
+++ b/adapters/onetag/onetag.go
@@ -6,7 +6,7 @@ import (
 	"net/http"
 	"text/template"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/openrtb_util.go b/adapters/openrtb_util.go
index 2816e730..65cc5912 100644
--- a/adapters/openrtb_util.go
+++ b/adapters/openrtb_util.go
@@ -5,7 +5,7 @@ import (
 	"errors"
 	"fmt"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/openrtb_ext"
 )
 
diff --git a/adapters/openweb/openweb.go b/adapters/openweb/openweb.go
index 9c6c48c5..eabc86cc 100644
--- a/adapters/openweb/openweb.go
+++ b/adapters/openweb/openweb.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/openx/openx.go b/adapters/openx/openx.go
index 208b06f7..c4ffb4cd 100644
--- a/adapters/openx/openx.go
+++ b/adapters/openx/openx.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/operaads/operaads.go b/adapters/operaads/operaads.go
index 5912807b..a2235b7e 100644
--- a/adapters/operaads/operaads.go
+++ b/adapters/operaads/operaads.go
@@ -14,7 +14,7 @@ import (
 	"github.com/prebid/prebid-server/macros"
 	"github.com/prebid/prebid-server/openrtb_ext"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 )
 
 type adapter struct {
diff --git a/adapters/orbidder/orbidder.go b/adapters/orbidder/orbidder.go
index f2dda85e..da28d0c6 100644
--- a/adapters/orbidder/orbidder.go
+++ b/adapters/orbidder/orbidder.go
@@ -3,7 +3,7 @@ package orbidder
 import (
 	"encoding/json"
 	"fmt"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/outbrain/outbrain.go b/adapters/outbrain/outbrain.go
index 6b121cb4..442a807c 100644
--- a/adapters/outbrain/outbrain.go
+++ b/adapters/outbrain/outbrain.go
@@ -5,9 +5,9 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/native1"
-	nativeResponse "github.com/mxmCherry/openrtb/v15/native1/response"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/native1"
+	nativeResponse "github.com/mxmCherry/openrtb/v16/native1/response"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/pangle/pangle.go b/adapters/pangle/pangle.go
index da86a904..fbf9269d 100644
--- a/adapters/pangle/pangle.go
+++ b/adapters/pangle/pangle.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/pubmatic/pubmatic.go b/adapters/pubmatic/pubmatic.go
index a8cb6b7d..61b0105e 100644
--- a/adapters/pubmatic/pubmatic.go
+++ b/adapters/pubmatic/pubmatic.go
@@ -8,7 +8,7 @@ import (
 	"strings"
 
 	"github.com/golang/glog"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/pubnative/pubnative.go b/adapters/pubnative/pubnative.go
index 8093c841..81073150 100644
--- a/adapters/pubnative/pubnative.go
+++ b/adapters/pubnative/pubnative.go
@@ -7,7 +7,7 @@ import (
 	"net/url"
 	"strconv"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/pulsepoint/pulsepoint.go b/adapters/pulsepoint/pulsepoint.go
index f756d5dd..42a26a26 100644
--- a/adapters/pulsepoint/pulsepoint.go
+++ b/adapters/pulsepoint/pulsepoint.go
@@ -11,7 +11,7 @@ import (
 	"github.com/prebid/prebid-server/errortypes"
 	"github.com/prebid/prebid-server/openrtb_ext"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 )
 
 type PulsePointAdapter struct {
diff --git a/adapters/revcontent/revcontent.go b/adapters/revcontent/revcontent.go
index 173917c2..8a4bd0b1 100644
--- a/adapters/revcontent/revcontent.go
+++ b/adapters/revcontent/revcontent.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/rhythmone/rhythmone.go b/adapters/rhythmone/rhythmone.go
index de43537e..1f437ce8 100644
--- a/adapters/rhythmone/rhythmone.go
+++ b/adapters/rhythmone/rhythmone.go
@@ -6,7 +6,7 @@ import (
 
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/richaudience/richaudience.go b/adapters/richaudience/richaudience.go
index d2fa68c3..29d69f31 100644
--- a/adapters/richaudience/richaudience.go
+++ b/adapters/richaudience/richaudience.go
@@ -6,7 +6,7 @@ import (
 	"net/http"
 	"net/url"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/rtbhouse/rtbhouse.go b/adapters/rtbhouse/rtbhouse.go
index 44adddee..464b969a 100644
--- a/adapters/rtbhouse/rtbhouse.go
+++ b/adapters/rtbhouse/rtbhouse.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/rubicon/rubicon.go b/adapters/rubicon/rubicon.go
index 14cc5704..62cdb395 100644
--- a/adapters/rubicon/rubicon.go
+++ b/adapters/rubicon/rubicon.go
@@ -14,7 +14,8 @@ import (
 	"github.com/prebid/prebid-server/openrtb_ext"
 
 	"github.com/buger/jsonparser"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/adcom1"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 )
 
 const badvLimitSize = 50
@@ -97,12 +98,12 @@ type rubiconDataExt struct {
 }
 
 type rubiconUserExt struct {
-	Consent     string                   `json:"consent,omitempty"`
-	Eids        []openrtb_ext.ExtUserEid `json:"eids,omitempty"`
-	TpID        []rubiconExtUserTpID     `json:"tpid,omitempty"`
-	RP          rubiconUserExtRP         `json:"rp"`
-	LiverampIdl string                   `json:"liveramp_idl,omitempty"`
-	Data        json.RawMessage          `json:"data,omitempty"`
+	Consent     string               `json:"consent,omitempty"`
+	Eids        []openrtb2.EID       `json:"eids,omitempty"`
+	TpID        []rubiconExtUserTpID `json:"tpid,omitempty"`
+	RP          rubiconUserExtRP     `json:"rp"`
+	LiverampIdl string               `json:"liveramp_idl,omitempty"`
+	Data        json.RawMessage      `json:"data,omitempty"`
 }
 
 type rubiconSiteExtRP struct {
@@ -327,7 +328,7 @@ func parseRubiconSizes(sizes []openrtb2.Format) (primary int, alt []int, err err
 	return
 }
 
-func resolveVideoSizeId(placement openrtb2.VideoPlacementType, instl int8, impId string) (sizeID int, err error) {
+func resolveVideoSizeId(placement adcom1.VideoPlacementSubtype, instl int8, impId string) (sizeID int, err error) {
 	if placement != 0 {
 		if placement == 1 {
 			return 201, nil
@@ -898,13 +899,13 @@ func contains(s []int, e int) bool {
 	return false
 }
 
-func extractUserBuyerUID(eids []openrtb_ext.ExtUserEid) string {
+func extractUserBuyerUID(eids []openrtb2.EID) string {
 	for _, eid := range eids {
 		if eid.Source != "rubiconproject.com" {
 			continue
 		}
 
-		for _, uid := range eid.Uids {
+		for _, uid := range eid.UIDs {
 			var uidExt rubiconUserExtEidUidExt
 			err := json.Unmarshal(uid.Ext, &uidExt)
 			if err != nil {
@@ -920,7 +921,7 @@ func extractUserBuyerUID(eids []openrtb_ext.ExtUserEid) string {
 	return ""
 }
 
-func getTpIdsAndSegments(eids []openrtb_ext.ExtUserEid) (mappedRubiconUidsParam, []error) {
+func getTpIdsAndSegments(eids []openrtb2.EID) (mappedRubiconUidsParam, []error) {
 	rubiconUidsParam := mappedRubiconUidsParam{
 		tpIds:    make([]rubiconExtUserTpID, 0),
 		segments: make([]string, 0),
@@ -930,7 +931,7 @@ func getTpIdsAndSegments(eids []openrtb_ext.ExtUserEid) (mappedRubiconUidsParam,
 	for _, eid := range eids {
 		switch eid.Source {
 		case "adserver.org":
-			uids := eid.Uids
+			uids := eid.UIDs
 			if len(uids) > 0 {
 				uid := uids[0]
 
@@ -949,7 +950,7 @@ func getTpIdsAndSegments(eids []openrtb_ext.ExtUserEid) (mappedRubiconUidsParam,
 				}
 			}
 		case "liveintent.com":
-			uids := eid.Uids
+			uids := eid.UIDs
 			if len(uids) > 0 {
 				uidId := uids[0].ID
 				if uidId != "" {
@@ -968,7 +969,7 @@ func getTpIdsAndSegments(eids []openrtb_ext.ExtUserEid) (mappedRubiconUidsParam,
 				}
 			}
 		case "liveramp.com":
-			uids := eid.Uids
+			uids := eid.UIDs
 			if len(uids) > 0 {
 				uidId := uids[0].ID
 				if uidId != "" && rubiconUidsParam.liverampIdl == "" {
diff --git a/adapters/sa_lunamedia/salunamedia.go b/adapters/sa_lunamedia/salunamedia.go
index ea6e12b0..ba83e17c 100644
--- a/adapters/sa_lunamedia/salunamedia.go
+++ b/adapters/sa_lunamedia/salunamedia.go
@@ -3,7 +3,7 @@ package salunamedia
 import (
 	"encoding/json"
 	"fmt"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/sharethrough/sharethrough.go b/adapters/sharethrough/sharethrough.go
index 248859bb..2e9e9ad4 100644
--- a/adapters/sharethrough/sharethrough.go
+++ b/adapters/sharethrough/sharethrough.go
@@ -6,7 +6,7 @@ import (
 	"net/http"
 	"strings"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/silvermob/silvermob.go b/adapters/silvermob/silvermob.go
index a2060d25..1a390547 100644
--- a/adapters/silvermob/silvermob.go
+++ b/adapters/silvermob/silvermob.go
@@ -6,7 +6,7 @@ import (
 	"net/http"
 	"text/template"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/smaato/smaato.go b/adapters/smaato/smaato.go
index c84dd356..c4481802 100644
--- a/adapters/smaato/smaato.go
+++ b/adapters/smaato/smaato.go
@@ -8,7 +8,7 @@ import (
 	"strings"
 
 	"github.com/buger/jsonparser"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/smartadserver/smartadserver.go b/adapters/smartadserver/smartadserver.go
index 3954a00b..43ff361c 100644
--- a/adapters/smartadserver/smartadserver.go
+++ b/adapters/smartadserver/smartadserver.go
@@ -8,7 +8,7 @@ import (
 	"path"
 	"strconv"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
@@ -174,6 +174,8 @@ func getMediaTypeForImp(impID string, imps []openrtb2.Imp) openrtb_ext.BidType {
 		if imp.ID == impID {
 			if imp.Video != nil {
 				return openrtb_ext.BidTypeVideo
+			} else if imp.Native != nil {
+				return openrtb_ext.BidTypeNative
 			}
 			return openrtb_ext.BidTypeBanner
 		}
diff --git a/adapters/smarthub/smarthub.go b/adapters/smarthub/smarthub.go
index ba381a42..aebbc9b4 100644
--- a/adapters/smarthub/smarthub.go
+++ b/adapters/smarthub/smarthub.go
@@ -6,7 +6,7 @@ import (
 	"net/http"
 	"text/template"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/smartrtb/smartrtb.go b/adapters/smartrtb/smartrtb.go
index 9fe25ff0..53789cef 100644
--- a/adapters/smartrtb/smartrtb.go
+++ b/adapters/smartrtb/smartrtb.go
@@ -6,7 +6,7 @@ import (
 	"net/http"
 	"text/template"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/smartyads/smartyads.go b/adapters/smartyads/smartyads.go
index d25508b8..d4b68d39 100644
--- a/adapters/smartyads/smartyads.go
+++ b/adapters/smartyads/smartyads.go
@@ -7,7 +7,7 @@ import (
 	"strconv"
 	"text/template"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/smilewanted/smilewanted.go b/adapters/smilewanted/smilewanted.go
index 376389df..737e3854 100644
--- a/adapters/smilewanted/smilewanted.go
+++ b/adapters/smilewanted/smilewanted.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/sonobi/sonobi.go b/adapters/sonobi/sonobi.go
index 0ff71cdb..b6468310 100644
--- a/adapters/sonobi/sonobi.go
+++ b/adapters/sonobi/sonobi.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/sovrn/sovrn.go b/adapters/sovrn/sovrn.go
index 37ff6191..965aceb1 100644
--- a/adapters/sovrn/sovrn.go
+++ b/adapters/sovrn/sovrn.go
@@ -13,7 +13,7 @@ import (
 	"github.com/prebid/prebid-server/errortypes"
 	"github.com/prebid/prebid-server/openrtb_ext"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 )
 
 type SovrnAdapter struct {
diff --git a/adapters/stroeerCore/stroeercore.go b/adapters/stroeerCore/stroeercore.go
index 2f9f39ec..34307e5e 100644
--- a/adapters/stroeerCore/stroeercore.go
+++ b/adapters/stroeerCore/stroeercore.go
@@ -3,7 +3,7 @@ package stroeerCore
 import (
 	"encoding/json"
 	"fmt"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/synacormedia/synacormedia.go b/adapters/synacormedia/synacormedia.go
index c6a19bd0..d16bd35a 100644
--- a/adapters/synacormedia/synacormedia.go
+++ b/adapters/synacormedia/synacormedia.go
@@ -6,7 +6,7 @@ import (
 	"net/http"
 	"text/template"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/tappx/tappx.go b/adapters/tappx/tappx.go
index 0f80e5ab..aefeab08 100644
--- a/adapters/tappx/tappx.go
+++ b/adapters/tappx/tappx.go
@@ -10,7 +10,7 @@ import (
 	"text/template"
 	"time"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/telaria/telaria.go b/adapters/telaria/telaria.go
index d36312e5..2d1d9d89 100644
--- a/adapters/telaria/telaria.go
+++ b/adapters/telaria/telaria.go
@@ -6,7 +6,7 @@ import (
 	"net/http"
 	"strconv"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/trafficgate/trafficgate.go b/adapters/trafficgate/trafficgate.go
index 30ec08b0..a31611c4 100644
--- a/adapters/trafficgate/trafficgate.go
+++ b/adapters/trafficgate/trafficgate.go
@@ -6,7 +6,7 @@ import (
 	"net/http"
 	"text/template"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/triplelift/triplelift.go b/adapters/triplelift/triplelift.go
index 3cd651ce..1d93527c 100644
--- a/adapters/triplelift/triplelift.go
+++ b/adapters/triplelift/triplelift.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/triplelift_native/triplelift_native.go b/adapters/triplelift_native/triplelift_native.go
index d412def4..a0d86d40 100644
--- a/adapters/triplelift_native/triplelift_native.go
+++ b/adapters/triplelift_native/triplelift_native.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/ucfunnel/ucfunnel.go b/adapters/ucfunnel/ucfunnel.go
index 1d3efc04..b53fbe4b 100644
--- a/adapters/ucfunnel/ucfunnel.go
+++ b/adapters/ucfunnel/ucfunnel.go
@@ -6,7 +6,7 @@ import (
 	"net/http"
 	"net/url"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/unicorn/unicorn.go b/adapters/unicorn/unicorn.go
index 069604c7..834d9122 100644
--- a/adapters/unicorn/unicorn.go
+++ b/adapters/unicorn/unicorn.go
@@ -6,7 +6,7 @@ import (
 	"net/http"
 
 	"github.com/buger/jsonparser"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/unruly/unruly.go b/adapters/unruly/unruly.go
index 40b8fe66..fc8186ef 100644
--- a/adapters/unruly/unruly.go
+++ b/adapters/unruly/unruly.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/videobyte/videobyte.go b/adapters/videobyte/videobyte.go
index a4c0df61..2cd561c5 100644
--- a/adapters/videobyte/videobyte.go
+++ b/adapters/videobyte/videobyte.go
@@ -11,7 +11,7 @@ import (
 	"github.com/prebid/prebid-server/errortypes"
 	"github.com/prebid/prebid-server/openrtb_ext"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 )
 
 type adapter struct {
diff --git a/adapters/vidoomy/vidoomy.go b/adapters/vidoomy/vidoomy.go
index 57fbb09d..6221d30e 100644
--- a/adapters/vidoomy/vidoomy.go
+++ b/adapters/vidoomy/vidoomy.go
@@ -3,7 +3,7 @@ package vidoomy
 import (
 	"encoding/json"
 	"fmt"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/visx/visx.go b/adapters/visx/visx.go
index 3c55cd65..97ea7cbb 100644
--- a/adapters/visx/visx.go
+++ b/adapters/visx/visx.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/vrtcal/vrtcal.go b/adapters/vrtcal/vrtcal.go
index ce8392a3..6aaf7994 100644
--- a/adapters/vrtcal/vrtcal.go
+++ b/adapters/vrtcal/vrtcal.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/yahoossp/yahoossp.go b/adapters/yahoossp/yahoossp.go
index f0cc23bf..2951fb8e 100644
--- a/adapters/yahoossp/yahoossp.go
+++ b/adapters/yahoossp/yahoossp.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/yeahmobi/yeahmobi.go b/adapters/yeahmobi/yeahmobi.go
index 51c9a44d..95428e00 100644
--- a/adapters/yeahmobi/yeahmobi.go
+++ b/adapters/yeahmobi/yeahmobi.go
@@ -8,7 +8,7 @@ import (
 	"text/template"
 
 	"github.com/golang/glog"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/yieldlab/yieldlab.go b/adapters/yieldlab/yieldlab.go
index 1447aeaf..619fdf93 100644
--- a/adapters/yieldlab/yieldlab.go
+++ b/adapters/yieldlab/yieldlab.go
@@ -11,7 +11,7 @@ import (
 
 	"golang.org/x/text/currency"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/yieldmo/yieldmo.go b/adapters/yieldmo/yieldmo.go
index eaaa489d..427a638d 100644
--- a/adapters/yieldmo/yieldmo.go
+++ b/adapters/yieldmo/yieldmo.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/yieldone/yieldone.go b/adapters/yieldone/yieldone.go
index 4e22b144..406cd48c 100644
--- a/adapters/yieldone/yieldone.go
+++ b/adapters/yieldone/yieldone.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/zeroclickfraud/zeroclickfraud.go b/adapters/zeroclickfraud/zeroclickfraud.go
index 862fd173..b9edf132 100644
--- a/adapters/zeroclickfraud/zeroclickfraud.go
+++ b/adapters/zeroclickfraud/zeroclickfraud.go
@@ -7,7 +7,7 @@ import (
 	"strconv"
 	"text/template"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/amp/parse.go b/amp/parse.go
index 1ce19a76..478ce84f 100644
--- a/amp/parse.go
+++ b/amp/parse.go
@@ -6,7 +6,7 @@ import (
 	"strconv"
 	"strings"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 )
 
 // Params defines the parameters of an AMP request.
@@ -20,6 +20,7 @@ type Params struct {
 	Slot            string
 	StoredRequestID string
 	Timeout         *uint64
+	Targeting       string
 }
 
 // Size defines size information of an AMP request.
@@ -56,6 +57,7 @@ func ParseParams(httpRequest *http.Request) (Params, error) {
 		Slot:            query.Get("slot"),
 		StoredRequestID: tagID,
 		Timeout:         parseIntPtr(query.Get("timeout")),
+		Targeting:       query.Get("targeting"),
 	}
 	return params, nil
 }
diff --git a/analytics/core.go b/analytics/core.go
index c15ae201..0f752412 100644
--- a/analytics/core.go
+++ b/analytics/core.go
@@ -3,7 +3,7 @@ package analytics
 import (
 	"time"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/openrtb_ext"
 )
diff --git a/config/config.go b/config/config.go
index ef98498f..0733e6c9 100644
--- a/config/config.go
+++ b/config/config.go
@@ -10,10 +10,12 @@ import (
 	"time"
 
 	"github.com/golang/glog"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
+	"github.com/spf13/viper"
+
 	"github.com/prebid/go-gdpr/consentconstants"
 	"github.com/prebid/prebid-server/errortypes"
 	"github.com/prebid/prebid-server/openrtb_ext"
-	"github.com/spf13/viper"
 )
 
 // Configuration specifies the static application config.
@@ -91,8 +93,8 @@ type Configuration struct {
 	//When true, new bid id will be generated in seatbid[].bid[].ext.prebid.bidid and used in event urls instead
 	GenerateBidID bool `mapstructure:"generate_bid_id"`
 	// GenerateRequestID overrides the bidrequest.id in an AMP Request or an App Stored Request with a generated UUID if set to true. The default is false.
-	GenerateRequestID bool                                          `mapstructure:"generate_request_id"`
-	HostSChainNode    *openrtb_ext.ExtRequestPrebidSChainSChainNode `mapstructure:"host_schain_node"`
+	GenerateRequestID bool                      `mapstructure:"generate_request_id"`
+	HostSChainNode    *openrtb2.SupplyChainNode `mapstructure:"host_schain_node"`
 }
 
 const MIN_COOKIE_SIZE_BYTES = 500
@@ -920,8 +922,8 @@ func SetupViper(v *viper.Viper, filename string) {
 	v.SetDefault("adapters.adkerneladn.endpoint", "https://pbs2.adksrv.com/rtbpub?account={{.PublisherID}}")
 	v.SetDefault("adapters.adman.endpoint", "http://pub.admanmedia.com/?c=o&m=ortb")
 	v.SetDefault("adapters.admixer.endpoint", "http://inv-nets.admixer.net/pbs.aspx")
-	v.SetDefault("adapters.adocean.endpoint", "https://{{.Host}}")
 	v.SetDefault("adapters.adnuntius.endpoint", "https://ads.adnuntius.delivery/i")
+	v.SetDefault("adapters.adocean.endpoint", "https://{{.Host}}")
 	v.SetDefault("adapters.adoppler.endpoint", "http://{{.AccountID}}.trustedmarketplace.io/ads/processHeaderBid/{{.AdUnit}}")
 	v.SetDefault("adapters.adot.endpoint", "https://dsp.adotmob.com/headerbidding{PUBLISHER_PATH}/bidrequest")
 	v.SetDefault("adapters.adpone.endpoint", "http://rtb.adpone.com/bid-request?src=prebid_server")
@@ -967,45 +969,45 @@ func SetupViper(v *viper.Viper, filename string) {
 	v.SetDefault("adapters.decenterads.endpoint", "http://supply.decenterads.com/?c=o&m=rtb")
 	v.SetDefault("adapters.deepintent.endpoint", "https://prebid.deepintent.com/prebid")
 	v.SetDefault("adapters.dmx.endpoint", "https://dmx-direct.districtm.io/b/v2")
+	v.SetDefault("adapters.e_volution.endpoint", "http://service.e-volution.ai/pbserver")
 	v.SetDefault("adapters.emx_digital.endpoint", "https://hb.emxdgt.com")
 	v.SetDefault("adapters.engagebdr.endpoint", "http://dsp.bnmla.com/hb")
 	v.SetDefault("adapters.eplanning.endpoint", "http://rtb.e-planning.net/pbs/1")
-	v.SetDefault("adapters.epom.endpoint", "https://an.epom.com/ortb")
 	v.SetDefault("adapters.epom.disabled", true)
-	v.SetDefault("adapters.e_volution.endpoint", "http://service.e-volution.ai/pbserver")
+	v.SetDefault("adapters.epom.endpoint", "https://an.epom.com/ortb")
 	v.SetDefault("adapters.gamma.endpoint", "https://hb.gammaplatform.com/adx/request/")
 	v.SetDefault("adapters.gamoshi.endpoint", "https://rtb.gamoshi.io")
 	v.SetDefault("adapters.grid.endpoint", "https://grid.bidswitch.net/sp_bid?sp=prebid")
 	v.SetDefault("adapters.groupm.endpoint", "https://hbopenbid.pubmatic.com/translator?source=prebid-server")
 	v.SetDefault("adapters.gumgum.endpoint", "https://g2.gumgum.com/providers/prbds2s/bid")
-	v.SetDefault("adapters.huaweiads.endpoint", "https://acd.op.hicloud.com/ppsadx/getResult")
 	v.SetDefault("adapters.huaweiads.disabled", true)
+	v.SetDefault("adapters.huaweiads.endpoint", "https://acd.op.hicloud.com/ppsadx/getResult")
 	v.SetDefault("adapters.impactify.endpoint", "https://sonic.impactify.media/bidder")
 	v.SetDefault("adapters.improvedigital.endpoint", "http://ad.360yield.com/pbs")
+	v.SetDefault("adapters.infytv.endpoint", "https://nxs.infy.tv/pbs/openrtb")
 	v.SetDefault("adapters.inmobi.endpoint", "https://api.w.inmobi.com/showad/openrtb/bidder/prebid")
 	v.SetDefault("adapters.interactiveoffers.endpoint", "https://prebid-server.ioadx.com/bidRequest/?partnerId={{.AccountID}}")
+	v.SetDefault("adapters.invibes.endpoint", "https://{{.ZoneID}}.videostep.com/bid/ServerBidAdContent")
+	v.SetDefault("adapters.iqzone.endpoint", "http://smartssp-us-east.iqzone.com/pserver")
 	v.SetDefault("adapters.ix.disabled", true)
 	v.SetDefault("adapters.janet.endpoint", "http://ghb.bidder.jmgads.com/pbs/ortb")
 	v.SetDefault("adapters.jixie.endpoint", "https://hb.jixie.io/v2/hbsvrpost")
 	v.SetDefault("adapters.kargo.endpoint", "https://krk.kargo.com/api/v1/openrtb")
 	v.SetDefault("adapters.kayzen.endpoint", "https://bids-{{.ZoneID}}.bidder.kayzen.io/?exchange={{.AccountID}}")
-	v.SetDefault("adapters.krushmedia.endpoint", "http://ads4.krushmedia.com/?c=rtb&m=req&key={{.AccountID}}")
-	v.SetDefault("adapters.invibes.endpoint", "https://{{.ZoneID}}.videostep.com/bid/ServerBidAdContent")
-	v.SetDefault("adapters.iqzone.endpoint", "http://smartssp-us-east.iqzone.com/pserver")
 	v.SetDefault("adapters.kidoz.endpoint", "http://prebid-adapter.kidoz.net/openrtb2/auction?src=prebid-server")
+	v.SetDefault("adapters.krushmedia.endpoint", "http://ads4.krushmedia.com/?c=rtb&m=req&key={{.AccountID}}")
 	v.SetDefault("adapters.kubient.endpoint", "https://kssp.kbntx.ch/prebid")
 	v.SetDefault("adapters.lockerdome.endpoint", "https://lockerdome.com/ladbid/prebidserver/openrtb2")
 	v.SetDefault("adapters.logicad.endpoint", "https://pbs.ladsp.com/adrequest/prebidserver")
 	v.SetDefault("adapters.lunamedia.endpoint", "http://api.lunamedia.io/xp/get?pubid={{.PublisherID}}")
-	v.SetDefault("adapters.sa_lunamedia.endpoint", "http://balancer.lmgssp.com/pserver")
 	v.SetDefault("adapters.madvertise.endpoint", "https://mobile.mng-ads.com/bidrequest{{.ZoneID}}")
 	v.SetDefault("adapters.marsmedia.endpoint", "https://bid306.rtbsrv.com/bidder/?bid=f3xtet")
 	v.SetDefault("adapters.mediafuse.endpoint", "http://ib.adnxs.com/openrtb2")
 	v.SetDefault("adapters.medianet.endpoint", "https://prebid-adapter.media.net/rtb/pb/prebids2s")
 	v.SetDefault("adapters.medianet.extra_info", "https://medianet.golang.pbs.com")
 	v.SetDefault("adapters.mgid.endpoint", "https://prebid.mgid.com/prebid/")
-	v.SetDefault("adapters.mobilefuse.endpoint", "http://mfx.mobilefuse.com/openrtb?pub_id={{.PublisherID}}")
 	v.SetDefault("adapters.mobfoxpb.endpoint", "http://bes.mobfox.com/?c=__route__&m=__method__&key=__key__")
+	v.SetDefault("adapters.mobilefuse.endpoint", "http://mfx.mobilefuse.com/openrtb?pub_id={{.PublisherID}}")
 	v.SetDefault("adapters.nanointeractive.endpoint", "https://ad.audiencemanager.de/hbs")
 	v.SetDefault("adapters.nextmillennium.endpoint", "https://pbs.nextmillmedia.com/openrtb2/auction")
 	v.SetDefault("adapters.ninthdecimal.endpoint", "http://rtb.ninthdecimal.com/xp/get?pubid={{.PublisherID}}")
@@ -1029,6 +1031,7 @@ func SetupViper(v *viper.Viper, filename string) {
 	v.SetDefault("adapters.rtbhouse.endpoint", "http://prebidserver-s2s-ams.creativecdn.com/bidder/prebidserver/bids")
 	v.SetDefault("adapters.rubicon.disabled", true)
 	v.SetDefault("adapters.rubicon.endpoint", "http://exapi-us-east.rubiconproject.com/a/api/exchange.json")
+	v.SetDefault("adapters.sa_lunamedia.endpoint", "http://balancer.lmgssp.com/pserver")
 	v.SetDefault("adapters.sharethrough.endpoint", "https://btlr.sharethrough.com/universal/v1?supply_id=FGMrCMMc")
 	v.SetDefault("adapters.silvermob.endpoint", "http://{{.Host}}.silvermob.com/marketplace/api/dsp/bid/{{.ZoneID}}")
 	v.SetDefault("adapters.smaato.endpoint", "https://prebid.ad.smaato.net/oapi/prebid")
@@ -1038,7 +1041,7 @@ func SetupViper(v *viper.Viper, filename string) {
 	v.SetDefault("adapters.smartyads.endpoint", "http://{{.Host}}.smartyads.com/bid?rtb_seat_id={{.SourceId}}&secret_key={{.AccountID}}")
 	v.SetDefault("adapters.smilewanted.endpoint", "http://prebid-server.smilewanted.com")
 	v.SetDefault("adapters.sonobi.endpoint", "https://apex.go.sonobi.com/prebid?partnerid=71d9d3d8af")
-	v.SetDefault("adapters.sovrn.endpoint", "http://ap.lijit.com/rtb/bid?src=prebid_server")
+	v.SetDefault("adapters.sovrn.endpoint", "http://pbs.lijit.com/rtb/bid?src=prebid_server")
 	v.SetDefault("adapters.streamkey.endpoint", "http://ghb.hb.streamkey.net/pbs/ortb")
 	v.SetDefault("adapters.stroeercore.disabled", true)
 	v.SetDefault("adapters.stroeercore.endpoint", "http://mhb.adscale.de/s2sdsh")
@@ -1067,7 +1070,6 @@ func SetupViper(v *viper.Viper, filename string) {
 	v.SetDefault("adapters.yieldone.endpoint", "https://y.one.impact-ad.jp/hbs_imp")
 	v.SetDefault("adapters.yssp.disabled", true)
 	v.SetDefault("adapters.zeroclickfraud.endpoint", "http://{{.Host}}/openrtb2?sid={{.SourceId}}")
-	v.SetDefault("adapters.infytv.endpoint", "https://nxs.infy.tv/pbs/openrtb")
 
 	v.SetDefault("max_request_size", 1024*256)
 	v.SetDefault("analytics.file.filename", "")
diff --git a/endpoints/openrtb2/amp_auction.go b/endpoints/openrtb2/amp_auction.go
index a22d1200..c8e80682 100644
--- a/endpoints/openrtb2/amp_auction.go
+++ b/endpoints/openrtb2/amp_auction.go
@@ -6,6 +6,7 @@ import (
 	"encoding/json"
 	"errors"
 	"fmt"
+	jsonpatch "gopkg.in/evanphx/json-patch.v4"
 	"net/http"
 	"net/url"
 	"strings"
@@ -32,7 +33,7 @@ import (
 	"github.com/buger/jsonparser"
 	"github.com/golang/glog"
 	"github.com/julienschmidt/httprouter"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/util/uuidutil"
 )
 
@@ -453,6 +454,31 @@ func (deps *endpointDeps) overrideWithParams(ampParams amp.Params, req *openrtb2
 		req.TMax = int64(*ampParams.Timeout) - deps.cfg.AMPTimeoutAdjustment
 	}
 
+	if err := setTargeting(req, ampParams.Targeting); err != nil {
+		return []error{err}
+	}
+
+	return nil
+}
+
+// setTargeting merges "targeting" to imp[0].ext.data
+func setTargeting(req *openrtb2.BidRequest, targeting string) error {
+	if len(targeting) == 0 {
+		return nil
+	}
+
+	targetingData := exchange.WrapJSONInData([]byte(targeting))
+
+	if len(req.Imp[0].Ext) > 0 {
+		newImpExt, err := jsonpatch.MergePatch(req.Imp[0].Ext, targetingData)
+		if err != nil {
+			return fmt.Errorf("unable to merge imp.ext with targeting data, check targeting data is correct: %s", err.Error())
+		}
+		req.Imp[0].Ext = newImpExt
+		return nil
+	}
+
+	req.Imp[0].Ext = targetingData
 	return nil
 }
 
diff --git a/endpoints/openrtb2/auction.go b/endpoints/openrtb2/auction.go
index 645c2505..5250ac0d 100644
--- a/endpoints/openrtb2/auction.go
+++ b/endpoints/openrtb2/auction.go
@@ -17,9 +17,9 @@ import (
 	"github.com/gofrs/uuid"
 	"github.com/golang/glog"
 	"github.com/julienschmidt/httprouter"
-	"github.com/mxmCherry/openrtb/v15/native1"
-	nativeRequests "github.com/mxmCherry/openrtb/v15/native1/request"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/native1"
+	nativeRequests "github.com/mxmCherry/openrtb/v16/native1/request"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"golang.org/x/net/publicsuffix"
 	jsonpatch "gopkg.in/evanphx/json-patch.v4"
 
@@ -1382,17 +1382,13 @@ func (deps *endpointDeps) validateUser(req *openrtb_ext.RequestWrapper, aliases
 			}
 			uniqueSources[eid.Source] = struct{}{}
 
-			if eid.ID == "" && eid.Uids == nil {
-				return fmt.Errorf("request.user.ext.eids[%d] must contain either \"id\" or \"uids\" field", eidIndex)
+			if len(eid.UIDs) == 0 {
+				return fmt.Errorf("request.user.ext.eids[%d].uids must contain at least one element or be undefined", eidIndex)
 			}
-			if eid.ID == "" {
-				if len(eid.Uids) == 0 {
-					return fmt.Errorf("request.user.ext.eids[%d].uids must contain at least one element or be undefined", eidIndex)
-				}
-				for uidIndex, uid := range eid.Uids {
-					if uid.ID == "" {
-						return fmt.Errorf("request.user.ext.eids[%d].uids[%d] missing required field: \"id\"", eidIndex, uidIndex)
-					}
+
+			for uidIndex, uid := range eid.UIDs {
+				if uid.ID == "" {
+					return fmt.Errorf("request.user.ext.eids[%d].uids[%d] missing required field: \"id\"", eidIndex, uidIndex)
 				}
 			}
 		}
diff --git a/endpoints/openrtb2/interstitial.go b/endpoints/openrtb2/interstitial.go
index 4fd2a90c..a1cdd9fe 100644
--- a/endpoints/openrtb2/interstitial.go
+++ b/endpoints/openrtb2/interstitial.go
@@ -3,7 +3,7 @@ package openrtb2
 import (
 	"fmt"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
 	"github.com/prebid/prebid-server/openrtb_ext"
diff --git a/endpoints/openrtb2/sample-requests/invalid-whole/user-ext-eids-eids-uids-empty.json b/endpoints/openrtb2/sample-requests/invalid-whole/user-ext-eids-eids-uids-empty.json
deleted file mode 100644
index d1cd1eb5..00000000
--- a/endpoints/openrtb2/sample-requests/invalid-whole/user-ext-eids-eids-uids-empty.json
+++ /dev/null
@@ -1,55 +0,0 @@
-{
-  "description": "Bid request with empty uids array in user.ext.eids array element",
-  "mockBidRequest": {
-    "id": "b9c97a4b-cbc4-483d-b2c4-58a19ed5cfc5",
-    "site": {
-      "page": "prebid.org",
-      "publisher": {
-        "id": "a3de7af2-a86a-4043-a77b-c7e86744155e"
-      }
-    },
-    "source": {
-      "tid": "b9c97a4b-cbc4-483d-b2c4-58a19ed5cfc5"
-    },
-    "tmax": 1000,
-    "imp": [
-      {
-        "id": "/19968336/header-bid-tag-0",
-        "ext": {
-          "appnexus": {
-            "placementId": 12883451
-          }
-        },
-        "banner": {
-          "format": [
-            {
-              "w": 300,
-              "h": 250
-            },
-            {
-              "w": 300,
-              "h": 300
-            }
-          ]
-        }
-      }
-    ],
-    "regs": {
-      "ext": {
-        "gdpr": 1
-      }
-    },
-    "user": {
-      "ext": {
-        "eids": [
-          {
-            "source": "source1",
-            "uids": []
-          }
-        ]
-      }
-    }
-  },
-  "expectedReturnCode": 400,
-  "expectedErrorMessage": "Invalid request: request.user.ext.eids[0].uids must contain at least one element or be undefined\n"
-}
diff --git a/endpoints/openrtb2/sample-requests/invalid-whole/user-ext-eids-empty.json b/endpoints/openrtb2/sample-requests/invalid-whole/user-ext-eids-empty.json
index 98297739..0baf9895 100644
--- a/endpoints/openrtb2/sample-requests/invalid-whole/user-ext-eids-empty.json
+++ b/endpoints/openrtb2/sample-requests/invalid-whole/user-ext-eids-empty.json
@@ -1,44 +1,33 @@
 {
   "description": "Bid request with empty eids array in user.ext",
   "mockBidRequest": {
-    "id": "b9c97a4b-cbc4-483d-b2c4-58a19ed5cfc5",
+    "id": "anyRequestID",
     "site": {
       "page": "prebid.org",
       "publisher": {
-        "id": "a3de7af2-a86a-4043-a77b-c7e86744155e"
+        "id": "anyPublisher"
       }
     },
-    "source": {
-      "tid": "b9c97a4b-cbc4-483d-b2c4-58a19ed5cfc5"
-    },
-    "tmax": 1000,
-    "imp": [
-      {
-        "id": "/19968336/header-bid-tag-0",
-        "ext": {
-          "appnexus": {
-            "placementId": 12883451
-          }
-        },
-        "banner": {
-          "format": [
-            {
-              "w": 300,
-              "h": 250
-            },
-            {
-              "w": 300,
-              "h": 300
-            }
-          ]
-        }
-      }
-    ],
-    "regs": {
+    "imp": [{
+      "id": "anyImpID",
       "ext": {
-        "gdpr": 1
+        "appnexus": {
+          "placementId": 42
+        }
+      },
+      "banner": {
+        "format": [{
+            "w": 300,
+            "h": 250
+          },
+          {
+            "w": 300,
+            "h": 300
+          }
+        ]
       }
-    },
+    }],
+    "tmax": 1000,
     "user": {
       "ext": {
         "eids": []
@@ -47,4 +36,4 @@
   },
   "expectedReturnCode": 400,
   "expectedErrorMessage": "Invalid request: request.user.ext.eids must contain at least one element or be undefined\n"
-}
+}
\ No newline at end of file
diff --git a/endpoints/openrtb2/sample-requests/invalid-whole/user-ext-eids-source-duplicate.json b/endpoints/openrtb2/sample-requests/invalid-whole/user-ext-eids-source-duplicate.json
new file mode 100644
index 00000000..05cd7f34
--- /dev/null
+++ b/endpoints/openrtb2/sample-requests/invalid-whole/user-ext-eids-source-duplicate.json
@@ -0,0 +1,49 @@
+{
+  "description": "Bid request where more than one request.user.ext.eids array elements share the same source field value",
+  "mockBidRequest": {
+    "id": "anyRequestID",
+    "site": {
+      "page": "prebid.org",
+      "publisher": {
+        "id": "anyPublisher"
+      }
+    },
+    "imp": [{
+      "id": "anyImpID",
+      "ext": {
+        "appnexus": {
+          "placementId": 42
+        }
+      },
+      "banner": {
+        "format": [{
+            "w": 300,
+            "h": 250
+          },
+          {
+            "w": 300,
+            "h": 300
+          }
+        ]
+      }
+    }],
+    "tmax": 1000,
+    "user": {
+      "ext": {
+        "eids": [{
+          "source": "source1",
+          "uids": [{
+            "id": "A"
+          }]
+        }, {
+          "source": "source1",
+          "uids": [{
+            "id": "B"
+          }]
+        }]
+      }
+    }
+  },
+  "expectedReturnCode": 400,
+  "expectedErrorMessage": "Invalid request: request.user.ext.eids must contain unique sources\n"
+}
\ No newline at end of file
diff --git a/endpoints/openrtb2/sample-requests/invalid-whole/user-ext-eids-source-empty.json b/endpoints/openrtb2/sample-requests/invalid-whole/user-ext-eids-source-empty.json
index 06684b5e..3a451ecb 100644
--- a/endpoints/openrtb2/sample-requests/invalid-whole/user-ext-eids-source-empty.json
+++ b/endpoints/openrtb2/sample-requests/invalid-whole/user-ext-eids-source-empty.json
@@ -1,52 +1,43 @@
 {
   "description": "Bid request with user.ext.eids array element array element that does not contain source field",
   "mockBidRequest": {
-    "id": "b9c97a4b-cbc4-483d-b2c4-58a19ed5cfc5",
+    "id": "anyRequestID",
     "site": {
       "page": "prebid.org",
       "publisher": {
-        "id": "a3de7af2-a86a-4043-a77b-c7e86744155e"
+        "id": "anyPublisher"
       }
     },
-    "source": {
-      "tid": "b9c97a4b-cbc4-483d-b2c4-58a19ed5cfc5"
-    },
-    "tmax": 1000,
-    "imp": [
-      {
-        "id": "/19968336/header-bid-tag-0",
-        "ext": {
-          "appnexus": {
-            "placementId": 12883451
-          }
-        },
-        "banner": {
-          "format": [
-            {
-              "w": 300,
-              "h": 250
-            },
-            {
-              "w": 300,
-              "h": 300
-            }
-          ]
-        }
-      }
-    ],
-    "regs": {
+    "imp": [{
+      "id": "anyImpID",
       "ext": {
-        "gdpr": 1
+        "appnexus": {
+          "placementId": 42
+        }
+      },
+      "banner": {
+        "format": [{
+            "w": 300,
+            "h": 250
+          },
+          {
+            "w": 300,
+            "h": 300
+          }
+        ]
       }
-    },
+    }],
+    "tmax": 1000,
     "user": {
       "ext": {
-        "eids": [
-          {}
-        ]
+        "eids": [{
+          "uids": [{
+            "id": "A"
+          }]
+        }]
       }
     }
   },
   "expectedReturnCode": 400,
   "expectedErrorMessage": "Invalid request: request.user.ext.eids[0] missing required field: \"source\"\n"
-}
+}
\ No newline at end of file
diff --git a/endpoints/openrtb2/sample-requests/invalid-whole/user-ext-eids-source-unique.json b/endpoints/openrtb2/sample-requests/invalid-whole/user-ext-eids-source-unique.json
deleted file mode 100644
index 5a6548c3..00000000
--- a/endpoints/openrtb2/sample-requests/invalid-whole/user-ext-eids-source-unique.json
+++ /dev/null
@@ -1,59 +0,0 @@
-{
-  "description": "Bid request where more than one request.user.ext.eids array elements share the same source field value",
-  "mockBidRequest": {
-    "id": "b9c97a4b-cbc4-483d-b2c4-58a19ed5cfc5",
-    "site": {
-      "page": "prebid.org",
-      "publisher": {
-        "id": "a3de7af2-a86a-4043-a77b-c7e86744155e"
-      }
-    },
-    "source": {
-      "tid": "b9c97a4b-cbc4-483d-b2c4-58a19ed5cfc5"
-    },
-    "tmax": 1000,
-    "imp": [
-      {
-        "id": "/19968336/header-bid-tag-0",
-        "ext": {
-          "appnexus": {
-            "placementId": 12883451
-          }
-        },
-        "banner": {
-          "format": [
-            {
-              "w": 300,
-              "h": 250
-            },
-            {
-              "w": 300,
-              "h": 300
-            }
-          ]
-        }
-      }
-    ],
-    "regs": {
-      "ext": {
-        "gdpr": 1
-      }
-    },
-    "user": {
-      "ext": {
-        "eids": [
-          {
-            "source": "source1",
-            "id": "id1"
-          },
-          {
-            "source": "source1",
-            "id": "id2"
-          }
-        ]
-      }
-    }
-  },
-  "expectedReturnCode": 400,
-  "expectedErrorMessage": "Invalid request: request.user.ext.eids must contain unique sources\n"
-}
diff --git a/endpoints/openrtb2/sample-requests/invalid-whole/user-ext-eids-uids-id-empty.json b/endpoints/openrtb2/sample-requests/invalid-whole/user-ext-eids-uids-id-empty.json
index faa09f93..910e9650 100644
--- a/endpoints/openrtb2/sample-requests/invalid-whole/user-ext-eids-uids-id-empty.json
+++ b/endpoints/openrtb2/sample-requests/invalid-whole/user-ext-eids-uids-id-empty.json
@@ -1,57 +1,42 @@
 {
   "description": "Bid request where a request.user.ext.eids.uids array element is missing its id field",
   "mockBidRequest": {
-    "id": "b9c97a4b-cbc4-483d-b2c4-58a19ed5cfc5",
+    "id": "anyRequestID",
     "site": {
       "page": "prebid.org",
       "publisher": {
-        "id": "a3de7af2-a86a-4043-a77b-c7e86744155e"
+        "id": "anyPublisher"
       }
     },
-    "source": {
-      "tid": "b9c97a4b-cbc4-483d-b2c4-58a19ed5cfc5"
-    },
-    "tmax": 1000,
-    "imp": [
-      {
-        "id": "/19968336/header-bid-tag-0",
-        "ext": {
-          "appnexus": {
-            "placementId": 12883451
-          }
-        },
-        "banner": {
-          "format": [
-            {
-              "w": 300,
-              "h": 250
-            },
-            {
-              "w": 300,
-              "h": 300
-            }
-          ]
-        }
-      }
-    ],
-    "regs": {
-      "ext": {
-        "gdpr": 1
-      }
-    },
-    "user": {
+    "imp": [{
+      "id": "anyImpID",
       "ext": {
-        "eids": [
+        "appnexus": {
+          "placementId": 42
+        }
+      },
+      "banner": {
+        "format": [{
+            "w": 300,
+            "h": 250
+          },
           {
-            "source": "source1",
-            "uids": [
-              {}
-            ]
+            "w": 300,
+            "h": 300
           }
         ]
       }
+    }],
+    "tmax": 1000,
+    "user": {
+      "ext": {
+        "eids": [{
+          "source": "source1",
+          "uids": [{}]
+        }]
+      }
     }
   },
   "expectedReturnCode": 400,
   "expectedErrorMessage": "Invalid request: request.user.ext.eids[0].uids[0] missing required field: \"id\"\n"
-}
+}
\ No newline at end of file
diff --git a/endpoints/openrtb2/sample-requests/invalid-whole/user-ext-eids-id-uids-empty.json b/endpoints/openrtb2/sample-requests/invalid-whole/user-ext-eids-uids-missing.json
similarity index 53%
rename from endpoints/openrtb2/sample-requests/invalid-whole/user-ext-eids-id-uids-empty.json
rename to endpoints/openrtb2/sample-requests/invalid-whole/user-ext-eids-uids-missing.json
index 09ad4eeb..eed386b4 100644
--- a/endpoints/openrtb2/sample-requests/invalid-whole/user-ext-eids-id-uids-empty.json
+++ b/endpoints/openrtb2/sample-requests/invalid-whole/user-ext-eids-uids-missing.json
@@ -1,5 +1,5 @@
 {
-  "description": "Bid request with user.ext.eids array element array element that does not contain an id nor uids",
+  "description": "Bid request with user.ext.eids array element array element that does not contain uids",
   "mockBidRequest": {
     "id": "b9c97a4b-cbc4-483d-b2c4-58a19ed5cfc5",
     "site": {
@@ -12,28 +12,25 @@
       "tid": "b9c97a4b-cbc4-483d-b2c4-58a19ed5cfc5"
     },
     "tmax": 1000,
-    "imp": [
-      {
-        "id": "/19968336/header-bid-tag-0",
-        "ext": {
-          "appnexus": {
-            "placementId": 12883451
-          }
-        },
-        "banner": {
-          "format": [
-            {
-              "w": 300,
-              "h": 250
-            },
-            {
-              "w": 300,
-              "h": 300
-            }
-          ]
+    "imp": [{
+      "id": "/19968336/header-bid-tag-0",
+      "ext": {
+        "appnexus": {
+          "placementId": 12883451
         }
+      },
+      "banner": {
+        "format": [{
+            "w": 300,
+            "h": 250
+          },
+          {
+            "w": 300,
+            "h": 300
+          }
+        ]
       }
-    ],
+    }],
     "regs": {
       "ext": {
         "gdpr": 1
@@ -41,14 +38,12 @@
     },
     "user": {
       "ext": {
-        "eids": [
-          {
-            "source": "source1"
-          }
-        ]
+        "eids": [{
+          "source": "source1"
+        }]
       }
     }
   },
   "expectedReturnCode": 400,
-  "expectedErrorMessage": "Invalid request: request.user.ext.eids[0] must contain either \"id\" or \"uids\" field\n"
-}
+  "expectedErrorMessage": "Invalid request: request.user.ext.eids[0].uids must contain at least one element or be undefined\n"
+}
\ No newline at end of file
diff --git a/endpoints/openrtb2/video_auction.go b/endpoints/openrtb2/video_auction.go
index a7cf02cb..e35a76e7 100644
--- a/endpoints/openrtb2/video_auction.go
+++ b/endpoints/openrtb2/video_auction.go
@@ -18,7 +18,7 @@ import (
 	"github.com/gofrs/uuid"
 	"github.com/golang/glog"
 	"github.com/julienschmidt/httprouter"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	jsonpatch "gopkg.in/evanphx/json-patch.v4"
 
 	accountService "github.com/prebid/prebid-server/account"
diff --git a/exchange/adapter_builders.go b/exchange/adapter_builders.go
index 6e51b3bb..ed1ac43e 100755
--- a/exchange/adapter_builders.go
+++ b/exchange/adapter_builders.go
@@ -163,8 +163,8 @@ func newAdapterBuilders() map[openrtb_ext.BidderName]adapters.Builder {
 		openrtb_ext.BidderAdnuntius:         adnuntius.Builder,
 		openrtb_ext.BidderAdOcean:           adocean.Builder,
 		openrtb_ext.BidderAdoppler:          adoppler.Builder,
-		openrtb_ext.BidderAdpone:            adpone.Builder,
 		openrtb_ext.BidderAdot:              adot.Builder,
+		openrtb_ext.BidderAdpone:            adpone.Builder,
 		openrtb_ext.BidderAdprime:           adprime.Builder,
 		openrtb_ext.BidderAdtarget:          adtarget.Builder,
 		openrtb_ext.BidderAdtelligent:       adtelligent.Builder,
@@ -217,6 +217,7 @@ func newAdapterBuilders() map[openrtb_ext.BidderName]adapters.Builder {
 		openrtb_ext.BidderHuaweiAds:         huaweiads.Builder,
 		openrtb_ext.BidderImpactify:         impactify.Builder,
 		openrtb_ext.BidderImprovedigital:    improvedigital.Builder,
+		openrtb_ext.BidderInfyTV:            infytv.Builder,
 		openrtb_ext.BidderInMobi:            inmobi.Builder,
 		openrtb_ext.BidderInteractiveoffers: interactiveoffers.Builder,
 		openrtb_ext.BidderInvibes:           invibes.Builder,
@@ -232,7 +233,6 @@ func newAdapterBuilders() map[openrtb_ext.BidderName]adapters.Builder {
 		openrtb_ext.BidderLockerDome:        lockerdome.Builder,
 		openrtb_ext.BidderLogicad:           logicad.Builder,
 		openrtb_ext.BidderLunaMedia:         lunamedia.Builder,
-		openrtb_ext.BidderSaLunaMedia:       salunamedia.Builder,
 		openrtb_ext.BidderMadvertise:        madvertise.Builder,
 		openrtb_ext.BidderMarsmedia:         marsmedia.Builder,
 		openrtb_ext.BidderMediafuse:         appnexus.Builder,
@@ -261,6 +261,7 @@ func newAdapterBuilders() map[openrtb_ext.BidderName]adapters.Builder {
 		openrtb_ext.BidderRichaudience:      richaudience.Builder,
 		openrtb_ext.BidderRTBHouse:          rtbhouse.Builder,
 		openrtb_ext.BidderRubicon:           rubicon.Builder,
+		openrtb_ext.BidderSaLunaMedia:       salunamedia.Builder,
 		openrtb_ext.BidderSharethrough:      sharethrough.Builder,
 		openrtb_ext.BidderSilverMob:         silvermob.Builder,
 		openrtb_ext.BidderSmaato:            smaato.Builder,
@@ -271,8 +272,8 @@ func newAdapterBuilders() map[openrtb_ext.BidderName]adapters.Builder {
 		openrtb_ext.BidderSmileWanted:       smilewanted.Builder,
 		openrtb_ext.BidderSonobi:            sonobi.Builder,
 		openrtb_ext.BidderSovrn:             sovrn.Builder,
-		openrtb_ext.BidderStroeerCore:       stroeerCore.Builder,
 		openrtb_ext.BidderStreamkey:         adtelligent.Builder,
+		openrtb_ext.BidderStroeerCore:       stroeerCore.Builder,
 		openrtb_ext.BidderSynacormedia:      synacormedia.Builder,
 		openrtb_ext.BidderTappx:             tappx.Builder,
 		openrtb_ext.BidderTelaria:           telaria.Builder,
@@ -297,6 +298,5 @@ func newAdapterBuilders() map[openrtb_ext.BidderName]adapters.Builder {
 		openrtb_ext.BidderYieldone:          yieldone.Builder,
 		openrtb_ext.BidderYSSP:              yahoossp.Builder,
 		openrtb_ext.BidderZeroClickFraud:    zeroclickfraud.Builder,
-		openrtb_ext.BidderInfyTV:            infytv.Builder,
 	}
 }
diff --git a/exchange/auction.go b/exchange/auction.go
index c8aff684..0719ae95 100644
--- a/exchange/auction.go
+++ b/exchange/auction.go
@@ -11,7 +11,7 @@ import (
 	"time"
 
 	uuid "github.com/gofrs/uuid"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/openrtb_ext"
 	"github.com/prebid/prebid-server/prebid_cache_client"
diff --git a/exchange/bidder.go b/exchange/bidder.go
index 2f673d2e..d6ece01c 100644
--- a/exchange/bidder.go
+++ b/exchange/bidder.go
@@ -18,9 +18,9 @@ import (
 	"github.com/prebid/prebid-server/currency"
 	"github.com/prebid/prebid-server/version"
 
-	nativeRequests "github.com/mxmCherry/openrtb/v15/native1/request"
-	nativeResponse "github.com/mxmCherry/openrtb/v15/native1/response"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	nativeRequests "github.com/mxmCherry/openrtb/v16/native1/request"
+	nativeResponse "github.com/mxmCherry/openrtb/v16/native1/response"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/exchange/bidder_validate_bids.go b/exchange/bidder_validate_bids.go
index cc312976..eec34964 100644
--- a/exchange/bidder_validate_bids.go
+++ b/exchange/bidder_validate_bids.go
@@ -6,7 +6,7 @@ import (
 	"fmt"
 	"strings"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/currency"
diff --git a/exchange/exchange.go b/exchange/exchange.go
index 96e6a40f..07e8aa11 100644
--- a/exchange/exchange.go
+++ b/exchange/exchange.go
@@ -31,7 +31,8 @@ import (
 	"github.com/buger/jsonparser"
 	"github.com/gofrs/uuid"
 	"github.com/golang/glog"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb3"
 )
 
 type extCacheInstructions struct {
@@ -65,7 +66,7 @@ type exchange struct {
 	privacyConfig     config.Privacy
 	categoriesFetcher stored_requests.CategoryFetcher
 	bidIDGenerator    BidIDGenerator
-	hostSChainNode    *openrtb_ext.ExtRequestPrebidSChainSChainNode
+	hostSChainNode    *openrtb2.SupplyChainNode
 }
 
 // Container to pass out response ext data from the GetAllBids goroutines back into the main thread
@@ -668,7 +669,7 @@ func (e *exchange) buildBidResponse(ctx context.Context, liveAdapters []openrtb_
 	bidResponse.ID = bidRequest.ID
 	if len(liveAdapters) == 0 {
 		// signal "Invalid Request" if no valid bidders.
-		bidResponse.NBR = openrtb2.NoBidReasonCode.Ptr(openrtb2.NoBidReasonCodeInvalidRequest)
+		bidResponse.NBR = openrtb3.NoBidInvalidRequest.Ptr()
 	}
 
 	// Create the SeatBids. We use a zero sized slice so that we can append non-zero seat bids, and not include seatBid
diff --git a/exchange/gdpr.go b/exchange/gdpr.go
index 208ce0fd..6d265f5f 100644
--- a/exchange/gdpr.go
+++ b/exchange/gdpr.go
@@ -3,7 +3,7 @@ package exchange
 import (
 	"encoding/json"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/gdpr"
 )
 
diff --git a/exchange/targeting.go b/exchange/targeting.go
index 0113d932..67cb534d 100644
--- a/exchange/targeting.go
+++ b/exchange/targeting.go
@@ -3,7 +3,7 @@ package exchange
 import (
 	"strconv"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/openrtb_ext"
 )
 
diff --git a/exchange/utils.go b/exchange/utils.go
index 3ce053e5..62fa210e 100644
--- a/exchange/utils.go
+++ b/exchange/utils.go
@@ -9,7 +9,7 @@ import (
 	"github.com/prebid/prebid-server/stored_responses"
 
 	"github.com/buger/jsonparser"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/go-gdpr/vendorconsent"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
@@ -46,7 +46,7 @@ func cleanOpenRTBRequests(ctx context.Context,
 	privacyConfig config.Privacy,
 	gdprPermsBuilder gdpr.PermissionsBuilder,
 	tcf2ConfigBuilder gdpr.TCF2ConfigBuilder,
-	hostSChainNode *openrtb_ext.ExtRequestPrebidSChainSChainNode,
+	hostSChainNode *openrtb2.SupplyChainNode,
 ) (allowedBidderRequests []BidderRequest, privacyLabels metrics.PrivacyLabels, errs []error) {
 
 	req := auctionReq.BidRequestWrapper
@@ -208,7 +208,7 @@ func getAuctionBidderRequests(auctionRequest AuctionRequest,
 	bidderToSyncerKey map[string]string,
 	impsByBidder map[string][]openrtb2.Imp,
 	aliases map[string]string,
-	hostSChainNode *openrtb_ext.ExtRequestPrebidSChainSChainNode) ([]BidderRequest, []error) {
+	hostSChainNode *openrtb2.SupplyChainNode) ([]BidderRequest, []error) {
 
 	bidderRequests := make([]BidderRequest, 0, len(impsByBidder))
 	req := auctionRequest.BidRequestWrapper
@@ -517,7 +517,7 @@ func removeUnpermissionedEids(request *openrtb2.BidRequest, bidder string, reque
 		return nil
 	}
 
-	var eids []openrtb_ext.ExtUserEid
+	var eids []openrtb2.EID
 	if err := json.Unmarshal(eidsJSON, &eids); err != nil {
 		return err
 	}
@@ -533,7 +533,7 @@ func removeUnpermissionedEids(request *openrtb2.BidRequest, bidder string, reque
 		eidRules[p.Source] = p.Bidders
 	}
 
-	eidsAllowed := make([]openrtb_ext.ExtUserEid, 0, len(eids))
+	eidsAllowed := make([]openrtb2.EID, 0, len(eids))
 	for _, eid := range eids {
 		allowed := false
 		if rule, hasRule := eidRules[eid.Source]; hasRule {
@@ -805,3 +805,11 @@ func mergeBidderRequests(allBidderRequests []BidderRequest, bidderNameToBidderRe
 	}
 	return allBidderRequests
 }
+
+func WrapJSONInData(data []byte) []byte {
+	res := make([]byte, 0, len(data))
+	res = append(res, []byte(`{"data":`)...)
+	res = append(res, data...)
+	res = append(res, []byte(`}`)...)
+	return res
+}
diff --git a/firstpartydata/first_party_data.go b/firstpartydata/first_party_data.go
index a3abf543..64997d70 100644
--- a/firstpartydata/first_party_data.go
+++ b/firstpartydata/first_party_data.go
@@ -3,7 +3,8 @@ package firstpartydata
 import (
 	"encoding/json"
 	"fmt"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	jsonpatch "gopkg.in/evanphx/json-patch.v4"
 
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/go.mod b/go.mod
index cdb94928..67578244 100644
--- a/go.mod
+++ b/go.mod
@@ -16,7 +16,8 @@ require (
 	github.com/julienschmidt/httprouter v1.3.0
 	github.com/lib/pq v1.10.4
 	github.com/mitchellh/copystructure v1.2.0
-	github.com/mxmCherry/openrtb/v15 v15.0.1
+	github.com/mxmCherry/openrtb v13.0.0+incompatible
+	github.com/mxmCherry/openrtb/v16 v16.0.0-alpha.2
 	github.com/prebid/go-gdpr v1.11.0
 	github.com/prometheus/client_golang v1.12.1
 	github.com/prometheus/client_model v0.2.0
diff --git a/go.sum b/go.sum
index f2736017..a4e68c54 100644
--- a/go.sum
+++ b/go.sum
@@ -337,8 +337,10 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb
 github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
 github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
 github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
-github.com/mxmCherry/openrtb/v15 v15.0.1 h1:RnMj/n8Sv0wqaiWQCbmUwzeO6T4Bk3d9RokKvla1CDc=
-github.com/mxmCherry/openrtb/v15 v15.0.1/go.mod h1:TVgncsz6MOzbL7lhun1lNuUBzVBlVDbxf9Fyy1TyhZA=
+github.com/mxmCherry/openrtb v13.0.0+incompatible h1:KEnUHAJFovM54lcicyjiJgZZ4mWKNw+h0GOJXWOoJ4A=
+github.com/mxmCherry/openrtb v13.0.0+incompatible/go.mod h1:zpnz6Au3bzTGplpRU0kvFPNT6g4ROAKx/GkrslFDwZk=
+github.com/mxmCherry/openrtb/v16 v16.0.0-alpha.2 h1:Iwp8+KHfzDIhaKFynJ4xVstU1LTVLzG+Unur5d0CeWo=
+github.com/mxmCherry/openrtb/v16 v16.0.0-alpha.2/go.mod h1:k+21QiTXLLjjXCroputuQNIDJC2GtrzFcHbJbDz4RcE=
 github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
 github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
 github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
diff --git a/openrtb_ext/bid_request_video.go b/openrtb_ext/bid_request_video.go
index 29e62da3..714d62cc 100644
--- a/openrtb_ext/bid_request_video.go
+++ b/openrtb_ext/bid_request_video.go
@@ -1,6 +1,6 @@
 package openrtb_ext
 
-import "github.com/mxmCherry/openrtb/v15/openrtb2"
+import "github.com/mxmCherry/openrtb/v16/openrtb2"
 
 type BidRequestVideo struct {
 	// Attribute:
diff --git a/openrtb_ext/bidders.go b/openrtb_ext/bidders.go
index 9eaa81ca..a9830d27 100644
--- a/openrtb_ext/bidders.go
+++ b/openrtb_ext/bidders.go
@@ -134,9 +134,9 @@ const (
 	BidderCpmstar           BidderName = "cpmstar"
 	BidderCriteo            BidderName = "criteo"
 	BidderDatablocks        BidderName = "datablocks"
-	BidderDmx               BidderName = "dmx"
 	BidderDecenterAds       BidderName = "decenterads"
 	BidderDeepintent        BidderName = "deepintent"
+	BidderDmx               BidderName = "dmx"
 	BidderEmxDigital        BidderName = "emx_digital"
 	BidderEngageBDR         BidderName = "engagebdr"
 	BidderEPlanning         BidderName = "eplanning"
@@ -150,6 +150,7 @@ const (
 	BidderHuaweiAds         BidderName = "huaweiads"
 	BidderImpactify         BidderName = "impactify"
 	BidderImprovedigital    BidderName = "improvedigital"
+	BidderInfyTV            BidderName = "infytv"
 	BidderInMobi            BidderName = "inmobi"
 	BidderInteractiveoffers BidderName = "interactiveoffers"
 	BidderInvibes           BidderName = "invibes"
@@ -165,14 +166,13 @@ const (
 	BidderLockerDome        BidderName = "lockerdome"
 	BidderLogicad           BidderName = "logicad"
 	BidderLunaMedia         BidderName = "lunamedia"
-	BidderSaLunaMedia       BidderName = "sa_lunamedia"
 	BidderMadvertise        BidderName = "madvertise"
 	BidderMarsmedia         BidderName = "marsmedia"
 	BidderMediafuse         BidderName = "mediafuse"
+	BidderMedianet          BidderName = "medianet"
 	BidderMgid              BidderName = "mgid"
 	BidderMobfoxpb          BidderName = "mobfoxpb"
 	BidderMobileFuse        BidderName = "mobilefuse"
-	BidderMedianet          BidderName = "medianet"
 	BidderNanoInteractive   BidderName = "nanointeractive"
 	BidderNextMillennium    BidderName = "nextmillennium"
 	BidderNinthDecimal      BidderName = "ninthdecimal"
@@ -194,6 +194,7 @@ const (
 	BidderRichaudience      BidderName = "richaudience"
 	BidderRTBHouse          BidderName = "rtbhouse"
 	BidderRubicon           BidderName = "rubicon"
+	BidderSaLunaMedia       BidderName = "sa_lunamedia"
 	BidderSharethrough      BidderName = "sharethrough"
 	BidderSilverMob         BidderName = "silvermob"
 	BidderSmaato            BidderName = "smaato"
@@ -220,8 +221,8 @@ const (
 	BidderVerizonMedia      BidderName = "verizonmedia"
 	BidderVideoByte         BidderName = "videobyte"
 	BidderVidoomy           BidderName = "vidoomy"
-	BidderVisx              BidderName = "visx"
 	BidderViewdeos          BidderName = "viewdeos"
+	BidderVisx              BidderName = "visx"
 	BidderVrtcal            BidderName = "vrtcal"
 	BidderYahooSSP          BidderName = "yahoossp"
 	BidderYeahmobi          BidderName = "yeahmobi"
@@ -230,7 +231,6 @@ const (
 	BidderYieldone          BidderName = "yieldone"
 	BidderYSSP              BidderName = "yssp"
 	BidderZeroClickFraud    BidderName = "zeroclickfraud"
-	BidderInfyTV            BidderName = "infytv"
 )
 
 // CoreBidderNames returns a slice of all core bidders.
@@ -305,6 +305,7 @@ func CoreBidderNames() []BidderName {
 		BidderHuaweiAds,
 		BidderImpactify,
 		BidderImprovedigital,
+		BidderInfyTV,
 		BidderInMobi,
 		BidderInteractiveoffers,
 		BidderInvibes,
@@ -320,7 +321,6 @@ func CoreBidderNames() []BidderName {
 		BidderLockerDome,
 		BidderLogicad,
 		BidderLunaMedia,
-		BidderSaLunaMedia,
 		BidderMadvertise,
 		BidderMarsmedia,
 		BidderMediafuse,
@@ -338,8 +338,8 @@ func CoreBidderNames() []BidderName {
 		BidderOperaads,
 		BidderOrbidder,
 		BidderOutbrain,
-		BidderPGAM,
 		BidderPangle,
+		BidderPGAM,
 		BidderPubmatic,
 		BidderPubnative,
 		BidderPulsepoint,
@@ -349,6 +349,7 @@ func CoreBidderNames() []BidderName {
 		BidderRichaudience,
 		BidderRTBHouse,
 		BidderRubicon,
+		BidderSaLunaMedia,
 		BidderSharethrough,
 		BidderSilverMob,
 		BidderSmaato,
@@ -385,7 +386,6 @@ func CoreBidderNames() []BidderName {
 		BidderYieldone,
 		BidderYSSP,
 		BidderZeroClickFraud,
-		BidderInfyTV,
 	}
 }
 
diff --git a/openrtb_ext/deal_tier.go b/openrtb_ext/deal_tier.go
index 8aeedb81..d5fe279f 100644
--- a/openrtb_ext/deal_tier.go
+++ b/openrtb_ext/deal_tier.go
@@ -3,7 +3,7 @@ package openrtb_ext
 import (
 	"encoding/json"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 )
 
 // DealTier defines the configuration of a deal tier.
diff --git a/openrtb_ext/device.go b/openrtb_ext/device.go
index 1e860556..8c5b3673 100644
--- a/openrtb_ext/device.go
+++ b/openrtb_ext/device.go
@@ -70,7 +70,7 @@ type ExtDevicePrebid struct {
 
 // ExtDeviceInt defines the contract for bidrequest.device.ext.prebid.interstitial
 type ExtDeviceInt struct {
-	MinWidthPerc  int64 `json:"minwidtheperc"`
+	MinWidthPerc  int64 `json:"minwidthperc"`
 	MinHeightPerc int64 `json:"minheightperc"`
 }
 
diff --git a/openrtb_ext/request.go b/openrtb_ext/request.go
index 33d168f6..04340438 100644
--- a/openrtb_ext/request.go
+++ b/openrtb_ext/request.go
@@ -3,6 +3,8 @@ package openrtb_ext
 import (
 	"encoding/json"
 	"errors"
+
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 )
 
 // FirstPartyDataExtKey defines a field name within request.ext and request.imp.ext reserved for first party data.
@@ -27,8 +29,8 @@ const MaxDecimalFigures int = 15
 
 // ExtRequest defines the contract for bidrequest.ext
 type ExtRequest struct {
-	Prebid ExtRequestPrebid              `json:"prebid"`
-	SChain *ExtRequestPrebidSChainSChain `json:"schain,omitempty"`
+	Prebid ExtRequestPrebid      `json:"prebid"`
+	SChain *openrtb2.SupplyChain `json:"schain,omitempty"`
 }
 
 // ExtRequestPrebid defines the contract for bidrequest.ext.prebid
@@ -79,27 +81,8 @@ type ExtRequestCurrency struct {
 
 // ExtRequestPrebid defines the contract for bidrequest.ext.prebid.schains
 type ExtRequestPrebidSChain struct {
-	Bidders []string                     `json:"bidders,omitempty"`
-	SChain  ExtRequestPrebidSChainSChain `json:"schain"`
-}
-
-// ExtRequestPrebidSChainSChain defines the contract for bidrequest.ext.prebid.schains[i].schain
-type ExtRequestPrebidSChainSChain struct {
-	Complete int                                 `json:"complete"`
-	Nodes    []*ExtRequestPrebidSChainSChainNode `json:"nodes"`
-	Ver      string                              `json:"ver"`
-	Ext      json.RawMessage                     `json:"ext,omitempty"`
-}
-
-// ExtRequestPrebidSChainSChainNode defines the contract for bidrequest.ext.prebid.schains[i].schain[i].nodes
-type ExtRequestPrebidSChainSChainNode struct {
-	ASI    string          `json:"asi"`
-	SID    string          `json:"sid"`
-	RID    string          `json:"rid,omitempty"`
-	Name   string          `json:"name,omitempty"`
-	Domain string          `json:"domain,omitempty"`
-	HP     int             `json:"hp"`
-	Ext    json.RawMessage `json:"ext,omitempty"`
+	Bidders []string             `json:"bidders,omitempty"`
+	SChain  openrtb2.SupplyChain `json:"schain"`
 }
 
 // ExtRequestPrebidChannel defines the contract for bidrequest.ext.prebid.channel
diff --git a/openrtb_ext/request_wrapper.go b/openrtb_ext/request_wrapper.go
index dfc2a41f..8d2d2c72 100644
--- a/openrtb_ext/request_wrapper.go
+++ b/openrtb_ext/request_wrapper.go
@@ -4,7 +4,7 @@ import (
 	"encoding/json"
 	"errors"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 )
 
 // RequestWrapper wraps the OpenRTB request to provide a storage location for unmarshalled ext fields, so they
@@ -255,7 +255,7 @@ type UserExt struct {
 	consentDirty bool
 	prebid       *ExtUserPrebid
 	prebidDirty  bool
-	eids         *[]ExtUserEid
+	eids         *[]openrtb2.EID
 	eidsDirty    bool
 }
 
@@ -289,7 +289,7 @@ func (ue *UserExt) unmarshal(extJson json.RawMessage) error {
 
 	eidsJson, hasEids := ue.ext["eids"]
 	if hasEids {
-		ue.eids = &[]ExtUserEid{}
+		ue.eids = &[]openrtb2.EID{}
 		if err := json.Unmarshal(eidsJson, ue.eids); err != nil {
 			return err
 		}
@@ -389,7 +389,7 @@ func (ue *UserExt) SetPrebid(prebid *ExtUserPrebid) {
 	ue.prebidDirty = true
 }
 
-func (ue *UserExt) GetEid() *[]ExtUserEid {
+func (ue *UserExt) GetEid() *[]openrtb2.EID {
 	if ue.eids == nil {
 		return nil
 	}
@@ -397,7 +397,7 @@ func (ue *UserExt) GetEid() *[]ExtUserEid {
 	return &eids
 }
 
-func (ue *UserExt) SetEid(eid *[]ExtUserEid) {
+func (ue *UserExt) SetEid(eid *[]openrtb2.EID) {
 	ue.eids = eid
 	ue.eidsDirty = true
 }
@@ -411,7 +411,7 @@ type RequestExt struct {
 	extDirty    bool
 	prebid      *ExtRequestPrebid
 	prebidDirty bool
-	schain      *ExtRequestPrebidSChainSChain // ORTB 2.4 location
+	schain      *openrtb2.SupplyChain // ORTB 2.4 location
 	schainDirty bool
 }
 
@@ -434,7 +434,7 @@ func (re *RequestExt) unmarshal(extJson json.RawMessage) error {
 	}
 	schainJson, hasSChain := re.ext["schain"]
 	if hasSChain {
-		re.schain = &ExtRequestPrebidSChainSChain{}
+		re.schain = &openrtb2.SupplyChain{}
 		err = json.Unmarshal(schainJson, re.schain)
 	}
 
@@ -511,7 +511,7 @@ func (re *RequestExt) SetPrebid(prebid *ExtRequestPrebid) {
 // These schain methods on the request.ext are only for ORTB 2.4 backwards compatibility and
 // should not be used for any other purposes. To access ORTB 2.5 schains, see source.ext.schain
 // or request.ext.prebid.schains.
-func (re *RequestExt) GetSChain() *ExtRequestPrebidSChainSChain {
+func (re *RequestExt) GetSChain() *openrtb2.SupplyChain {
 	if re.schain == nil {
 		return nil
 	}
@@ -519,7 +519,7 @@ func (re *RequestExt) GetSChain() *ExtRequestPrebidSChainSChain {
 	return &schain
 }
 
-func (re *RequestExt) SetSChain(schain *ExtRequestPrebidSChainSChain) {
+func (re *RequestExt) SetSChain(schain *openrtb2.SupplyChain) {
 	re.schain = schain
 	re.schainDirty = true
 }
@@ -861,7 +861,7 @@ func (se *SiteExt) SetUSPrivacy(amp int8) {
 type SourceExt struct {
 	ext         map[string]json.RawMessage
 	extDirty    bool
-	schain      *ExtRequestPrebidSChainSChain
+	schain      *openrtb2.SupplyChain
 	schainDirty bool
 }
 
@@ -923,7 +923,7 @@ func (se *SourceExt) SetExt(ext map[string]json.RawMessage) {
 	se.extDirty = true
 }
 
-func (se *SourceExt) GetSChain() *ExtRequestPrebidSChainSChain {
+func (se *SourceExt) GetSChain() *openrtb2.SupplyChain {
 	if se.schain == nil {
 		return nil
 	}
@@ -931,7 +931,7 @@ func (se *SourceExt) GetSChain() *ExtRequestPrebidSChainSChain {
 	return &schain
 }
 
-func (se *SourceExt) SetSChain(schain *ExtRequestPrebidSChainSChain) {
+func (se *SourceExt) SetSChain(schain *openrtb2.SupplyChain) {
 	se.schain = schain
 	se.schainDirty = true
 }
diff --git a/openrtb_ext/source.go b/openrtb_ext/source.go
index 70b291b1..2544bf8f 100644
--- a/openrtb_ext/source.go
+++ b/openrtb_ext/source.go
@@ -1,6 +1,8 @@
 package openrtb_ext
 
+import "github.com/mxmCherry/openrtb/v16/openrtb2"
+
 // ExtSource defines the contract for bidrequest.source.ext
 type ExtSource struct {
-	SChain *ExtRequestPrebidSChainSChain `json:"schain"`
+	SChain *openrtb2.SupplyChain `json:"schain"`
 }
diff --git a/openrtb_ext/user.go b/openrtb_ext/user.go
index d5e6ae67..d7c01c1f 100644
--- a/openrtb_ext/user.go
+++ b/openrtb_ext/user.go
@@ -1,6 +1,8 @@
 package openrtb_ext
 
-import "encoding/json"
+import (
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
+)
 
 // ExtUser defines the contract for bidrequest.user.ext
 type ExtUser struct {
@@ -10,27 +12,10 @@ type ExtUser struct {
 
 	Prebid *ExtUserPrebid `json:"prebid,omitempty"`
 
-	Eids []ExtUserEid `json:"eids,omitempty"`
+	Eids []openrtb2.EID `json:"eids,omitempty"`
 }
 
 // ExtUserPrebid defines the contract for bidrequest.user.ext.prebid
 type ExtUserPrebid struct {
 	BuyerUIDs map[string]string `json:"buyeruids,omitempty"`
 }
-
-// ExtUserEid defines the contract for bidrequest.user.ext.eids
-// Responsible for the Universal User ID support: establishing pseudonymous IDs for users.
-// See https://github.com/prebid/Prebid.js/issues/3900 for details.
-type ExtUserEid struct {
-	Source string          `json:"source"`
-	ID     string          `json:"id,omitempty"`
-	Uids   []ExtUserEidUid `json:"uids,omitempty"`
-	Ext    json.RawMessage `json:"ext,omitempty"`
-}
-
-// ExtUserEidUid defines the contract for bidrequest.user.ext.eids[i].uids[j]
-type ExtUserEidUid struct {
-	ID    string          `json:"id"`
-	Atype int             `json:"atype,omitempty"`
-	Ext   json.RawMessage `json:"ext,omitempty"`
-}
diff --git a/privacy/ccpa/consentwriter.go b/privacy/ccpa/consentwriter.go
index 451f2b40..dfde683d 100644
--- a/privacy/ccpa/consentwriter.go
+++ b/privacy/ccpa/consentwriter.go
@@ -1,7 +1,7 @@
 package ccpa
 
 import (
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/openrtb_ext"
 )
 
diff --git a/privacy/ccpa/policy.go b/privacy/ccpa/policy.go
index 39322317..6b34c5df 100644
--- a/privacy/ccpa/policy.go
+++ b/privacy/ccpa/policy.go
@@ -3,7 +3,7 @@ package ccpa
 import (
 	"fmt"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/openrtb_ext"
 )
 
diff --git a/privacy/enforcement.go b/privacy/enforcement.go
index ab2f64a6..44128eb9 100644
--- a/privacy/enforcement.go
+++ b/privacy/enforcement.go
@@ -1,6 +1,6 @@
 package privacy
 
-import "github.com/mxmCherry/openrtb/v15/openrtb2"
+import "github.com/mxmCherry/openrtb/v16/openrtb2"
 
 // Enforcement represents the privacy policies to enforce for an OpenRTB bid request.
 type Enforcement struct {
diff --git a/privacy/gdpr/consentwriter.go b/privacy/gdpr/consentwriter.go
index ca784b7a..18fd519a 100644
--- a/privacy/gdpr/consentwriter.go
+++ b/privacy/gdpr/consentwriter.go
@@ -3,7 +3,7 @@ package gdpr
 import (
 	"encoding/json"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/openrtb_ext"
 )
 
diff --git a/privacy/lmt/ios.go b/privacy/lmt/ios.go
index 55e1764c..1e279ecf 100644
--- a/privacy/lmt/ios.go
+++ b/privacy/lmt/ios.go
@@ -3,7 +3,7 @@ package lmt
 import (
 	"strings"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/openrtb_ext"
 	"github.com/prebid/prebid-server/util/iosutil"
 )
diff --git a/privacy/lmt/policy.go b/privacy/lmt/policy.go
index 0f282925..6a8ada97 100644
--- a/privacy/lmt/policy.go
+++ b/privacy/lmt/policy.go
@@ -1,6 +1,6 @@
 package lmt
 
-import "github.com/mxmCherry/openrtb/v15/openrtb2"
+import "github.com/mxmCherry/openrtb/v16/openrtb2"
 
 const (
 	trackingUnrestricted = 0
diff --git a/privacy/scrubber.go b/privacy/scrubber.go
index e07ebd05..5ce0d69f 100644
--- a/privacy/scrubber.go
+++ b/privacy/scrubber.go
@@ -4,7 +4,7 @@ import (
 	"encoding/json"
 	"strings"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 )
 
 // ScrubStrategyIPV4 defines the approach to scrub PII from an IPV4 address.
diff --git a/privacy/writer.go b/privacy/writer.go
index 0f04a52f..d3e661b3 100644
--- a/privacy/writer.go
+++ b/privacy/writer.go
@@ -1,6 +1,6 @@
 package privacy
 
-import "github.com/mxmCherry/openrtb/v15/openrtb2"
+import "github.com/mxmCherry/openrtb/v16/openrtb2"
 
 // PolicyWriter mutates an OpenRTB bid request with a policy's regulatory information.
 type PolicyWriter interface {
diff --git a/schain/schain.go b/schain/schain.go
index 785c7e24..d29645e3 100644
--- a/schain/schain.go
+++ b/schain/schain.go
@@ -3,12 +3,14 @@ package schain
 import (
 	"fmt"
 
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
+
 	"github.com/prebid/prebid-server/openrtb_ext"
 )
 
 // BidderToPrebidSChains organizes the ORTB 2.5 multiple root schain nodes into a map of schain nodes by bidder
-func BidderToPrebidSChains(sChains []*openrtb_ext.ExtRequestPrebidSChain) (map[string]*openrtb_ext.ExtRequestPrebidSChainSChain, error) {
-	bidderToSChains := make(map[string]*openrtb_ext.ExtRequestPrebidSChainSChain)
+func BidderToPrebidSChains(sChains []*openrtb_ext.ExtRequestPrebidSChain) (map[string]*openrtb2.SupplyChain, error) {
+	bidderToSChains := make(map[string]*openrtb2.SupplyChain)
 
 	for _, schainWrapper := range sChains {
 		for _, bidder := range schainWrapper.Bidders {
diff --git a/schain/schainwriter.go b/schain/schainwriter.go
index b6788229..37d7b631 100644
--- a/schain/schainwriter.go
+++ b/schain/schainwriter.go
@@ -3,12 +3,12 @@ package schain
 import (
 	"encoding/json"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/openrtb_ext"
 )
 
 // NewSChainWriter creates an ORTB 2.5 schain writer instance
-func NewSChainWriter(reqExt *openrtb_ext.ExtRequest, hostSChainNode *openrtb_ext.ExtRequestPrebidSChainSChainNode) (*SChainWriter, error) {
+func NewSChainWriter(reqExt *openrtb_ext.ExtRequest, hostSChainNode *openrtb2.SupplyChainNode) (*SChainWriter, error) {
 	if !extPrebidSChainExists(reqExt) {
 		return &SChainWriter{hostSChainNode: hostSChainNode}, nil
 	}
@@ -28,8 +28,8 @@ func NewSChainWriter(reqExt *openrtb_ext.ExtRequest, hostSChainNode *openrtb_ext
 // SChainWriter is used to write the appropriate schain for a particular bidder defined in the ORTB 2.5 multi-schain
 // location (req.ext.prebid.schain) to the ORTB 2.5 location (req.source.ext)
 type SChainWriter struct {
-	sChainsByBidder map[string]*openrtb_ext.ExtRequestPrebidSChainSChain
-	hostSChainNode  *openrtb_ext.ExtRequestPrebidSChainSChainNode
+	sChainsByBidder map[string]*openrtb2.SupplyChain
+	hostSChainNode  *openrtb2.SupplyChainNode
 }
 
 // Write selects an schain from the multi-schain ORTB 2.5 location (req.ext.prebid.schains) for the specified bidder
@@ -37,7 +37,7 @@ type SChainWriter struct {
 // location and no wildcard schain exists, the request is not modified.
 func (w SChainWriter) Write(req *openrtb2.BidRequest, bidder string) {
 	const sChainWildCard = "*"
-	var selectedSChain *openrtb_ext.ExtRequestPrebidSChainSChain
+	var selectedSChain *openrtb2.SupplyChain
 
 	wildCardSChain := w.sChainsByBidder[sChainWildCard]
 	bidderSChain := w.sChainsByBidder[bidder]
@@ -47,7 +47,7 @@ func (w SChainWriter) Write(req *openrtb2.BidRequest, bidder string) {
 		return
 	}
 
-	selectedSChain = &openrtb_ext.ExtRequestPrebidSChainSChain{Ver: "1.0"}
+	selectedSChain = &openrtb2.SupplyChain{Ver: "1.0"}
 
 	if bidderSChain != nil {
 		selectedSChain = bidderSChain
@@ -67,7 +67,7 @@ func (w SChainWriter) Write(req *openrtb2.BidRequest, bidder string) {
 	}
 
 	if w.hostSChainNode != nil {
-		schain.SChain.Nodes = append(schain.SChain.Nodes, w.hostSChainNode)
+		schain.SChain.Nodes = append(schain.SChain.Nodes, *w.hostSChainNode)
 	}
 
 	sourceExt, err := json.Marshal(schain)
diff --git a/static/bidder-info/kargo.yaml b/static/bidder-info/kargo.yaml
index 4acfd254..689d9b5d 100644
--- a/static/bidder-info/kargo.yaml
+++ b/static/bidder-info/kargo.yaml
@@ -9,5 +9,6 @@ capabilities:
       - video
       - native
 userSync:
-  supports:
-    - redirect
+  redirect:
+    url: "https://crb.kargo.com/api/v1/dsync/PrebidServer?gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&r={{.RedirectURL}}"
+    userMacro: "$UID"
diff --git a/static/bidder-info/smartadserver.yaml b/static/bidder-info/smartadserver.yaml
index a6b06d95..ba36e551 100644
--- a/static/bidder-info/smartadserver.yaml
+++ b/static/bidder-info/smartadserver.yaml
@@ -6,10 +6,12 @@ capabilities:
     mediaTypes:
       - banner
       - video
+      - native
   site:
     mediaTypes:
       - banner
       - video
+      - native
 userSync:
   redirect:
     url: "https://ssbsync-global.smartadserver.com/api/sync?callerId=5&gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&redirectUri={{.RedirectURL}}"
diff --git a/static/bidder-info/vrtcal.yaml b/static/bidder-info/vrtcal.yaml
index 397d0c5e..c6876836 100644
--- a/static/bidder-info/vrtcal.yaml
+++ b/static/bidder-info/vrtcal.yaml
@@ -1,10 +1,15 @@
 maintainer:
   email: "support@vrtcal.com"
+gvlVendorID: 706 
 capabilities:
   app:
     mediaTypes:
       - banner
       - video
+  site:
+    mediaTypes:
+      - banner
+      - video
 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.
diff --git a/stored_responses/stored_responses.go b/stored_responses/stored_responses.go
index f3540600..25984a7d 100644
--- a/stored_responses/stored_responses.go
+++ b/stored_responses/stored_responses.go
@@ -5,7 +5,7 @@ import (
 	"encoding/json"
 	"fmt"
 	"github.com/buger/jsonparser"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/openrtb_ext"
 	"github.com/prebid/prebid-server/stored_requests"
 )
diff --git a/version/xprebidheader.go b/version/xprebidheader.go
index 5d91ca49..ae0be7dd 100644
--- a/version/xprebidheader.go
+++ b/version/xprebidheader.go
@@ -3,7 +3,7 @@ package version
 import (
 	"strings"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 
 	"github.com/prebid/prebid-server/openrtb_ext"
 )


Test patch:
diff --git a/adapters/adapterstest/adapter_test_util.go b/adapters/adapterstest/adapter_test_util.go
index 25d43a13..d48b86a4 100644
--- a/adapters/adapterstest/adapter_test_util.go
+++ b/adapters/adapterstest/adapter_test_util.go
@@ -8,7 +8,7 @@ import (
 
 	"net/http"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 )
 
 // OrtbMockService Represents a scaffolded OpenRTB service.
diff --git a/adapters/adapterstest/test_json.go b/adapters/adapterstest/test_json.go
index be3e9e40..3c779414 100644
--- a/adapters/adapterstest/test_json.go
+++ b/adapters/adapterstest/test_json.go
@@ -8,7 +8,7 @@ import (
 	"testing"
 
 	"github.com/mitchellh/copystructure"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/currency"
 	"github.com/prebid/prebid-server/openrtb_ext"
diff --git a/adapters/adgeneration/adgeneration_test.go b/adapters/adgeneration/adgeneration_test.go
index c186f19f..6f66667e 100644
--- a/adapters/adgeneration/adgeneration_test.go
+++ b/adapters/adgeneration/adgeneration_test.go
@@ -4,7 +4,7 @@ import (
 	"encoding/json"
 	"testing"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/adapters/adapterstest"
 	"github.com/prebid/prebid-server/config"
diff --git a/adapters/adot/adot_test.go b/adapters/adot/adot_test.go
index 99bf9bd9..ad7336b5 100644
--- a/adapters/adot/adot_test.go
+++ b/adapters/adot/adot_test.go
@@ -4,7 +4,7 @@ import (
 	"encoding/json"
 	"testing"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/adapters/adapterstest"
 	"github.com/prebid/prebid-server/config"
diff --git a/adapters/amx/amx_test.go b/adapters/amx/amx_test.go
index f4a40c46..3ddf4d69 100644
--- a/adapters/amx/amx_test.go
+++ b/adapters/amx/amx_test.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"testing"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/openrtb_ext"
diff --git a/adapters/appnexus/appnexus_test.go b/adapters/appnexus/appnexus_test.go
index 6399be1a..164c9ce6 100644
--- a/adapters/appnexus/appnexus_test.go
+++ b/adapters/appnexus/appnexus_test.go
@@ -10,7 +10,7 @@ import (
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/openrtb_ext"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/adapters/avocet/avocet_test.go b/adapters/avocet/avocet_test.go
index 8dc3c333..1b20a00d 100644
--- a/adapters/avocet/avocet_test.go
+++ b/adapters/avocet/avocet_test.go
@@ -6,7 +6,8 @@ import (
 	"reflect"
 	"testing"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/adcom1"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/adapters/adapterstest"
 	"github.com/prebid/prebid-server/config"
@@ -205,12 +206,12 @@ func Test_getBidType(t *testing.T) {
 	}{
 		{
 			name: "VPAID 1.0",
-			args: args{openrtb2.Bid{API: openrtb2.APIFrameworkVPAID10}, avocetBidExt{}},
+			args: args{openrtb2.Bid{API: adcom1.APIVPAID10}, avocetBidExt{}},
 			want: openrtb_ext.BidTypeVideo,
 		},
 		{
 			name: "VPAID 2.0",
-			args: args{openrtb2.Bid{API: openrtb2.APIFrameworkVPAID20}, avocetBidExt{}},
+			args: args{openrtb2.Bid{API: adcom1.APIVPAID20}, avocetBidExt{}},
 			want: openrtb_ext.BidTypeVideo,
 		},
 		{
diff --git a/adapters/criteo/models_test.go b/adapters/criteo/models_test.go
index e85fa4c1..a41773ea 100644
--- a/adapters/criteo/models_test.go
+++ b/adapters/criteo/models_test.go
@@ -5,7 +5,7 @@ import (
 	"reflect"
 	"testing"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/openrtb_ext"
 )
diff --git a/adapters/dmx/dmx_test.go b/adapters/dmx/dmx_test.go
index aa4a6f79..5e2ba297 100644
--- a/adapters/dmx/dmx_test.go
+++ b/adapters/dmx/dmx_test.go
@@ -5,7 +5,7 @@ import (
 	"strings"
 	"testing"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/openrtb_ext"
diff --git a/adapters/infoawarebidder_test.go b/adapters/infoawarebidder_test.go
index 7bd476b3..b3ac07f5 100644
--- a/adapters/infoawarebidder_test.go
+++ b/adapters/infoawarebidder_test.go
@@ -4,7 +4,7 @@ import (
 	"errors"
 	"testing"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
diff --git a/adapters/ix/ix_test.go b/adapters/ix/ix_test.go
index fc1d0f9a..8780ca49 100644
--- a/adapters/ix/ix_test.go
+++ b/adapters/ix/ix_test.go
@@ -9,7 +9,8 @@ import (
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/openrtb_ext"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/adcom1"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 )
 
 const endpoint string = "http://host/endpoint"
@@ -35,7 +36,7 @@ func TestIxMakeBidsWithCategoryDuration(t *testing.T) {
 				H:           360,
 				MIMEs:       []string{"video/mp4"},
 				MaxDuration: 60,
-				Protocols:   []openrtb2.Protocol{2, 3, 5, 6},
+				Protocols:   []adcom1.MediaCreativeSubtype{2, 3, 5, 6},
 			},
 			Ext: json.RawMessage(
 				`{
diff --git a/adapters/kidoz/kidoz_test.go b/adapters/kidoz/kidoz_test.go
index 3fd807ea..2b3f2e50 100644
--- a/adapters/kidoz/kidoz_test.go
+++ b/adapters/kidoz/kidoz_test.go
@@ -5,7 +5,7 @@ import (
 	"net/http"
 	"testing"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/adapters/adapterstest"
 	"github.com/prebid/prebid-server/config"
diff --git a/adapters/openrtb_util_test.go b/adapters/openrtb_util_test.go
index 4a5d33b0..e580657b 100644
--- a/adapters/openrtb_util_test.go
+++ b/adapters/openrtb_util_test.go
@@ -5,7 +5,7 @@ import (
 	"errors"
 	"testing"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/adapters/openx/openx_test.go b/adapters/openx/openx_test.go
index ea90dc87..16cc4af8 100644
--- a/adapters/openx/openx_test.go
+++ b/adapters/openx/openx_test.go
@@ -4,7 +4,7 @@ import (
 	"encoding/json"
 	"testing"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/adapters/adapterstest"
 	"github.com/prebid/prebid-server/config"
diff --git a/adapters/orbidder/orbidder_test.go b/adapters/orbidder/orbidder_test.go
index bbda1c06..59d39b65 100644
--- a/adapters/orbidder/orbidder_test.go
+++ b/adapters/orbidder/orbidder_test.go
@@ -3,7 +3,7 @@ package orbidder
 import (
 	"encoding/json"
 	"errors"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/stretchr/testify/mock"
 	"testing"
diff --git a/adapters/pubmatic/pubmatic_test.go b/adapters/pubmatic/pubmatic_test.go
index 4985d052..1c99d994 100644
--- a/adapters/pubmatic/pubmatic_test.go
+++ b/adapters/pubmatic/pubmatic_test.go
@@ -4,7 +4,7 @@ import (
 	"encoding/json"
 	"testing"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/adapters/adapterstest"
 	"github.com/prebid/prebid-server/config"
diff --git a/adapters/richaudience/richaudience_test.go b/adapters/richaudience/richaudience_test.go
index 8a6dd85b..74b13325 100644
--- a/adapters/richaudience/richaudience_test.go
+++ b/adapters/richaudience/richaudience_test.go
@@ -4,7 +4,7 @@ import (
 	"net/http"
 	"testing"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/adapters/adapterstest"
 	"github.com/prebid/prebid-server/config"
@@ -27,8 +27,8 @@ type richaudienceUser struct {
 }
 
 type richaudienceUserExt struct {
-	Eids    []openrtb_ext.ExtUserEid `json:"eids,omitempty"`
-	Consent string                   `json:"consent,omitempty"`
+	Eids    []openrtb2.EID `json:"eids,omitempty"`
+	Consent string         `json:"consent,omitempty"`
 }
 
 type richaudienceDevice struct {
diff --git a/adapters/rubicon/rubicon_test.go b/adapters/rubicon/rubicon_test.go
index e847b4fe..89270ec8 100644
--- a/adapters/rubicon/rubicon_test.go
+++ b/adapters/rubicon/rubicon_test.go
@@ -14,7 +14,8 @@ import (
 	"github.com/prebid/prebid-server/openrtb_ext"
 
 	"github.com/buger/jsonparser"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/adcom1"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/stretchr/testify/assert"
 	"github.com/stretchr/testify/mock"
 )
@@ -256,7 +257,7 @@ func TestAppendTracker(t *testing.T) {
 
 func TestResolveVideoSizeId(t *testing.T) {
 	testScenarios := []struct {
-		placement   openrtb2.VideoPlacementType
+		placement   adcom1.VideoPlacementSubtype
 		instl       int8
 		impId       string
 		expected    int
@@ -485,7 +486,7 @@ func TestOpenRTBRequest(t *testing.T) {
 			Ext: json.RawMessage(`{
 				"eids": [{
                     "source": "pubcid",
-                    "id": "2402fc76-7b39-4f0e-bfc2-060ef7693648"
+					"uids": [{"id": "2402fc76-7b39-4f0e-bfc2-060ef7693648"}]
 				}]
             }`),
 		},
@@ -558,7 +559,7 @@ func TestOpenRTBRequest(t *testing.T) {
 
 		assert.NotNil(t, userExt.Eids)
 		assert.Equal(t, 1, len(userExt.Eids), "Eids values are not as expected!")
-		assert.Contains(t, userExt.Eids, openrtb_ext.ExtUserEid{Source: "pubcid", ID: "2402fc76-7b39-4f0e-bfc2-060ef7693648"})
+		assert.Contains(t, userExt.Eids, openrtb2.EID{Source: "pubcid", UIDs: []openrtb2.UID{{ID: "2402fc76-7b39-4f0e-bfc2-060ef7693648"}}})
 	}
 }
 
@@ -792,7 +793,9 @@ func TestOpenRTBRequestWithSpecificExtUserEids(t *testing.T) {
 			Ext: json.RawMessage(`{"eids": [
 			{
 				"source": "pubcid",
-				"id": "2402fc76-7b39-4f0e-bfc2-060ef7693648"
+				"uids": [{
+					"id": "2402fc76-7b39-4f0e-bfc2-060ef7693648"
+				}]
 			},
 			{
 				"source": "adserver.org",
@@ -882,10 +885,10 @@ func TestOpenRTBRequestWithVideoImpEvenIfImpHasBannerButAllRequiredVideoFields(t
 				W:           640,
 				H:           360,
 				MIMEs:       []string{"video/mp4"},
-				Protocols:   []openrtb2.Protocol{openrtb2.ProtocolVAST10},
+				Protocols:   []adcom1.MediaCreativeSubtype{adcom1.CreativeVAST10},
 				MaxDuration: 30,
 				Linearity:   1,
-				API:         []openrtb2.APIFramework{},
+				API:         []adcom1.APIFramework{},
 			},
 			Ext: json.RawMessage(`{"bidder": {
 				"zoneId": 8394,
@@ -932,10 +935,10 @@ func TestOpenRTBRequestWithVideoImpAndEnabledRewardedInventoryFlag(t *testing.T)
 				W:           640,
 				H:           360,
 				MIMEs:       []string{"video/mp4"},
-				Protocols:   []openrtb2.Protocol{openrtb2.ProtocolVAST10},
+				Protocols:   []adcom1.MediaCreativeSubtype{adcom1.CreativeVAST10},
 				MaxDuration: 30,
 				Linearity:   1,
-				API:         []openrtb2.APIFramework{},
+				API:         []adcom1.APIFramework{},
 			},
 			Ext: json.RawMessage(`{
 			"prebid":{
diff --git a/adapters/smaato/smaato_test.go b/adapters/smaato/smaato_test.go
index 0012bd61..0f822b45 100644
--- a/adapters/smaato/smaato_test.go
+++ b/adapters/smaato/smaato_test.go
@@ -2,12 +2,14 @@ package smaato
 
 import (
 	"encoding/json"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
-	"github.com/prebid/prebid-server/adapters"
-	"github.com/stretchr/testify/assert"
 	"testing"
 	"time"
 
+	"github.com/mxmCherry/openrtb/v16/adcom1"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
+	"github.com/stretchr/testify/assert"
+
+	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/adapters/adapterstest"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/openrtb_ext"
@@ -39,7 +41,7 @@ func TestVideoWithCategoryAndDuration(t *testing.T) {
 				H:           360,
 				MIMEs:       []string{"video/mp4"},
 				MaxDuration: 60,
-				Protocols:   []openrtb2.Protocol{2, 3, 5, 6},
+				Protocols:   []adcom1.MediaCreativeSubtype{2, 3, 5, 6},
 			},
 			Ext: json.RawMessage(
 				`{
diff --git a/adapters/smartadserver/smartadservertest/exemplary/native-app.json b/adapters/smartadserver/smartadservertest/exemplary/native-app.json
new file mode 100644
index 00000000..86c41e43
--- /dev/null
+++ b/adapters/smartadserver/smartadservertest/exemplary/native-app.json
@@ -0,0 +1,270 @@
+{
+  "mockBidRequest": {
+    "id": "some-request-id",
+    "device": {
+      "ua": "test-user-agent",
+      "ip": "123.123.123.123",
+      "language": "en",
+      "dnt": 0,
+      "make": "samsung",
+      "model": "sm-a505u",
+      "devicetype": 4,
+      "lmt": 0,
+      "w": 412,
+      "h": 812,
+      "pxratio": 2.625
+    },
+    "tmax": 1000,
+    "user": {
+      "buyeruid": "awesome-user"
+    },
+    "app": {
+      "name": "SmartNews: Local Breaking News",
+      "bundle": "jp.gocro.smartnews.android",
+      "publisher": {
+        "id": "pub-2647321473134964",
+        "ext": {
+          "country": "JP"
+        }
+      },
+      "content": {
+        "url": "https://play.google.com/store/apps/details?id\u003djp.gocro.smartnews.android",
+        "userrating": "4.2",
+        "livestream": 0,
+        "language": "en"
+      },
+      "storeurl": "https://play.google.com/store/apps/details?id\u003djp.gocro.smartnews.android",
+      "ext": {
+        "inventorypartnerdomain": ""
+      }
+    },
+    "imp": [
+      {
+        "id": "1",
+        "tagid": "1",
+        "bidfloor": 0.16,
+        "bidfloorcur": "EUR",
+        "secure": 1,
+        "native": {
+          "request": "{\"ver\":\"1.2\",\"assets\":[{\"id\":1,\"required\":1,\"title\":{\"len\":25}},{\"id\":2,\"required\":1,\"data\":{\"type\":2,\"len\":90}},{\"id\":3,\"data\":{\"type\":12,\"len\":15}},{\"id\":4,\"required\":1,\"img\":{\"type\":3,\"wmin\":1200,\"hmin\":627}},{\"id\":5,\"required\":1,\"img\":{\"type\":1,\"wmin\":100,\"hmin\":100}},{\"id\":6,\"data\":{\"type\":3,\"len\":5}},{\"id\":7,\"data\":{\"type\":6}}],\"eventtrackers\":[{\"event\":1,\"methods\":[1]}]}",
+          "ver": "1.2",
+          "api": [
+            3,
+            5,
+            6
+          ]
+        },
+        "metric": [
+          {
+            "type": "viewability",
+            "value": 0.94,
+            "vendor": "EXCHANGE"
+          },
+          {
+            "type": "session_depth",
+            "value": 2.0,
+            "vendor": "EXCHANGE"
+          }
+        ],
+        "ext": {
+          "billing_id": [
+            "48566531714"
+          ],
+          "dfp_ad_unit_code": "/22455324824/US/Android/ChannelView/NonFirst/us_android_channelview_nonfirst_native_v",
+          "ampad": 2,
+          "open_bidding": {
+            "is_open_bidding": 1
+          },
+          "creative_enforcement_settings": {
+            "policy_enforcement": 1,
+            "scan_enforcement": 3,
+            "publisher_blocks_enforcement": 2,
+            "is_default": 1
+          },
+          "auction_environment": 0,
+          "bidder": {
+            "siteId": 1,
+            "pageId": 2,
+            "formatId": 3,
+            "networkId": 73
+          }
+        }
+      }
+    ]
+  },
+  "httpCalls": [
+    {
+      "expectedRequest": {
+        "headers": {
+          "Content-Type": [
+            "application/json;charset=utf-8"
+          ],
+          "Accept": [
+            "application/json"
+          ]
+        },
+        "uri": "https://ssb.smartadserver.com/api/bid?callerId=5",
+        "body": {
+          "id": "some-request-id",
+          "device": {
+            "ua": "test-user-agent",
+            "ip": "123.123.123.123",
+            "language": "en",
+            "dnt": 0,
+            "make": "samsung",
+            "model": "sm-a505u",
+            "devicetype": 4,
+            "lmt": 0,
+            "w": 412,
+            "h": 812,
+            "pxratio": 2.625
+          },
+          "tmax": 1000,
+          "user": {
+            "buyeruid": "awesome-user"
+          },
+          "app": {
+            "name": "SmartNews: Local Breaking News",
+            "bundle": "jp.gocro.smartnews.android",
+            "publisher": {
+              "id": "pub-2647321473134964",
+              "ext": {
+                "country": "JP"
+              }
+            },
+            "content": {
+              "url": "https://play.google.com/store/apps/details?id\u003djp.gocro.smartnews.android",
+              "userrating": "4.2",
+              "language": "en"
+            },
+            "storeurl": "https://play.google.com/store/apps/details?id\u003djp.gocro.smartnews.android",
+            "ext": {
+              "inventorypartnerdomain": ""
+            }
+          },
+          "imp": [
+            {
+              "id": "1",
+              "tagid": "1",
+              "bidfloor": 0.16,
+              "bidfloorcur": "EUR",
+              "secure": 1,
+              "native": {
+                "request": "{\"ver\":\"1.2\",\"assets\":[{\"id\":1,\"required\":1,\"title\":{\"len\":25}},{\"id\":2,\"required\":1,\"data\":{\"type\":2,\"len\":90}},{\"id\":3,\"data\":{\"type\":12,\"len\":15}},{\"id\":4,\"required\":1,\"img\":{\"type\":3,\"wmin\":1200,\"hmin\":627}},{\"id\":5,\"required\":1,\"img\":{\"type\":1,\"wmin\":100,\"hmin\":100}},{\"id\":6,\"data\":{\"type\":3,\"len\":5}},{\"id\":7,\"data\":{\"type\":6}}],\"eventtrackers\":[{\"event\":1,\"methods\":[1]}]}",
+                "ver": "1.2",
+                "api": [
+                  3,
+                  5,
+                  6
+                ]
+              },
+              "metric": [
+                {
+                  "type": "viewability",
+                  "value": 0.94,
+                  "vendor": "EXCHANGE"
+                },
+                {
+                  "type": "session_depth",
+                  "value": 2.0,
+                  "vendor": "EXCHANGE"
+                }
+              ],
+              "ext": {
+                "billing_id": [
+                  "48566531714"
+                ],
+                "dfp_ad_unit_code": "/22455324824/US/Android/ChannelView/NonFirst/us_android_channelview_nonfirst_native_v",
+                "ampad": 2,
+                "open_bidding": {
+                  "is_open_bidding": 1
+                },
+                "creative_enforcement_settings": {
+                  "policy_enforcement": 1,
+                  "scan_enforcement": 3,
+                  "publisher_blocks_enforcement": 2,
+                  "is_default": 1
+                },
+                "auction_environment": 0,
+                "bidder": {
+                  "siteId": 1,
+                  "pageId": 2,
+                  "formatId": 3,
+                  "networkId": 73
+                }
+              }
+            }
+          ],
+          "site": {
+            "publisher": {
+              "id": "73"
+            }
+          }
+        }
+      },
+      "mockResponse": {
+        "status": 200,
+        "body": {
+          "id": "awesome-resp-id",
+          "seatbid": [
+            {
+              "seat": "13936",
+              "bid": [
+                {
+                  "id": "905895002584918328",
+                  "impid": "1",
+                  "price": 0.86403,
+                  "adm": "{\"native\":{\"ver\":\"1.2\",\"privacy\":\"https://privacy.us.criteo.com/adchoices?cppv\u003d3\u0026cpp\u003ddA0RezzRiApl49U79WS4eSofHI9xp0QYBojK_np3IC3bUxP--nXz3YJ9Knp3lffIaxxkyWjwHWw6E-om3O1QPVKQzRogO7TA1mZgFFS7oTrn5BAmxej9Ibf_f3nLqCMlvyUb0uBGRRY8e6F_4mMTsPfi0gfvHMHt9p9cMMz7_EMMB2a2\",\"assets\":[{\"id\":1,\"title\":{\"text\":\"Hotel Katla\"}},{\"id\":2,\"data\":{\"value\":\"Vik\"}},{\"id\":3,\"data\":{\"value\":\"Book Now\"}},{\"id\":4,\"img\":{\"url\":\"https://pix.us.criteo.net/img/img?c\u003d3\u0026cq\u003d256\u0026h\u003d800\u0026m\u003d0\u0026partner\u003d4653\u0026q\u003d80\u0026r\u003d2\u0026u\u003dhttps%3A%2F%2Fmedia-cdn.tripadvisor.com%2Fmedia%2Fphoto-s%2F1c%2Fe0%2Fd1%2F28%2Fb86401-exterior.jpg\u0026ups\u003d1\u0026v\u003d3\u0026w\u003d800\u0026s\u003dmfVfgFTxkIyJE1l8uEIH0kjY\",\"w\":800,\"h\":800,\"ext\":{\"imagemode\":1}}},{\"id\":5,\"img\":{\"url\":\"https://pix.us.criteo.net/img/img?h\u003d200\u0026m\u003d0\u0026partner\u003d4653\u0026q\u003d80\u0026r\u003d0\u0026u\u003dhttp%3A%2F%2Fstatic.va.us.criteo.net%2Fdesign%2Fdt%2F4653%2F220310%2Fa8c95dab6f4048a3a93333bb2df35394_logo_colorset_1_square.png\u0026v\u003d3\u0026w\u003d200\u0026s\u003dS_tJonEVlXbjJYH3qQhRMmmr\",\"w\":200,\"h\":200}},{\"id\":7,\"data\":{\"value\":\"from $212\"}}],\"link\":{\"url\":\"https://cat.va.us.criteo.com/delivery/ckn.php?cppv\u003d3\u0026cpp\u003d_Hp3ShHYhT6VGVf27R7phNvxu2hpEMhI-_juBZvPRzA-urYvy54GTjaheHPJy7u8s523QQV0dFM_3EsVBAkZLqLOmHSlm5FjpMn_-sQY_Fpu1m4uZi9T5i2t49tP2csthrSlyhHQHD55kOCkG2gTV5GV4gbBTeDun61HYB0ztXzScWk0jO9iEy-6YGY_6nZCB5LpUKuaiZ4ApBhNuHx6rQkJkdbBmKFnS0sY3Dvri6AigvbUsZiku6v_VGqTKlER65Z1UzFx-mGSn5yZjsjbO-Zf0l7xRNzZFb7dW_EZjZufLLL47fyT5uMcbVypmMYcu6Htxb5Z_wj3eL7gz_zThJxYi60PzBoI4F3dYznFPgl6NY_Nazp1nAryiPGiCDbpM4yGF_9Sh8pEg2Ev94beM_ymWaqEdYTuCor6_grea5K0GIXeKSv5c4FsGSrTflQmIE_nLrJuvI8wMGQC8JtuNdC43wwWnQj5tOhHcOANVvZBkE_M\u0026maxdest\u003dhttps%3A%2F%2Fwww.tripadvisor.com%2FHotel_Review-s1-d5030264%3Fm%3D66738%26supcm%3D288696%26supai%3D307147\"},\"eventtrackers\":[{\"event\":1,\"method\":1,\"url\":\"https://cat.va.us.criteo.com/delivery/lgn.php?cppv\u003d3\u0026cpp\u003dOYXXGxHYhT6VGVf27R7phNvxu2hpEMhI-_juBZvPRzA-urYvy54GTjaheHPJy7u8s523QQV0dFM_3EsVBAkZLqLOmHSlm5FjpMn_-sQY_Fpu1m4uZi9T5i2t49tP2csthrSlygJccxue8pR1zYveG3Rhcmzgt7JGjWy2WOHS5y42tNQvzbafDza85vKl66AQJCfeqdM_A6tUxZe2WFlSDw1s6sokf8fdldJ0aZucyWwh1Wx_tJbdzbyaD-j9TcpnAVsI2npiXJPI-_9xnE4pG3SAJiGZ2K4hWT34PkEC0g_9C9s1Hf6jQ6X1Wv0a8wa5IWLoMldXqnZ3W7jr9nPKXngjEy6n2-_WId8D9q9LkwXFcIR9LGovLfQ3U9XT9j1oJLzqgmyIVB9Z7VPF-NxHUDh1-fcjDMRMCPTKAOI4CcI8akLDN9M6XyaM7KLtHCHOpi1k-HT_gI70veWC4koE-UouUwM\u0026z\u003dsj0HnHF3bINdeGYjfRPFUEztMyUWhruGkElSEg\"}],\"assetsurl\":\"https://rdi.va.us.criteo.com/delivery/r/native?u\u003d%7CQ4DwbCv1DLCf%2FRGbTXtJ1gp584IIyg2Xyl6hmWNuvP4%3D%7C\u0026zn\u003dsj0HnHF3bINdeGYjfRPFUEztMyUWhruGkElSEg\u0026callback\u003d\u0026c1\u003dSEEq4vz4aLDKSl7f6j97sw4tGcTvFLx-G7HAXpahtNFbKhTsLPbfhYclWUAr1fpRrS5FKjKJDCrsY5WICFwCPtxotN6aDFevt17x9oLdclOk5qh_QOZ3AhwsnBXMPNEsxS6CR_ZPGwG6JmcbFms24fl9H5zHw7NWKcPTb_xtLsHLuKy3X2iAgHZ8QIT_87DNLHhfjmcEfnPnLr-669VrrQc4GLrjhWW8qFUaOfru2DjSZdBJjgxjTbuEbVI4NJ38zG7hgs13DDu9i7b9gidNjSJVg492IBN50JmS0p07mKQzgD2ELoa8cbdPnr9kwXwH3C6N_esaNHo87pj8DPHXQqVV6XvvZAeoQpUgo6Src_tX1eSo6ZHzH2mWXFCo6kP9BBf9HOdB8H5n1oL_rNxqfCthXOYzAlbAGeCvyc0GCeCuzwiCkq53bqcssz3E4Scul6ZDYUZltsbEeYLJPwkdMSviPH4Po-j9mUQaHW5lMABl2nam2q6lDoEFulNR8kz3R2BbrlMEoDHfcAtDf9gHKNndrYVRhfRtEMu0RW1SVdJ6fKuPvU1_zodMaXEpGmJ6dEwz04eBm22yN7nAaqJQYdEiiLuvrYyQZPzp6M8nXt66I8hzO9WfYk40EvQzg-fZMmr7NMke0_YPCm7oRyFZChAnbq3LE_jpjAuygA_S-Yq8y1d4RVhfRgTUdAdJaYne\"}}",
+                  "adomain": [
+                    "tripadvisor.com"
+                  ],
+                  "crid": "11116594",
+                  "w": 0,
+                  "h": 0,
+                  "exp": 0,
+                  "qagmediarating": 0,
+                  "ext": {
+                    "event_notification_token": {
+                      "payload": "4323.905895002584918328.1655998688532"
+                    },
+                    "impression_tracking_url": [
+                      "https://ssb-use1.smartadserver.com:443/api/imp?callerid\u003d3\u0026rtb\u003d1\u0026rtbnid\u003d4323\u0026rtbbid\u003d905895002584918328\u0026rtbh\u003d5aa204f3c4aca84cb52ea307bbff41e44571485c\u0026rtblt\u003d637915954885316448\u0026rtbet\u003d2\u0026rtbptnid\u003d361\u0026cftgid\u003d4a496db2aade"
+                    ]
+                  }
+                }
+              ]
+            }
+          ],
+          "cur": "USD"
+        }
+      }
+    }
+  ],
+  "expectedBidResponses": [
+    {
+      "bids": [
+        {
+          "bid": {
+            "id": "905895002584918328",
+            "impid": "1",
+            "price": 0.86403,
+            "adm": "{\"native\":{\"ver\":\"1.2\",\"privacy\":\"https://privacy.us.criteo.com/adchoices?cppv\u003d3\u0026cpp\u003ddA0RezzRiApl49U79WS4eSofHI9xp0QYBojK_np3IC3bUxP--nXz3YJ9Knp3lffIaxxkyWjwHWw6E-om3O1QPVKQzRogO7TA1mZgFFS7oTrn5BAmxej9Ibf_f3nLqCMlvyUb0uBGRRY8e6F_4mMTsPfi0gfvHMHt9p9cMMz7_EMMB2a2\",\"assets\":[{\"id\":1,\"title\":{\"text\":\"Hotel Katla\"}},{\"id\":2,\"data\":{\"value\":\"Vik\"}},{\"id\":3,\"data\":{\"value\":\"Book Now\"}},{\"id\":4,\"img\":{\"url\":\"https://pix.us.criteo.net/img/img?c\u003d3\u0026cq\u003d256\u0026h\u003d800\u0026m\u003d0\u0026partner\u003d4653\u0026q\u003d80\u0026r\u003d2\u0026u\u003dhttps%3A%2F%2Fmedia-cdn.tripadvisor.com%2Fmedia%2Fphoto-s%2F1c%2Fe0%2Fd1%2F28%2Fb86401-exterior.jpg\u0026ups\u003d1\u0026v\u003d3\u0026w\u003d800\u0026s\u003dmfVfgFTxkIyJE1l8uEIH0kjY\",\"w\":800,\"h\":800,\"ext\":{\"imagemode\":1}}},{\"id\":5,\"img\":{\"url\":\"https://pix.us.criteo.net/img/img?h\u003d200\u0026m\u003d0\u0026partner\u003d4653\u0026q\u003d80\u0026r\u003d0\u0026u\u003dhttp%3A%2F%2Fstatic.va.us.criteo.net%2Fdesign%2Fdt%2F4653%2F220310%2Fa8c95dab6f4048a3a93333bb2df35394_logo_colorset_1_square.png\u0026v\u003d3\u0026w\u003d200\u0026s\u003dS_tJonEVlXbjJYH3qQhRMmmr\",\"w\":200,\"h\":200}},{\"id\":7,\"data\":{\"value\":\"from $212\"}}],\"link\":{\"url\":\"https://cat.va.us.criteo.com/delivery/ckn.php?cppv\u003d3\u0026cpp\u003d_Hp3ShHYhT6VGVf27R7phNvxu2hpEMhI-_juBZvPRzA-urYvy54GTjaheHPJy7u8s523QQV0dFM_3EsVBAkZLqLOmHSlm5FjpMn_-sQY_Fpu1m4uZi9T5i2t49tP2csthrSlyhHQHD55kOCkG2gTV5GV4gbBTeDun61HYB0ztXzScWk0jO9iEy-6YGY_6nZCB5LpUKuaiZ4ApBhNuHx6rQkJkdbBmKFnS0sY3Dvri6AigvbUsZiku6v_VGqTKlER65Z1UzFx-mGSn5yZjsjbO-Zf0l7xRNzZFb7dW_EZjZufLLL47fyT5uMcbVypmMYcu6Htxb5Z_wj3eL7gz_zThJxYi60PzBoI4F3dYznFPgl6NY_Nazp1nAryiPGiCDbpM4yGF_9Sh8pEg2Ev94beM_ymWaqEdYTuCor6_grea5K0GIXeKSv5c4FsGSrTflQmIE_nLrJuvI8wMGQC8JtuNdC43wwWnQj5tOhHcOANVvZBkE_M\u0026maxdest\u003dhttps%3A%2F%2Fwww.tripadvisor.com%2FHotel_Review-s1-d5030264%3Fm%3D66738%26supcm%3D288696%26supai%3D307147\"},\"eventtrackers\":[{\"event\":1,\"method\":1,\"url\":\"https://cat.va.us.criteo.com/delivery/lgn.php?cppv\u003d3\u0026cpp\u003dOYXXGxHYhT6VGVf27R7phNvxu2hpEMhI-_juBZvPRzA-urYvy54GTjaheHPJy7u8s523QQV0dFM_3EsVBAkZLqLOmHSlm5FjpMn_-sQY_Fpu1m4uZi9T5i2t49tP2csthrSlygJccxue8pR1zYveG3Rhcmzgt7JGjWy2WOHS5y42tNQvzbafDza85vKl66AQJCfeqdM_A6tUxZe2WFlSDw1s6sokf8fdldJ0aZucyWwh1Wx_tJbdzbyaD-j9TcpnAVsI2npiXJPI-_9xnE4pG3SAJiGZ2K4hWT34PkEC0g_9C9s1Hf6jQ6X1Wv0a8wa5IWLoMldXqnZ3W7jr9nPKXngjEy6n2-_WId8D9q9LkwXFcIR9LGovLfQ3U9XT9j1oJLzqgmyIVB9Z7VPF-NxHUDh1-fcjDMRMCPTKAOI4CcI8akLDN9M6XyaM7KLtHCHOpi1k-HT_gI70veWC4koE-UouUwM\u0026z\u003dsj0HnHF3bINdeGYjfRPFUEztMyUWhruGkElSEg\"}],\"assetsurl\":\"https://rdi.va.us.criteo.com/delivery/r/native?u\u003d%7CQ4DwbCv1DLCf%2FRGbTXtJ1gp584IIyg2Xyl6hmWNuvP4%3D%7C\u0026zn\u003dsj0HnHF3bINdeGYjfRPFUEztMyUWhruGkElSEg\u0026callback\u003d\u0026c1\u003dSEEq4vz4aLDKSl7f6j97sw4tGcTvFLx-G7HAXpahtNFbKhTsLPbfhYclWUAr1fpRrS5FKjKJDCrsY5WICFwCPtxotN6aDFevt17x9oLdclOk5qh_QOZ3AhwsnBXMPNEsxS6CR_ZPGwG6JmcbFms24fl9H5zHw7NWKcPTb_xtLsHLuKy3X2iAgHZ8QIT_87DNLHhfjmcEfnPnLr-669VrrQc4GLrjhWW8qFUaOfru2DjSZdBJjgxjTbuEbVI4NJ38zG7hgs13DDu9i7b9gidNjSJVg492IBN50JmS0p07mKQzgD2ELoa8cbdPnr9kwXwH3C6N_esaNHo87pj8DPHXQqVV6XvvZAeoQpUgo6Src_tX1eSo6ZHzH2mWXFCo6kP9BBf9HOdB8H5n1oL_rNxqfCthXOYzAlbAGeCvyc0GCeCuzwiCkq53bqcssz3E4Scul6ZDYUZltsbEeYLJPwkdMSviPH4Po-j9mUQaHW5lMABl2nam2q6lDoEFulNR8kz3R2BbrlMEoDHfcAtDf9gHKNndrYVRhfRtEMu0RW1SVdJ6fKuPvU1_zodMaXEpGmJ6dEwz04eBm22yN7nAaqJQYdEiiLuvrYyQZPzp6M8nXt66I8hzO9WfYk40EvQzg-fZMmr7NMke0_YPCm7oRyFZChAnbq3LE_jpjAuygA_S-Yq8y1d4RVhfRgTUdAdJaYne\"}}",
+            "adomain": [
+              "tripadvisor.com"
+            ],
+            "crid": "11116594",
+            "ext": {
+              "event_notification_token": {
+                "payload": "4323.905895002584918328.1655998688532"
+              },
+              "impression_tracking_url": [
+                "https://ssb-use1.smartadserver.com:443/api/imp?callerid\u003d3\u0026rtb\u003d1\u0026rtbnid\u003d4323\u0026rtbbid\u003d905895002584918328\u0026rtbh\u003d5aa204f3c4aca84cb52ea307bbff41e44571485c\u0026rtblt\u003d637915954885316448\u0026rtbet\u003d2\u0026rtbptnid\u003d361\u0026cftgid\u003d4a496db2aade"
+              ]
+            }
+          },
+          "type": "native"
+        }
+      ]
+    }
+  ]
+}
\ No newline at end of file
diff --git a/adapters/smartadserver/smartadservertest/exemplary/native-web.json b/adapters/smartadserver/smartadservertest/exemplary/native-web.json
new file mode 100644
index 00000000..a5fcb172
--- /dev/null
+++ b/adapters/smartadserver/smartadservertest/exemplary/native-web.json
@@ -0,0 +1,273 @@
+{
+  "mockBidRequest": {
+    "id": "some-request-id",
+    "device": {
+      "ua": "test-user-agent",
+      "ipv6": "2607:fb90:f27:4512:d800:cb23:a603:e245",
+      "language": "en",
+      "dnt": 0,
+      "geo": {
+        "lat": 123.0,
+        "lon": 123.0,
+        "country": "BEL",
+        "region": "BE-VWV",
+        "city": "Ieper"
+      }
+    },
+    "tmax": 1000,
+    "user": {
+      "buyeruid": "awesome-user"
+    },
+    "site": {
+      "page": "https://www.redactie24.be/shopping/colruyt-moet-ingrijpen-3-producten-onmiddellijk-uit-de-rekken-gehaald-140289",
+      "publisher": {
+        "id": "pub-9936969251765866",
+        "ext": {
+          "country": "NL"
+        }
+      },
+      "content": {
+        "language": "nl"
+      },
+      "mobile": 1,
+      "ext": {
+        "amp": 0,
+        "page_visibility": 1,
+        "inventorypartnerdomain": ""
+      }
+    },
+    "imp": [
+      {
+        "id": "1",
+        "displaymanager": "GOOGLE",
+        "tagid": "1349892507",
+        "bidfloor": 0.75,
+        "bidfloorcur": "EUR",
+        "secure": 1,
+        "native": {
+          "request": "{\"ver\":\"1.2\",\"assets\":[{\"id\":1,\"required\":1,\"title\":{\"len\":25}},{\"id\":2,\"required\":1,\"data\":{\"type\":2,\"len\":90}},{\"id\":3,\"data\":{\"type\":12,\"len\":15}},{\"id\":4,\"required\":1,\"img\":{\"type\":3,\"wmin\":1200,\"hmin\":627}},{\"id\":5,\"required\":1,\"img\":{\"type\":1,\"wmin\":100,\"hmin\":100}},{\"id\":6,\"data\":{\"type\":3,\"len\":5}}],\"eventtrackers\":[{\"event\":1,\"methods\":[1]}],\"ext\":{\"style_id\":188304,\"style_height\":1,\"style_width\":1,\"style_layout_type\":1}}",
+          "ver": "1.2"
+        },
+        "metric": [
+          {
+            "type": "click_through_rate",
+            "value": 0.0016456807497888803,
+            "vendor": "EXCHANGE"
+          },
+          {
+            "type": "viewability",
+            "value": 0.84,
+            "vendor": "EXCHANGE"
+          },
+          {
+            "type": "session_depth",
+            "value": 1.0,
+            "vendor": "EXCHANGE"
+          }
+        ],
+        "ext": {
+          "billing_id": [
+            "48566531714"
+          ],
+          "dfp_ad_unit_code": "/15748617/Redactie24.be/Redactie24.be-Mobile-Rectangle-Mid",
+          "ampad": 3,
+          "open_bidding": {
+            "is_open_bidding": 1
+          },
+          "creative_enforcement_settings": {
+            "policy_enforcement": 1,
+            "scan_enforcement": 3,
+            "publisher_blocks_enforcement": 2,
+            "is_default": 1
+          },
+          "auction_environment": 0,
+          "bidder": {
+            "siteId": 1,
+            "pageId": 2,
+            "formatId": 3,
+            "networkId": 73
+          }
+        }
+      }
+    ]
+  },
+  "httpCalls": [
+    {
+      "expectedRequest": {
+        "headers": {
+          "Content-Type": [
+            "application/json;charset=utf-8"
+          ],
+          "Accept": [
+            "application/json"
+          ]
+        },
+        "uri": "https://ssb.smartadserver.com/api/bid?callerId=5",
+        "body": {
+          "id": "some-request-id",
+          "device": {
+            "ua": "test-user-agent",
+            "ipv6": "2607:fb90:f27:4512:d800:cb23:a603:e245",
+            "language": "en",
+            "dnt": 0,
+            "geo": {
+              "lat": 123.0,
+              "lon": 123.0,
+              "country": "BEL",
+              "region": "BE-VWV",
+              "city": "Ieper"
+            }
+          },
+          "tmax": 1000,
+          "user": {
+            "buyeruid": "awesome-user"
+          },
+          "site": {
+            "page": "https://www.redactie24.be/shopping/colruyt-moet-ingrijpen-3-producten-onmiddellijk-uit-de-rekken-gehaald-140289",
+            "publisher": {
+              "id": "73",
+              "ext": {
+                "country": "NL"
+              }
+            },
+            "content": {
+              "language": "nl"
+            },
+            "mobile": 1,
+            "ext": {
+              "amp": 0,
+              "page_visibility": 1,
+              "inventorypartnerdomain": ""
+            }
+          },
+          "imp": [
+            {
+              "id": "1",
+              "displaymanager": "GOOGLE",
+              "tagid": "1349892507",
+              "bidfloor": 0.75,
+              "bidfloorcur": "EUR",
+              "secure": 1,
+              "native": {
+                "request": "{\"ver\":\"1.2\",\"assets\":[{\"id\":1,\"required\":1,\"title\":{\"len\":25}},{\"id\":2,\"required\":1,\"data\":{\"type\":2,\"len\":90}},{\"id\":3,\"data\":{\"type\":12,\"len\":15}},{\"id\":4,\"required\":1,\"img\":{\"type\":3,\"wmin\":1200,\"hmin\":627}},{\"id\":5,\"required\":1,\"img\":{\"type\":1,\"wmin\":100,\"hmin\":100}},{\"id\":6,\"data\":{\"type\":3,\"len\":5}}],\"eventtrackers\":[{\"event\":1,\"methods\":[1]}],\"ext\":{\"style_id\":188304,\"style_height\":1,\"style_width\":1,\"style_layout_type\":1}}",
+                "ver": "1.2"
+              },
+              "metric": [
+                {
+                  "type": "click_through_rate",
+                  "value": 0.0016456807497888803,
+                  "vendor": "EXCHANGE"
+                },
+                {
+                  "type": "viewability",
+                  "value": 0.84,
+                  "vendor": "EXCHANGE"
+                },
+                {
+                  "type": "session_depth",
+                  "value": 1.0,
+                  "vendor": "EXCHANGE"
+                }
+              ],
+              "ext": {
+                "billing_id": [
+                  "48566531714"
+                ],
+                "dfp_ad_unit_code": "/15748617/Redactie24.be/Redactie24.be-Mobile-Rectangle-Mid",
+                "ampad": 3,
+                "open_bidding": {
+                  "is_open_bidding": 1
+                },
+                "creative_enforcement_settings": {
+                  "policy_enforcement": 1,
+                  "scan_enforcement": 3,
+                  "publisher_blocks_enforcement": 2,
+                  "is_default": 1
+                },
+                "auction_environment": 0,
+                "bidder": {
+                  "siteId": 1,
+                  "pageId": 2,
+                  "formatId": 3,
+                  "networkId": 73
+                }
+              }
+            }
+          ]
+        }
+      },
+      "mockResponse": {
+        "status": 200,
+        "body": {
+          "id": "awesome-resp-id",
+          "seatbid": [
+            {
+              "bid": [
+                {
+                  "id": "295938731865870037",
+                  "impid": "1",
+                  "price": 1.54925,
+                  "adm": "{\"native\":{\"ver\":\"1.2\",\"privacy\":\"https://www.google.com/url?ct\u003dabg\u0026q\u003dhttps://www.google.com/adsense/support/bin/request.py%3Fcontact%3Dabg_afc%26url%3Dhttps://www.redactie24.be/shopping/colruyt-moet-ingrijpen-3-producten-onmiddellijk-uit-de-rekken-gehaald-140289%26gl%3DBE%26hl%3Dnl%26client%3Dca-pub-6068497455919343%26ai0%3DCMWU2JWy1YsCyELKtzAbL7bvgCburseVqyIHkmrwQpC8QASDyoukmYDnIAQapAjPWmVA1qrE-qAMBqgTyAU_Q8o1C6ubbCv5vk2HM3fs8wHZka2sgzJZ-ydmQV3eXB3NIsBx4KgRQHdARGZjklQkHnxyL7qcXt6CNK_VP-USVsgKVRLy4TZDA-KqA9So2DlO5_spLZUkXDRJcuzdsl3jErSYVMoiXBrz0o8wkoCropIrEdyguIXj7mdUa0jzOqYI7PGmVI1GQFGlxvHl0vHKqTcvJvXuL10Rb3tBTgTn11m3vvbjv-0Gr7wEXMQHIMxwRw348dNQFgNpFh_uQaTDXulE_2cYB5eIAL3OSzp3-NImnXi5BReLIz2S-O27cYQCDQFn0vanM1ZBl0h-s1F8TwASDw7itjATgBAOIBbOq9pJBkAYBoAY32AYCgAfrp8o7qAeOzhuoB5PYG6gH7paxAqgH_p6xAqgHpKOxAqgH1ckbqAemvhuoB_PRG6gHltgbqAeqm7ECqAffn7EC2AcBoAjTx6kEsAgC0ggSCIDhgBAQARgfMgKqAjoDgMAD8ggRYmlkZGVyLTEyMjQxNjY3NDGxCQJEVu77f8u_gAoEmAsByAsBsBPP7cUP0BMA2BMKghQTGhF3d3cucmVkYWN0aWUyNC5iZdgUAdAVAfgWAYAXAQ\u0026usg\u003dAOvVaw19w649NdpH5fOLqrJv5iKn\",\"assets\":[{\"id\":1,\"title\":{\"text\":\"Merkenfestival!\"}},{\"id\":2,\"data\":{\"value\":\"Merkenfestival bij Colruyt met heel wat kortingen op grote merken. Van 15/6 t.e.m. 28/6\"}},{\"id\":3,\"data\":{\"value\":\"Profiteer ervan\"}},{\"id\":4,\"img\":{\"url\":\"https://s0.2mdn.net/simgad/13451259496958298280\",\"w\":1200,\"h\":627}},{\"id\":5,\"img\":{\"url\":\"https://s0.2mdn.net/simgad/2036458828863222275\",\"w\":200,\"h\":200}}],\"link\":{\"url\":\"https://googleads.g.doubleclick.net/dbm/clk?sa\u003dL\u0026ai\u003dCMWU2JWy1YsCyELKtzAbL7bvgCburseVqyIHkmrwQpC8QASDyoukmYDnIAQapAjPWmVA1qrE-qAMBqgTyAU_Q8o1C6ubbCv5vk2HM3fs8wHZka2sgzJZ-ydmQV3eXB3NIsBx4KgRQHdARGZjklQkHnxyL7qcXt6CNK_VP-USVsgKVRLy4TZDA-KqA9So2DlO5_spLZUkXDRJcuzdsl3jErSYVMoiXBrz0o8wkoCropIrEdyguIXj7mdUa0jzOqYI7PGmVI1GQFGlxvHl0vHKqTcvJvXuL10Rb3tBTgTn11m3vvbjv-0Gr7wEXMQHIMxwRw348dNQFgNpFh_uQaTDXulE_2cYB5eIAL3OSzp3-NImnXi5BReLIz2S-O27cYQCDQFn0vanM1ZBl0h-s1F8TwASDw7itjATgBAOIBbOq9pJBkAYBoAY32AYCgAfrp8o7qAeOzhuoB5PYG6gH7paxAqgH_p6xAqgHpKOxAqgH1ckbqAemvhuoB_PRG6gHltgbqAeqm7ECqAffn7EC2AcBoAjTx6kEsAgC0ggSCIDhgBAQARgfMgKqAjoDgMAD8ggRYmlkZGVyLTEyMjQxNjY3NDGxCQJEVu77f8u_gAoEmAsByAsBsBPP7cUP0BMA2BMKghQTGhF3d3cucmVkYWN0aWUyNC5iZdgUAdAVAfgWAYAXAQ\u0026num\u003d1\u0026cid\u003dCAASEuRoVZGmAOtO71YvotJoZFcAsA\u0026sig\u003dAOD64_1hNRa4SE5uXyxwr67sFVdttkXPMw\u0026client\u003dca-pub-6068497455919343\u0026dbm_c\u003dAKAmf-DXV5GMQ1DDDLVJesOQet1BLLRN_F07dwWiFKq6MqCPa-5AOEBQ_NDUHJd3Y7ZvHAC0fPA8yvkbeGzxb22Xfcn61EBbTw\u0026dbm_d\u003dAKAmf-C7GnCTqLdVsHVmHm0th-M3KSzxsgdBt0CfU5p-ZewkMHZUp9MuXuFB3lu9eNAZk4HDQ4bcasljiO2TWzUK4FX1F9kodnzxAz8-58dvtZ_35H3RZti6IayNy2JmlX77vA-4i-MDo1y_xGmVmgYlW8htjrrh38P7oiCkk1Eeqp4GT8b5NPXJ6owKBjP-f-4j3Br85EEUqlDm8XhSeKayoEmRGSAWwyLJWPfSWMU8AYCGMoCbz3d1qdYAM7vMMAubD38vdNkIzeScpaP97fO_Rcyn_N1SdyWJ2tWSJgjEw0zMU4n7d_v1BB0L7c8dXeMey9y62DX9lkhYKc6IGSi7lzs1b3N3xg\u0026dc_exteid\u003d3253483843301142955\u0026dc_pubid\u003d4\u0026adurl\u003dhttps://www.colruyt.be/nl/acties/merkenfestival?utm_medium\u003ddisplay\u0026utm_source\u003dmatterkind\u0026utm_campaign\u003dclp_merkenfestival__2022_sa_a3___vi13_\u0026utm_content\u003dnative___2j_nl___prog_20220615\"},\"eventtrackers\":[{\"event\":1,\"method\":1,\"url\":\"https://googleads.g.doubleclick.net/dbm/ad?dbm_c\u003dAKAmf-ALROcN7i4iCF4_lIWdwE1RqHrg-hXY1YlIcMdhjf0y_Vq8xKKuLNx44WcLwmLtsgQuH-YjpoA5jssSSfE8YFwd2OIM6A\u0026dbm_d\u003dAKAmf-DYOlYXzDGNy1AWHuljIkbVGdy-3XkSQC4_DLFN7K4j3Xydgq5hqeOlKV2G3tZA0Qx7-_Q-vOikIfQ9xwfiMdyVPW8AaWknZ0G6Yh1bqlj_uRORqDWnPJDfCUs-3qRBuJGtQUzy8QiIsxVZxHL7BocEBcky55fsbVOGVAfImlSS3r_H5m4bp8L1UTtLKrL4RghtDpElRkOgcVLofR53DiYEGqDjkdFFIMCpypmUMxVsmzQJjF0bwXiqNPMe7cRv2KxToY88NAXkvM3X1kfnApXp2lIQubljbN-mvcljPppQhLHWqXlqA-mhafhbat0yllG0riHO1frZYgnqW9-a3ot-ra-Z1NVZTgs4JTab1RlBqmVm87GyEYUG8_8z85upY54zDqeNhkOBt_yU6-aJH3TVJ8n3sm4gLKXpvTP8sfTKjgKEqc2FVwWHShT1wOdgDBOyiv4W8J7tfelvhsJphT83a7exKdNAf0tJTZ-l_oo0iWveHCMz_R8KKv4lMT8HtlHZ77c1-5jx2FtyEMJiSRdiANiy8E6Syb9l8HsamiugkLmsBaLbMlOEmGsd9Qz34Pn5SUmNoKhGmQJVJuKoD5UDbL-PoWBf-7PfVgCsoSM2AeM6-0ENasMZ5Ij95_icGTJD2k5hiAtB4A2tnXdkVR1xGcxmq61Oxz4F_VQIPeTosvqXwhBfvw8jpyc4rvQqVKfqpHg-1LktGXQ9KWocMto_ddVCJHqv9SEn09SwhNqWvbunWoZNelsHLGjexpcYXIyeDAZSv4x53yxmctjkI6J5Dx_-cLcDseueVX5mUYCnC_XUegJsJqUwAY9OeaZMf05ItZmARQF30o-4VMuzqzUc6nF7BHwVi1mK8ZCm1LI-CuMZmIrrR92Iecu8nw6zObCxsP9PbNStz76qv6l1pYSxxp5AcSRuDWUgDG-D4Pwj3CuV3Tr--jNlqDIVzEyRfg9nbkRa6EPogb1CG2-jJgg7SpSMrbs4mDaZT-OOZyCEY12-PtT8_Dt-eD3HxI2-C2EZSY11Faii3qRiIlObXjuAmghElecenOQXqK_rqHoOowdRxnkNdLdiaReXKY5iErMx-wq2Q6gw3PM-oyNTbE3lOPhLbFlCVnVdPKM2InjTkOpsT32Gd-aa0Or09_IxB89Ww1JnHAxzcN9JMXSv5gbCiE04IbdcDooWncPsVmuFoYP_xIVP17kugYPA7oVvSJ4cTNiuZHLJxHvRk_kdKrM2bP0sXTSUpzRl76QORln7m2plu6uMDuFneLRt_mwpotp88ziQdDEezOrOH4GcQF8Hy4hUV5stN4XL9wUF8Bid3Rj1MDCK0fcVJ5zqx4nfqkvXmGvjfw0B172YsbXVrwnyLN3L40u4clQ0CMApqRx7xUzMEJfkh791EnVQCmPrKDuhxgUTrI0UE02HRypReiZnTKKleotRsaVAtpWik-aguBZW_CApcL0vnrDER0z1m6xFakB3tIw9uXJhuZnWIaRxzBvW_cXNWopkS7-g0pNTMnbo6mFqYRh38u0voIvHzm7KliItR10fxX_KZUF6K9YUaDPGDZ9r_zMl4YWX4VQ0d5ZP1ATgDcpQa_M7sEsTBRCodltxE4mVLYF89w3SNXU-Th7WQWWix37mbL3iA6JffljlwiXqxe8NnSsHLYaNgk1rjAGKpRw4pbyNMePymohg3k26tdRqwS8HG5Wt4uxby-RPIdOnqesZ-y-WuBpzwvGqgJIi5ckjjM12p5mT28FdQkVOR7kSIkzM7gBoUvSBdcLwr9DcUUV8obqakZ9dL_cjVxRuUmQ5lJBoSLLMdwE9tT6Um5FyhR51HfK43oN85GyR4srHjE_jHM2LWEPdB4MUG69V7bAUCGCsh3hl2rcNiTP7aWVrDBIgj5XPBmhxWudPJjNY8zHbycpV-BjSIxwQ9kRI8ykxBYLG8fjJZHmoXFM0t0mOhtJogp2yaKXDLsQCnU_X0SkpS9KPCDE1Bf7Npw6K_kvLuvVZR3NYRYvCu6pxGKhBLB83ZcM4-Lo2ij2NDTLDTl2XAYOCKCrSIwTN2mMa35srI20IXP2PBnhCVPVncJfoWaGzG_MKrQFj4jWqpNo0gFVvJfwx2nPdYJ6sMSQsy50vB-NJEvz9W80H7yoann5M4KjrRftg40AAUQeknwqCBuLlxqN7zISUXm1i0dlzEeMBtqY0d1HSUCdoPr2sJL3rKlrw5Ap1zChcVV_HE5RtQzFgcGy0yXFcTtf1DNJ5A1SQYG4JHwQrI-qKxdSBLSQ-dg_CO-Zy-EmvN4Ys0S82zzU2-kmkR-yj4xAQ4lqLUxw2ux4fsyHayADQPSJgC1ACKE2wd0-6kyOPDVXBAZECWK13tStxR5XR27kSgkvx6Ve3RKPa9P4x07GO5ih6K67i5y9kIaGVokNHtkmsR2m0AzMrkW1VcK81YI_800Bm_MHgk93uDrCoPpPfk4lCVMh6VGiS9YgxXCui74V4Kq6CY-N-U34siIT3iLgxIND3jrGcN2NabVPz7sshPYGrPez6SDJtExdVPom-SCHxvtVWTDCnq5eud_mIIOT44uoK7XbQZ6ae7AVYdhbvvKDhGarm-V4txmfHqkF9_sZYQ1NI2DD1sI1RU-N8DriBqMTT56kwrwifCp1Y8Qe-Q7sr_K3nNdE5nBJABRiTKdpHQ-ZpvJTLslTJmjrXDMlgjkcx3F06KQLvQ4kyrO9PeCIyya79Clay0yJ7IbMNtQ5H_R84AOMS0-DrnZBsW0-y1Z21h7UjHvEYkIPAvmMi8uA2Jz_LROi8munwwcdyFGg3U5uX-5hW9YbV3NYANWcajk0QsOJfrO5kQr4EQ7ulzXPTOavnfnYlEzXEz6LF2g_wpT3uVh2IZK9opwtAwD3MDrbukKstwVOQAM4WbUp8_DRGJP4XTmrqpAZZ70dLm9CrxjS55fmCA9LjmBPGLA4A97pNTfjziXL6RwWCISDfaPb3YBeF7ILmLuuLpXweIf3e1R61FBg8x8vIbC_CgwSOhLrAQmsgAVv_o-9aFFL38mTmOj1z1wpkjX4WDzebnqClSsfHfZXTnea9skm7oHMnmUN2BH4brF5e8Zyi1DmdrizQ8A\u0026pr\u003d60:2.532574\u0026cid\u003dCAASEuRoVZGmAOtO71YvotJoZFcAsA\u0026dc_exteid\u003d3253483843301142955\u0026dc_pubid\u003d4\"}]}}",
+                  "adomain": [
+                    "colruyt.be"
+                  ],
+                  "crid": "431321529",
+                  "w": 0,
+                  "h": 0,
+                  "exp": 0,
+                  "qagmediarating": 0,
+                  "ext": {
+                    "event_notification_token": {
+                      "payload": "3305.295938731865870037.1656056869251"
+                    },
+                    "impression_tracking_url": [
+                      "https://ssb-itx5.smartadserver.com:443/api/imp?callerid\u003d3\u0026rtb\u003d1\u0026rtbnid\u003d3305\u0026rtbbid\u003d295938731865870037\u0026rtbh\u003ddc4394811e91fdf08152b776f92c56d8e579c439\u0026rtblt\u003d637916536692508131\u0026rtbet\u003d1\u0026rtbptnid\u003d76\u0026cftgid\u003d16747b4b6788"
+                    ],
+                    "third_party_buyer_token": "AKAmf-DVv2DRJUgEPOajfj9Fo42XjLuHvqfOu6JQ5cpX6aEWvjp3c9AG1996IBT-ikYiT6HWItxrqDB6T66XtyhccpqLug1SOwKH9uyZQtUmVFpnRPVwRaCtZJs_c1Gl_ZEAvvUvIHvd"
+                  }
+                }
+              ],
+              "seat": "118133"
+            }
+          ],
+          "cur": "EUR",
+          "statuscode": 0,
+          "ext": {
+            "responsetimemillis": {
+              "acuityads": 154
+            },
+            "tmaxrequest": 1000
+          }
+        }
+      }
+    }
+  ],
+  "expectedBidResponses": [
+    {
+      "bids": [
+        {
+          "bid": {
+            "id": "295938731865870037",
+            "impid": "1",
+            "price": 1.54925,
+            "adm": "{\"native\":{\"ver\":\"1.2\",\"privacy\":\"https://www.google.com/url?ct\u003dabg\u0026q\u003dhttps://www.google.com/adsense/support/bin/request.py%3Fcontact%3Dabg_afc%26url%3Dhttps://www.redactie24.be/shopping/colruyt-moet-ingrijpen-3-producten-onmiddellijk-uit-de-rekken-gehaald-140289%26gl%3DBE%26hl%3Dnl%26client%3Dca-pub-6068497455919343%26ai0%3DCMWU2JWy1YsCyELKtzAbL7bvgCburseVqyIHkmrwQpC8QASDyoukmYDnIAQapAjPWmVA1qrE-qAMBqgTyAU_Q8o1C6ubbCv5vk2HM3fs8wHZka2sgzJZ-ydmQV3eXB3NIsBx4KgRQHdARGZjklQkHnxyL7qcXt6CNK_VP-USVsgKVRLy4TZDA-KqA9So2DlO5_spLZUkXDRJcuzdsl3jErSYVMoiXBrz0o8wkoCropIrEdyguIXj7mdUa0jzOqYI7PGmVI1GQFGlxvHl0vHKqTcvJvXuL10Rb3tBTgTn11m3vvbjv-0Gr7wEXMQHIMxwRw348dNQFgNpFh_uQaTDXulE_2cYB5eIAL3OSzp3-NImnXi5BReLIz2S-O27cYQCDQFn0vanM1ZBl0h-s1F8TwASDw7itjATgBAOIBbOq9pJBkAYBoAY32AYCgAfrp8o7qAeOzhuoB5PYG6gH7paxAqgH_p6xAqgHpKOxAqgH1ckbqAemvhuoB_PRG6gHltgbqAeqm7ECqAffn7EC2AcBoAjTx6kEsAgC0ggSCIDhgBAQARgfMgKqAjoDgMAD8ggRYmlkZGVyLTEyMjQxNjY3NDGxCQJEVu77f8u_gAoEmAsByAsBsBPP7cUP0BMA2BMKghQTGhF3d3cucmVkYWN0aWUyNC5iZdgUAdAVAfgWAYAXAQ\u0026usg\u003dAOvVaw19w649NdpH5fOLqrJv5iKn\",\"assets\":[{\"id\":1,\"title\":{\"text\":\"Merkenfestival!\"}},{\"id\":2,\"data\":{\"value\":\"Merkenfestival bij Colruyt met heel wat kortingen op grote merken. Van 15/6 t.e.m. 28/6\"}},{\"id\":3,\"data\":{\"value\":\"Profiteer ervan\"}},{\"id\":4,\"img\":{\"url\":\"https://s0.2mdn.net/simgad/13451259496958298280\",\"w\":1200,\"h\":627}},{\"id\":5,\"img\":{\"url\":\"https://s0.2mdn.net/simgad/2036458828863222275\",\"w\":200,\"h\":200}}],\"link\":{\"url\":\"https://googleads.g.doubleclick.net/dbm/clk?sa\u003dL\u0026ai\u003dCMWU2JWy1YsCyELKtzAbL7bvgCburseVqyIHkmrwQpC8QASDyoukmYDnIAQapAjPWmVA1qrE-qAMBqgTyAU_Q8o1C6ubbCv5vk2HM3fs8wHZka2sgzJZ-ydmQV3eXB3NIsBx4KgRQHdARGZjklQkHnxyL7qcXt6CNK_VP-USVsgKVRLy4TZDA-KqA9So2DlO5_spLZUkXDRJcuzdsl3jErSYVMoiXBrz0o8wkoCropIrEdyguIXj7mdUa0jzOqYI7PGmVI1GQFGlxvHl0vHKqTcvJvXuL10Rb3tBTgTn11m3vvbjv-0Gr7wEXMQHIMxwRw348dNQFgNpFh_uQaTDXulE_2cYB5eIAL3OSzp3-NImnXi5BReLIz2S-O27cYQCDQFn0vanM1ZBl0h-s1F8TwASDw7itjATgBAOIBbOq9pJBkAYBoAY32AYCgAfrp8o7qAeOzhuoB5PYG6gH7paxAqgH_p6xAqgHpKOxAqgH1ckbqAemvhuoB_PRG6gHltgbqAeqm7ECqAffn7EC2AcBoAjTx6kEsAgC0ggSCIDhgBAQARgfMgKqAjoDgMAD8ggRYmlkZGVyLTEyMjQxNjY3NDGxCQJEVu77f8u_gAoEmAsByAsBsBPP7cUP0BMA2BMKghQTGhF3d3cucmVkYWN0aWUyNC5iZdgUAdAVAfgWAYAXAQ\u0026num\u003d1\u0026cid\u003dCAASEuRoVZGmAOtO71YvotJoZFcAsA\u0026sig\u003dAOD64_1hNRa4SE5uXyxwr67sFVdttkXPMw\u0026client\u003dca-pub-6068497455919343\u0026dbm_c\u003dAKAmf-DXV5GMQ1DDDLVJesOQet1BLLRN_F07dwWiFKq6MqCPa-5AOEBQ_NDUHJd3Y7ZvHAC0fPA8yvkbeGzxb22Xfcn61EBbTw\u0026dbm_d\u003dAKAmf-C7GnCTqLdVsHVmHm0th-M3KSzxsgdBt0CfU5p-ZewkMHZUp9MuXuFB3lu9eNAZk4HDQ4bcasljiO2TWzUK4FX1F9kodnzxAz8-58dvtZ_35H3RZti6IayNy2JmlX77vA-4i-MDo1y_xGmVmgYlW8htjrrh38P7oiCkk1Eeqp4GT8b5NPXJ6owKBjP-f-4j3Br85EEUqlDm8XhSeKayoEmRGSAWwyLJWPfSWMU8AYCGMoCbz3d1qdYAM7vMMAubD38vdNkIzeScpaP97fO_Rcyn_N1SdyWJ2tWSJgjEw0zMU4n7d_v1BB0L7c8dXeMey9y62DX9lkhYKc6IGSi7lzs1b3N3xg\u0026dc_exteid\u003d3253483843301142955\u0026dc_pubid\u003d4\u0026adurl\u003dhttps://www.colruyt.be/nl/acties/merkenfestival?utm_medium\u003ddisplay\u0026utm_source\u003dmatterkind\u0026utm_campaign\u003dclp_merkenfestival__2022_sa_a3___vi13_\u0026utm_content\u003dnative___2j_nl___prog_20220615\"},\"eventtrackers\":[{\"event\":1,\"method\":1,\"url\":\"https://googleads.g.doubleclick.net/dbm/ad?dbm_c\u003dAKAmf-ALROcN7i4iCF4_lIWdwE1RqHrg-hXY1YlIcMdhjf0y_Vq8xKKuLNx44WcLwmLtsgQuH-YjpoA5jssSSfE8YFwd2OIM6A\u0026dbm_d\u003dAKAmf-DYOlYXzDGNy1AWHuljIkbVGdy-3XkSQC4_DLFN7K4j3Xydgq5hqeOlKV2G3tZA0Qx7-_Q-vOikIfQ9xwfiMdyVPW8AaWknZ0G6Yh1bqlj_uRORqDWnPJDfCUs-3qRBuJGtQUzy8QiIsxVZxHL7BocEBcky55fsbVOGVAfImlSS3r_H5m4bp8L1UTtLKrL4RghtDpElRkOgcVLofR53DiYEGqDjkdFFIMCpypmUMxVsmzQJjF0bwXiqNPMe7cRv2KxToY88NAXkvM3X1kfnApXp2lIQubljbN-mvcljPppQhLHWqXlqA-mhafhbat0yllG0riHO1frZYgnqW9-a3ot-ra-Z1NVZTgs4JTab1RlBqmVm87GyEYUG8_8z85upY54zDqeNhkOBt_yU6-aJH3TVJ8n3sm4gLKXpvTP8sfTKjgKEqc2FVwWHShT1wOdgDBOyiv4W8J7tfelvhsJphT83a7exKdNAf0tJTZ-l_oo0iWveHCMz_R8KKv4lMT8HtlHZ77c1-5jx2FtyEMJiSRdiANiy8E6Syb9l8HsamiugkLmsBaLbMlOEmGsd9Qz34Pn5SUmNoKhGmQJVJuKoD5UDbL-PoWBf-7PfVgCsoSM2AeM6-0ENasMZ5Ij95_icGTJD2k5hiAtB4A2tnXdkVR1xGcxmq61Oxz4F_VQIPeTosvqXwhBfvw8jpyc4rvQqVKfqpHg-1LktGXQ9KWocMto_ddVCJHqv9SEn09SwhNqWvbunWoZNelsHLGjexpcYXIyeDAZSv4x53yxmctjkI6J5Dx_-cLcDseueVX5mUYCnC_XUegJsJqUwAY9OeaZMf05ItZmARQF30o-4VMuzqzUc6nF7BHwVi1mK8ZCm1LI-CuMZmIrrR92Iecu8nw6zObCxsP9PbNStz76qv6l1pYSxxp5AcSRuDWUgDG-D4Pwj3CuV3Tr--jNlqDIVzEyRfg9nbkRa6EPogb1CG2-jJgg7SpSMrbs4mDaZT-OOZyCEY12-PtT8_Dt-eD3HxI2-C2EZSY11Faii3qRiIlObXjuAmghElecenOQXqK_rqHoOowdRxnkNdLdiaReXKY5iErMx-wq2Q6gw3PM-oyNTbE3lOPhLbFlCVnVdPKM2InjTkOpsT32Gd-aa0Or09_IxB89Ww1JnHAxzcN9JMXSv5gbCiE04IbdcDooWncPsVmuFoYP_xIVP17kugYPA7oVvSJ4cTNiuZHLJxHvRk_kdKrM2bP0sXTSUpzRl76QORln7m2plu6uMDuFneLRt_mwpotp88ziQdDEezOrOH4GcQF8Hy4hUV5stN4XL9wUF8Bid3Rj1MDCK0fcVJ5zqx4nfqkvXmGvjfw0B172YsbXVrwnyLN3L40u4clQ0CMApqRx7xUzMEJfkh791EnVQCmPrKDuhxgUTrI0UE02HRypReiZnTKKleotRsaVAtpWik-aguBZW_CApcL0vnrDER0z1m6xFakB3tIw9uXJhuZnWIaRxzBvW_cXNWopkS7-g0pNTMnbo6mFqYRh38u0voIvHzm7KliItR10fxX_KZUF6K9YUaDPGDZ9r_zMl4YWX4VQ0d5ZP1ATgDcpQa_M7sEsTBRCodltxE4mVLYF89w3SNXU-Th7WQWWix37mbL3iA6JffljlwiXqxe8NnSsHLYaNgk1rjAGKpRw4pbyNMePymohg3k26tdRqwS8HG5Wt4uxby-RPIdOnqesZ-y-WuBpzwvGqgJIi5ckjjM12p5mT28FdQkVOR7kSIkzM7gBoUvSBdcLwr9DcUUV8obqakZ9dL_cjVxRuUmQ5lJBoSLLMdwE9tT6Um5FyhR51HfK43oN85GyR4srHjE_jHM2LWEPdB4MUG69V7bAUCGCsh3hl2rcNiTP7aWVrDBIgj5XPBmhxWudPJjNY8zHbycpV-BjSIxwQ9kRI8ykxBYLG8fjJZHmoXFM0t0mOhtJogp2yaKXDLsQCnU_X0SkpS9KPCDE1Bf7Npw6K_kvLuvVZR3NYRYvCu6pxGKhBLB83ZcM4-Lo2ij2NDTLDTl2XAYOCKCrSIwTN2mMa35srI20IXP2PBnhCVPVncJfoWaGzG_MKrQFj4jWqpNo0gFVvJfwx2nPdYJ6sMSQsy50vB-NJEvz9W80H7yoann5M4KjrRftg40AAUQeknwqCBuLlxqN7zISUXm1i0dlzEeMBtqY0d1HSUCdoPr2sJL3rKlrw5Ap1zChcVV_HE5RtQzFgcGy0yXFcTtf1DNJ5A1SQYG4JHwQrI-qKxdSBLSQ-dg_CO-Zy-EmvN4Ys0S82zzU2-kmkR-yj4xAQ4lqLUxw2ux4fsyHayADQPSJgC1ACKE2wd0-6kyOPDVXBAZECWK13tStxR5XR27kSgkvx6Ve3RKPa9P4x07GO5ih6K67i5y9kIaGVokNHtkmsR2m0AzMrkW1VcK81YI_800Bm_MHgk93uDrCoPpPfk4lCVMh6VGiS9YgxXCui74V4Kq6CY-N-U34siIT3iLgxIND3jrGcN2NabVPz7sshPYGrPez6SDJtExdVPom-SCHxvtVWTDCnq5eud_mIIOT44uoK7XbQZ6ae7AVYdhbvvKDhGarm-V4txmfHqkF9_sZYQ1NI2DD1sI1RU-N8DriBqMTT56kwrwifCp1Y8Qe-Q7sr_K3nNdE5nBJABRiTKdpHQ-ZpvJTLslTJmjrXDMlgjkcx3F06KQLvQ4kyrO9PeCIyya79Clay0yJ7IbMNtQ5H_R84AOMS0-DrnZBsW0-y1Z21h7UjHvEYkIPAvmMi8uA2Jz_LROi8munwwcdyFGg3U5uX-5hW9YbV3NYANWcajk0QsOJfrO5kQr4EQ7ulzXPTOavnfnYlEzXEz6LF2g_wpT3uVh2IZK9opwtAwD3MDrbukKstwVOQAM4WbUp8_DRGJP4XTmrqpAZZ70dLm9CrxjS55fmCA9LjmBPGLA4A97pNTfjziXL6RwWCISDfaPb3YBeF7ILmLuuLpXweIf3e1R61FBg8x8vIbC_CgwSOhLrAQmsgAVv_o-9aFFL38mTmOj1z1wpkjX4WDzebnqClSsfHfZXTnea9skm7oHMnmUN2BH4brF5e8Zyi1DmdrizQ8A\u0026pr\u003d60:2.532574\u0026cid\u003dCAASEuRoVZGmAOtO71YvotJoZFcAsA\u0026dc_exteid\u003d3253483843301142955\u0026dc_pubid\u003d4\"}]}}",
+            "adomain": [
+              "colruyt.be"
+            ],
+            "crid": "431321529",
+            "ext": {
+              "event_notification_token": {
+                "payload": "3305.295938731865870037.1656056869251"
+              },
+              "impression_tracking_url": [
+                "https://ssb-itx5.smartadserver.com:443/api/imp?callerid\u003d3\u0026rtb\u003d1\u0026rtbnid\u003d3305\u0026rtbbid\u003d295938731865870037\u0026rtbh\u003ddc4394811e91fdf08152b776f92c56d8e579c439\u0026rtblt\u003d637916536692508131\u0026rtbet\u003d1\u0026rtbptnid\u003d76\u0026cftgid\u003d16747b4b6788"
+              ],
+              "third_party_buyer_token": "AKAmf-DVv2DRJUgEPOajfj9Fo42XjLuHvqfOu6JQ5cpX6aEWvjp3c9AG1996IBT-ikYiT6HWItxrqDB6T66XtyhccpqLug1SOwKH9uyZQtUmVFpnRPVwRaCtZJs_c1Gl_ZEAvvUvIHvd"
+            }
+          },
+          "type": "native"
+        }
+      ]
+    }
+  ]
+}
\ No newline at end of file
diff --git a/adapters/ucfunnel/ucfunnel_test.go b/adapters/ucfunnel/ucfunnel_test.go
index 95ac5985..557972ef 100644
--- a/adapters/ucfunnel/ucfunnel_test.go
+++ b/adapters/ucfunnel/ucfunnel_test.go
@@ -5,7 +5,7 @@ import (
 	"fmt"
 	"testing"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/openrtb_ext"
diff --git a/adapters/vrtcal/vrtcaltest/exemplary/web-simple-banner.json b/adapters/vrtcal/vrtcaltest/exemplary/web-simple-banner.json
new file mode 100644
index 00000000..62fd90cf
--- /dev/null
+++ b/adapters/vrtcal/vrtcaltest/exemplary/web-simple-banner.json
@@ -0,0 +1,102 @@
+{
+  "mockBidRequest": {
+    "id": "test-request-id",
+    "imp": [
+      {
+        "id": "test-imp-id",
+        "banner": {
+          "format": [
+            {
+              "w": 300,
+              "h": 250
+            }
+          ]
+        },
+        "ext": {
+          "bidder": {
+            "Just_an_unused_vrtcal_param": "unused_data_for_this"
+          }
+        }
+      }
+    ],
+    "site": {
+      "id": "fake-site-id",
+      "page": "http://www.vrtcal.com"
+    }
+  },
+  "httpCalls": [
+    {
+      "expectedRequest": {
+        "uri": "http://rtb.vrtcal.com/bidder_prebid.vap?ssp=1804",
+        "body": {
+          "id": "test-request-id",
+          "imp": [
+            {
+              "id": "test-imp-id",
+              "banner": {
+                "format": [
+                  {
+                    "w": 300,
+                    "h": 250
+                  }
+                ]
+              },
+
+              "ext": {
+                 "bidder": {
+                    "Just_an_unused_vrtcal_param": "unused_data_for_this"
+                 }
+              }
+            }
+          ],
+          "site": {
+            "id": "fake-site-id",
+            "page": "http://www.vrtcal.com"
+          }
+        }
+      },
+      "mockResponse": {
+        "status": 200,
+        "body": {
+          "id": "test-request-id",
+          "seatbid": [
+            {
+              "seat": "vrtcal",
+              "bid": [
+                {
+                  "id": "8ee514f1-b2b8-4abb-89fd-084437d1e800",
+                  "impid": "test-imp-id",
+                  "price": 0.500000,
+                  "adm": "some-test-ad",
+                  "crid": "crid_10",
+                  "h": 250,
+                  "w": 300
+                }
+              ]
+            }
+          ],
+          "cur": "USD"
+        }
+      }
+    }
+  ],
+  "expectedBidResponses": [
+    {
+      "currency": "USD",
+      "bids": [
+        {
+          "bid": {
+            "id": "8ee514f1-b2b8-4abb-89fd-084437d1e800",
+            "impid": "test-imp-id",
+            "price": 0.5,
+            "adm": "some-test-ad",
+            "crid": "crid_10",
+            "w": 300,
+            "h": 250
+          },
+          "type": "banner"
+        }
+      ]
+    }
+  ]
+}
diff --git a/adapters/vrtcal/vrtcaltest/exemplary/web-simple-video.json b/adapters/vrtcal/vrtcaltest/exemplary/web-simple-video.json
new file mode 100644
index 00000000..f70c547a
--- /dev/null
+++ b/adapters/vrtcal/vrtcaltest/exemplary/web-simple-video.json
@@ -0,0 +1,98 @@
+{
+  "mockBidRequest": {
+    "id": "test-request-id",
+    "imp": [
+      {
+        "id": "test-imp-id",
+        "video": {
+                "mimes": ["video/mp4"],
+                "protocols": [2, 5],
+                "w": 300,
+                "h": 250
+        },
+        "ext": {
+          "bidder": {
+            "Just_an_unused_vrtcal_param": "unused_data_for_this"
+          }
+        }
+      }
+    ],
+    "site": {
+      "id": "fake-site-id",
+      "page": "http://www.vrtcal.com"
+    }
+  },
+  "httpCalls": [
+    {
+      "expectedRequest": {
+        "uri": "http://rtb.vrtcal.com/bidder_prebid.vap?ssp=1804",
+        "body": {
+          "id": "test-request-id",
+          "imp": [
+            {
+              "id": "test-imp-id",
+              "video": {
+                "mimes": ["video/mp4"],
+                "protocols": [2, 5],
+                "w": 300,
+                "h": 250
+              },
+
+              "ext": {
+                  "bidder": {
+                    "Just_an_unused_vrtcal_param": "unused_data_for_this"
+                  }
+              }
+            }
+          ],
+          "site": {
+            "id": "fake-site-id",
+            "page": "http://www.vrtcal.com"
+          }
+        }
+      },
+      "mockResponse": {
+        "status": 200,
+        "body": {
+          "id": "test-request-id",
+          "seatbid": [
+            {
+              "seat": "vrtcal",
+              "bid": [
+                {
+                  "id": "8ee514f1-b2b8-4abb-89fd-084437d1e800",
+                  "impid": "test-imp-id",
+                  "price": 0.500000,
+                  "adm": "some-test-video-ad",
+                  "crid": "crid_10",
+                  "h": 250,
+                  "w": 300
+                }
+              ]
+            }
+          ],
+          "cur": "USD"
+        }
+      }
+    }
+  ],
+  "expectedBidResponses": [
+    {
+      "currency": "USD",
+      "bids": [
+        {
+          "bid": {
+            "id": "8ee514f1-b2b8-4abb-89fd-084437d1e800",
+            "impid": "test-imp-id",
+            "price": 0.5,
+            "adm": "some-test-video-ad",
+            "crid": "crid_10",
+            "w": 300,
+            "h": 250
+          },
+          "type": "video"
+        }
+      ]
+    }
+  ]
+}
diff --git a/amp/parse_test.go b/amp/parse_test.go
index 91027f8e..7a589bb4 100644
--- a/amp/parse_test.go
+++ b/amp/parse_test.go
@@ -4,7 +4,7 @@ import (
 	"net/http"
 	"testing"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/stretchr/testify/assert"
 )
 
@@ -24,8 +24,9 @@ func TestParseParams(t *testing.T) {
 		},
 		{
 			description: "All Fields",
+			// targeting data is encoded string that looks like this: {"gam-key1":"val1","gam-key2":"val2"}
 			query: "tag_id=anyTagID&account=anyAccount&curl=anyCurl&consent_string=anyConsent&debug=1&__amp_source_origin=anyOrigin" +
-				"&slot=anySlot&timeout=42&h=1&w=2&oh=3&ow=4&ms=10x11,12x13",
+				"&slot=anySlot&timeout=42&h=1&w=2&oh=3&ow=4&ms=10x11,12x13&targeting=%7B%22gam-key1%22%3A%22val1%22%2C%22gam-key2%22%3A%22val2%22%7D",
 			expectedParams: Params{
 				Account:         "anyAccount",
 				CanonicalURL:    "anyCurl",
@@ -44,6 +45,7 @@ func TestParseParams(t *testing.T) {
 						{W: 10, H: 11}, {W: 12, H: 13},
 					},
 				},
+				Targeting: `{"gam-key1":"val1","gam-key2":"val2"}`,
 			},
 		},
 		{
diff --git a/analytics/config/config_test.go b/analytics/config/config_test.go
index 310dbe1a..32e76734 100644
--- a/analytics/config/config_test.go
+++ b/analytics/config/config_test.go
@@ -5,7 +5,7 @@ import (
 	"os"
 	"testing"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/stretchr/testify/assert"
 
 	"github.com/prebid/prebid-server/analytics"
diff --git a/analytics/filesystem/file_module_test.go b/analytics/filesystem/file_module_test.go
index 74d7c7d5..c2026104 100644
--- a/analytics/filesystem/file_module_test.go
+++ b/analytics/filesystem/file_module_test.go
@@ -9,7 +9,7 @@ import (
 	"github.com/prebid/prebid-server/analytics"
 	"github.com/prebid/prebid-server/config"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 )
 
 const TEST_DIR string = "testFiles"
diff --git a/analytics/pubstack/helpers/json_test.go b/analytics/pubstack/helpers/json_test.go
index 6bd96b88..fcdc5387 100644
--- a/analytics/pubstack/helpers/json_test.go
+++ b/analytics/pubstack/helpers/json_test.go
@@ -4,7 +4,7 @@ import (
 	"net/http"
 	"testing"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/analytics"
 	"github.com/stretchr/testify/assert"
 )
diff --git a/config/config_test.go b/config/config_test.go
index ef57d7c3..bed1bb7d 100644
--- a/config/config_test.go
+++ b/config/config_test.go
@@ -424,6 +424,11 @@ func cmpInts(t *testing.T, key string, a int, b int) {
 	assert.Equal(t, a, b, "%s: %d != %d", key, a, b)
 }
 
+func cmpInt8s(t *testing.T, key string, a *int8, b *int8) {
+	t.Helper()
+	assert.Equal(t, a, b, "%s: %d != %d", key, a, b)
+}
+
 func cmpBools(t *testing.T, key string, a bool, b bool) {
 	t.Helper()
 	assert.Equal(t, a, b, "%s: %t != %t", key, a, b)
@@ -435,6 +440,8 @@ func cmpNils(t *testing.T, key string, a interface{}) {
 }
 
 func TestFullConfig(t *testing.T) {
+	int8One := int8(1)
+
 	v := viper.New()
 	SetupViper(v, "")
 	v.SetConfigType("yaml")
@@ -469,10 +476,10 @@ func TestFullConfig(t *testing.T) {
 	cmpInts(t, "http_client_cache.idle_connection_timeout_seconds", cfg.CacheClient.IdleConnTimeout, 3)
 	cmpInts(t, "gdpr.host_vendor_id", cfg.GDPR.HostVendorID, 15)
 	cmpStrings(t, "gdpr.default_value", cfg.GDPR.DefaultValue, "1")
-	cmpStrings(t, "host_schain_node", cfg.HostSChainNode.ASI, "pbshostcompany.com")
-	cmpStrings(t, "host_schain_node", cfg.HostSChainNode.SID, "00001")
-	cmpStrings(t, "host_schain_node", cfg.HostSChainNode.RID, "BidRequest")
-	cmpInts(t, "host_schain_node", cfg.HostSChainNode.HP, 1)
+	cmpStrings(t, "host_schain_node.asi", cfg.HostSChainNode.ASI, "pbshostcompany.com")
+	cmpStrings(t, "host_schain_node.sid", cfg.HostSChainNode.SID, "00001")
+	cmpStrings(t, "host_schain_node.rid", cfg.HostSChainNode.RID, "BidRequest")
+	cmpInt8s(t, "host_schain_node.hp", cfg.HostSChainNode.HP, &int8One)
 
 	//Assert the NonStandardPublishers was correctly unmarshalled
 	assert.Equal(t, []string{"pub1", "pub2"}, cfg.GDPR.NonStandardPublishers, "gdpr.non_standard_publishers")
diff --git a/endpoints/openrtb2/amp_auction_test.go b/endpoints/openrtb2/amp_auction_test.go
index a25efab0..65b736d1 100644
--- a/endpoints/openrtb2/amp_auction_test.go
+++ b/endpoints/openrtb2/amp_auction_test.go
@@ -13,7 +13,7 @@ import (
 	"testing"
 
 	"github.com/julienschmidt/httprouter"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/analytics"
 	analyticsConf "github.com/prebid/prebid-server/analytics/config"
 	"github.com/prebid/prebid-server/config"
@@ -1449,3 +1449,130 @@ func TestAmpAuctionResponseHeaders(t *testing.T) {
 		assert.Equal(t, expectedHeaders, recorder.Result().Header, test.description+":statuscode")
 	}
 }
+
+func TestRequestWithTargeting(t *testing.T) {
+	stored := map[string]json.RawMessage{
+		"1": json.RawMessage(validRequest(t, "site.json")),
+	}
+	exchange := &mockAmpExchange{}
+	endpoint, _ := NewAmpEndpoint(
+		fakeUUIDGenerator{},
+		exchange,
+		newParamsValidator(t),
+		&mockAmpStoredReqFetcher{stored},
+		empty_fetcher.EmptyFetcher{},
+		&config.Configuration{MaxRequestSize: maxSize},
+		&metricsConfig.NilMetricsEngine{},
+		analyticsConf.NewPBSAnalytics(&config.Analytics{}),
+		nil,
+		nil,
+		openrtb_ext.BuildBidderMap(),
+		empty_fetcher.EmptyFetcher{},
+	)
+	url, err := url.Parse("/openrtb2/auction/amp")
+	assert.NoError(t, err, "unexpected error received while parsing url")
+	values := url.Query()
+	values.Add("targeting", `{"gam-key1":"val1", "gam-key2":"val2"}`)
+	values.Add("tag_id", "1")
+	url.RawQuery = values.Encode()
+
+	request, err := http.NewRequest("GET", url.String(), nil)
+	if !assert.NoError(t, err) {
+		return
+	}
+	recorder := httptest.NewRecorder()
+	endpoint(recorder, request, nil)
+
+	if !assert.NotNil(t, exchange.lastRequest, "Endpoint responded with %d: %s", recorder.Code, recorder.Body.String()) {
+		return
+	}
+	assert.JSONEq(t, `{"appnexus":{"placementId":12883451}, "data":{"gam-key1":"val1", "gam-key2":"val2"}}`, string(exchange.lastRequest.Imp[0].Ext))
+}
+
+func TestSetTargeting(t *testing.T) {
+	tests := []struct {
+		description    string
+		bidRequest     openrtb2.BidRequest
+		targeting      string
+		expectedImpExt string
+		wantError      bool
+		errorMessage   string
+	}{
+		{
+			description:    "valid imp ext, valid targeting data",
+			bidRequest:     openrtb2.BidRequest{Imp: []openrtb2.Imp{{Ext: []byte(`{"appnexus":{"placementId":123}}`)}}},
+			targeting:      `{"gam-key1":"val1", "gam-key2":"val2"}`,
+			expectedImpExt: `{"appnexus":{"placementId":123}, "data": {"gam-key1":"val1", "gam-key2":"val2"}}`,
+			wantError:      false,
+			errorMessage:   "",
+		},
+		{
+			description:    "valid imp ext, empty targeting data",
+			bidRequest:     openrtb2.BidRequest{Imp: []openrtb2.Imp{{Ext: []byte(`{"appnexus":{"placementId":123}}`)}}},
+			targeting:      ``,
+			expectedImpExt: `{"appnexus":{"placementId":123}}`,
+			wantError:      false,
+			errorMessage:   "",
+		},
+		{
+			description:    "empty imp ext, valid targeting data",
+			bidRequest:     openrtb2.BidRequest{Imp: []openrtb2.Imp{{Ext: []byte(`{}`)}}},
+			targeting:      `{"gam-key1":"val1", "gam-key2":"val2"}`,
+			expectedImpExt: `{"data": {"gam-key1":"val1", "gam-key2":"val2"}}`,
+			wantError:      false,
+			errorMessage:   "",
+		},
+		{
+			description:    "nil imp ext, valid targeting data",
+			bidRequest:     openrtb2.BidRequest{Imp: []openrtb2.Imp{{Ext: nil}}},
+			targeting:      `{"gam-key1":"val1", "gam-key2":"val2"}`,
+			expectedImpExt: `{"data": {"gam-key1":"val1", "gam-key2":"val2"}}`,
+			wantError:      false,
+			errorMessage:   "",
+		},
+		{
+			description:    "imp ext has data, valid targeting data",
+			bidRequest:     openrtb2.BidRequest{Imp: []openrtb2.Imp{{Ext: []byte(`{"data":{"placementId":123}}`)}}},
+			targeting:      `{"gam-key1":"val1", "gam-key2":"val2"}`,
+			expectedImpExt: `{"data": {"gam-key1":"val1", "gam-key2":"val2", "placementId":123}}`,
+			wantError:      false,
+			errorMessage:   "",
+		},
+		{
+			description:    "imp ext has data and other fields, valid targeting data",
+			bidRequest:     openrtb2.BidRequest{Imp: []openrtb2.Imp{{Ext: []byte(`{"data":{"placementId":123}, "prebid": 123}`)}}},
+			targeting:      `{"gam-key1":"val1", "gam-key2":"val2"}`,
+			expectedImpExt: `{"data": {"gam-key1":"val1", "gam-key2":"val2", "placementId":123}, "prebid":123}`,
+			wantError:      false,
+			errorMessage:   "",
+		},
+		{
+			description:    "imp ext has invalid format, valid targeting data",
+			bidRequest:     openrtb2.BidRequest{Imp: []openrtb2.Imp{{Ext: []byte(`{123:{}`)}}},
+			targeting:      `{"gam-key1":"val1", "gam-key2":"val2"}`,
+			expectedImpExt: ``,
+			wantError:      true,
+			errorMessage:   "unable to merge imp.ext with targeting data, check targeting data is correct: Invalid JSON Document",
+		},
+		{
+			description:    "valid imp ext, invalid targeting data",
+			bidRequest:     openrtb2.BidRequest{Imp: []openrtb2.Imp{{Ext: []byte(`{"appnexus":{"placementId":123}}`)}}},
+			targeting:      `{123,}`,
+			expectedImpExt: ``,
+			wantError:      true,
+			errorMessage:   "unable to merge imp.ext with targeting data, check targeting data is correct: Invalid JSON Patch",
+		},
+	}
+
+	for _, test := range tests {
+		req := &test.bidRequest
+		err := setTargeting(req, test.targeting)
+		if test.wantError {
+			assert.EqualErrorf(t, err, test.errorMessage, "error is incorrect for test case: %s", test.description)
+		} else {
+			assert.NoError(t, err, "error should be nil for test case: %s", test.description)
+			assert.JSONEq(t, test.expectedImpExt, string(req.Imp[0].Ext), "incorrect impression extension returned for test %s", test.description)
+		}
+
+	}
+}
diff --git a/endpoints/openrtb2/auction_test.go b/endpoints/openrtb2/auction_test.go
index cd2a065f..f0e9d245 100644
--- a/endpoints/openrtb2/auction_test.go
+++ b/endpoints/openrtb2/auction_test.go
@@ -15,7 +15,13 @@ import (
 	"testing"
 	"time"
 
+	"github.com/buger/jsonparser"
 	"github.com/julienschmidt/httprouter"
+	"github.com/mxmCherry/openrtb/v16/native1"
+	nativeRequests "github.com/mxmCherry/openrtb/v16/native1/request"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
+	"github.com/stretchr/testify/assert"
+
 	analyticsConf "github.com/prebid/prebid-server/analytics/config"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
@@ -26,12 +32,6 @@ import (
 	"github.com/prebid/prebid-server/stored_requests/backends/empty_fetcher"
 	"github.com/prebid/prebid-server/stored_responses"
 	"github.com/prebid/prebid-server/util/iputil"
-
-	"github.com/buger/jsonparser"
-	"github.com/mxmCherry/openrtb/v15/native1"
-	nativeRequests "github.com/mxmCherry/openrtb/v15/native1/request"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
-	"github.com/stretchr/testify/assert"
 )
 
 func TestJsonSampleRequests(t *testing.T) {
@@ -2454,13 +2454,13 @@ func TestMapSChains(t *testing.T) {
 	const seller1SChain string = `"schain":{"complete":1,"nodes":[{"asi":"directseller1.com","sid":"00001","rid":"BidRequest1","hp":1}],"ver":"1.0"}`
 	const seller2SChain string = `"schain":{"complete":2,"nodes":[{"asi":"directseller2.com","sid":"00002","rid":"BidRequest2","hp":2}],"ver":"2.0"}`
 
-	seller1SChainUnpacked := openrtb_ext.ExtRequestPrebidSChainSChain{
+	seller1SChainUnpacked := openrtb2.SupplyChain{
 		Complete: 1,
-		Nodes: []*openrtb_ext.ExtRequestPrebidSChainSChainNode{{
+		Nodes: []openrtb2.SupplyChainNode{{
 			ASI: "directseller1.com",
 			SID: "00001",
 			RID: "BidRequest1",
-			HP:  1,
+			HP:  openrtb2.Int8Ptr(1),
 		}},
 		Ver: "1.0",
 	}
@@ -2468,8 +2468,8 @@ func TestMapSChains(t *testing.T) {
 	tests := []struct {
 		description         string
 		bidRequest          openrtb2.BidRequest
-		wantReqExtSChain    *openrtb_ext.ExtRequestPrebidSChainSChain
-		wantSourceExtSChain *openrtb_ext.ExtRequestPrebidSChainSChain
+		wantReqExtSChain    *openrtb2.SupplyChain
+		wantSourceExtSChain *openrtb2.SupplyChain
 		wantError           bool
 	}{
 		{
diff --git a/endpoints/openrtb2/interstitial_test.go b/endpoints/openrtb2/interstitial_test.go
index 0a3254b4..bf20fba6 100644
--- a/endpoints/openrtb2/interstitial_test.go
+++ b/endpoints/openrtb2/interstitial_test.go
@@ -4,7 +4,7 @@ import (
 	"encoding/json"
 	"testing"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/openrtb_ext"
 	"github.com/stretchr/testify/assert"
 )
diff --git a/endpoints/openrtb2/test_utils.go b/endpoints/openrtb2/test_utils.go
index c9327976..c54d8b82 100644
--- a/endpoints/openrtb2/test_utils.go
+++ b/endpoints/openrtb2/test_utils.go
@@ -17,7 +17,8 @@ import (
 
 	"github.com/buger/jsonparser"
 	"github.com/julienschmidt/httprouter"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb3"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/analytics"
 	analyticsConf "github.com/prebid/prebid-server/analytics/config"
@@ -804,7 +805,7 @@ func (e *nobidExchange) HoldAuction(ctx context.Context, auctionRequest exchange
 	return &openrtb2.BidResponse{
 		ID:    r.BidRequest.ID,
 		BidID: "test bid id",
-		NBR:   openrtb2.NoBidReasonCodeUnknownError.Ptr(),
+		NBR:   openrtb3.NoBidUnknownError.Ptr(),
 	}, nil
 }
 
diff --git a/endpoints/openrtb2/video_auction_test.go b/endpoints/openrtb2/video_auction_test.go
index 8ffa945a..988bf706 100644
--- a/endpoints/openrtb2/video_auction_test.go
+++ b/endpoints/openrtb2/video_auction_test.go
@@ -21,7 +21,8 @@ import (
 	"github.com/prebid/prebid-server/prebid_cache_client"
 	"github.com/prebid/prebid-server/stored_requests/backends/empty_fetcher"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/adcom1"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	gometrics "github.com/rcrowley/go-metrics"
 	"github.com/stretchr/testify/assert"
 )
@@ -335,9 +336,7 @@ func TestVideoEndpointValidationsPositive(t *testing.T) {
 	mimes = append(mimes, "mp4")
 	mimes = append(mimes, "")
 
-	videoProtocols := make([]openrtb2.Protocol, 0)
-	videoProtocols = append(videoProtocols, 15)
-	videoProtocols = append(videoProtocols, 30)
+	videoProtocols := []adcom1.MediaCreativeSubtype{15, 30}
 
 	req := openrtb_ext.BidRequestVideo{
 		StoredRequestId: "123",
@@ -378,7 +377,7 @@ func TestVideoEndpointValidationsCritical(t *testing.T) {
 	mimes = append(mimes, "")
 	mimes = append(mimes, "")
 
-	videoProtocols := make([]openrtb2.Protocol, 0)
+	videoProtocols := []adcom1.MediaCreativeSubtype{}
 
 	req := openrtb_ext.BidRequestVideo{
 		StoredRequestId: "",
@@ -447,9 +446,7 @@ func TestVideoEndpointValidationsPodErrors(t *testing.T) {
 	mimes = append(mimes, "mp4")
 	mimes = append(mimes, "")
 
-	videoProtocols := make([]openrtb2.Protocol, 0)
-	videoProtocols = append(videoProtocols, 15)
-	videoProtocols = append(videoProtocols, 30)
+	videoProtocols := []adcom1.MediaCreativeSubtype{15, 30}
 
 	req := openrtb_ext.BidRequestVideo{
 		StoredRequestId: "123",
@@ -517,9 +514,7 @@ func TestVideoEndpointValidationsSiteAndApp(t *testing.T) {
 	mimes = append(mimes, "mp4")
 	mimes = append(mimes, "")
 
-	videoProtocols := make([]openrtb2.Protocol, 0)
-	videoProtocols = append(videoProtocols, 15)
-	videoProtocols = append(videoProtocols, 30)
+	videoProtocols := []adcom1.MediaCreativeSubtype{15, 30}
 
 	req := openrtb_ext.BidRequestVideo{
 		StoredRequestId: "123",
@@ -575,9 +570,7 @@ func TestVideoEndpointValidationsSiteMissingRequiredField(t *testing.T) {
 	mimes = append(mimes, "mp4")
 	mimes = append(mimes, "")
 
-	videoProtocols := make([]openrtb2.Protocol, 0)
-	videoProtocols = append(videoProtocols, 15)
-	videoProtocols = append(videoProtocols, 30)
+	videoProtocols := []adcom1.MediaCreativeSubtype{15, 30}
 
 	req := openrtb_ext.BidRequestVideo{
 		StoredRequestId: "123",
@@ -998,25 +991,25 @@ func TestCreateImpressionTemplate(t *testing.T) {
 
 	imp := openrtb2.Imp{}
 	imp.Video = &openrtb2.Video{}
-	imp.Video.Protocols = []openrtb2.Protocol{1, 2}
+	imp.Video.Protocols = []adcom1.MediaCreativeSubtype{1, 2}
 	imp.Video.MIMEs = []string{"video/mp4"}
 	imp.Video.H = 200
 	imp.Video.W = 400
-	imp.Video.PlaybackMethod = []openrtb2.PlaybackMethod{5, 6}
+	imp.Video.PlaybackMethod = []adcom1.PlaybackMethod{5, 6}
 
 	video := openrtb2.Video{}
-	video.Protocols = []openrtb2.Protocol{3, 4}
+	video.Protocols = []adcom1.MediaCreativeSubtype{3, 4}
 	video.MIMEs = []string{"video/flv"}
 	video.H = 300
 	video.W = 0
-	video.PlaybackMethod = []openrtb2.PlaybackMethod{7, 8}
+	video.PlaybackMethod = []adcom1.PlaybackMethod{7, 8}
 
 	res := createImpressionTemplate(imp, &video)
-	assert.Equal(t, res.Video.Protocols, []openrtb2.Protocol{3, 4}, "Incorrect video protocols")
+	assert.Equal(t, res.Video.Protocols, []adcom1.MediaCreativeSubtype{3, 4}, "Incorrect video protocols")
 	assert.Equal(t, res.Video.MIMEs, []string{"video/flv"}, "Incorrect video MIMEs")
 	assert.Equal(t, int(res.Video.H), 300, "Incorrect video height")
 	assert.Equal(t, int(res.Video.W), 0, "Incorrect video width")
-	assert.Equal(t, res.Video.PlaybackMethod, []openrtb2.PlaybackMethod{7, 8}, "Incorrect video playback method")
+	assert.Equal(t, res.Video.PlaybackMethod, []adcom1.PlaybackMethod{7, 8}, "Incorrect video playback method")
 }
 
 func TestCCPA(t *testing.T) {
diff --git a/exchange/adapter_util_test.go b/exchange/adapter_util_test.go
index 2423b019..c4949663 100644
--- a/exchange/adapter_util_test.go
+++ b/exchange/adapter_util_test.go
@@ -5,7 +5,7 @@ import (
 	"net/http"
 	"testing"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/adapters/appnexus"
 	"github.com/prebid/prebid-server/adapters/rubicon"
diff --git a/exchange/auction_test.go b/exchange/auction_test.go
index 455ae501..6c6d41ab 100644
--- a/exchange/auction_test.go
+++ b/exchange/auction_test.go
@@ -11,7 +11,7 @@ import (
 	"strconv"
 	"testing"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/openrtb_ext"
 	"github.com/prebid/prebid-server/prebid_cache_client"
diff --git a/exchange/bidder_test.go b/exchange/bidder_test.go
index 27ceb96d..806d2f55 100644
--- a/exchange/bidder_test.go
+++ b/exchange/bidder_test.go
@@ -17,9 +17,9 @@ import (
 	"time"
 
 	"github.com/golang/glog"
-	nativeRequests "github.com/mxmCherry/openrtb/v15/native1/request"
-	nativeResponse "github.com/mxmCherry/openrtb/v15/native1/response"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	nativeRequests "github.com/mxmCherry/openrtb/v16/native1/request"
+	nativeResponse "github.com/mxmCherry/openrtb/v16/native1/response"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/currency"
diff --git a/exchange/bidder_validate_bids_test.go b/exchange/bidder_validate_bids_test.go
index 9e12fc05..64afd63d 100644
--- a/exchange/bidder_validate_bids_test.go
+++ b/exchange/bidder_validate_bids_test.go
@@ -4,7 +4,7 @@ import (
 	"context"
 	"testing"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/adapters"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/currency"
diff --git a/exchange/events_test.go b/exchange/events_test.go
index 887122a6..15aac1cd 100644
--- a/exchange/events_test.go
+++ b/exchange/events_test.go
@@ -3,7 +3,7 @@ package exchange
 import (
 	"testing"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/openrtb_ext"
 	"github.com/stretchr/testify/assert"
 )
diff --git a/exchange/exchange_test.go b/exchange/exchange_test.go
index 0cd1c6df..2a2a0701 100644
--- a/exchange/exchange_test.go
+++ b/exchange/exchange_test.go
@@ -18,7 +18,7 @@ import (
 	"time"
 
 	"github.com/buger/jsonparser"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/stretchr/testify/assert"
 	"github.com/stretchr/testify/mock"
 	jsonpatch "gopkg.in/evanphx/json-patch.v4"
@@ -2368,10 +2368,10 @@ func newExchangeForTests(t *testing.T, filename string, expectations map[string]
 		gdprDefaultValue = gdpr.SignalNo
 	}
 
-	hostSChainNode := &openrtb_ext.ExtRequestPrebidSChainSChainNode{}
+	hostSChainNode := &openrtb2.SupplyChainNode{}
 	if hostSChainFlag {
-		hostSChainNode = &openrtb_ext.ExtRequestPrebidSChainSChainNode{
-			ASI: "pbshostcompany.com", SID: "00001", RID: "BidRequest", HP: 1,
+		hostSChainNode = &openrtb2.SupplyChainNode{
+			ASI: "pbshostcompany.com", SID: "00001", RID: "BidRequest", HP: openrtb2.Int8Ptr(1),
 		}
 	} else {
 		hostSChainNode = nil
diff --git a/exchange/gdpr_test.go b/exchange/gdpr_test.go
index e44dc970..f887db00 100644
--- a/exchange/gdpr_test.go
+++ b/exchange/gdpr_test.go
@@ -4,7 +4,7 @@ import (
 	"encoding/json"
 	"testing"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/gdpr"
 	"github.com/stretchr/testify/assert"
 )
diff --git a/exchange/targeting_test.go b/exchange/targeting_test.go
index 6aeb7f69..95860ae7 100644
--- a/exchange/targeting_test.go
+++ b/exchange/targeting_test.go
@@ -15,7 +15,7 @@ import (
 	metricsConfig "github.com/prebid/prebid-server/metrics/config"
 	"github.com/prebid/prebid-server/openrtb_ext"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/exchange/utils_test.go b/exchange/utils_test.go
index 16ac9ef1..600d0721 100644
--- a/exchange/utils_test.go
+++ b/exchange/utils_test.go
@@ -7,7 +7,7 @@ import (
 	"fmt"
 	"testing"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/config"
 	"github.com/prebid/prebid-server/errortypes"
 	"github.com/prebid/prebid-server/firstpartydata"
@@ -2599,51 +2599,51 @@ func TestRemoveUnpermissionedEids(t *testing.T) {
 		},
 		{
 			description:     "Allowed By Nil Permissions",
-			userExt:         json.RawMessage(`{"eids":[{"source":"source1","id":"anyID"}]}`),
+			userExt:         json.RawMessage(`{"eids":[{"source":"source1","uids":[{"id":"anyID"}]}]}`),
 			eidPermissions:  nil,
-			expectedUserExt: json.RawMessage(`{"eids":[{"source":"source1","id":"anyID"}]}`),
+			expectedUserExt: json.RawMessage(`{"eids":[{"source":"source1","uids":[{"id":"anyID"}]}]}`),
 		},
 		{
 			description:     "Allowed By Empty Permissions",
-			userExt:         json.RawMessage(`{"eids":[{"source":"source1","id":"anyID"}]}`),
+			userExt:         json.RawMessage(`{"eids":[{"source":"source1","uids":[{"id":"anyID"}]}]}`),
 			eidPermissions:  []openrtb_ext.ExtRequestPrebidDataEidPermission{},
-			expectedUserExt: json.RawMessage(`{"eids":[{"source":"source1","id":"anyID"}]}`),
+			expectedUserExt: json.RawMessage(`{"eids":[{"source":"source1","uids":[{"id":"anyID"}]}]}`),
 		},
 		{
 			description: "Allowed By Specific Bidder",
-			userExt:     json.RawMessage(`{"eids":[{"source":"source1","id":"anyID"}]}`),
+			userExt:     json.RawMessage(`{"eids":[{"source":"source1","uids":[{"id":"anyID"}]}]}`),
 			eidPermissions: []openrtb_ext.ExtRequestPrebidDataEidPermission{
 				{Source: "source1", Bidders: []string{"bidderA"}},
 			},
-			expectedUserExt: json.RawMessage(`{"eids":[{"source":"source1","id":"anyID"}]}`),
+			expectedUserExt: json.RawMessage(`{"eids":[{"source":"source1","uids":[{"id":"anyID"}]}]}`),
 		},
 		{
 			description: "Allowed By All Bidders",
-			userExt:     json.RawMessage(`{"eids":[{"source":"source1","id":"anyID"}]}`),
+			userExt:     json.RawMessage(`{"eids":[{"source":"source1","uids":[{"id":"anyID"}]}]}`),
 			eidPermissions: []openrtb_ext.ExtRequestPrebidDataEidPermission{
 				{Source: "source1", Bidders: []string{"*"}},
 			},
-			expectedUserExt: json.RawMessage(`{"eids":[{"source":"source1","id":"anyID"}]}`),
+			expectedUserExt: json.RawMessage(`{"eids":[{"source":"source1","uids":[{"id":"anyID"}]}]}`),
 		},
 		{
 			description: "Allowed By Lack Of Matching Source",
-			userExt:     json.RawMessage(`{"eids":[{"source":"source1","id":"anyID"}]}`),
+			userExt:     json.RawMessage(`{"eids":[{"source":"source1","uids":[{"id":"anyID"}]}]}`),
 			eidPermissions: []openrtb_ext.ExtRequestPrebidDataEidPermission{
 				{Source: "source2", Bidders: []string{"otherBidder"}},
 			},
-			expectedUserExt: json.RawMessage(`{"eids":[{"source":"source1","id":"anyID"}]}`),
+			expectedUserExt: json.RawMessage(`{"eids":[{"source":"source1","uids":[{"id":"anyID"}]}]}`),
 		},
 		{
 			description: "Allowed - Keep Other Data",
-			userExt:     json.RawMessage(`{"eids":[{"source":"source1","id":"anyID"}],"other":42}`),
+			userExt:     json.RawMessage(`{"eids":[{"source":"source1","uids":[{"id":"anyID"}]}],"other":42}`),
 			eidPermissions: []openrtb_ext.ExtRequestPrebidDataEidPermission{
 				{Source: "source1", Bidders: []string{"bidderA"}},
 			},
-			expectedUserExt: json.RawMessage(`{"eids":[{"source":"source1","id":"anyID"}],"other":42}`),
+			expectedUserExt: json.RawMessage(`{"eids":[{"source":"source1","uids":[{"id":"anyID"}]}],"other":42}`),
 		},
 		{
 			description: "Denied",
-			userExt:     json.RawMessage(`{"eids":[{"source":"source1","id":"anyID"}]}`),
+			userExt:     json.RawMessage(`{"eids":[{"source":"source1","uids":[{"id":"anyID"}]}]}`),
 			eidPermissions: []openrtb_ext.ExtRequestPrebidDataEidPermission{
 				{Source: "source1", Bidders: []string{"otherBidder"}},
 			},
@@ -2651,7 +2651,7 @@ func TestRemoveUnpermissionedEids(t *testing.T) {
 		},
 		{
 			description: "Denied - Keep Other Data",
-			userExt:     json.RawMessage(`{"eids":[{"source":"source1","id":"anyID"}],"otherdata":42}`),
+			userExt:     json.RawMessage(`{"eids":[{"source":"source1","uids":[{"id":"anyID"}]}],"otherdata":42}`),
 			eidPermissions: []openrtb_ext.ExtRequestPrebidDataEidPermission{
 				{Source: "source1", Bidders: []string{"otherBidder"}},
 			},
@@ -2659,12 +2659,12 @@ func TestRemoveUnpermissionedEids(t *testing.T) {
 		},
 		{
 			description: "Mix Of Allowed By Specific Bidder, Allowed By Lack Of Matching Source, Denied, Keep Other Data",
-			userExt:     json.RawMessage(`{"eids":[{"source":"source1","id":"anyID"},{"source":"source2","id":"anyID"},{"source":"source3","id":"anyID"}],"other":42}`),
+			userExt:     json.RawMessage(`{"eids":[{"source":"source1","uids":[{"id":"anyID1"}]},{"source":"source2","uids":[{"id":"anyID2"}]},{"source":"source3","uids":[{"id":"anyID3"}]}],"other":42}`),
 			eidPermissions: []openrtb_ext.ExtRequestPrebidDataEidPermission{
 				{Source: "source1", Bidders: []string{"bidderA"}},
 				{Source: "source3", Bidders: []string{"otherBidder"}},
 			},
-			expectedUserExt: json.RawMessage(`{"eids":[{"source":"source1","id":"anyID"},{"source":"source2","id":"anyID"}],"other":42}`),
+			expectedUserExt: json.RawMessage(`{"eids":[{"source":"source1","uids":[{"id":"anyID1"}]},{"source":"source2","uids":[{"id":"anyID2"}]}],"other":42}`),
 		},
 	}
 
@@ -2705,12 +2705,12 @@ func TestRemoveUnpermissionedEidsUnmarshalErrors(t *testing.T) {
 		{
 			description: "Malformed Eid Array Type",
 			userExt:     json.RawMessage(`{"eids":[42]}`),
-			expectedErr: "json: cannot unmarshal number into Go value of type openrtb_ext.ExtUserEid",
+			expectedErr: "json: cannot unmarshal number into Go value of type openrtb2.EID",
 		},
 		{
 			description: "Malformed Eid Item Type",
 			userExt:     json.RawMessage(`{"eids":[{"source":42,"id":"anyID"}]}`),
-			expectedErr: "json: cannot unmarshal number into Go struct field ExtUserEid.source of type string",
+			expectedErr: "json: cannot unmarshal number into Go struct field EID.source of type string",
 		},
 	}
 
@@ -3082,3 +3082,42 @@ func Test_parseAliasesGVLIDs(t *testing.T) {
 		})
 	}
 }
+
+func TestBuildExtData(t *testing.T) {
+	testCases := []struct {
+		description string
+		input       []byte
+		expectedRes string
+	}{
+		{
+			description: "Input object with int value",
+			input:       []byte(`{"someData": 123}`),
+			expectedRes: `{"data": {"someData": 123}}`,
+		},
+		{
+			description: "Input object with bool value",
+			input:       []byte(`{"someData": true}`),
+			expectedRes: `{"data": {"someData": true}}`,
+		},
+		{
+			description: "Input object with string value",
+			input:       []byte(`{"someData": "true"}`),
+			expectedRes: `{"data": {"someData": "true"}}`,
+		},
+		{
+			description: "No input object",
+			input:       []byte(`{}`),
+			expectedRes: `{"data": {}}`,
+		},
+		{
+			description: "Input object with object value",
+			input:       []byte(`{"someData": {"moreFpdData": "fpddata"}}`),
+			expectedRes: `{"data": {"someData": {"moreFpdData": "fpddata"}}}`,
+		},
+	}
+
+	for _, test := range testCases {
+		actualRes := WrapJSONInData(test.input)
+		assert.JSONEq(t, test.expectedRes, string(actualRes), "Incorrect result data")
+	}
+}
diff --git a/firstpartydata/first_party_data_test.go b/firstpartydata/first_party_data_test.go
index 27fe7e2b..fc4409f9 100644
--- a/firstpartydata/first_party_data_test.go
+++ b/firstpartydata/first_party_data_test.go
@@ -2,12 +2,13 @@ package firstpartydata
 
 import (
 	"encoding/json"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"io/ioutil"
+	"testing"
+
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/errortypes"
 	"github.com/prebid/prebid-server/openrtb_ext"
 	"github.com/stretchr/testify/assert"
-	"io/ioutil"
-	"testing"
 )
 
 func TestExtractGlobalFPD(t *testing.T) {
diff --git a/openrtb_ext/deal_tier_test.go b/openrtb_ext/deal_tier_test.go
index 29d58d6c..ccde9084 100644
--- a/openrtb_ext/deal_tier_test.go
+++ b/openrtb_ext/deal_tier_test.go
@@ -4,7 +4,7 @@ import (
 	"encoding/json"
 	"testing"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/openrtb_ext/request_wrapper_test.go b/openrtb_ext/request_wrapper_test.go
index 60ef1a33..f5cdb090 100644
--- a/openrtb_ext/request_wrapper_test.go
+++ b/openrtb_ext/request_wrapper_test.go
@@ -4,6 +4,7 @@ import (
 	"encoding/json"
 	"testing"
 
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/stretchr/testify/assert"
 )
 
@@ -22,22 +23,23 @@ func TestUserExt(t *testing.T) {
 	userExt.SetConsent(&newConsent)
 	assert.Equal(t, "NewConsent", *userExt.GetConsent(), "UserExt consent is incorrect")
 
-	newEid := []ExtUserEid{{}}
+	eid := openrtb2.EID{Source: "source", UIDs: []openrtb2.UID{{ID: "id"}}}
+	newEid := []openrtb2.EID{eid}
 	userExt.SetEid(&newEid)
-	assert.Equal(t, []ExtUserEid{{}}, *userExt.GetEid(), "UserExt eid is incorrect")
+	assert.Equal(t, []openrtb2.EID{eid}, *userExt.GetEid(), "UserExt eid is incorrect")
 
 	buyerIDs := map[string]string{"buyer": "id"}
 	newPrebid := ExtUserPrebid{BuyerUIDs: buyerIDs}
 	userExt.SetPrebid(&newPrebid)
-	assert.Equal(t, ExtUserPrebid{BuyerUIDs: buyerIDs}, *userExt.GetPrebid(), "UserExt prebid is icorrect")
+	assert.Equal(t, ExtUserPrebid{BuyerUIDs: buyerIDs}, *userExt.GetPrebid(), "UserExt prebid is incorrect")
 
 	assert.Equal(t, true, userExt.Dirty(), "UserExt should be dirty after field updates")
 
 	updatedUserExt, err := userExt.marshal()
 	assert.Nil(t, err, "Marshalling UserExt after updating should not cause an error")
 
-	expectedUserExt := json.RawMessage(`{"consent":"NewConsent","prebid":{"buyeruids":{"buyer":"id"}},"eids":[{"source":""}]}`)
-	assert.JSONEq(t, string(updatedUserExt), string(expectedUserExt), "Marshalled UserExt is incorrect")
+	expectedUserExt := json.RawMessage(`{"consent":"NewConsent","prebid":{"buyeruids":{"buyer":"id"}},"eids":[{"source":"source","uids":[{"id":"id"}]}]}`)
+	assert.JSONEq(t, string(expectedUserExt), string(updatedUserExt), "Marshalled UserExt is incorrect")
 
 	assert.Equal(t, false, userExt.Dirty(), "UserExt should not be dirty after marshalling")
 }
diff --git a/privacy/ccpa/consentwriter_test.go b/privacy/ccpa/consentwriter_test.go
index 28dfd417..f87600d2 100644
--- a/privacy/ccpa/consentwriter_test.go
+++ b/privacy/ccpa/consentwriter_test.go
@@ -4,7 +4,7 @@ import (
 	"encoding/json"
 	"testing"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/openrtb_ext"
 	"github.com/stretchr/testify/assert"
 )
diff --git a/privacy/ccpa/policy_test.go b/privacy/ccpa/policy_test.go
index ca6d0f8a..a7ede21e 100644
--- a/privacy/ccpa/policy_test.go
+++ b/privacy/ccpa/policy_test.go
@@ -4,7 +4,7 @@ import (
 	"encoding/json"
 	"testing"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/openrtb_ext"
 	"github.com/stretchr/testify/assert"
 )
diff --git a/privacy/enforcement_test.go b/privacy/enforcement_test.go
index 61899e4d..5e3baf56 100644
--- a/privacy/enforcement_test.go
+++ b/privacy/enforcement_test.go
@@ -3,7 +3,7 @@ package privacy
 import (
 	"testing"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/stretchr/testify/assert"
 	"github.com/stretchr/testify/mock"
 )
diff --git a/privacy/gdpr/consentwriter_test.go b/privacy/gdpr/consentwriter_test.go
index 5753442f..01d66f73 100644
--- a/privacy/gdpr/consentwriter_test.go
+++ b/privacy/gdpr/consentwriter_test.go
@@ -4,7 +4,7 @@ import (
 	"encoding/json"
 	"testing"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/privacy/lmt/ios_test.go b/privacy/lmt/ios_test.go
index af72cf08..60f5a792 100644
--- a/privacy/lmt/ios_test.go
+++ b/privacy/lmt/ios_test.go
@@ -4,7 +4,7 @@ import (
 	"encoding/json"
 	"testing"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/util/iosutil"
 	"github.com/stretchr/testify/assert"
 )
diff --git a/privacy/lmt/policy_test.go b/privacy/lmt/policy_test.go
index f475d2fb..75de0e47 100644
--- a/privacy/lmt/policy_test.go
+++ b/privacy/lmt/policy_test.go
@@ -3,7 +3,7 @@ package lmt
 import (
 	"testing"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/privacy/scrubber_test.go b/privacy/scrubber_test.go
index 13ac1f5c..ed43db9a 100644
--- a/privacy/scrubber_test.go
+++ b/privacy/scrubber_test.go
@@ -4,7 +4,7 @@ import (
 	"encoding/json"
 	"testing"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/privacy/writer_test.go b/privacy/writer_test.go
index f5b02387..0f1bd0c2 100644
--- a/privacy/writer_test.go
+++ b/privacy/writer_test.go
@@ -4,7 +4,7 @@ import (
 	"encoding/json"
 	"testing"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/schain/schain_test.go b/schain/schain_test.go
index 22903d69..816454b7 100644
--- a/schain/schain_test.go
+++ b/schain/schain_test.go
@@ -3,6 +3,7 @@ package schain
 import (
 	"testing"
 
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/openrtb_ext"
 	"github.com/stretchr/testify/assert"
 )
@@ -13,16 +14,16 @@ func TestBidderToPrebidChains(t *testing.T) {
 			SChains: []*openrtb_ext.ExtRequestPrebidSChain{
 				{
 					Bidders: []string{"Bidder1", "Bidder2"},
-					SChain: openrtb_ext.ExtRequestPrebidSChainSChain{
+					SChain: openrtb2.SupplyChain{
 						Complete: 1,
-						Nodes: []*openrtb_ext.ExtRequestPrebidSChainSChainNode{
+						Nodes: []openrtb2.SupplyChainNode{
 							{
 								ASI:    "asi1",
 								SID:    "sid1",
 								Name:   "name1",
 								RID:    "rid1",
 								Domain: "domain1",
-								HP:     1,
+								HP:     openrtb2.Int8Ptr(1),
 							},
 							{
 								ASI:    "asi2",
@@ -30,7 +31,7 @@ func TestBidderToPrebidChains(t *testing.T) {
 								Name:   "name2",
 								RID:    "rid2",
 								Domain: "domain2",
-								HP:     2,
+								HP:     openrtb2.Int8Ptr(2),
 							},
 						},
 						Ver: "version1",
@@ -38,7 +39,7 @@ func TestBidderToPrebidChains(t *testing.T) {
 				},
 				{
 					Bidders: []string{"Bidder3", "Bidder4"},
-					SChain:  openrtb_ext.ExtRequestPrebidSChainSChain{},
+					SChain:  openrtb2.SupplyChain{},
 				},
 			},
 		},
@@ -60,11 +61,11 @@ func TestBidderToPrebidChainsDiscardMultipleChainsForBidder(t *testing.T) {
 			SChains: []*openrtb_ext.ExtRequestPrebidSChain{
 				{
 					Bidders: []string{"Bidder1"},
-					SChain:  openrtb_ext.ExtRequestPrebidSChainSChain{},
+					SChain:  openrtb2.SupplyChain{},
 				},
 				{
 					Bidders: []string{"Bidder1", "Bidder2"},
-					SChain:  openrtb_ext.ExtRequestPrebidSChainSChain{},
+					SChain:  openrtb2.SupplyChain{},
 				},
 			},
 		},
diff --git a/schain/schainwriter_test.go b/schain/schainwriter_test.go
index 26a3fd52..c28e6196 100644
--- a/schain/schainwriter_test.go
+++ b/schain/schainwriter_test.go
@@ -4,7 +4,7 @@ import (
 	"encoding/json"
 	"testing"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/openrtb_ext"
 	"github.com/stretchr/testify/assert"
 )
@@ -22,7 +22,7 @@ func TestSChainWriter(t *testing.T) {
 		description    string
 		giveRequest    openrtb2.BidRequest
 		giveBidder     string
-		giveHostSChain *openrtb_ext.ExtRequestPrebidSChainSChainNode
+		giveHostSChain *openrtb2.SupplyChainNode
 		wantRequest    openrtb2.BidRequest
 		wantError      bool
 	}{
@@ -163,8 +163,8 @@ func TestSChainWriter(t *testing.T) {
 				Source: nil,
 			},
 			giveBidder: "testbidder",
-			giveHostSChain: &openrtb_ext.ExtRequestPrebidSChainSChainNode{
-				ASI: "pbshostcompany.com", SID: "00001", RID: "BidRequest", HP: 1,
+			giveHostSChain: &openrtb2.SupplyChainNode{
+				ASI: "pbshostcompany.com", SID: "00001", RID: "BidRequest", HP: openrtb2.Int8Ptr(1),
 			},
 			wantRequest: openrtb2.BidRequest{
 				Ext: json.RawMessage(`{"prebid":{"schains":[{"bidders":["testbidder"],"schain":{"complete":1,"nodes":[` + seller1Node + `],"ver":"1.0"}}]}}`),
@@ -180,8 +180,8 @@ func TestSChainWriter(t *testing.T) {
 				Source: nil,
 			},
 			giveBidder: "testbidder",
-			giveHostSChain: &openrtb_ext.ExtRequestPrebidSChainSChainNode{
-				ASI: "pbshostcompany.com", SID: "00001", RID: "BidRequest", HP: 1,
+			giveHostSChain: &openrtb2.SupplyChainNode{
+				ASI: "pbshostcompany.com", SID: "00001", RID: "BidRequest", HP: openrtb2.Int8Ptr(1),
 			},
 			wantRequest: openrtb2.BidRequest{
 				Ext: nil,
diff --git a/stored_responses/stored_responses_test.go b/stored_responses/stored_responses_test.go
index e63bbc99..2e7b7af4 100644
--- a/stored_responses/stored_responses_test.go
+++ b/stored_responses/stored_responses_test.go
@@ -4,10 +4,11 @@ import (
 	"context"
 	"encoding/json"
 	"errors"
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"testing"
+
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/prebid/prebid-server/openrtb_ext"
 	"github.com/stretchr/testify/assert"
-	"testing"
 )
 
 func TestRemoveImpsWithStoredResponses(t *testing.T) {
diff --git a/version/xprebidheader_test.go b/version/xprebidheader_test.go
index 1529a8f7..162204a1 100644
--- a/version/xprebidheader_test.go
+++ b/version/xprebidheader_test.go
@@ -4,7 +4,7 @@ import (
 	"encoding/json"
 	"testing"
 
-	"github.com/mxmCherry/openrtb/v15/openrtb2"
+	"github.com/mxmCherry/openrtb/v16/openrtb2"
 	"github.com/stretchr/testify/assert"
 
 	"github.com/prebid/prebid-server/openrtb_ext"