{
  "info": {
    "name": "OpenRTB 2.6 bidder tests (RTBlint samples)",
    "description": "Sample OpenRTB 2.6 bid requests to POST at a bidder. Set the bidder_url variable. Broken samples check how the bidder handles invalid input. Source: https://rtblint.org/downloads/",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "variable": [
    {
      "key": "bidder_url",
      "value": "http://localhost:8080/bid"
    }
  ],
  "item": [
    {
      "name": "Valid requests",
      "item": [
        {
          "name": "Minimal banner",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "x-openrtb-version",
                "value": "2.6"
              }
            ],
            "url": "{{bidder_url}}",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"id\": \"req-banner-1\",\n  \"at\": 1,\n  \"cur\": [\n    \"USD\"\n  ],\n  \"tmax\": 300,\n  \"site\": {\n    \"id\": \"site-1\",\n    \"domain\": \"news.example.com\",\n    \"page\": \"https://news.example.com/article/123\",\n    \"publisher\": {\n      \"id\": \"pub-9\"\n    }\n  },\n  \"device\": {\n    \"ua\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64)\",\n    \"devicetype\": 2,\n    \"ip\": \"203.0.113.7\"\n  },\n  \"imp\": [\n    {\n      \"id\": \"1\",\n      \"secure\": 1,\n      \"bidfloor\": 0.85,\n      \"bidfloorcur\": \"USD\",\n      \"banner\": {\n        \"w\": 300,\n        \"h\": 250,\n        \"format\": [\n          {\n            \"w\": 300,\n            \"h\": 250\n          },\n          {\n            \"w\": 336,\n            \"h\": 280\n          }\n        ],\n        \"pos\": 1\n      }\n    }\n  ]\n}\n",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "The smallest realistic display request: one banner imp with primary and fallback sizes, a site with publisher, secure flag set, and an explicit USD floor."
          }
        },
        {
          "name": "Native in-app",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "x-openrtb-version",
                "value": "2.6"
              }
            ],
            "url": "{{bidder_url}}",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"id\": \"req-native-1\",\n  \"at\": 1,\n  \"tmax\": 300,\n  \"app\": {\n    \"id\": \"app-77\",\n    \"bundle\": \"com.example.newsreader\",\n    \"storeurl\": \"https://play.google.com/store/apps/details?id=com.example.newsreader\",\n    \"publisher\": {\n      \"id\": \"pub-12\"\n    }\n  },\n  \"device\": {\n    \"ua\": \"Mozilla/5.0 (Linux; Android 14)\",\n    \"devicetype\": 4,\n    \"os\": \"Android\"\n  },\n  \"imp\": [\n    {\n      \"id\": \"1\",\n      \"bidfloor\": 1.5,\n      \"native\": {\n        \"request\": \"{\\\"ver\\\":\\\"1.2\\\",\\\"context\\\":1,\\\"plcmttype\\\":1,\\\"plcmtcnt\\\":1,\\\"assets\\\":[{\\\"id\\\":1,\\\"required\\\":1,\\\"title\\\":{\\\"len\\\":90}},{\\\"id\\\":2,\\\"required\\\":1,\\\"img\\\":{\\\"type\\\":3,\\\"w\\\":1200,\\\"h\\\":627}},{\\\"id\\\":3,\\\"required\\\":0,\\\"data\\\":{\\\"type\\\":2,\\\"len\\\":140}}],\\\"eventtrackers\\\":[{\\\"event\\\":1,\\\"methods\\\":[1]}]}\",\n        \"ver\": \"1.2\"\n      }\n    }\n  ]\n}\n",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "A native impression: the Native Markup Request rides as a JSON string encoded exactly once inside imp.native.request, declaring title, main image, and description assets."
          }
        },
        {
          "name": "Minimal video",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "x-openrtb-version",
                "value": "2.6"
              }
            ],
            "url": "{{bidder_url}}",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"id\": \"req-0a1b2c\",\n  \"imp\": [\n    {\n      \"id\": \"1\",\n      \"video\": {\n        \"mimes\": [\n          \"video/mp4\"\n        ]\n      }\n    }\n  ]\n}\n",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "The smallest clean OpenRTB 2.6 video bid request: an id and one impression with mimes."
          }
        },
        {
          "name": "CTV ad pod",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "x-openrtb-version",
                "value": "2.6"
              }
            ],
            "url": "{{bidder_url}}",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"id\": \"9d2f3a7e-ctv-pod\",\n  \"at\": 1,\n  \"tmax\": 300,\n  \"cur\": [\n    \"USD\"\n  ],\n  \"source\": {\n    \"schain\": {\n      \"complete\": 1,\n      \"ver\": \"1.0\",\n      \"nodes\": [\n        {\n          \"asi\": \"exchange.example.com\",\n          \"sid\": \"pub-4491\",\n          \"hp\": 1\n        }\n      ]\n    }\n  },\n  \"regs\": {\n    \"coppa\": 0,\n    \"gdpr\": 0\n  },\n  \"app\": {\n    \"id\": \"app-552\",\n    \"name\": \"StreamBox\",\n    \"bundle\": \"com.streambox.tv\",\n    \"storeurl\": \"https://apps.example.com/streambox\",\n    \"publisher\": {\n      \"id\": \"pub-4491\",\n      \"name\": \"StreamBox Media\"\n    },\n    \"content\": {\n      \"id\": \"ep-2201\",\n      \"title\": \"Chef's Table\",\n      \"series\": \"Kitchen Stories\",\n      \"season\": \"Season 4\",\n      \"episode\": 12,\n      \"genre\": \"documentary\",\n      \"livestream\": 0,\n      \"len\": 2700,\n      \"language\": \"en\",\n      \"network\": {\n        \"id\": \"net-7\",\n        \"name\": \"StreamBox Originals\"\n      },\n      \"channel\": {\n        \"id\": \"ch-12\",\n        \"name\": \"Food\"\n      }\n    }\n  },\n  \"device\": {\n    \"ua\": \"Mozilla/5.0 (SMART-TV; Linux; Tizen 7.0)\",\n    \"ip\": \"203.0.113.42\",\n    \"devicetype\": 3,\n    \"make\": \"Samsung\",\n    \"model\": \"QN90C\",\n    \"os\": \"Tizen\",\n    \"osv\": \"7.0\",\n    \"ifa\": \"38c1a2f0-52b6-4c9e-9a41-d0f83a6c1e11\",\n    \"lmt\": 0,\n    \"connectiontype\": 2,\n    \"geo\": {\n      \"country\": \"USA\",\n      \"region\": \"CA\",\n      \"type\": 2\n    }\n  },\n  \"user\": {\n    \"id\": \"u-92fd6c1b\"\n  },\n  \"imp\": [\n    {\n      \"id\": \"1\",\n      \"secure\": 1,\n      \"bidfloor\": 12.5,\n      \"bidfloorcur\": \"USD\",\n      \"rwdd\": 0,\n      \"video\": {\n        \"mimes\": [\n          \"video/mp4\"\n        ],\n        \"protocols\": [\n          3,\n          7,\n          8\n        ],\n        \"w\": 1920,\n        \"h\": 1080,\n        \"linearity\": 1,\n        \"plcmt\": 1,\n        \"pos\": 7,\n        \"podid\": \"pod-1\",\n        \"podseq\": 0,\n        \"maxseq\": 4,\n        \"poddur\": 120,\n        \"slotinpod\": 1,\n        \"minduration\": 15,\n        \"maxduration\": 30,\n        \"startdelay\": 0,\n        \"playbackmethod\": [\n          1\n        ],\n        \"playbackend\": 1,\n        \"delivery\": [\n          2\n        ],\n        \"api\": [\n          7\n        ]\n      },\n      \"pmp\": {\n        \"private_auction\": 0,\n        \"deals\": [\n          {\n            \"id\": \"deal-777\",\n            \"bidfloor\": 18,\n            \"bidfloorcur\": \"USD\",\n            \"at\": 1\n          }\n        ]\n      }\n    }\n  ]\n}\n",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "A realistic connected-TV request: app and content metadata, supply chain, and a pod-aware video impression with a PMP deal."
          }
        },
        {
          "name": "Mobile banner with consent",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "x-openrtb-version",
                "value": "2.6"
              }
            ],
            "url": "{{bidder_url}}",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"id\": \"req-banner-8842\",\n  \"test\": 0,\n  \"at\": 2,\n  \"tmax\": 200,\n  \"cur\": [\n    \"USD\"\n  ],\n  \"bcat\": [\n    \"IAB25\",\n    \"IAB26\"\n  ],\n  \"cattax\": 1,\n  \"badv\": [\n    \"competitor.example\"\n  ],\n  \"regs\": {\n    \"coppa\": 0,\n    \"gpp\": \"DBABMA~CPXxRfAPXxRfAAfKABENB\",\n    \"gpp_sid\": [\n      2\n    ]\n  },\n  \"app\": {\n    \"id\": \"app-201\",\n    \"bundle\": \"com.example.dailynews\",\n    \"storeurl\": \"https://play.example.com/dailynews\",\n    \"cat\": [\n      \"IAB12\"\n    ],\n    \"publisher\": {\n      \"id\": \"pub-88\",\n      \"name\": \"Daily News Group\"\n    }\n  },\n  \"device\": {\n    \"ua\": \"Mozilla/5.0 (Linux; Android 14; Pixel 8)\",\n    \"sua\": {\n      \"browsers\": [\n        {\n          \"brand\": \"Chromium\",\n          \"version\": [\n            \"124\"\n          ]\n        }\n      ],\n      \"platform\": {\n        \"brand\": \"Android\",\n        \"version\": [\n          \"14\"\n        ]\n      },\n      \"mobile\": 1,\n      \"source\": 2\n    },\n    \"ip\": \"198.51.100.7\",\n    \"devicetype\": 4,\n    \"make\": \"Google\",\n    \"model\": \"Pixel 8\",\n    \"os\": \"Android\",\n    \"osv\": \"14\",\n    \"language\": \"en\",\n    \"js\": 1,\n    \"connectiontype\": 6,\n    \"ifa\": \"5c9b2a44-9d1e-4f6a-8a3d-72cb0e9a1f02\"\n  },\n  \"user\": {\n    \"eids\": [\n      {\n        \"source\": \"liveramp.com\",\n        \"uids\": [\n          {\n            \"id\": \"XY1122334455\",\n            \"atype\": 3\n          }\n        ]\n      }\n    ]\n  },\n  \"imp\": [\n    {\n      \"id\": \"1\",\n      \"instl\": 0,\n      \"secure\": 1,\n      \"bidfloor\": 0.5,\n      \"banner\": {\n        \"format\": [\n          {\n            \"w\": 320,\n            \"h\": 50\n          },\n          {\n            \"w\": 300,\n            \"h\": 250\n          }\n        ],\n        \"w\": 320,\n        \"h\": 50,\n        \"pos\": 1,\n        \"btype\": [\n          4\n        ],\n        \"battr\": [\n          1,\n          3\n        ],\n        \"api\": [\n          3,\n          5\n        ]\n      }\n    }\n  ]\n}\n",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "An in-app banner request with GPP privacy signals, a structured user agent, extended IDs, and multi-format banner sizes."
          }
        },
        {
          "name": "DOOH screen",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "x-openrtb-version",
                "value": "2.6"
              }
            ],
            "url": "{{bidder_url}}",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"id\": \"req-dooh-3301\",\n  \"at\": 1,\n  \"tmax\": 400,\n  \"cur\": [\n    \"USD\"\n  ],\n  \"dooh\": {\n    \"id\": \"screen-88\",\n    \"name\": \"Airport Arrivals Billboard\",\n    \"venuetype\": [\n      \"transit.airports\"\n    ],\n    \"venuetypetax\": 1,\n    \"publisher\": {\n      \"id\": \"pub-oh-4\",\n      \"name\": \"CityScreens\"\n    },\n    \"domain\": \"cityscreens.example\",\n    \"keywords\": \"billboard,airport,arrivals\"\n  },\n  \"device\": {\n    \"devicetype\": 8,\n    \"geo\": {\n      \"lat\": 40.6413,\n      \"lon\": -73.7781,\n      \"type\": 1,\n      \"country\": \"USA\"\n    }\n  },\n  \"imp\": [\n    {\n      \"id\": \"1\",\n      \"banner\": {\n        \"w\": 1080,\n        \"h\": 1920,\n        \"pos\": 7\n      },\n      \"qty\": {\n        \"multiplier\": 42,\n        \"sourcetype\": 1,\n        \"vendor\": \"geopath.org\"\n      }\n    }\n  ]\n}\n",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "A digital out-of-home request: a DOOH venue with an OpenOOH venue type and a Qty impression multiplier."
          }
        }
      ]
    },
    {
      "name": "Broken requests",
      "item": [
        {
          "name": "Missing required fields",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "x-openrtb-version",
                "value": "2.6"
              }
            ],
            "url": "{{bidder_url}}",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"imp\": [\n    {\n      \"video\": {\n        \"w\": 640,\n        \"h\": 480\n      }\n    },\n    {\n      \"id\": \"2\"\n    }\n  ],\n  \"app\": {\n    \"bundle\": \"com.example.game\"\n  }\n}\n",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "No request id, an impression without an id, a video without mimes, and an impression with no media type at all."
          }
        },
        {
          "name": "Deprecated, moved, unknown",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "x-openrtb-version",
                "value": "2.6"
              }
            ],
            "url": "{{bidder_url}}",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"id\": \"req-0a1b2c\",\n  \"imp\": [\n    {\n      \"id\": \"1\",\n      \"video\": {\n        \"mimes\": [\n          \"video/mp4\"\n        ],\n        \"placement\": 1\n      }\n    }\n  ],\n  \"regs\": {\n    \"ext\": {\n      \"gdpr\": 1\n    }\n  },\n  \"unexpected\": true\n}\n",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "A deprecated field (video.placement), a field that moved in 2.6 (regs.ext.gdpr), and an unknown top-level field."
          }
        },
        {
          "name": "Conflicting fields",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "x-openrtb-version",
                "value": "2.6"
              }
            ],
            "url": "{{bidder_url}}",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"id\": \"req-conflicts-1\",\n  \"site\": {\n    \"id\": \"site-9\",\n    \"domain\": \"news.example\",\n    \"keywords\": \"news,politics\",\n    \"kwarray\": [\n      \"news\",\n      \"politics\"\n    ]\n  },\n  \"app\": {\n    \"bundle\": \"com.example.news\"\n  },\n  \"imp\": [\n    {\n      \"id\": \"1\",\n      \"video\": {\n        \"mimes\": [\n          \"video/mp4\"\n        ],\n        \"minduration\": 15,\n        \"maxduration\": 30,\n        \"rqddurs\": [\n          15,\n          30\n        ],\n        \"skipmin\": 5\n      }\n    }\n  ]\n}\n",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "site and app together, keywords next to kwarray, rqddurs next to minduration and maxduration, and skipmin on a non-skippable video."
          }
        },
        {
          "name": "Invalid enum values",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "x-openrtb-version",
                "value": "2.6"
              }
            ],
            "url": "{{bidder_url}}",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"id\": \"req-enums-1\",\n  \"at\": 7,\n  \"cattax\": 42,\n  \"device\": {\n    \"devicetype\": 99,\n    \"connectiontype\": 12\n  },\n  \"imp\": [\n    {\n      \"id\": \"1\",\n      \"video\": {\n        \"mimes\": [\n          \"video/mp4\"\n        ],\n        \"plcmt\": 9,\n        \"api\": [\n          99\n        ],\n        \"startdelay\": -5\n      }\n    }\n  ]\n}\n",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Out-of-range values for at, cattax, plcmt, api, startdelay, devicetype, and connectiontype, checked against the AdCOM lists."
          }
        },
        {
          "name": "Type mismatches",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "x-openrtb-version",
                "value": "2.6"
              }
            ],
            "url": "{{bidder_url}}",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"id\": 314159,\n  \"tmax\": \"250\",\n  \"cur\": \"USD\",\n  \"imp\": [\n    {\n      \"id\": \"1\",\n      \"banner\": {\n        \"w\": \"300\",\n        \"h\": 250,\n        \"format\": {\n          \"w\": 300,\n          \"h\": 250\n        }\n      }\n    }\n  ]\n}\n",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Numbers where strings belong and strings where numbers belong, plus cur as a bare string and format as a single object instead of an array."
          }
        },
        {
          "name": "Invalid JSON",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "x-openrtb-version",
                "value": "2.6"
              }
            ],
            "url": "{{bidder_url}}",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"id\": \"req-0a1b2c\",\n  \"imp\": [\n",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Malformed payload, rejected before any field rules run."
          }
        }
      ]
    }
  ]
}
