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

ℹ️
Protocol: HTTP/1.1 or HTTP/2; HTTPS strongly recommended.
Method: POST only  |  Content-Type: application/json
Body 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

https://ads-us-east.digibid.com/ortb/adx
Region: us-east-1 (Virginia)
💡
Query parameter alternative: You may pass 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

FieldTypeStatusDescription
idstringRequiredID of the bid request, assigned by the exchange, and unique for the exchange's subsequent tracking of the responses. Recommended: UUID v4 or similar.
imparray<Imp>RequiredArray of Imp objects representing the impressions offered. At least 1 Imp object is required.
appobjectRecommendedDetails about the publisher's app (non-browser applications). Only applicable for app traffic. A bid request must not contain both app and site.
siteobjectRecommendedDetails about the publisher's website. Only applicable for web traffic. A bid request must not contain both site and app.
deviceobjectRecommendedDetails about the user's device to which the impression will be delivered.
atintegerOptionalAuction type, where 1 = First Price, 2 = Second Price Plus. Default: 2.
tmaxintegerOptionalMaximum time in milliseconds the exchange allows for bids to be received including Internet latency to avoid timeout. Clamped to [200, 1000].
regsobjectOptionalA Regs object that specifies any industry, legal, or governmental regulations in force for this request (GDPR, CCPA).
userobjectOptionalDetails about the human user of the device; the advertising audience. user.consent carries the GDPR Transparency and Consent string (TCF v2).
extobjectCond.Exchange-specific extensions. Must contain pos_id (integer) unless pos_id is passed as a URL query parameter.

4.2 Impression Object (imp)

FieldTypeStatusDescription
idstringRequiredA unique identifier for this impression within the bid request (typically starts with "1" and increments). Echoed as impid in the response.
bannerobjectCond.A Banner object; required if this impression is offered as a banner ad opportunity.
videoobjectCond.A Video object; required if this impression is offered as a video ad opportunity.
nativeobjectCond.A Native object; required if this impression is offered as a native ad opportunity.
bidfloorfloatOptionalMinimum bid for this impression expressed in CPM. Bids below this value are filtered. Default: 0.
bidfloorcurstringOptionalCurrency specified using ISO-4217 alpha codes for the bid floor. Default: "USD".
rwddintegerOptionalIndicates whether the user receives a reward for viewing the ad, where 0 = no, 1 = yes. Only ad groups with position_type_id = 6 qualify.
instlintegerOptional1 = the ad is interstitial or full screen, 0 = not interstitial. Default: 0.

4.3 Banner Object

FieldTypeStatusDescription
formatarray<Format>RecommendedArray of {w, h} objects representing the banner sizes permitted. If none are specified, use of w and h is highly recommended.
wintegerRecommendedExact width in device-independent pixels (DIPS); recommended if no format objects are specified.
hintegerRecommendedExact height in device-independent pixels (DIPS); recommended if no format objects are specified.
btypearray<int>OptionalBlocked banner ad types. Values: 1=XHTML Text, 2=XHTML Banner, 3=JavaScript, 4=iframe.
battrarray<int>OptionalBlocked creative attributes. Refer to IAB AdCOM List: Creative Attributes.
posintegerOptionalAd position on screen. Refer to IAB AdCOM List: Placement Positions. 1 = above the fold.

4.4 Video Object

FieldTypeStatusDescription
mimesarray<string>RequiredContent MIME types supported (e.g. "video/mp4"). At least one must be specified.
mindurationintegerRecommendedMinimum video ad duration in seconds. Bids shorter than this are filtered. Default: 0.
maxdurationintegerRecommendedMaximum video ad duration in seconds. Bids longer than this are filtered.
protocolsarray<int>RecommendedArray of supported video bid response protocols. Refer to IAB AdCOM List: Creative Subtypes – Video. E.g. [2, 3] = VAST 2.0, 3.0.
wintegerRecommendedWidth of the video player in device-independent pixels (DIPS).
hintegerRecommendedHeight of the video player in device-independent pixels (DIPS).
skipintegerOptionalIndicates 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.
linearityintegerOptionalIndicates 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.
placementintegerOptionalVideo placement type (IAB). 1 = In-Stream, 5 = Interstitial. Note: deprecated in OpenRTB 2.6 in favor of plcmt.

4.5 Native Object

FieldTypeStatusDescription
requeststring (JSON)RequiredRequest payload complying with the Native Ad Specification. Serialized JSON string containing an assets array (title, image, icon, video, data).
verstringRecommendedVersion of the Dynamic Native Ads API to which request complies; highly recommended for efficient parsing. Default: "1.2".

Native Asset Types

Assetrequired=1 behavior
titleAd 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.
videoAd must supply a VAST video. Image-only ads are excluded from the auction.
dataSupplementary fields (brand, desc, rating). Typically required=0.

4.6 App / Site Object

FieldTypeStatusDescription
app.bundlestringRequiredApplication bundle / package name. E.g. "com.yourcompany.appname". Used for app-bundle targeting and frequency capping.
app.idstringOptionalInternal app ID in your system.
app.publisher.idstringRecommendedYour Publisher ID assigned by Digibid. E.g. "42".
app.domainstringOptionalApp or associated domain. Used for domain-based targeting.
site.domainstringCond.Domain of the web page. Required when using the site object.
site.publisher.idstringRecommendedYour Publisher ID assigned by Digibid.

4.7 Device Object

FieldTypeStatusDescription
uastringRecommendedBrowser user agent string. This field represents a raw user agent string from the browser. Used for device type, OS, and make detection.
ipstringRecommendedIPv4 address closest to the device. Used for geo-targeting. Falls back to X-Forwarded-For header if neither ip nor ipv6 is set.
ipv6stringOptionalIP address closest to the device as IPv6. Takes priority over ip for geo resolution.
ifastringOptionalID 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.
lmtintegerOptional"Limit Ad Tracking" signal commercially endorsed (e.g., iOS, Android), where 0 = tracking is unrestricted, 1 = tracking must be limited per commercial guidelines.
osstringOptionalDevice operating system. E.g. "iOS", "Android".
makestringOptionalDevice make (manufacturer). E.g. "Apple", "Samsung".
modelstringOptionalDevice model. E.g. "iPhone", "Pixel 7".
devicetypeintegerOptionalThe general type of device. Refer to IAB AdCOM List: Device Types. 1=Mobile/Tablet, 2=PC, 4=Phone, 5=Tablet.

4.8 Privacy Signals

⚠️
If GDPR or CCPA signals indicate the user has opted out, the exchange may return an empty bid response (no ads served). Pass accurate consent signals for compliance.
FieldTypeDescription
regs.gdprinteger1 if GDPR applies. Exchange checks user.consent.
regs.us_privacystringCCPA consent string (4-char IAB format). E.g. "1YNN".
regs.ext.us_privacystringFallback CCPA string if regs.us_privacy is absent.
user.consentstringGDPR consent string (TCF v2, Base64 encoded).

4.9 Extension Object (ext)

FieldTypeStatusDescription
ext.pos_idinteger 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.

FieldTypeStatusDescription
idstringRequiredID of the bid request to which this is a response. Echoes back the request id.
seatbidarrayCond.Array of SeatBid objects; at least 1 required if a bid is to be made. Empty array indicates no fill.
bididstringOptionalBidder generated response ID to assist with logging/tracking. Format: {txid}_{impid}.
curstringOptionalBid currency using ISO-4217 alpha codes. Default: "USD".
seatbid[].seatstringOptionalID of the buyer seat on whose behalf this bid is made. Always "Digibid".
seatbid[].bid[].idstringRequiredBidder generated bid ID to assist with logging/tracking. Format: {txid}_{impid}.
seatbid[].bid[].impidstringRequiredID of the Imp object in the related bid request. Echoes the impression id from the request.
seatbid[].bid[].pricefloatRequiredBid 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[].admstringOptionalOptional 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[].nurlstringOptionalWin 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[].adidstringOptionalID of a preloaded ad to be served if the bid wins.
seatbid[].bid[].cridstringOptionalCreative ID to assist with ad quality checking.
seatbid[].bid[].wintegerOptionalWidth of the creative in device-independent pixels (DIPS).
seatbid[].bid[].hintegerOptionalHeight 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 StatusCause
200 OKSuccessful response. seatbid may be empty (no fill).
400 Bad RequestMalformed JSON, empty body, missing imp, invalid or unrecognized pos_id.
405 Method Not AllowedRequest method is not POST.
413 Request Entity Too LargeRequest 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