S2S Reference

Required Headers:

Nimbus-Api-Key

Needed to validate the request to Nimbus, please ask your ad manager for this key

Example:

Nimbus-Api-Key: 8cd759c3-44bb-43b4-90ae-f5bdd714284e

Object: BidRequest

Object: Ext (BidRequest extension object)

Object: Regs

Object: Ext (Regs extension object)

Object: Imp

The impression object has been modified from the ORTB specification. Nimbus allows for both the Banner object and Video object to be present in the same Imp object. This allows for hybrid auctions to be run on the Nimbus ad server, where both static demand and video demand are part of the same auction for the same inventory. This removes the need to make two separate calls to Nimbus and unifies the competition. note: While both the banner object and video object are optional, at least 1 must be present in the request

Object: Ext (Imp extension object)

Object: Banner

note: The height and width in the banner object is extremely important and it is not equal to the height and width of the device. Take special care as it effects the types of ads returned Acceptable ad sizes for Banner.h and Banner.w

The Interstitial ad size type is special. If Interstitial Portrait or Interstitial Landscape landscape sizes are submitted in the Banner request, the Banner.Format array will be used to allow for additional ad sizes to fill the full screen placement. This is a great way to increase fill, by allowing additional demand for the same placement. If any other size from the above table is submitted Nimbus will ensure ONLY that ad size is returned in the response.

Object: Video

Object: Ext (Video extension object)

Object: Format

This is object normally is found with the imp[0].banner to extend the possible ad sizes allowed for the auction if the banner is of type full screen interstitial (320x480)

Object: App

Information like the name, bundle, domain, and storeurl are constructed using the Nimbus databases. Therefore this is not information that is required to be sent. However, it is highly recommended to send all other metadata about your application for buyers

Object: Content

This object describes the content in which the impression will appear, which may be syndicated or nonsyndicated content. This object may be useful when syndicated content contains impressions and does not necessarily match the publisher’s general content. The exchange might or might not have knowledge of the page where the content is running, as a result of the syndication method. For example might be a video impression embedded in an iframe on an unknown web property or device. Must commonly used for CTV applications or Audio based applications

Object: Producer

This object defines the producer of the content in which the ad will be shown. This is particularly useful when the content is syndicated and may be distributed through different publishers and thus when the producer and publisher are not necessarily the same entity.

Object: APS

The APS data structure is gotten from a proper invocation of the APS SDK. This information is passed to Nimbus so that it can include APS in an agnostic fair auction. Nimbus will return the APS markup in the bid response if APS wins the auction. Note the APS SDK does not send normalized data between video and static demand. The response is also different between app platforms. For Publishers using the Nimbus Request SDK this is handled for you. For Publishers making a server call to Nimbus, simply take the information your client sends you as is and pass it Nimbus. Nimbus will normalize the Data types to []string.

Object: Device

Object: Ext (Device extension object)

Note: This only pertains to iOS devices.

If the IDFA is not available, DSPs require an alternative, limited-scope identifier in order to provide basic frequency capping functionality to advertisers. The IDFV is the same for apps from the same vendor but different across vendors. Please refer to Apple's Guidelines for further information about when it can be accessed and used.

DSPs may also want to understand what is the status of a user on iOS 14+. The atts field will pass the AppTrackingTransparency Framework's authorization status.

Object: Geo

If the Geo object is missing from the Device object, the geolocation will be determined using the ip of the device and a Geo object will be constructed from that

Object: User

If the Geo object is missing from the Device object, the geolocation will be determined using the ip of the device and a Geo object will be constructed from that

Object: Ext (User extension object)

Object: Source (User extension object)

Object: Ext (Source extension object)

JSON Examples

Static Bid Request

{
  "app": {
    "bundle": "foo_bundle",
    "cat": [
      "IAB1"
    ],
    "domain": "https://www.foo_app.com",
    "name": "foo_app",
    "paid": 0,
    "privacypolicy": 1,
    "publisher": {
      "cat": [
        "IAB1",
        "IAB17",
        "IAB12",
        "IAB14",
        "IAB9",
        "IAB20",
        "IAB16",
        "IAB18"
      ],
      "domain": "https://foo_app.com",
      "name": "foo_app"
    },
    "storeurl": "https://apps.apple.com/app/foo_bundle",
    "ver": "0.0.1"
  },
  "badv": [
    "foobar.com"
  ],
  "bapp": [
    "com.foo.bar"
  ],
  "bcat": [
    "IAB_FOOBAR"
  ],
  "device": {
    "carrier": "O2",
    "connectiontype": 6,
    "devicetype": 1,
    "dnt": 1,
    "geo": {
      "country": "GBR",
      "ipservice": 3,
      "lat": 51.4964,
      "lon": -0.1224,
      "metro": "0",
      "type": 2
    },
    "ifa": "cf3af75c-a938-4326-8697-d1a629cda086",
    "ip": "1.0.0.0",
    "language": "en",
    "lmt": 1,
    "make": "Apple",
    "model": "iPhone13,4",
    "os": "ios",
    "osv": "14.7.1",
    "ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148"
  },
  "ext": {
    "session_id": "4a74616f-7f0e-4b03-8c4a-2035f12f6178"
  },
  "imp": [
    {
      "banner": {
        "api": [
          3,
          5
        ],
        "battr": [
          0
        ],
        "bidfloor": 3,
        "format": [
          {
            "h": 480,
            "w": 320
          },
          {
            "h": 250,
            "w": 300
          },
          {
            "h": 1920,
            "w": 1080
          }
        ],
        "h": 480,
        "pos": 7,
        "w": 320
      },
      "clickbrowser": 0,
      "displaymanagerver": "1.10.3",
      "ext": {
        "position": "5",
        "skadn": {
          "skadnetids": [
            "foobar.skadnetwork"
          ],
          "sourceapp": "foo_app_bundle",
          "version": "2.0"
        }
      },
      "instl": 1,
      "secure": 1
    }
  ],
  "regs": {
    "coppa": 0,
    "ext": {
      "gdpr": 1,
      "us_privacy": "1---"
    }
  },
  "user": {
    "age": 27,
    "gender": "female",
    "yob": 1993
  }
}

Video Bid Request

{
  "app": {
    "bundle": "foo_bundle",
    "cat": [
      "IAB1"
    ],
    "domain": "https://www.foo_app.com",
    "name": "foo_app",
    "paid": 0,
    "privacypolicy": 1,
    "publisher": {
      "cat": [
        "IAB1",
        "IAB17",
        "IAB12",
        "IAB14",
        "IAB9",
        "IAB20",
        "IAB16",
        "IAB18"
      ],
      "domain": "https://foo_app.com",
      "name": "foo_app"
    },
    "storeurl": "https://apps.apple.com/app/foo_bundle",
    "ver": "0.0.1"
  },
  "badv": [
    "foobar.com"
  ],
  "bapp": [
    "com.foo.bar"
  ],
  "bcat": [
    "IAB_FOOBAR"
  ],
  "device": {
    "carrier": "O2",
    "connectiontype": 6,
    "devicetype": 1,
    "dnt": 1,
    "geo": {
      "country": "GBR",
      "ipservice": 3,
      "lat": 51.4964,
      "lon": -0.1224,
      "metro": "0",
      "type": 2
    },
    "ifa": "cf3af75c-a938-4326-8697-d1a629cda086",
    "ip": "1.0.0.0",
    "language": "en",
    "lmt": 1,
    "make": "Apple",
    "model": "iPhone13,4",
    "os": "ios",
    "osv": "14.7.1",
    "ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148"
  },
  "ext": {
    "session_id": "4a74616f-7f0e-4b03-8c4a-2035f12f6178"
  },
  "imp": [
    {
      "clickbrowser": 0,
      "displaymanagerver": "1.10.3",
      "ext": {
        "position": "5",
        "skadn": {
          "skadnetids": [
            "foobar.skadnetwork"
          ],
          "sourceapp": "foo_app_bundle",
          "version": "2.0"
        }
      },
      "instl": 1,
      "secure": 1,
      "video": {
        "bidfloor": 3,
        "companionad": [
          {
            "h": 50,
            "w": 320
          }
        ],
        "h": 926,
        "linearity": 1,
        "maxbitrate": 20000,
        "maxduration": 60,
        "mimes": [
          "application/x-mpegurl",
          "video/3gpp",
          "video/mp4"
        ],
        "minbitrate": 1,
        "minduration": 0,
        "playbackmethod": [
          2
        ],
        "protocols": [
          2,
          3,
          5,
          6,
          7,
          8
        ],
        "skip": 0,
        "startdelay": 0,
        "w": 428
      }
    }
  ],
  "regs": {
    "coppa": 0,
    "ext": {
      "gdpr": 1,
      "us_privacy": "1---"
    }
  },
  "user": {
    "age": 27,
    "gender": "female",
    "yob": 1993
  }
}

Hybrid Auction Example

Dual Static/Video Bid Request

This is a Nimbus specific example. ORTB does not allow for more than one creative object to be present in the Imp object. However, this would mean as a publisher that you would have to construct two separate request, which would yield two very different auction. To static allow inventory and video inventory to compete in a fair auction, we allow for one than one creative object to be submitted for a single impression. In this case we currently allow for both the Banner object and Video Object to coexist in the Imp Object

{
  "app": {
    "bundle": "foo_bundle",
    "cat": [
      "IAB1"
    ],
    "domain": "https://www.foo_app.com",
    "name": "foo_app",
    "paid": 0,
    "privacypolicy": 1,
    "publisher": {
      "cat": [
        "IAB1",
        "IAB17",
        "IAB12",
        "IAB14",
        "IAB9",
        "IAB20",
        "IAB16",
        "IAB18"
      ],
      "domain": "https://foo_app.com",
      "name": "foo_app"
    },
    "storeurl": "https://apps.apple.com/app/foo_bundle",
    "ver": "0.0.1"
  },
  "badv": [
    "foobar.com"
  ],
  "bapp": [
    "com.foo.bar"
  ],
  "bcat": [
    "IAB_FOOBAR"
  ],
  "device": {
    "carrier": "O2",
    "connectiontype": 6,
    "devicetype": 1,
    "dnt": 1,
    "geo": {
      "country": "GBR",
      "ipservice": 3,
      "lat": 51.4964,
      "lon": -0.1224,
      "metro": "0",
      "type": 2
    },
    "ifa": "cf3af75c-a938-4326-8697-d1a629cda086",
    "ip": "1.0.0.0",
    "language": "en",
    "lmt": 1,
    "make": "Apple",
    "model": "iPhone13,4",
    "os": "ios",
    "osv": "14.7.1",
    "ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148"
  },
  "ext": {
    "session_id": "4a74616f-7f0e-4b03-8c4a-2035f12f6178"
  },
  "imp": [
    {
      "banner": {
        "api": [
          3,
          5
        ],
        "battr": [
          0
        ],
        "bidfloor": 2,
        "format": [
          {
            "h": 480,
            "w": 320
          },
          {
            "h": 250,
            "w": 300
          },
          {
            "h": 1920,
            "w": 1080
          }
        ],
        "h": 480,
        "pos": 7,
        "w": 320
      },
      "clickbrowser": 0,
      "displaymanagerver": "1.10.3",
      "ext": {
        "position": "5",
        "skadn": {
          "skadnetids": [
            "foobar.skadnetwork"
          ],
          "sourceapp": "foo_app_bundle",
          "version": "2.0"
        }
      },
      "instl": 1,
      "secure": 1,
      "video": {
        "bidfloor": 3,
        "companionad": [
          {
            "h": 480,
            "w": 320
          }
        ],
        "h": 926,
        "linearity": 1,
        "maxbitrate": 20000,
        "maxduration": 60,
        "mimes": [
          "application/x-mpegurl",
          "video/3gpp",
          "video/mp4"
        ],
        "minbitrate": 1,
        "minduration": 0,
        "playbackmethod": [
          2
        ],
        "protocols": [
          2,
          3,
          5,
          6,
          7,
          8
        ],
        "skip": 0,
        "startdelay": 0,
        "w": 428
      }
    }
  ],
  "regs": {
    "coppa": 0,
    "ext": {
      "gdpr": 1,
      "us_privacy": "1---"
    }
  },
  "user": {
    "age": 27,
    "gender": "female",
    "yob": 1993
  }
}

Bid Response

Bid Response Object

Bid Trackers Object

Object: Ext (Bid Response extension object)

Last updated