Publisher Integration Guide
OpenRTB 2.5 · Version 1.0
This guide covers all required and optional fields for the Digibid Ads OpenRTB bid request endpoint, per-DC endpoint URLs, complete request/response examples, and integration best practices.
1. Overview
Digibid Ads implements the OpenRTB 2.5 specification.
Publishers send a JSON bid request over HTTPS POST to the /ortb/adx endpoint.
The exchange runs a real-time auction among demand partners and returns the winning bid in an OpenRTB bid response.
Field status legend: Required — omission breaks the protocol Recommended — strongly advised for fill quality Optional — provides additional context Cond. — required only in specific contexts
Method: POST only | Content-Type:
application/jsonBody size limit: 1 MB | Encoding: gzip accepted (
Content-Encoding: gzip)Timeout: controlled by
tmax in the request (200 – 1000 ms)
2. Endpoints by Data Center
Choose the endpoint closest to your ad server to minimize latency.
Each DC endpoint is fully independent; the pos_id assigned to you is valid across all DCs.
🇺🇸 US East
pos_id as a URL query parameter instead of inside ext.POST https://ads-us-east.digibid.com/ortb/adx?pos_id=101
3. Quick Start
Below is the minimal valid banner bid request. Replace pos_id with your assigned value and POST.
Minimal Banner Request{
"id": "req-001",
"imp": [{
"id": "1",
"banner": { "w": 320, "h": 50 },
"bidfloor": 0.50,
"bidfloorcur": "USD"
}],
"app": {
"bundle": "com.yourcompany.app",
"publisher": { "id": "YOUR_PUBLISHER_ID" }
},
"device": {
"ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 ...)",
"ip": "203.0.113.45",
"ifa": "550e8400-e29b-41d4-a716-446655440000"
},
"ext": { "pos_id": YOUR_POS_ID },
"at": 2,
"tmax": 300
}
curlcurl -s -X POST https://ads-us-east.digibid.com/ortb/adx \
-H "Content-Type: application/json" \
-d @request.json
4. Bid Request Fields
4.1 Top-Level Object
| Field | Type | Status | Description |
|---|---|---|---|
id | string | Required | ID of the bid request, assigned by the exchange, and unique for the exchange's subsequent tracking of the responses. Recommended: UUID v4 or similar. |
imp | array<Imp> | Required | Array of Imp objects representing the impressions offered. At least 1 Imp object is required. |
app | object | Recommended | Details about the publisher's app (non-browser applications). Only applicable for app traffic. A bid request must not contain both app and site. |
site | object | Recommended | Details about the publisher's website. Only applicable for web traffic. A bid request must not contain both site and app. |
device | object | Recommended | Details about the user's device to which the impression will be delivered. |
at | integer | Optional | Auction type, where 1 = First Price, 2 = Second Price Plus. Default: 2. |
tmax | integer | Optional | Maximum time in milliseconds the exchange allows for bids to be received including Internet latency to avoid timeout. Clamped to [200, 1000]. |
regs | object | Optional | A Regs object that specifies any industry, legal, or governmental regulations in force for this request (GDPR, CCPA). |
user | object | Optional | Details about the human user of the device; the advertising audience. user.consent carries the GDPR Transparency and Consent string (TCF v2). |
ext | object | Cond. | Exchange-specific extensions. Must contain pos_id (integer) unless pos_id is passed as a URL query parameter. |
4.2 Impression Object (imp)
| Field | Type | Status | Description |
|---|---|---|---|
id | string | Required | A unique identifier for this impression within the bid request (typically starts with "1" and increments). Echoed as impid in the response. |
banner | object | Cond. | A Banner object; required if this impression is offered as a banner ad opportunity. |
video | object | Cond. | A Video object; required if this impression is offered as a video ad opportunity. |
native | object | Cond. | A Native object; required if this impression is offered as a native ad opportunity. |
bidfloor | float | Optional | Minimum bid for this impression expressed in CPM. Bids below this value are filtered. Default: 0. |
bidfloorcur | string | Optional | Currency specified using ISO-4217 alpha codes for the bid floor. Default: "USD". |
rwdd | integer | Optional | Indicates whether the user receives a reward for viewing the ad, where 0 = no, 1 = yes. Only ad groups with position_type_id = 6 qualify. |
instl | integer | Optional | 1 = the ad is interstitial or full screen, 0 = not interstitial. Default: 0. |
4.3 Banner Object
| Field | Type | Status | Description |
|---|---|---|---|
format | array<Format> | Recommended | Array of {w, h} objects representing the banner sizes permitted. If none are specified, use of w and h is highly recommended. |
w | integer | Recommended | Exact width in device-independent pixels (DIPS); recommended if no format objects are specified. |
h | integer | Recommended | Exact height in device-independent pixels (DIPS); recommended if no format objects are specified. |
btype | array<int> | Optional | Blocked banner ad types. Values: 1=XHTML Text, 2=XHTML Banner, 3=JavaScript, 4=iframe. |
battr | array<int> | Optional | Blocked creative attributes. Refer to IAB AdCOM List: Creative Attributes. |
pos | integer | Optional | Ad position on screen. Refer to IAB AdCOM List: Placement Positions. 1 = above the fold. |
4.4 Video Object
| Field | Type | Status | Description |
|---|---|---|---|
mimes | array<string> | Required | Content MIME types supported (e.g. "video/mp4"). At least one must be specified. |
minduration | integer | Recommended | Minimum video ad duration in seconds. Bids shorter than this are filtered. Default: 0. |
maxduration | integer | Recommended | Maximum video ad duration in seconds. Bids longer than this are filtered. |
protocols | array<int> | Recommended | Array of supported video bid response protocols. Refer to IAB AdCOM List: Creative Subtypes – Video. E.g. [2, 3] = VAST 2.0, 3.0. |
w | integer | Recommended | Width of the video player in device-independent pixels (DIPS). |
h | integer | Recommended | Height of the video player in device-independent pixels (DIPS). |
skip | integer | Optional | Indicates if the player will allow the video to be skipped, where 0 = no, 1 = yes. Skip tracking events are included in the VAST response when enabled. |
linearity | integer | Optional | Indicates if the impression must be linear, nonlinear, etc. If none specified, assume all are allowed. 1 = Linear (In-Stream), 2 = Non-Linear. Refers to expected VAST response, not player type. |
placement | integer | Optional | Video placement type (IAB). 1 = In-Stream, 5 = Interstitial. Note: deprecated in OpenRTB 2.6 in favor of plcmt. |
4.5 Native Object
| Field | Type | Status | Description |
|---|---|---|---|
request | string (JSON) | Required | Request payload complying with the Native Ad Specification. Serialized JSON string containing an assets array (title, image, icon, video, data). |
ver | string | Recommended | Version of the Dynamic Native Ads API to which request complies; highly recommended for efficient parsing. Default: "1.2". |
Native Asset Types
| Asset | required=1 behavior |
|---|---|
| title | Ad must supply a title ≤ len characters. |
| img (type=3, main image) | Ad must supply a main image meeting w/h or wmin/hmin. Non-matching bids are filtered. |
| img (type=1, icon) | Ad must supply an icon meeting wmin/hmin. Bids without an icon are filtered. |
| video | Ad must supply a VAST video. Image-only ads are excluded from the auction. |
| data | Supplementary fields (brand, desc, rating). Typically required=0. |
4.6 App / Site Object
| Field | Type | Status | Description |
|---|---|---|---|
app.bundle | string | Required | Application bundle / package name. E.g. "com.yourcompany.appname". Used for app-bundle targeting and frequency capping. |
app.id | string | Optional | Internal app ID in your system. |
app.publisher.id | string | Recommended | Your Publisher ID assigned by Digibid. E.g. "42". |
app.domain | string | Optional | App or associated domain. Used for domain-based targeting. |
site.domain | string | Cond. | Domain of the web page. Required when using the site object. |
site.publisher.id | string | Recommended | Your Publisher ID assigned by Digibid. |
4.7 Device Object
| Field | Type | Status | Description |
|---|---|---|---|
ua | string | Recommended | Browser user agent string. This field represents a raw user agent string from the browser. Used for device type, OS, and make detection. |
ip | string | Recommended | IPv4 address closest to the device. Used for geo-targeting. Falls back to X-Forwarded-For header if neither ip nor ipv6 is set. |
ipv6 | string | Optional | IP address closest to the device as IPv6. Takes priority over ip for geo resolution. |
ifa | string | Optional | ID sanctioned for advertiser use in the clear (i.e., not hashed) — IDFA on iOS, GAID on Android. Used for frequency capping and click tracking. Strongly recommended. |
lmt | integer | Optional | "Limit Ad Tracking" signal commercially endorsed (e.g., iOS, Android), where 0 = tracking is unrestricted, 1 = tracking must be limited per commercial guidelines. |
os | string | Optional | Device operating system. E.g. "iOS", "Android". |
make | string | Optional | Device make (manufacturer). E.g. "Apple", "Samsung". |
model | string | Optional | Device model. E.g. "iPhone", "Pixel 7". |
devicetype | integer | Optional | The general type of device. Refer to IAB AdCOM List: Device Types. 1=Mobile/Tablet, 2=PC, 4=Phone, 5=Tablet. |
4.8 Privacy Signals
| Field | Type | Description |
|---|---|---|
regs.gdpr | integer | 1 if GDPR applies. Exchange checks user.consent. |
regs.us_privacy | string | CCPA consent string (4-char IAB format). E.g. "1YNN". |
regs.ext.us_privacy | string | Fallback CCPA string if regs.us_privacy is absent. |
user.consent | string | GDPR consent string (TCF v2, Base64 encoded). |
4.9 Extension Object (ext)
| Field | Type | Status | Description |
|---|---|---|---|
ext.pos_id | integer | Required* | Position ID assigned by Digibid. Identifies the ad placement (publisher, margin, position type). Can also be passed via URL query parameter ?pos_id=N; URL param takes priority over body. |
5. Bid Response Fields
The exchange always returns HTTP 200 OK. An empty seatbid array (or absent) means no winning bid (no fill). The response structure follows the OpenRTB 2.5 BidResponse / SeatBid / Bid object model.
| Field | Type | Status | Description |
|---|---|---|---|
id | string | Required | ID of the bid request to which this is a response. Echoes back the request id. |
seatbid | array | Cond. | Array of SeatBid objects; at least 1 required if a bid is to be made. Empty array indicates no fill. |
bidid | string | Optional | Bidder generated response ID to assist with logging/tracking. Format: {txid}_{impid}. |
cur | string | Optional | Bid currency using ISO-4217 alpha codes. Default: "USD". |
seatbid[].seat | string | Optional | ID of the buyer seat on whose behalf this bid is made. Always "Digibid". |
seatbid[].bid[].id | string | Required | Bidder generated bid ID to assist with logging/tracking. Format: {txid}_{impid}. |
seatbid[].bid[].impid | string | Required | ID of the Imp object in the related bid request. Echoes the impression id from the request. |
seatbid[].bid[].price | float | Required | Bid price expressed as CPM, although the actual transaction is for a unit impression only. Value represents the publisher's net revenue after margin deduction (USD). |
seatbid[].bid[].adm | string | Optional | Optional means of conveying ad markup in case the bid wins; supersedes the win notice if markup is included in both. HTML for banner, VAST XML for video, JSON string for native. |
seatbid[].bid[].nurl | string | Optional | Win notice URL called by the exchange if the bid wins (not necessarily indicative of a delivered, viewed, or billable ad). Must be fired upon rendering the ad. |
seatbid[].bid[].adid | string | Optional | ID of a preloaded ad to be served if the bid wins. |
seatbid[].bid[].crid | string | Optional | Creative ID to assist with ad quality checking. |
seatbid[].bid[].w | integer | Optional | Width of the creative in device-independent pixels (DIPS). |
seatbid[].bid[].h | integer | Optional | Height of the creative in device-independent pixels (DIPS). |
6. Full Examples
6.1 Banner Ad Request
Request JSON{
"id": "banner-req-001",
"imp": [
{
"id": "1",
"banner": {
"w": 320,
"h": 50,
"format": [{ "w": 320, "h": 50 }, { "w": 728, "h": 90 }],
"btype": [1, 2],
"pos": 1
},
"bidfloor": 0.50,
"bidfloorcur": "USD"
}
],
"app": {
"id": "app-001",
"bundle": "com.example.newsapp",
"publisher": { "id": "42" }
},
"device": {
"ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15",
"ip": "203.0.113.45",
"ifa": "550e8400-e29b-41d4-a716-446655440000",
"os": "iOS",
"make": "Apple",
"devicetype": 4
},
"ext": { "pos_id": 101 },
"at": 2,
"tmax": 300
}
6.2 Video Ad Request
Request JSON{
"id": "video-req-002",
"imp": [
{
"id": "1",
"video": {
"mimes": ["video/mp4"],
"w": 640,
"h": 480,
"minduration": 5,
"maxduration": 30,
"protocols": [2, 3, 5, 6],
"linearity": 1,
"skip": 1,
"placement": 1
},
"bidfloor": 1.00,
"bidfloorcur": "USD"
}
],
"app": {
"bundle": "com.example.videoapp",
"publisher": { "id": "42" }
},
"device": {
"ua": "Mozilla/5.0 (Linux; Android 13; Pixel 7) AppleWebKit/537.36",
"ip": "198.51.100.10",
"ifa": "38400000-8cf0-11bd-b23e-10b96e40000d",
"os": "Android",
"make": "Google",
"devicetype": 4
},
"ext": { "pos_id": 202 },
"at": 1,
"tmax": 500
}
6.2b Rewarded Video Request
Request JSON{
"id": "reward-req-003",
"imp": [
{
"id": "1",
"video": {
"mimes": ["video/mp4"],
"w": 640,
"h": 480,
"minduration": 15,
"maxduration": 30,
"protocols": [3, 6],
"linearity": 1
},
"bidfloor": 2.00,
"bidfloorcur": "USD",
"rwdd": 1
}
],
"app": { "bundle": "com.example.game", "publisher": { "id": "42" } },
"device": {
"ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X)",
"ip": "198.51.100.20",
"ifa": "6D92078A-8246-4479-8C7D-A7CF568C5E9E"
},
"ext": { "pos_id": 303 },
"at": 1,
"tmax": 500
}
6.3 Native Ad Request
Request JSON{
"id": "native-req-004",
"imp": [
{
"id": "1",
"native": {
"request": "{\"ver\":\"1.2\",\"layout\":6,\"adunit\":2,\"plcmtcnt\":1,\"assets\":[{\"id\":1,\"required\":1,\"title\":{\"len\":100}},{\"id\":2,\"required\":1,\"img\":{\"type\":3,\"w\":300,\"h\":250}},{\"id\":3,\"required\":1,\"img\":{\"type\":1,\"wmin\":50,\"hmin\":50}},{\"id\":4,\"required\":0,\"data\":{\"type\":2,\"len\":90}}]}",
"ver": "1.2"
},
"bidfloor": 0.80,
"bidfloorcur": "USD"
}
],
"app": { "bundle": "com.example.readingapp", "publisher": { "id": "42" } },
"device": {
"ua": "Mozilla/5.0 (iPad; CPU OS 16_0 like Mac OS X)",
"ip": "192.0.2.100",
"ifa": "7C553443-9D8E-4BE8-B11E-C3D8D3A7B1F3",
"devicetype": 5
},
"ext": { "pos_id": 404 },
"at": 2,
"tmax": 300
}
6.4 Bid Response
Response JSON – With Bid{
"id": "banner-req-001",
"bidid": "txid-abc123_1",
"cur": "USD",
"seatbid": [
{
"seat": "Digibid",
"bid": [
{
"id": "txid-abc123_1",
"impid": "1",
"price": 0.42,
"adm": "<div>...banner HTML...</div>",
"nurl": "https://ads-us-east.digibid.com/tracking?txid=txid-abc123&type=9&...",
"adid": "dsp-ad",
"crid": "cr-001",
"w": 320,
"h": 50
}
]
}
]
}
Response JSON – No Fill{
"id": "banner-req-001",
"seatbid": []
}
7. Error Codes
| HTTP Status | Cause |
|---|---|
200 OK | Successful response. seatbid may be empty (no fill). |
400 Bad Request | Malformed JSON, empty body, missing imp, invalid or unrecognized pos_id. |
405 Method Not Allowed | Request method is not POST. |
413 Request Entity Too Large | Request body exceeds 1 MB. |
8. FAQ
How do I get a pos_id?
Contact your Digibid account manager. A pos_id represents a specific ad placement configuration
(publisher margin, position type, allowed formats). One publisher may have multiple pos_ids for different placements.
What happens if there is no fill?
The endpoint always returns HTTP 200 OK with an empty seatbid array.
Never interpret a 200 response as a guaranteed fill.
Which DC should I use?
Choose the DC geographically closest to your ad server to minimize latency. Contact your Digibid account manager if you need guidance on DC selection.
Can I send gzip-compressed requests?
Yes. Set Content-Encoding: gzip and gzip the JSON body.
Recommended for large native requests.
Digibid Ads Publisher Integration Guide v1.0 · For support: publisher-support@digibid.com