OpenRTB Bid Request Generator

Build a valid OpenRTB 2.5 or 2.6 bid request from a simple form and copy the JSON. Everything is assembled in your browser.

The OpenRTB Bid Request Generator runs entirely in your browser. The domains, device details, user ids, consent strings, and deal terms you enter are never uploaded to ArrayKit and no ad exchange or endpoint is contacted.

Open the OpenRTB Bid Request Validator

About OpenRTB Bid Request Generator

The OpenRTB Bid Request Generator turns a short form into a spec-shaped bid request you can drop straight into a mock exchange, a bidder unit test, or a Postman call. Choose OpenRTB 2.5 or 2.6, pick a banner, video, native, or audio impression, switch between site and app inventory, add sizes, device and geo, user, regs (GDPR, US Privacy, GPP), tmax, currency, and PMP deals — then copy clean JSON with empty fields omitted. One-click presets cover display, in-stream video, CTV/OTT, mobile app, and native. It is built for ad-ops engineers, SSP and DSP developers, and QA teams who need a realistic sample request fast. Every field is assembled on your device; nothing you type is uploaded and no ad endpoint is ever called.

Features

How to use the OpenRTB Bid Request Generator

  1. Pick the OpenRTB version and impression type, or start from a preset
  2. Choose site or app inventory and fill in sizes, device, and geo
  3. Set regs (GDPR, US Privacy, GPP) and add PMP deals if you need them
  4. Copy or download the generated bid request JSON

Example

Input

version: 2.6 · imp: banner 300x250 · inventory: site

Output

{
  "id": "req-1",
  "imp": [{ "id": "1", "banner": { "format": [{ "w": 300, "h": 250 }] } }],
  "site": { "domain": "example.com" },
  "at": 2,
  "cur": ["USD"]
}

A minimal 2.6 banner request — empty fields are omitted.

Common errors & troubleshooting

Frequently asked questions

What is the difference between OpenRTB 2.5 and 2.6 in this generator?
The generator emits version-correct keys: video placement is video.placement on 2.5 and video.plcmt on 2.6, and GPP fields live under regs.ext on 2.5 but at regs.gpp / regs.gpp_sid on 2.6. GDPR always sits at regs.ext.gdpr and the consent string at user.ext.consent in both versions.
Can I generate a CTV or connected-TV bid request?
Yes. Use the CTV / OTT preset or set a video impression on app inventory with device.devicetype 3 and a 1920x1080 size. It fills in a Roku-style user agent, store url, and typical CTV floors you can edit before copying.
How do I add PMP deals to the bid request?
Turn on the PMP toggle, then add one or more deals with an id and an optional floor and auction type. The tool writes imp.pmp with private_auction and a deals array; deals with an empty id are skipped so the request stays valid.
Is the generated JSON a valid OpenRTB request?
It follows the OpenRTB 2.5 and 2.6 structure for imp, site/app, device, user, and regs, with empty fields omitted. It is meant as a realistic sample for testing bidders and exchanges; you can pair it with the OpenRTB Bid Request Validator to double-check required fields.
Does the tool send my bid request anywhere or call an ad server?
No. The request is assembled from your form inputs in the browser and never sent to an exchange, SSP, or any endpoint. You copy or download the JSON yourself, so no ad-ops data leaves your device.
Why are some fields I left blank missing from the output?
The generator prunes empty values — blank strings, empty arrays, and empty objects — so the copied request only contains fields that carry information. Meaningful zeros like startdelay 0 (pre-roll) and private_auction 0 are kept.

Related tools

All ArrayKit tools