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
- Toggle OpenRTB 2.5 or 2.6, with version-correct video.placement vs video.plcmt and GPP placement
- Banner, video, native, and audio impression types with sensible defaults
- Site vs app inventory branch, including app bundle, storeurl, and publisher
- Device, geo, and user fields plus regs for GDPR consent, US Privacy, and GPP
- PMP toggle for private_auction and deals with per-deal floor and auction type
- One-click presets for display, in-stream video, CTV/OTT, mobile app, and native
- Empty fields are pruned so the copied request stays clean and valid
- Copy or download pretty-printed JSON assembled entirely in your browser
How to use the OpenRTB Bid Request Generator
- Pick the OpenRTB version and impression type, or start from a preset
- Choose site or app inventory and fill in sizes, device, and geo
- Set regs (GDPR, US Privacy, GPP) and add PMP deals if you need them
- 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
- Your bidder ignores the video placement field on OpenRTB 2.6. — 2.6 renamed video.placement to video.plcmt. Select 2.6 and the generator emits plcmt; select 2.5 and it emits placement, so pick the version your partner expects.
- GPP string is present but the buyer says regs.gpp is missing. — On 2.6 GPP sits at regs.gpp and regs.gpp_sid; on 2.5 it is nested under regs.ext. Switch versions to move it to the location your integration reads.
- The device.ifa you set disappeared from the request. — The advertising id is only meaningful for app inventory, so it is omitted for site context. Switch inventory to app to include ifa.
- A deal you added is not showing up in imp.pmp.deals. — Deals with a blank id are dropped. Give every deal a non-empty id; a floor is optional and defaults its currency to USD when set.
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