{"openapi":"3.0.3","info":{"title":"Relay Exchange API","description":"","contact":{"name":"jgrimes"},"license":{"name":""},"version":"0.1.0"},"servers":[{"url":"https://e.relay.bid/x/v1","description":"Production Relay Exchange Endpoint"}],"paths":{"/openrtb2":{"post":{"tags":["OpenRTB 2.x"],"summary":"Wrapper for the openrtb2 endpoint that initializes the task local log where we store request","description":"Wrapper for the openrtb2 endpoint that initializes the task local log where we store request\nand response information.\nThis version of the endpoint is meant for _unauthenticated_ use, e.g. in a web browser.\nKeeping public/authenticated URLs separate should let us better deal with invalid traffic\nand maintaining QoS.\nNote: we aren't yet doing authentication on the other endpoint.","operationId":"openrtb2","requestBody":{"description":"OpenRTB 2.x Bid Request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BidRequest"}}},"required":true},"responses":{"200":{"description":"Bid received.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BidResponseOpenApi"}}}}}}}},"components":{"schemas":{"A0xBidRequestExt":{"type":"object","description":"A0x specific BidRequest level extensions","properties":{"info":{"description":"Used to augment logged data with customer specific information, e.g. internal customer IDs.","nullable":true}}},"A0xImpExt":{"type":"object","description":"A0x specific extensions found in the Imp object.","properties":{"bidders":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/ImpBidderConfig"},"nullable":true},"meta":{"nullable":true}}},"A0xUserExt":{"type":"object","properties":{"bidders":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/User"},"nullable":true}}},"AdPosition":{"type":"string","enum":["Unknown","AboveTheFold","ScreenDependent","BelowTheFold","Header","Footer","Sidebar","FullScreen"]},"App":{"type":"object","description":"This object should be included if the ad supported content is a non-browser application (typically in\nmobile) as opposed to a website. A bid request must not contain both an App and a Site object. At a\nminimum, it is useful to provide an App ID or bundle, but this is not strictly required.","properties":{"bundle":{"type":"string","description":"A platform-specific application identifier intended to be\nunique to the app and independent of the exchange. On\nAndroid, this should be a bundle or package name (e.g.,\ncom.foo.mygame). On iOS, it is typically a numeric ID.","nullable":true},"cat":{"type":"array","items":{"type":"string"},"description":"Array of IAB content categories of the app.","nullable":true},"content":{"allOf":[{"$ref":"#/components/schemas/Content"}],"nullable":true},"domain":{"type":"string","description":"Domain of the app (e.g., “mygame.foo.com”).","nullable":true},"ext":{"description":"Placeholder for exchange-specific extensions to OpenRTB.","nullable":true},"id":{"type":"string","description":"Exchange-specific app ID.","nullable":true},"keywords":{"type":"string","description":"Comma separated list of keywords about the app.","nullable":true},"name":{"type":"string","description":"App name (may be aliased at the publisher’s request).","nullable":true},"pagecat":{"type":"array","items":{"type":"string"},"description":"Array of IAB content categories that describe the current page\nor view of the app.","nullable":true},"paid":{"type":"integer","format":"int64","description":"0 = app is free, 1 = the app is a paid version.","nullable":true},"privacypolicy":{"type":"integer","format":"int64","description":"Indicates if the site has a privacy policy, where 0 = no, 1 = yes.","nullable":true},"publisher":{"allOf":[{"$ref":"#/components/schemas/Publisher"}],"nullable":true},"sectioncat":{"type":"array","items":{"type":"string"},"description":"Array of IAB content categories that describe the current\nsection of the app.","nullable":true},"storeurl":{"type":"string","description":"App store URL for an installed app; for IQG 2.1 compliance","nullable":true},"ver":{"type":"string","description":"Application version.","nullable":true}}},"Audio":{"type":"object","required":["mimes"],"properties":{"api":{"type":"array","items":{"type":"integer","format":"int64"},"nullable":true},"battr":{"type":"array","items":{"type":"integer","format":"int64"},"nullable":true},"companionad":{"type":"array","items":{"$ref":"#/components/schemas/Banner"},"nullable":true},"companiontype":{"type":"array","items":{"type":"integer","format":"int64"},"nullable":true},"delivery":{"type":"array","items":{"type":"integer","format":"int64"},"nullable":true},"ext":{"description":"Placeholder for exchange-specific extensions to OpenRTB.","nullable":true},"feed":{"type":"integer","format":"int64","nullable":true},"maxbitrate":{"type":"integer","format":"int64","nullable":true},"maxduration":{"type":"integer","format":"int64","nullable":true},"maxextended":{"type":"integer","format":"int64","nullable":true},"maxseq":{"type":"integer","format":"int64","nullable":true},"mimes":{"type":"array","items":{"type":"string"}},"minbitrate":{"type":"integer","format":"int64","nullable":true},"minduration":{"type":"integer","format":"int64","nullable":true},"nvol":{"type":"integer","format":"int64","nullable":true},"protocols":{"type":"array","items":{"type":"integer","format":"int64"},"nullable":true},"sequence":{"type":"integer","format":"int64","nullable":true},"startdelay":{"type":"integer","format":"int64","nullable":true},"stitched":{"type":"integer","format":"int64","nullable":true}}},"Banner":{"type":"object","description":"This object represents the most general type of impression. Although the term “banner” may have very\nspecific meaning in other contexts, here it can be many things including a simple static image, an\nexpandable ad unit, or even in-banner video (refer to the Video object in Section 3.2.7 for the more\ngeneralized and full featured video ad units). An array of Banner objects can also appear within the\nVideo to describe optional companion ads defined in the VAST specification.","properties":{"api":{"type":"array","items":{"type":"integer","format":"int64"},"description":"List of supported API frameworks for this impression.\nIf an API is not explicitly listed, it is assumed not to be supported.","nullable":true},"battr":{"type":"array","items":{"$ref":"#/components/schemas/CreativeAttribute"},"description":"Blocked creative attributes.","nullable":true},"btype":{"type":"array","items":{"$ref":"#/components/schemas/BannerAdType"},"description":"Blocked banner ad types.","nullable":true},"expdir":{"type":"array","items":{"$ref":"#/components/schemas/ExpandableDirection"},"description":"Directions in which the banner may expand.","nullable":true},"ext":{"description":"Placeholder for exchange-specific extensions to OpenRTB.","nullable":true},"format":{"type":"array","items":{"$ref":"#/components/schemas/Format"},"description":"Array of format objects representing the\nbanner sizes permitted. If none are specified, then use of the\nh and w attributes is highly recommended.","nullable":true},"h":{"type":"integer","format":"int64","description":"Exact height in device independent pixels (DIPS);\nrecommended if no format objects are specified.","nullable":true},"id":{"type":"string","description":"Unique identifier for this banner object. Recommended when\nBanner objects are used with a Video object to\nrepresent an array of companion ads. Values usually start at 1\nand increase with each object; should be unique within an\nimpression.","nullable":true},"mimes":{"type":"array","items":{"type":"string"},"description":"Content MIME types supported. Popular MIME types may\ninclude “application/x-shockwave-flash”,\n“image/jpg”, and “image/gif”.","nullable":true},"pos":{"allOf":[{"$ref":"#/components/schemas/AdPosition"}],"nullable":true},"topframe":{"type":"integer","format":"int32","description":"Indicates if the banner is in the top frame as opposed to an\niframe, where 0 = no, 1 = yes.","nullable":true,"minimum":0},"vcm":{"type":"integer","format":"int64","description":"Relevant only for Banner objects used with a Video object\nin an array of companion ads. Indicates the\ncompanion banner rendering mode relative to the associated\nvideo, where 0 = concurrent, 1 = end-card.","nullable":true},"w":{"type":"integer","format":"int64","description":"Exact width in device independent pixels (DIPS);\nrecommended if no format objects are specified.","nullable":true}}},"BannerAdType":{"type":"string","enum":["XHTMLTextAd","XHTMLBannerAd","JavaScriptAd","Iframe"]},"Bid":{"type":"object","description":"A SeatBid object contains one or more Bid objects, each of which relates to a specific impression in the\nbid request via the impid attribute and constitutes an offer to buy that impression for a given price.","required":["id","impid","price"],"properties":{"adid":{"type":"string","description":"ID of a preloaded ad to be served if the bid wins.","nullable":true},"adm":{"type":"string","description":"Optional means of conveying ad markup in case the bid wins;\nsupersedes the win notice if markup is included in both.\nSubstitution macros may be included.","nullable":true},"adomain":{"type":"array","items":{"type":"string"},"description":"Advertiser domain for block list checking (e.g., “ford.com”).\nThis can be an array of for the case of rotating creatives.\nExchanges can mandate that only one domain is allowed.","nullable":true},"api":{"type":"integer","format":"int32","description":"API required by the markup if applicable.","nullable":true,"minimum":0},"attr":{"type":"array","items":{"$ref":"#/components/schemas/CreativeAttribute"},"description":"Set of attributes describing the creative.","nullable":true},"bundle":{"type":"string","description":"A platform-specific application identifier intended to be\nunique to the app and independent of the exchange. On\nAndroid, this should be a bundle or package name (e.g.,\ncom.foo.mygame). On iOS, it is a numeric ID.","nullable":true},"burl":{"type":"string","description":"Billing notice URL called by the exchange when a winning bid\nbecomes billable based on exchange-specific business policy\n(e.g., typically delivered, viewed, etc.). Substitution macros\nmay be included.","nullable":true},"cat":{"type":"array","items":{"type":"string"},"description":"IAB content categories of the creative.","nullable":true},"cid":{"type":"string","description":"Campaign ID to assist with ad quality checking; the collection\nof creatives for which iurl should be representative.","nullable":true},"crid":{"allOf":[{"$ref":"#/components/schemas/BidCridVariant"}],"nullable":true},"dealid":{"type":"string","description":"Reference to the deal.id from the bid request if this bid\npertains to a private marketplace direct deal.","nullable":true},"exp":{"type":"integer","format":"int64","description":"Advisory as to the number of seconds the bidder is willing to\nwait between the auction and the actual impression.","nullable":true},"ext":{"description":"Placeholder for bidder-specific extensions to OpenRTB.","nullable":true},"h":{"type":"integer","format":"int64","description":"Height of the creative in device independent pixels (DIPS).","nullable":true},"hratio":{"type":"integer","format":"int64","description":"Relative height of the creative when expressing size as a ratio.\nRequired for Flex Ads.","nullable":true},"id":{"type":"string","description":"Bidder generated bid ID to assist with logging/tracking."},"impid":{"type":"string","description":"ID of the Imp object in the related bid request."},"iurl":{"type":"string","description":"URL without cache-busting to an image that is representative\nof the content of the campaign for ad quality/safety checking.","nullable":true},"language":{"type":"string","description":"Language of the creative using ISO-639-1-alpha-2. The nonstandard code “xx” may also be used\nif the creative has no linguistic content (e.g., a banner with just a company logo).","nullable":true},"lurl":{"type":"string","description":"Loss notice URL called by the exchange when a bid is known to\nhave been lost. Substitution macros (Section 4.4) may be\nincluded. Exchange-specific policy may preclude support for\nloss notices or the disclosure of winning clearing prices\nresulting in ${AUCTION_PRICE} macros being removed (i.e.,\nreplaced with a zero-length string).","nullable":true},"nurl":{"type":"string","description":"Win notice URL called by the exchange if the bid wins (not\nnecessarily indicative of a delivered, viewed, or billable ad);\noptional means of serving ad markup. Substitution macros\nmay be included in both the URL and optionally\nreturned markup.","nullable":true},"price":{"type":"number","format":"double","description":"Bid price expressed as CPM although the actual transaction is\nfor a unit impression only. Note that while the type indicates\nfloat, integer math is highly recommended when handling\ncurrencies (e.g., BigDecimal in Java)."},"protocol":{"type":"integer","format":"int32","description":"Video response protocol of the markup if applicable.","nullable":true,"minimum":0},"qagmediarating":{"type":"integer","format":"int64","description":"Creative media rating per IQG guidelines.","nullable":true},"tactic":{"type":"string","description":"Tactic ID to enable buyers to label bids for reporting to the\nexchange the tactic through which their bid was submitted.\nThe specific usage and meaning of the tactic ID should be\ncommunicated between buyer and exchanges a priori.","nullable":true},"w":{"type":"integer","format":"int64","description":"Width of the creative in device independent pixels (DIPS).","nullable":true},"wratio":{"type":"integer","format":"int64","description":"Relative width of the creative when expressing size as a ratio.\nRequired for Flex Ads.","nullable":true}}},"BidCridVariant":{"oneOf":[{"type":"string"},{"type":"integer","format":"int64","minimum":0}],"description":"Contrary to IAB spec, Audiohook passes an integer in the `crid` field\n* For the serde macro see: https://serde.rs/enum-representations.html#untagged"},"BidRequest":{"type":"object","description":"The top-level bid request object contains a globally unique bid request or auction ID. This id\nattribute is required as is at least one impression object. Other attributes in this top-level\nobject establish rules and restrictions that apply to all impressions being offered.","required":["id","imp"],"properties":{"allimps":{"type":"integer","format":"int32","description":"Flag to indicate if Exchange can verify that the impressions\noffered represent all of the impressions available in context\n(e.g., all on the web page, all video spots such as pre/mid/post\nroll) to support road-blocking. 0 = no or unknown, 1 = yes, the\nimpressions offered represent all that are available.","nullable":true,"minimum":0},"app":{"allOf":[{"$ref":"#/components/schemas/App"}],"nullable":true},"at":{"type":"integer","format":"int64","description":"Auction type, where 1 = First Price, 2 = Second Price Plus. Exchange-specific auction types\ncan be defined using values greater than 500.","nullable":true},"badv":{"type":"array","items":{"type":"string"},"description":"Block list of advertisers by their domains (e.g., “ford.com”).","nullable":true},"bapp":{"type":"array","items":{"type":"string"},"description":"Block list of applications by their platform-specific exchangeindependent application\nidentifiers. On Android, these should be bundle or package names (e.g., com.foo.mygame).\nOn iOS, these are numeric IDs.","nullable":true},"bcat":{"type":"array","items":{"type":"string"},"description":"Blocked advertiser categories using the IAB content\ncategories.","nullable":true},"bseat":{"type":"array","items":{"type":"string"},"description":"Block list of buyer seats (e.g., advertisers, agencies) restricted\nfrom bidding on this impression. IDs of seats and knowledge\nof the buyer’s customers to which they refer must be\ncoordinated between bidders and the exchange a priori. At\nmost, only one of wseat and bseat should be used in the\nsame request. Omission of both implies no seat restrictions.","nullable":true},"cur":{"type":"array","items":{"type":"string"},"description":"Array of allowed currencies for bids on this bid request using\nISO-4217 alpha codes. Recommended only if the exchange\naccepts multiple currencies.","nullable":true},"device":{"allOf":[{"$ref":"#/components/schemas/Device"}],"nullable":true},"ext":{"allOf":[{"$ref":"#/components/schemas/BidRequestExt"}],"nullable":true},"id":{"type":"string","description":"Unique ID of the bid request, provided by the exchange."},"imp":{"type":"array","items":{"$ref":"#/components/schemas/Imp"},"description":"Array of Imp objects representing the impressions offered."},"regs":{"allOf":[{"$ref":"#/components/schemas/Regs"}],"nullable":true},"site":{"allOf":[{"$ref":"#/components/schemas/Site"}],"nullable":true},"source":{"allOf":[{"$ref":"#/components/schemas/Source"}],"nullable":true},"test":{"type":"integer","format":"int64","description":"Indicator of test mode in which auctions are not billable, where 0 = live mode,\n1 = test mode.","nullable":true},"tmax":{"type":"integer","format":"int64","description":"Maximum time in milliseconds the exchange allows for bids to be received including Internet\nlatency to avoid timeout. This value supersedes any a priori guidance from the exchange.","nullable":true,"minimum":0},"user":{"allOf":[{"$ref":"#/components/schemas/User"}],"nullable":true},"wlang":{"type":"array","items":{"type":"string"},"description":"White list of languages for creatives using ISO-639-1-alpha-2.\nOmission implies no specific restrictions, but buyers would be\nadvised to consider language attribute in the Device and/or\nContent objects if available.","nullable":true},"wseat":{"type":"array","items":{"type":"string"},"description":"White list of buyer seats (e.g., advertisers, agencies) allowed\nto bid on this impression. IDs of seats and knowledge of the\nbuyer’s customers to which they refer must be coordinated\nbetween bidders and the exchange a priori. At most, only one\nof wseat and bseat should be used in the same request.\nOmission of both implies no seat restrictions.","nullable":true}}},"BidRequestExt":{"allOf":[{"type":"object","additionalProperties":{}},{"type":"object","properties":{"a0x":{"allOf":[{"$ref":"#/components/schemas/A0xBidRequestExt"}],"nullable":true}}}]},"BidResponseOpenApi":{"type":"object","description":"This object is the top-level bid response object (i.e., the unnamed outer JSON object). The id attribute\nis a reflection of the bid request ID for logging purposes. Similarly, bidid is an optional response\ntracking ID for bidders. If specified, it can be included in the subsequent win notice call if the bidder\nwins. At least one seatbid object is required, which contains at least one bid for an impression. Other\nattributes are optional.\nTo express a “no-bid”, the options are to return an empty response with HTTP 204. Alternately if the\nbidder wishes to convey to the exchange a reason for not bidding, just a BidResponse object is\nreturned with a reason code in the nbr attribute.","required":["id"],"properties":{"bidid":{"type":"string","description":"Bidder generated response ID to assist with logging/tracking.","nullable":true},"cur":{"type":"string","description":"Bid currency using ISO-4217 alpha codes.","nullable":true},"customdata":{"type":"string","description":"Optional feature to allow a bidder to set data in the\nexchange’s cookie. The string must be in base85 cookie safe\ncharacters and be in any format. Proper JSON encoding must\nbe used to include “escaped” quotation marks.","nullable":true},"ext":{"description":"Placeholder for bidder-specific extensions to OpenRTB.","nullable":true},"id":{"type":"string","description":"ID of the bid request to which this is a response."},"nbr":{"type":"integer","format":"int64","description":"Reason for not bidding.","nullable":true},"seatbid":{"type":"array","items":{"$ref":"#/components/schemas/SeatBid"},"description":"Array of seatbid objects; 1+ required if a bid is to be made.","nullable":true}}},"Content":{"type":"object","description":"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\nnot necessarily match the publisher’s general content. The exchange might or might not have\nknowledge of the page where the content is running, as a result of the syndication method. For\nexample might be a video impression embedded in an iframe on an unknown web property or device.","properties":{"album":{"type":"string","nullable":true},"artist":{"type":"string","nullable":true},"cat":{"type":"array","items":{"type":"string"},"description":"Array of IAB content categories that describe the content producer.","nullable":true},"contentrating":{"type":"string","nullable":true},"context":{"type":"integer","format":"int64","nullable":true,"minimum":0},"data":{"type":"array","items":{"$ref":"#/components/schemas/Data"},"description":"Additional content data.","nullable":true},"embeddable":{"type":"integer","format":"int64","nullable":true,"minimum":0},"episode":{"type":"integer","format":"int64","nullable":true,"minimum":0},"ext":{"description":"Placeholder for exchange-specific extensions to OpenRTB.","nullable":true},"genre":{"type":"string","description":"Genre that best describes the content (e.g., rock, pop, etc).","nullable":true},"id":{"type":"string","nullable":true},"isrc":{"type":"string","nullable":true},"keywords":{"type":"string","nullable":true},"language":{"type":"string","description":"Content language using ISO-639-1-alpha-2.","nullable":true},"livestream":{"type":"integer","format":"int64","nullable":true,"minimum":0},"prodq":{"type":"integer","format":"int64","nullable":true,"minimum":0},"producer":{"allOf":[{"$ref":"#/components/schemas/Producer"}],"nullable":true},"qagmediarating":{"type":"integer","format":"int64","nullable":true,"minimum":0},"season":{"type":"string","nullable":true},"series":{"type":"string","description":"Content series","nullable":true},"sourcerelationship":{"type":"integer","format":"int64","nullable":true,"minimum":0},"title":{"type":"string","description":"Content title","nullable":true},"url":{"type":"string","nullable":true},"userrating":{"type":"string","nullable":true}}},"CreativeAttribute":{"type":"string","enum":["AudioAdAutoPlay","AudioAdUserInit","ExpandableAuto","ExpandableUserClick","ExpandableUserRollover","InBannerVideoAutoPlay","InBannerVideoUserInit","Pop","ProvocativeImagery","Flashing","Surveys","TextOnly","UserInteractive","Alert","HasAudioButtons","AdProvidesSkip","AdobeFlash"]},"Data":{"type":"object","description":"The data and segment objects together allow additional data about the related object (e.g., user,\ncontent) to be specified. This data may be from multiple sources whether from the exchange itself or\nthird parties as specified by the id field. A bid request can mix data objects from multiple providers.\nThe specific data providers in use should be published by the exchange a priori to its bidders.","properties":{"ext":{"description":"Placeholder for exchange-specific extensions to OpenRTB.","nullable":true},"id":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"segment":{"type":"array","items":{"$ref":"#/components/schemas/Segment"},"nullable":true}}},"Deal":{"type":"object","required":["id"],"properties":{"at":{"type":"integer","format":"int64","nullable":true},"bidfloor":{"type":"number","format":"double","nullable":true},"bidfloorcur":{"type":"string","nullable":true},"ext":{"description":"Placeholder for exchange-specific extensions to OpenRTB.","nullable":true},"id":{"type":"string"},"wadomain":{"type":"array","items":{"type":"string"},"nullable":true},"wseat":{"type":"array","items":{"type":"string"},"nullable":true}}},"Device":{"type":"object","description":"This object provides information pertaining to the device through which the user is interacting. Device\ninformation includes its hardware, platform, location, and carrier data. The device can refer to a mobile\nhandset, a desktop computer, set top box, or other digital device.","properties":{"carrier":{"type":"string","nullable":true},"connectiontype":{"type":"integer","format":"int32","nullable":true,"minimum":0},"devicetype":{"type":"integer","format":"int32","nullable":true,"minimum":0},"didmd5":{"type":"string","nullable":true},"didsha1":{"type":"string","nullable":true},"dnt":{"type":"integer","format":"int32","nullable":true,"minimum":0},"dpidmd5":{"type":"string","nullable":true},"dpidsha1":{"type":"string","nullable":true},"ext":{"description":"Placeholder for exchange-specific extensions to OpenRTB.","nullable":true},"flashver":{"type":"string","nullable":true},"geo":{"allOf":[{"$ref":"#/components/schemas/Geo"}],"nullable":true},"geofetch":{"type":"integer","format":"int64","nullable":true},"h":{"type":"integer","format":"int64","nullable":true},"hwv":{"type":"string","nullable":true},"ifa":{"type":"string","nullable":true},"ip":{"type":"string","nullable":true},"ipv6":{"type":"string","nullable":true},"js":{"type":"integer","format":"int32","nullable":true,"minimum":0},"language":{"type":"string","nullable":true},"lmt":{"type":"integer","format":"int32","nullable":true,"minimum":0},"macmd5":{"type":"string","nullable":true},"macsha1":{"type":"string","nullable":true},"make":{"type":"string","nullable":true},"mccmnc":{"type":"string","nullable":true},"model":{"type":"string","nullable":true},"os":{"type":"string","nullable":true},"osv":{"type":"string","nullable":true},"ppi":{"type":"integer","format":"int64","nullable":true},"pxratio":{"type":"number","format":"double","nullable":true},"ua":{"type":"string","nullable":true},"w":{"type":"integer","format":"int64","nullable":true}}},"ExpandableDirection":{"type":"string","enum":["Left","Right","Up","Down","FullScreen"]},"Format":{"type":"object","properties":{"ext":{"description":"Placeholder for exchange-specific extensions to OpenRTB.","nullable":true},"h":{"type":"integer","format":"int64","nullable":true},"hratio":{"type":"integer","format":"int64","nullable":true},"w":{"type":"integer","format":"int64","nullable":true},"wmin":{"type":"integer","format":"int64","nullable":true},"wratio":{"type":"integer","format":"int64","nullable":true}}},"Geo":{"type":"object","description":"This object encapsulates various methods for specifying a geographic location. When subordinate to a\nDevice object, it indicates the location of the device which can also be interpreted as the user’s current\nlocation. When subordinate to a User object, it indicates the location of the user’s home base (i.e., not\nnecessarily their current location).\nThe lat/lon attributes should only be passed if they conform to the accuracy depicted in the type\nattribute. For example, the centroid of a geographic region such as postal code should not be passed.","properties":{"accuracy":{"type":"integer","format":"int64","description":"Estimated location accuracy in meters; recommended when\nlat/lon are specified and derived from a device’s location\nservices (i.e., type = 1). Note that this is the accuracy as\nreported from the device. Consult OS specific documentation\n(e.g., Android, iOS) for exact interpretation.","nullable":true},"city":{"type":"string","description":"City using United Nations Code for Trade & Transport\nLocations.","nullable":true},"country":{"type":"string","description":"Country code using ISO-3166-1-alpha-3.","nullable":true},"ext":{"description":"Placeholder for exchange-specific extensions to OpenRTB.","nullable":true},"ipservice":{"type":"integer","format":"int64","description":"Service or provider used to determine geolocation from IP\naddress if applicable (i.e., type = 2).","nullable":true},"lastfix":{"type":"integer","format":"int64","description":"Number of seconds since this geolocation fix was established.\nNote that devices may cache location data across multiple\nfetches. Ideally, this value should be from the time the actual\nfix was taken.","nullable":true},"lat":{"type":"number","format":"double","description":"Latitude from -90.0 to +90.0, where negative is south.","nullable":true},"lon":{"type":"number","format":"double","description":"Longitude from -180.0 to +180.0, where negative is west.","nullable":true},"metro":{"type":"string","description":"Google metro code; similar to but not exactly Nielsen DMAs.","nullable":true},"region":{"type":"string","description":"Region code using ISO-3166-2; 2-letter state code if USA.","nullable":true},"regionfips104":{"type":"string","description":"Region of a country using FIPS 10-4 notation. While OpenRTB\nsupports this attribute, it has been withdrawn by NIST in 2008.","nullable":true},"type":{"type":"integer","format":"int64","description":"Source of location data; recommended when passing\nlat/lon.","nullable":true},"utcoffset":{"type":"integer","format":"int64","description":"Local time as the number +/- of minutes from UTC.","nullable":true},"zip":{"type":"string","description":"Zip or postal code.","nullable":true}}},"Imp":{"type":"object","required":["id"],"properties":{"audio":{"allOf":[{"$ref":"#/components/schemas/Audio"}],"nullable":true},"banner":{"allOf":[{"$ref":"#/components/schemas/Banner"}],"nullable":true},"bidfloor":{"type":"number","format":"double","nullable":true},"bidfloorcur":{"type":"string","nullable":true},"clickbrowser":{"type":"integer","format":"int64","nullable":true},"displaymanager":{"type":"string","nullable":true},"displaymanagerver":{"type":"string","nullable":true},"exp":{"type":"integer","format":"int64","nullable":true},"ext":{"allOf":[{"$ref":"#/components/schemas/ImpExt"}],"nullable":true},"id":{"type":"string"},"iframebuster":{"type":"array","items":{"type":"string"},"nullable":true},"instl":{"type":"integer","format":"int64","nullable":true},"metric":{"type":"array","items":{"$ref":"#/components/schemas/Metric"},"nullable":true},"native":{"allOf":[{"$ref":"#/components/schemas/Native"}],"nullable":true},"pmp":{"allOf":[{"$ref":"#/components/schemas/Pmp"}],"nullable":true},"qty":{"allOf":[{"$ref":"#/components/schemas/Qty"}],"nullable":true},"secure":{"type":"integer","format":"int64","nullable":true},"tagid":{"type":"string","nullable":true},"video":{"allOf":[{"$ref":"#/components/schemas/Video"}],"nullable":true}}},"ImpBidderConfig":{"allOf":[{"nullable":true},{"type":"object","properties":{"pmp":{"allOf":[{"$ref":"#/components/schemas/Pmp"}],"nullable":true}}}]},"ImpExt":{"allOf":[{"type":"object","additionalProperties":{}},{"type":"object","properties":{"a0x":{"allOf":[{"$ref":"#/components/schemas/A0xImpExt"}],"nullable":true}}}]},"Metric":{"type":"object","required":["type","value"],"properties":{"ext":{"description":"Placeholder for exchange-specific extensions to OpenRTB.","nullable":true},"type":{"type":"string","description":"Type of metric being presented using exchange curated string\nnames which should be published to bidders a priori."},"value":{"type":"number","format":"double","description":"Number representing the value of the metric. Probabilities\nmust be in the range 0.0 – 1.0."},"vendor":{"type":"string","description":"Source of the value using exchange curated string names\nwhich should be published to bidders a priori. If the exchange\nitself is the source versus a third party, “EXCHANGE” is\nrecommended.","nullable":true}}},"Native":{"type":"object","required":["request"],"properties":{"api":{"type":"array","items":{"type":"integer","format":"int64"},"nullable":true},"battr":{"type":"array","items":{"type":"integer","format":"int64"},"nullable":true},"ext":{"description":"Placeholder for exchange-specific extensions to OpenRTB.","nullable":true},"request":{"type":"string"},"ver":{"type":"string","nullable":true}}},"Pmp":{"type":"object","description":"This object is the private marketplace container for direct deals between buyers and sellers that\nman pertain to this impression. The actual deals are represented as a collection of Deal objects.","properties":{"deals":{"type":"array","items":{"$ref":"#/components/schemas/Deal"},"description":"Array of Deal objects that convey the specific\ndeals applicable to this impression.","nullable":true},"ext":{"description":"Placeholder for exchange-specific extensions to OpenRTB.","nullable":true},"private_auction":{"type":"integer","format":"int32","description":"Indicator of auction eligibility to seats named in the Direct\nDeals object, where 0 = all bids are accepted, 1 = bids are\nrestricted to the deals specified and the terms thereof.","nullable":true,"minimum":0}}},"Producer":{"type":"object","description":"This object defines the producer of the content in which the ad will be shown. This is particularly useful\nwhen the content is syndicated and may be distributed through different publishers and thus when the\nproducer and publisher are not necessarily the same entity.","properties":{"cat":{"type":"array","items":{"type":"string"},"nullable":true},"domain":{"type":"string","nullable":true},"ext":{"description":"Placeholder for exchange-specific extensions to OpenRTB.","nullable":true},"id":{"type":"string","nullable":true},"name":{"type":"string","nullable":true}}},"Publisher":{"type":"object","description":"This object describes the publisher of the media in which the ad will be displayed. The publisher is\ntypically the seller in an OpenRTB transaction.","properties":{"cat":{"type":"array","items":{"type":"string"},"description":"Array of IAB content categories that describe the publisher.","nullable":true},"domain":{"type":"string","description":"Highest level domain of the publisher (e.g., “publisher.com”).","nullable":true},"ext":{"description":"Placeholder for exchange-specific extensions to OpenRTB.","nullable":true},"id":{"allOf":[{"$ref":"#/components/schemas/PublisherIdVariant"}],"nullable":true},"name":{"type":"string","description":"Publisher name (may be aliased at the publisher’s request).","nullable":true}}},"PublisherIdVariant":{"oneOf":[{"type":"string"},{"type":"integer","format":"int64","minimum":0}],"description":"Index asked us if we could \"de-string\" the `Publisher.id` while\ntroubleshooting fill for Blockthrough. This deviates from the spec and even\nIndex's previous implementations with other customers.\nFor the serde macro see:\nhttps://serde.rs/enum-representations.html#untagged"},"Qty":{"type":"object","description":"A means of passing a multiplier in the bid request, representing the total quantity of impressions for adverts that display to more than one person.\n\nA programmatic impression is often referred to as a ‘spot’ in digital out-of-home and CTV, with\nan impression being a unique member of the audience viewing it. Therefore, a standard means of\npassing a multiplier in the bid request, representing the total quantity of impressions, is\nrequired. This object includes the impression multiplier, and describes the source of the\nmultiplier value.","required":["multiplier"],"properties":{"ext":{"description":"Placeholder for exchange-specific extensions to OpenRTB.","nullable":true},"multiplier":{"type":"number","format":"double","description":"The quantity of billable events which will be deemed to have occurred if this item is\npurchased. For example, a DOOH opportunity may be considered to be 14.2 impressions.\nEquivalent to qtyflt in OpenRTB 3.0."},"sourcetype":{"type":"integer","format":"int64","description":"The source type of the quantity measurement, ie. publisher. Refer to the list\nhttps://github.com/InteractiveAdvertisingBureau/AdCOM/blob/master/AdCOM%20v1.0%20FINAL.md#list-multiplier-measurement-source-types-","nullable":true,"minimum":0},"vendor":{"type":"string","description":"The top level business domain name of the measurement vendor providing the quantity measurement.","nullable":true}}},"Regs":{"type":"object","properties":{"coppa":{"type":"integer","format":"int32","description":"Flag indicating if this request is subject to the COPPA\nregulations established by the USA FTC, where 0 = no, 1 = yes.","nullable":true,"minimum":0},"ext":{"allOf":[{"$ref":"#/components/schemas/RegsExt"}],"nullable":true}}},"RegsExt":{"allOf":[{"nullable":true},{"type":"object","properties":{"gdpr":{"type":"integer","format":"int32","description":"Is this request subject to GDPR compliance? 0 = No, 1 = Yes","nullable":true,"minimum":0},"us_privacy":{"type":"string","description":"US Privacy String (CCPA)","nullable":true}}}]},"SeatBid":{"type":"object","description":"A bid response can contain multiple SeatBid objects, each on behalf of a different bidder seat and each\ncontaining one or more individual bids. If multiple impressions are presented in the request, the group\nattribute can be used to specify if a seat is willing to accept any impressions that it can win (default) or if\nit is only interested in winning any if it can win them all as a group.","required":["bid"],"properties":{"bid":{"type":"array","items":{"$ref":"#/components/schemas/Bid"},"description":"Array of 1+ Bid objects each related to an impression.\nMultiple bids can relate to the same impression."},"ext":{"description":"Placeholder for bidder-specific extensions to OpenRTB.","nullable":true},"group":{"type":"integer","format":"int32","description":"0 = impressions can be won individually; 1 = impressions must\nbe won or lost as a group.","nullable":true,"minimum":0},"seat":{"type":"string","description":"ID of the buyer seat (e.g., advertiser, agency) on whose behalf\nthis bid is made.","nullable":true}}},"Segment":{"type":"object","description":"Segment objects are essentially key-value pairs that convey specific units of data. The parent Data\nobject is a collection of such values from a given data provider. The specific segment names and value\noptions must be published by the exchange a priori to its bidders.","properties":{"ext":{"description":"Placeholder for exchange-specific extensions to OpenRTB.","nullable":true},"id":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"value":{"type":"string","nullable":true}}},"Site":{"type":"object","description":"This object should be included if the ad supported content is a website as opposed to a non-browser\napplication. A bid request must not contain both a Site and an App object. At a minimum, it is useful\nto provide a site ID or page URL, but this is not strictly required.","properties":{"cat":{"type":"array","items":{"type":"string"},"description":"Array of IAB content categories of the site.","nullable":true},"content":{"allOf":[{"$ref":"#/components/schemas/Content"}],"nullable":true},"domain":{"type":"string","description":"Domain of the site (e.g., “mysite.foo.com”).","nullable":true},"ext":{"description":"Placeholder for exchange-specific extensions to OpenRTB.","nullable":true},"id":{"type":"string","description":"Exchange-specific site ID.","nullable":true},"keywords":{"type":"string","description":"Comma separated list of keywords about the site.","nullable":true},"mobile":{"type":"integer","format":"int32","description":"Indicates if the site has been programmed to optimize layout\nwhen viewed on mobile devices, where 0 = no, 1 = yes.","nullable":true,"minimum":0},"name":{"type":"string","description":"Site name (may be aliased at the publisher’s request).","nullable":true},"page":{"type":"string","description":"URL of the page where the impression will be shown.","nullable":true},"pagecat":{"type":"array","items":{"type":"string"},"description":"Array of IAB content categories that describe the current page\nor view of the site.","nullable":true},"privacypolicy":{"type":"integer","format":"int32","description":"Indicates if the site has a privacy policy, where 0 = no, 1 = yes.","nullable":true,"minimum":0},"publisher":{"allOf":[{"$ref":"#/components/schemas/Publisher"}],"nullable":true},"ref":{"type":"string","description":"Referrer URL that caused navigation to the current page.","nullable":true},"search":{"type":"string","description":"Search string that caused navigation to the current page.","nullable":true},"sectioncat":{"type":"array","items":{"type":"string"},"description":"Array of IAB content categories that describe the current\nsection of the site.","nullable":true}}},"Source":{"type":"object","properties":{"ext":{"allOf":[{"$ref":"#/components/schemas/SourceExt"}],"nullable":true},"fd":{"type":"integer","format":"int64","description":"Entity responsible for the final impression sale decision, where\n0 = exchange, 1 = upstream source.","nullable":true},"pchain":{"type":"string","description":"Payment ID chain string containing embedded syntax\ndescribed in the TAG Payment ID Protocol v1.0.","nullable":true},"tid":{"type":"string","description":"Transaction ID that must be common across all participants in\nthis bid request (e.g., potentially multiple exchanges).","nullable":true}}},"SourceExt":{"allOf":[{"type":"object","additionalProperties":{}},{"type":"object","properties":{"schain":{"allOf":[{"$ref":"#/components/schemas/SupplyChain"}],"nullable":true}}}]},"SupplyChain":{"type":"object","required":["complete","nodes","ver"],"properties":{"complete":{"type":"integer","format":"int64","description":"Flag indicating whether the chain contains all nodes involved in the transaction leading\nback to the owner of the site, app or other medium of the inventory, where 0 = no, 1 = yes."},"ext":{"description":"Placeholder for advertising-system specific extensions to this object.","nullable":true},"nodes":{"type":"array","items":{"$ref":"#/components/schemas/SupplyChainNode"},"description":"Array of SupplyChainNode objects in the order of the chain. In a complete supply chain, the\nfirst node represents the initial advertising system and seller ID involved in the\ntransaction, i.e. the owner of the site, app, or other medium. In an incomplete supply\nchain, it represents the first known node. The last node represents the entity sending this\nbid request."},"ver":{"type":"string","description":"Version of the supply chain specification in use, in the format of “major.minor”. For\nexample, for version 1.0 of the spec, use the string “1.0”."}}},"SupplyChainNode":{"type":"object","required":["asi","sid","hp"],"properties":{"asi":{"type":"string","description":"The canonical domain name of the SSP, Exchange, Header Wrapper, etc system that bidders\nconnect to. This may be the operational domain of the system, if that is different than the\nparent corporate domain, to facilitate WHOIS and reverse IP lookups to establish clear\nownership of the delegate system. This should be the same value as used to identify sellers\nin an ads.txt file if one exists."},"domain":{"type":"string","description":"The business domain name of the entity represented by this node. This value is optional and\nshould NOT be included if it exists in the advertising system’s sellers.json file.","nullable":true},"ext":{"description":"Placeholder for advertising-system specific extensions to this object.","nullable":true},"hp":{"type":"integer","format":"int64","description":"Indicates whether this node will be involved in the flow of payment for the inventory. When\nset to 1, the advertising system in the asi field pays the seller in the sid field, who is\nresponsible for paying the previous node in the chain. When set to 0, this node is not\ninvolved in the flow of payment for the inventory. For version 1.0 of SupplyChain, this\nproperty should always be 1. It is explicitly required to be included as it is expected that\nfuture versions of the specification will introduce non-payment handling nodes. Implementers\nshould ensure that they support this field and propagate it onwards when constructing\nSupplyChain objects in bid requests sent to a downstream advertising system."},"name":{"type":"string","description":"The name of the company (the legal entity) that is paid for inventory transacted under the\ngiven seller_id. This value is optional and should NOT be included if it exists in the\nadvertising system’s sellers.json file.","nullable":true},"rid":{"type":"string","description":"The OpenRTB RequestId of the request as issued by this seller.","nullable":true},"sid":{"type":"string","description":"The identifier associated with the seller or reseller account within the advertising system.\nThis must contain the same value used in transactions (i.e. OpenRTB bid requests) in the\nfield specified by the SSP/exchange. Typically, in OpenRTB, this is publisher.id. For\nOpenDirect it is typically the publisher’s organization ID.Should be limited to 64\ncharacters in length."}}},"User":{"type":"object","description":"This object contains information known or derived about the human user of the device (i.e., the\naudience for advertising). The user id is an exchange artifact and may be subject to rotation or other\nprivacy policies. However, this user ID must be stable long enough to serve reasonably as the basis for\nfrequency capping and retargeting.","properties":{"buyeruid":{"type":"string","description":"Buyer-specific ID for the user as mapped by the exchange for\nthe buyer. At least one of buyeruid or id is recommended.","nullable":true},"customdata":{"type":"string","description":"Optional feature to pass bidder data that was set in the\nexchange’s cookie. The string must be in base85 cookie safe\ncharacters and be in any format. Proper JSON encoding must\nbe used to include “escaped” quotation marks.","nullable":true},"data":{"type":"array","items":{"$ref":"#/components/schemas/Data"},"description":"Additional user data. Each Data object represents a different data source.","nullable":true},"ext":{"allOf":[{"$ref":"#/components/schemas/UserExt"}],"nullable":true},"gender":{"type":"string","description":"Gender, where “M” = male, “F” = female, “O” = known to be\nother (i.e., omitted is unknown).","nullable":true},"geo":{"allOf":[{"$ref":"#/components/schemas/Geo"}],"nullable":true},"id":{"type":"string","description":"Exchange-specific ID for the user. At least one of id or\nbuyeruid is recommended.","nullable":true},"keywords":{"type":"string","description":"Comma separated list of keywords, interests, or intent.","nullable":true},"yob":{"type":"integer","format":"int64","description":"Year of birth as a 4-digit integer.","nullable":true}}},"UserExt":{"allOf":[{"type":"object","additionalProperties":{}},{"type":"object","properties":{"a0x":{"allOf":[{"$ref":"#/components/schemas/A0xUserExt"}],"nullable":true},"consent":{"type":"string","description":"GDPR consent string","nullable":true}}}]},"Video":{"type":"object","required":["mimes"],"properties":{"api":{"type":"array","items":{"type":"integer","format":"int64"},"nullable":true},"battr":{"type":"array","items":{"type":"integer","format":"int64"},"nullable":true},"boxingallowed":{"type":"integer","format":"int64","nullable":true},"companionad":{"type":"array","items":{"$ref":"#/components/schemas/Banner"},"nullable":true},"companiontype":{"type":"array","items":{"type":"integer","format":"int64"},"nullable":true},"delivery":{"type":"array","items":{"type":"integer","format":"int64"},"nullable":true},"ext":{"description":"Placeholder for exchange-specific extensions to OpenRTB.","nullable":true},"h":{"type":"integer","format":"int64","nullable":true},"linearity":{"type":"integer","format":"int64","nullable":true},"maxbitrate":{"type":"integer","format":"int64","nullable":true},"maxduration":{"type":"integer","format":"int64","nullable":true},"maxextended":{"type":"integer","format":"int64","nullable":true},"mimes":{"type":"array","items":{"type":"string"}},"minbitrate":{"type":"integer","format":"int64","nullable":true},"minduration":{"type":"integer","format":"int64","nullable":true},"placement":{"type":"integer","format":"int64","nullable":true},"playbackend":{"type":"integer","format":"int64","nullable":true},"playbackmethod":{"type":"array","items":{"type":"integer","format":"int64"},"nullable":true},"pos":{"type":"integer","format":"int64","nullable":true},"protocols":{"type":"array","items":{"type":"integer","format":"int64"},"nullable":true},"sequence":{"type":"integer","format":"int64","nullable":true},"skip":{"type":"integer","format":"int64","nullable":true},"skipafter":{"type":"integer","format":"int64","nullable":true},"skipmin":{"type":"integer","format":"int64","nullable":true},"startdelay":{"type":"integer","format":"int64","nullable":true},"w":{"type":"integer","format":"int64","nullable":true}}}},"securitySchemes":{"api_key":{"type":"apiKey","in":"header","name":"x-relay-secret"}}},"security":[{"api_key":[]}],"x-readme":{"explorer-enabled":true,"proxy-enabled":true}}