{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "title": "openrtb-v2_1-schema-bid_request",
    "description": "json schema for an openrtb v2.1 bid request (http://www.iab.net/media/file/OpenRTB-API-Specification-Version-2-1-FINAL.pdf)",
    "type": "object",
    "required": [
        "id",
        "imp"
    ],
    "not": {
        "allOf": [
            {
                "required": [
                    "site"
                ]
            },
            {
                "required": [
                    "app"
                ]
            }
        ]
    },
    "additionalProperties": false,
    "properties": {
        "id": {
            "title": "Id (id)",
            "description": "Unique ID of the bid request, provided by the exchange.",
            "type": "string"
        },
        "imp": {
            "type": "array",
            "title": "Impressions (impressions)",
            "description": "Array of impression objects. Multiple impression auctions may be specified in a single bid request. At least one impression is required for a valid bid request.",
            "items": {
                "$ref": "#/definitions/imp"
            }
        },
        "site": {
            "title": "Publisher Site (site)",
            "description": "Publisher site definition.  A bid request must not contain both a site object and an app object.",
            "$ref": "#/definitions/site"
        },
        "app": {
            "title": "Publishing Application (app)",
            "description": "Publisher application definition.  A bid request must not contain both a site object and an app object.",
            "$ref": "#/definitions/app"
        },
        "device": {
            "title": "Device (device)",
            "description": "User device defnition.",
            "$ref": "#/definitions/device"
        },
        "user": {
            "title": "User (user)",
            "description": "User definition",
            "$ref": "#/definitions/user"
        },
        "at": {
            "title": "Auction type (at)",
            "description": "If \u201c1\u201d, then first price auction. If \u201c2\u201d, then second price auction. Additional auction types can be defined as per the exchange\u2019s business rules.  Exchange specific rules should be numbered over 500",
            "type": "integer"
        },
        "tmax": {
            "title": "Maximum Bid Time (tmax)",
            "description": "Maximum amount of time in milliseconds to submit a bid (e.g., 120 means the bidder has 120ms to submit a bid before the auction is complete). If this value never changes across an exchange, then the exchange can supply this information offline.",
            "$ref": "#/definitions/positive_int"
        },
        "wseat": {
            "title": "Buyer Seats (wseat)",
            "description": "Array of buyer seats allowed to bid on this auction. Seats are an optional feature of exchange. For example, ['4','34','82','A45'] indicates that only advertisers using these exchange seats are allowed to bid on the impressions in this auction",
            "type": "array",
            "items": {
                "type": "string"
            }
        },
        "allimps": {
            "title": "All Impression Availability (allimps)",
            "description": "Flag to indicate whether Exchange can verify that all impressions offered represent all of the impressions available in context (e.g., all impressions available on the web page; all impressions available for a video [pre, mid and postroll spots], etc.) to support road-blocking. A true value should only be passed if the exchange is aware of all impressions in context for the publisher. '0' means the exchange cannot verify, and '1' means that all impressions represent all impressions available.",
            "$ref": "#/definitions/boolean_int"
        },
        "cur": {
            "title": "Currencies (cur)",
            "description": "Array of allowed currencies for bids on this bid request using ISO-4217 alphabetic codes. If only one currency is used by the exchange, this parameter is not required.",
            "type": "array",
            "items": {
                "$ref": "#/definitions/currency"
            }
        },
        "bcat": {
            "title": "Blocked Advertiser Categories (bcat)",
            "description": "Blocked Advertiser Categories. Note that there is no existing categorization / taxonomy of advertiser industries. However, as a substitute exchanges may decide to use IAB categories as an approximation (See Table 6.1 Content Categories)",
            "type": "array",
            "items": {
                "type": "string"
            }
        },
        "badv": {
            "title": "Blocked Advertiser Domains (badv)",
            "description": "Array of strings of blocked toplevel domains of advertisers. For example, {'company1.com', 'company2.com'}",
            "type": "array",
            "items": {
                "type": "string"
            }
        },
        "ext": {
            "title": "Custom JSON (ext)",
            "description": "This object is a placeholder that may contain custom JSON agreed to by the parties in an OpenRTB transaction to support flexibility beyond the standard defined in this specification.",
            "type": "object"
        }
    },
    "definitions": {
        "imp": {
            "type": "object",
            "required": [
                "id"
            ],
            "anyOf": [
                {
                    "required": [
                        "banner"
                    ]
                },
                {
                    "required": [
                        "video"
                    ]
                }
            ],
            "additionalProperties": false,
            "properties": {
                "id": {
                    "title": "Impression Id (id)",
                    "description": "A unique identifier for this impression within the context of the bid request (typically, value starts with 1, and increments up to n for n impressions)",
                    "type": "string"
                },
                "banner": {
                    "title": "A banner object (banner)",
                    "description": "A reference to a banner object. Either a banner or video object(or both if the impression could be either) must be included in an impression object",
                    "$ref": "#/definitions/banner"
                },
                "video": {
                    "title": "A video object (video)",
                    "description": "A reference to a video object. Either a banner or video object (or both if the impression could be either) must be included in an impression object.",
                    "$ref": "#/definitions/video"
                },
                "displaymanager": {
                    "title": "Video/Native display manager (displaymanager)",
                    "description": "Name of ad mediation partner, SDK technology, or native player responsible for rendering ad (typically video or mobile). Used by some ad servers to customize ad code by partner.",
                    "type": "string"
                },
                "displaymanagerver": {
                    "title": "Video/Native display manager version (displaymanagerver)",
                    "description": "Version of ad mediation partner, SDK technology, or native player responsible for rendering ad (typically video or mobile). Used by some ad servers to customize ad code by partner",
                    "type": "string"
                },
                "instl": {
                    "title": "Interstitial/Full Screen (instl)",
                    "description": "1 if the ad is interstitial or full screen; else 0 (i.e., no).",
                    "$ref": "#/definitions/boolean_int"
                },
                "tagid": {
                    "title": "Tag id (tagid)",
                    "description": "Identifier for specific ad placement or ad tag that was used to initiate the auction. This can be useful for debugging of any issues, or for optimization by the buyer.",
                    "type": "string"
                },
                "bidfloor": {
                    "title": "Bid Floor (bidfloor)",
                    "description": "Bid floor for this impression (in CPM of bidfloorcur).",
                    "type": "number",
                    "minimum": 0
                },
                "bidfloorcur": {
                    "title": "Bid Floor Currency (bidfloorcur)",
                    "description": "If bid floor is specified and multiple currencies supported per bid request, then currency should be specified here using ISO-4217 alphabetic codes. Note, this may be different from bid currency returned by bidder, if this is allowed on an exchange.",
                    "$ref": "#/definitions/currency"
                },
                "iframebuster": {
                    "title": "Iframe Buster Names (iframebuster)",
                    "description": "Array of names for supported iframe busters. Exchange specific.",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "ext": {
                    "title": "Custom JSON (ext)",
                    "description": "This object is a placeholder that may contain custom JSON agreed to by the parties in an OpenRTB transaction to support flexibility beyond the standard defined in this specification.",
                    "type": "object"
                }
            }
        },
        "banner": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "w": {
                    "title": "Width (w)",
                    "description": "Width of the impression in pixels. Since some ad types are not restricted by size this field is not required, but it\u2019s highly recommended that this information be included when possible.",
                    "$ref": "#/definitions/positive_int"
                },
                "h": {
                    "title": "Height (h)",
                    "description": "Height of the impression in pixels. Since some ad types are not restricted by size this field is not required, but it\u2019s highly recommended that this information be included when possible.",
                    "$ref": "#/definitions/positive_int"
                },
                "id": {
                    "title": "Banner Id (id)",
                    "description": "Unique identifier for this banner object. Useful for tracking multiple banner objects (e.g., in companion banner array). Usually starts with 1, increasing with each object. Combination of impression id banner object should be unique.",
                    "type": "string"
                },
                "pos": {
                    "title": "Ad Position (pos)",
                    "description": "Ad Position. Use Table 6.5",
                    "$ref": "#/definitions/ad_position"
                },
                "btype": {
                    "title": "Blocked Creative Types (btype)",
                    "description": "Blocked creative types. See Table 6.2 Banner Ad Types. If blank, assume all types are allowed.",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/banner_ad_type"
                    }
                },
                "battr": {
                    "title": "Blocked Creative Attributes (battr)",
                    "description": "Blocked creative attributes. See Table 6.3 Creative Attributes. If blank assume all types are allowed.",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/creative_attribute"
                    }
                },
                "mimes": {
                    "title": "Mime type whitelist (mimes)",
                    "description": "Whitelist of content MIME types supported. Popular MIME types include, but are not limited to 'image/jpg', 'image/gif' and 'application/x-shockwave-flash'",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "topframe": {
                    "title": "Delivery frame (topframe)",
                    "description": "Specify if the banner is delivered in the top frame or in an iframe. '0' means it is not in the top frame, and '1' means that it is.",
                    "$ref": "#/definitions/boolean_int"
                },
                "expdir": {
                    "title": "Expandable properties (expdir)",
                    "description": "Specify properties for an expandable ad. See Table 6.11 Expandable Direction for possible values.",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/expandable_direction"
                    }
                },
                "api": {
                    "title": "Supported API frameworks (api)",
                    "description": "List of supported API frameworks for this banner. (See Table 6.4 API Frameworks). If an API is not explicitly listed it is assumed not to be supported.",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/api_framework"
                    }
                },
                "ext": {
                    "title": "Custom JSON (ext)",
                    "description": "This object is a placeholder that may contain custom JSON agreed to by the parties in an OpenRTB transaction to support flexibility beyond the standard defined in this specification.",
                    "type": "object"
                }
            }
        },
        "video": {
            "type": "object",
            "required": [
                "mimes",
                "linearity",
                "minduration",
                "maxduration",
                "protocol"
            ],
            "additionalProperties": false,
            "properties": {
                "mimes": {
                    "title": "Mime type whitelist (mimes)",
                    "description": "Content MIME types supported. Popular MIME types include, but are not limited to 'video/x-mswmv' for Windows Media, and 'video/x-flv' for Flash Video.",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "linearity": {
                    "title": "Video Linearity (linearity)",
                    "description": "Indicates whether the ad impression is linear or non-linear. See Table 6.6 Video Linearity for a list of the possible values",
                    "$ref": "#/definitions/video_linearity"
                },
                "minduration": {
                    "title": "Minimum Duration (minduration)",
                    "description": "Minimum video ad duration in seconds",
                    "$ref": "#/definitions/positive_int"
                },
                "maxduration": {
                    "title": "Maximum Duration (maxduration)",
                    "description": "Maximum video ad duration in seconds",
                    "$ref": "#/definitions/positive_int"
                },
                "protocol": {
                    "title": "Protocol (protocol)",
                    "description": "Video bid response protocols.  See Table 6.7 Video Bid Response Protocols for a list of possible values",
                    "$ref": "#/definitions/video_bid_response_protocol"
                },
                "w": {
                    "title": "Player Width (w)",
                    "description": "Width of the player in pixels. This field is not required, but it\u2019s highly recommended that this information be included.",
                    "$ref": "#/definitions/positive_int"
                },
                "h": {
                    "title": "Player Height (h)",
                    "description": "Height of the player in pixels. This field is not required, but it\u2019s highly recommended that this information be included.",
                    "$ref": "#/definitions/positive_int"
                },
                "startdelay": {
                    "title": "Start Delay (startdelay)",
                    "description": "Indicates the start delay in seconds for preroll, midroll, or postroll ad placement. See Table 6.9 Video Start Delay for generic placement values",
                    "$ref": "#/definitions/video_start_delay"
                },
                "sequence": {
                    "title": "Ad Sequency (sequence)",
                    "description": "If multiple ad impressions are offered in the same bid request, the sequence number will allow for the coordinated delivery of multiple creatives",
                    "type": "integer"
                },
                "battr": {
                    "title": "Blocked creative attributes (battr)",
                    "description": "Blocked creative attributes. See Table 6.3 Creative Attributes. If blank assume all types are allowed.",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/creative_attribute"
                    }
                },
                "maxextended": {
                    "title": "Maximum extended duration (maxextended)",
                    "description": "Maximum extended video ad duration, if extension is allowed.  If blank or 0, extension is not allowed. If -1, extension is allowed, and there is no time limit imposed. If greater than 0, then the value represents the number of seconds of extended play supported beyond the maxduration value. ",
                    "type": "integer",
                    "minimum": -1
                },
                "minbitrate": {
                    "title": "Minimum bitrate (minbitrate)",
                    "description": "Minimum bit rate in Kbps. Exchange may set this dynamically, or universally across their set of publishers.",
                    "$ref": "#/definitions/positive_int"
                },
                "maxbitrate": {
                    "title": "Maximum bitrate (maxbitrate)",
                    "description": "Maximum bit rate in Kbps. Exchange may set this dynamically, or universally across their set of publishers.",
                    "$ref": "#/definitions/positive_int"
                },
                "boxingallowed": {
                    "title": "Boxing (boxingallowed)",
                    "description": "If exchange publisher has rules preventing letter boxing of 4x3 content to play in a 16x9 window, then this should be set to false. Default setting is true, which assumes that boxing of content to fit into a window is allowed. '1' indicates boxing is allowed. '0' indicates it is not allowed.",
                    "$ref": "#/definitions/boolean_int"
                },
                "playbackmethod": {
                    "title": "Playback methods (playbackmethod)",
                    "description": "List of allowed playback methods. If blank, assume that all are allowed. See Table 6.8 Video Playback Methods for a list of possible values.",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/video_playback_method"
                    }
                },
                "delivery": {
                    "title": "Delivery methods (delivery)",
                    "description": "List of supported delivery methods (streaming, progressive). If blank, assume all are supported. See Table 6.12 Content Delivery Methods for a list of possible values.",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/content_delivery_method"
                    }
                },
                "pos": {
                    "title": "Position (pos)",
                    "description": "Ad Position (see table 6.5)",
                    "$ref": "#/definitions/ad_position"
                },
                "companionad": {
                    "title": "Companion Ads (companionad)",
                    "description": "If companion ads are available, they can be listed as an array of banner objects. See Banner Object.",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/banner"
                    }
                },
                "api": {
                    "title": "Supported APIs (api)",
                    "description": "List of supported API frameworks for this impression. (See Table 6.4 API Frameworks). If an API is not explicitly listed it is assumed not to be supported.",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/api_framework"
                    }
                },
                "companiontype": {
                    "title": "Companion Types (companiontype)",
                    "description": "Recommended if companion objects are included. See Table 6.17 VAST Companion Types for a list of possible values.",
                    "type": "array",
                    "$ref": "#/definitions/vast_companion_type"
                },
                "ext": {
                    "title": "Custom JSON (ext)",
                    "description": "This object is a placeholder that may contain custom JSON agreed to by the parties in an OpenRTB transaction to support flexibility beyond the standard defined in this specification.",
                    "type": "object"
                }
            }
        },
        "site": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "id": {
                    "title": "Site Id (id)",
                    "description": "Site ID on the exchange",
                    "type": "string"
                },
                "name": {
                    "title": "Site Name (name)",
                    "description": "Site name (may be masked at publisher\u2019s request).",
                    "type": "string"
                },
                "domain": {
                    "title": "Site Domain (domain)",
                    "description": "Domain of the site, used for advertiser side blocking. For example, 'foo.com'.",
                    "type": "string"
                },
                "cat": {
                    "title": "Site Categories (cat)",
                    "description": "Array of IAB content categories for the overall site. See Table 6.1 Content Categories.",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/content_category"
                    }
                },
                "sectioncat": {
                    "title": "Site Section Categories (sectioncat)",
                    "description": "Array of IAB content categories for the current subsection of the site. See Table 6.1 Content Categories.",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/content_category"
                    }
                },
                "pagecat": {
                    "title": "Page Categories (pagecat)",
                    "description": "Array of IAB content categories for the current page. See Table 6.1 Content Categories.",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/content_category"
                    }
                },
                "page": {
                    "title": "Page URL (page)",
                    "description": "URL of the page where the impression will be shown.",
                    "type": "string"
                },
                "privacypolicy": {
                    "title": "Privacy Policy (privacypolicy)",
                    "description": "Specifies whether the site has a privacy policy. '1' means there is a policy. '0' means there is not.",
                    "$ref": "#/definitions/boolean_int"
                },
                "ref": {
                    "title": "Referal URL (ref)",
                    "description": "Referrer URL that caused navigation to the current page.",
                    "type": "string"
                },
                "search": {
                    "title": "Search String (search)",
                    "description": "Search string that caused navigation to the current page.",
                    "type": "string"
                },
                "publisher": {
                    "title": "Publisher (publisher)",
                    "description": "Exchange publisher",
                    "$ref": "#/definitions/publisher"
                },
                "content": {
                    "title": "Content (content)",
                    "description": "Site content",
                    "$ref": "#/definitions/content"
                },
                "keywords": {
                    "title": "Keywords (keywords)",
                    "description": "List of keywords describing this site in a comma separated string.",
                    "type": "string"
                },
                "ext": {
                    "title": "Custom JSON (ext)",
                    "description": "This object is a placeholder that may contain custom JSON agreed to by the parties in an OpenRTB transaction to support flexibility beyond the standard defined in this specification.",
                    "type": "object"
                }
            }
        },
        "app": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "id": {
                    "title": "App Id (id)",
                    "description": "Application ID on the exchange.",
                    "type": "string"
                },
                "name": {
                    "title": "App Name (name)",
                    "description": "Application name (may be masked at publisher\u2019s request).",
                    "type": "string"
                },
                "domain": {
                    "title": "App Domain Name (domain)",
                    "description": "Domain of the application (e.g., 'mygame.foo.com').",
                    "type": "string"
                },
                "cat": {
                    "title": "App Categories (cat)",
                    "description": "Array of IAB content categories for the overall application. See Table 6.1 Content Categories.",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/content_category"
                    }
                },
                "sectioncat": {
                    "title": "App Section Categories (sectioncat)",
                    "description": "Array of IAB content categories for the current subsection of the app. See Table 6.1 Content Categories.",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/content_category"
                    }
                },
                "pagecat": {
                    "title": "App Page/View Categories (pagecat)",
                    "description": "Array of IAB content categories for the current page/view of the app. See Table 6.1 Content Categories.",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/content_category"
                    }
                },
                "ver": {
                    "title": "App Version (ver)",
                    "description": "Application version.",
                    "type": "string"
                },
                "bundle": {
                    "title": "App Bundle (bundle)",
                    "description": "Application bundle or package name (e.g., com.foo.mygame). This is intended to be a unique ID across multiple exchanges.",
                    "type": "string"
                },
                "privacypolicy": {
                    "title": "App Privacy Policy (privacypolicy)",
                    "description": "Specifies whether the app has a privacy policy. '1' means there is a policy and '0' means there is not",
                    "$ref": "#/definitions/boolean_int"
                },
                "paid": {
                    "title": "App Type (paid)",
                    "description": "'1' if the application is a paid version; else '0' (i.e., free).",
                    "$ref": "#/definitions/boolean_int"
                },
                "publisher": {
                    "title": "App Publisher (publisher)",
                    "description": "Exchange Application Publisher.",
                    "$ref": "#/definitions/publisher"
                },
                "content": {
                    "title": "App Content (content)",
                    "description": "Exchange Application Content.",
                    "$ref": "#/definitions/content"
                },
                "keywords": {
                    "title": "Keywords (keywords)",
                    "description": "List of keywords describing this app in a comma separated string",
                    "type": "string"
                },
                "storeurl": {
                    "title": "App Store URL (storeurl)",
                    "description": "For QAG 1.5 compliance, an app store URL for an installed app should be passed in the bid request.",
                    "type": "string"
                },
                "ext": {
                    "title": "Custom JSON (ext)",
                    "description": "This object is a placeholder that may contain custom JSON agreed to by the parties in an OpenRTB transaction to support flexibility beyond the standard defined in this specification.",
                    "type": "object"
                }
            }
        },
        "content": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "id": {
                    "title": "Content Id (id)",
                    "description": "ID uniquely identifying the content",
                    "type": "string"
                },
                "episode": {
                    "title": "Episode Number (episode)",
                    "description": "Content episode number (typically applies to video content).",
                    "type": "integer"
                },
                "title": {
                    "title": "Title (title)",
                    "description": "Content title. Video examples: 'Search Committee' (television) or 'A New Hope' (movie) or 'Endgame' (made for web) Non-video example: 'Why an Antarctic Glacier Is Melting So Quickly' (Time magazine article)",
                    "type": "string"
                },
                "series": {
                    "title": "Series (series)",
                    "description": "Content series. Video examples: 'The Office' (television) or 'Star Wars' (movie) or 'Arby \u2018N\u2019 The Chief' (made for web) Non-video example: 'Ecocentric' (Time magazine blog)",
                    "type": "string"
                },
                "season": {
                    "title": "Season (season)",
                    "description": "Content season. E.g., 'Season 3' (typically applies to video content).",
                    "type": "string"
                },
                "url": {
                    "title": "URL (url)",
                    "description": "Original URL of the content, for buy-side contextualization or review",
                    "type": "string"
                },
                "cat": {
                    "title": "Categories (cat)",
                    "description": "Array of IAB content categories for the content. See Table 6.1 Content Categories.",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/content_category"
                    }
                },
                "videoquality": {
                    "title": "Video Quality (videoquality)",
                    "description": "Video quality per the IAB\u2019s classification. See Table 6.14 Video Quality.",
                    "$ref": "#/definitions/video_quality"
                },
                "keywords": {
                    "title": "Keywords (keywords)",
                    "description": "Comma separated list of keywords describing the content",
                    "type": "string"
                },
                "contentrating": {
                    "title": "Rating (contentrating)",
                    "description": "Content rating (e.g., MPAA)",
                    "type": "string"
                },
                "userrating": {
                    "title": "User Rating (userrating)",
                    "description": "User rating of the content (e.g., number of stars, likes, etc.).",
                    "type": "string"
                },
                "context": {
                    "title": "Type (context)",
                    "description": "Specifies the type of content (game, video, text, etc.). See Table 6.13 Content Context.",
                    "$ref": "#/definitions/content_context"
                },
                "livestream": {
                    "title": "Live (livestream)",
                    "description": "Is content live? E.g., live video stream, live blog. '1' means content is live. '0' means it is not live.",
                    "$ref": "#/definitions/boolean_int"
                },
                "sourcerelationship": {
                    "title": "Relationship with Source (sourcerelationship)",
                    "description": "1 for 'direct'; 0 for 'indirect'",
                    "$ref": "#/definitions/boolean_int"
                },
                "producer": {
                    "title": "Producer (producer)",
                    "description": "Content Producer.",
                    "$ref": "#/definitions/producer"
                },
                "len": {
                    "title": "Length in seconds (len)",
                    "description": "Length of content (appropriate for video or audio) in seconds.",
                    "$ref": "#/definitions/positive_int"
                },
                "qagmediarating": {
                    "title": "QAG rating (qagmediarating)",
                    "description": "Media rating of the content, per QAG guidelines. See Table 0 QAG Media Ratings for list of possible values",
                    "$ref": "#/definitions/qag_media_rating"
                },
                "embeddable": {
                    "title": "Embedability (embeddable)",
                    "description": "From QAG Video Addendum. If content can be embedded (such as an embeddable video player) this value should be set to '1'. If content cannot be embedded, then this should be set to '0'. ",
                    "$ref": "#/definitions/boolean_int"
                },
                "language": {
                    "title": "Content language (language)",
                    "description": "Language of the content. Use alpha-2/ISO 639-1 codes",
                    "$ref": "#/definitions/language"
                },
                "ext": {
                    "title": "Custom JSON (ext)",
                    "description": "This object is a placeholder that may contain custom JSON agreed to by the parties in an OpenRTB transaction to support flexibility beyond the standard defined in this specification.",
                    "type": "object"
                }
            }
        },
        "publisher": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "id": {
                    "title": "Publisher Id (id)",
                    "description": "Publisher ID on the exchange",
                    "type": "string"
                },
                "name": {
                    "title": "Publisher Name (name)",
                    "description": "Publisher name (may be masked at publisher\u2019s request).",
                    "type": "string"
                },
                "cat": {
                    "title": "Publisher Categories (cat)",
                    "description": "Array of IAB content categories for the publisher. See Table 6.1 Content Categories.",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/content_category"
                    }
                },
                "domain": {
                    "title": "Publisher Domain (domain)",
                    "description": "Publisher\u2019s highest level domain name, for example 'foopub.com'.",
                    "type": "string"
                },
                "ext": {
                    "title": "Custom JSON (ext)",
                    "description": "This object is a placeholder that may contain custom JSON agreed to by the parties in an OpenRTB transaction to support flexibility beyond the standard defined in this specification.",
                    "type": "object"
                }
            }
        },
        "producer": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "id": {
                    "title": "Producer Id (id)",
                    "description": "Content producer or originator ID. Useful if content is syndicated, and may be posted on a site using embed tags",
                    "type": "string"
                },
                "name": {
                    "title": "Producer Name (name)",
                    "description": "Content producer or originator name (e.g., 'Warner Bros').",
                    "type": "string"
                },
                "cat": {
                    "title": "Producer Categories (cat)",
                    "description": "Array of IAB content categories for the content producer. See Table 6.1 Content Categories.",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/content_category"
                    }
                },
                "domain": {
                    "title": "URL (domain)",
                    "description": "URL of the content producer.",
                    "type": "string"
                },
                "ext": {
                    "title": "Custom JSON (ext)",
                    "description": "This object is a placeholder that may contain custom JSON agreed to by the parties in an OpenRTB transaction to support flexibility beyond the standard defined in this specification.",
                    "type": "object"
                }
            }
        },
        "device": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "dnt": {
                    "title": "Do Not Track (dnt)",
                    "description": "If '0', then do not track Is set to false, if '1', then do no track is set to true in browser.",
                    "$ref": "#/definitions/boolean_int"
                },
                "ua": {
                    "title": "Browser User Agent String (ua)",
                    "description": "Browser user agent string.",
                    "type": "string"
                },
                "ip": {
                    "title": "Ip(v4) address (ip)",
                    "description": "IPv4 address closest to device.",
                    "type": "string",
                    "format": "ipv4"
                },
                "geo": {
                    "title": "Location data (geo)",
                    "description": "Geography as derived from the device's location services (e.g., cell tower triangulation, GPS) or IP address. See Error! Reference source ot found..",
                    "$ref": "#/definitions/geo"
                },
                "didsha1": {
                    "title": "Device ID SHA1 hash (didsha1)",
                    "description": "SHA1 hashed device ID; IMEI when available, else MEID or ESN. OpenRTB's preferred method for device ID hashing is SHA1.",
                    "type": "string"
                },
                "didmd5": {
                    "title": "Device ID MD5 hash (didmd5)",
                    "description": "MD5 hashed device ID; IMEI when available, else MEID or ESN. Should be interpreted as case insensitive.",
                    "type": "string"
                },
                "dpidsha1": {
                    "title": "Platform Id SHA1 hash (dpidsha1)",
                    "description": "SHA1 hashed platform-specific ID (e.g., Android ID or UDID for iOS). OpenRTB's preferred method for device ID hash is SHA1.",
                    "type": "string"
                },
                "dpidmd5": {
                    "title": "Platform Id MD5 hash (dpidmd5)",
                    "description": "MD5 hashed platform-specific ID (e.g., Android ID or UDID for iOS). Should be interpreted as case insensitive.",
                    "type": "string"
                },
                "ipv6": {
                    "title": "Ip(v6) address (ipv6)",
                    "description": "IP address in IPv6.",
                    "type": "string",
                    "format": "ipv6"
                },
                "carrier": {
                    "title": "Device Carrier (carrier)",
                    "description": "Carrier or ISP derived from the IP address.  Should be specified using Mobile Network Code (MNC) http://en.wikipedia.org/wiki/Mobile_Network_Code",
                    "type": "string"
                },
                "language": {
                    "title": "Browser Language (language)",
                    "description": "Browser language; use alpha-2/ISO 639-1 codes.",
                    "$ref": "#/definitions/language"
                },
                "make": {
                    "title": "Device Make (make)",
                    "description": "Device make (e.g., 'Apple').",
                    "type": "string"
                },
                "model": {
                    "title": "Device Model (model)",
                    "description": "Device model (e.g., 'iPhone').",
                    "type": "string"
                },
                "os": {
                    "title": "Device Operating System (os)",
                    "description": "Device operating system (e.g., 'iOS')",
                    "type": "string"
                },
                "osv": {
                    "title": "Device Operating System Version (osv)",
                    "description": "Device operating system version (e.g., '3.1.2').",
                    "type": "string"
                },
                "js": {
                    "title": "JavaScript Support (js)",
                    "description": "'1' if the device supports JavaScript; else '0'",
                    "$ref": "#/definitions/boolean_int"
                },
                "connectiontype": {
                    "title": "Connection type (connectiontype)",
                    "description": "Return the detected data connection type for the device. See Table 6.10 Connection Type.",
                    "$ref": "#/definitions/connection_type"
                },
                "devicetype": {
                    "title": "Device type (devicetype)",
                    "description": "Return the device type being used. See Table 6.16 Device Type.",
                    "$ref": "#/definitions/device_type"
                },
                "flashver": {
                    "title": "Flash Version (flashver)",
                    "description": "Return the Flash version detected.",
                    "type": "string"
                },
                "ext": {
                    "title": "Custom JSON (ext)",
                    "description": "This object is a placeholder that may contain custom JSON agreed to by the parties in an OpenRTB transaction to support flexibility beyond the standard defined in this specification.",
                    "type": "object"
                }
            }
        },
        "geo": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "lat": {
                    "title": "Latitude (lat)",
                    "description": "Latitude from -90 to 90. South is negative. This should only be passed if known to be accurate (For example, not the centroid of a postal code).",
                    "type": "number",
                    "minimum": -90,
                    "maximum": 90
                },
                "lon": {
                    "title": "Longitude (lon)",
                    "description": "Longitude from -180 to 180. West is negative. This should only be passed if known to be accurate.",
                    "type": "number",
                    "minimum": -180,
                    "maximum": 180
                },
                "country": {
                    "title": "Country (country)",
                    "description": "Country using ISO-3166-1 Alpha-3.",
                    "type": "string",
                    "minLength": 3,
                    "maxLength": 3
                },
                "region": {
                    "title": "Region (region)",
                    "description": "Region using ISO 3166-2",
                    "type": "string"
                },
                "regionfips104": {
                    "title": "Region in fips 10-4 notation (regionfips104)",
                    "description": "Region of a country using fips 10-4 notation (alternative to ISO 3166-2)",
                    "type": "string"
                },
                "metro": {
                    "title": "Metro Code (metro)",
                    "description": "Pass the metro code (see http://code.google.com/apis/adwords/docs/appendix/metrocodes.html). Metro codes are similar to but not exactly the same as Nielsen DMAs.",
                    "type": "string"
                },
                "city": {
                    "title": "City (city)",
                    "description": "City using United Nations Code for Trade and Transport Locations (http://www.unece.org/cefact/locode/service/location.htm)",
                    "type": "string"
                },
                "zip": {
                    "title": "Postal Code (zip)",
                    "description": "Zip/postal code",
                    "type": "string"
                },
                "type": {
                    "title": "Location Data Source (type)",
                    "description": "Indicate the source of the geo data (GPS, IP address, user provided). See Table 6.15 Location Type for a list of potential values.  Type should be provided when lat/lon is provided.",
                    "$ref": "#/definitions/location_type"
                },
                "ext": {
                    "title": "Custom JSON (ext)",
                    "description": "This object is a placeholder that may contain custom JSON agreed to by the parties in an OpenRTB transaction to support flexibility beyond the standard defined in this specification.",
                    "type": "object"
                }
            }
        },
        "user": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "id": {
                    "title": "User Id (id)",
                    "description": "Unique consumer ID of this user on the exchange.",
                    "type": "string"
                },
                "buyeruid": {
                    "title": "Buyer User Id (buyeruid)",
                    "description": "Buyer's user ID for this user as mapped by exchange for the buyer.",
                    "type": "string"
                },
                "yob": {
                    "title": "Year Of Birth (yob)",
                    "description": "Year of birth as a 4-digit integer.",
                    "type": "integer",
                    "minimum": 1000,
                    "maximum": 9999
                },
                "gender": {
                    "title": "Gender (gender)",
                    "description": "Gender as 'M' male, 'F' female, 'O' Other. (Null indicates unknown)",
                    "type": "string",
                    "enum": [
                        "M",
                        "F",
                        "O"
                    ]
                },
                "keywords": {
                    "title": "Keywords (keywords)",
                    "description": "Comma separated list of keywords of consumer interests or intent.",
                    "type": "string"
                },
                "customdata": {
                    "title": "Custom Data (customdata)",
                    "description": "If supported by the exchange, this is custom data that the bidder had stored in the exchange's cookie. The string may be in base85 cookie safe characters, and be in any format. This may useful for storing user features. Note: Proper JSON encoding must be used to include 'escaped' quotation marks.",
                    "type": "string"
                },
                "geo": {
                    "title": "Home Location (geo)",
                    "description": "Home geo for the user (e.g., based off of registration data); this is different from the current location of the access device (that is defined by the geo object embedded in the Device Object)",
                    "$ref": "#/definitions/geo"
                },
                "data": {
                    "title": "User Data (data)",
                    "description": "User Data.",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/data"
                    }
                },
                "ext": {
                    "title": "Custom JSON (ext)",
                    "description": "This object is a placeholder that may contain custom JSON agreed to by the parties in an OpenRTB transaction to support flexibility beyond the standard defined in this specification.",
                    "type": "object"
                }
            }
        },
        "data": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "id": {
                    "title": "Provider Id (id)",
                    "description": "Exchange specific ID for the data provider",
                    "type": "string"
                },
                "name": {
                    "title": "Provider Name (name)",
                    "description": "Data provider name",
                    "type": "string"
                },
                "segment": {
                    "title": "Segments (segment)",
                    "description": "Data Segments.",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/segment"
                    }
                },
                "ext": {
                    "title": "Custom JSON (ext)",
                    "description": "This object is a placeholder that may contain custom JSON agreed to by the parties in an OpenRTB transaction to support flexibility beyond the standard defined in this specification.",
                    "type": "object"
                }
            }
        },
        "segment": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "id": {
                    "title": "Segment Id (id)",
                    "description": "ID of a data provider's segment applicable to the user",
                    "type": "string"
                },
                "name": {
                    "title": "Segment Name (name)",
                    "description": "Name of a data provider's segment applicable to the user",
                    "type": "string"
                },
                "value": {
                    "title": "Segment Value (value)",
                    "description": "String representing the value of the segment. The method for transmitting this data should be negotiated offline with the data provider. For example for gender, 'male', or 'female', for age, '30-40')",
                    "type": "string"
                },
                "ext": {
                    "title": "Custom JSON (ext)",
                    "description": "This object is a placeholder that may contain custom JSON agreed to by the parties in an OpenRTB transaction to support flexibility beyond the standard defined in this specification.",
                    "type": "object"
                }
            }
        },
        "content_category": {
            "type": "string",
            "enum": [
                "IAB1",
                "IAB1-1",
                "IAB1-2",
                "IAB1-3",
                "IAB1-4",
                "IAB1-5",
                "IAB1-6",
                "IAB1-7",
                "IAB2",
                "IAB2-1",
                "IAB2-2",
                "IAB2-3",
                "IAB2-4",
                "IAB2-5",
                "IAB2-6",
                "IAB2-7",
                "IAB2-8",
                "IAB2-9",
                "IAB2-10",
                "IAB2-11",
                "IAB2-12",
                "IAB2-13",
                "IAB2-14",
                "IAB2-15",
                "IAB2-16",
                "IAB2-17",
                "IAB2-18",
                "IAB2-19",
                "IAB2-20",
                "IAB2-21",
                "IAB2-22",
                "IAB2-23",
                "IAB3",
                "IAB3-1",
                "IAB3-2",
                "IAB3-3",
                "IAB3-4",
                "IAB3-5",
                "IAB3-6",
                "IAB3-7",
                "IAB3-8",
                "IAB3-9",
                "IAB3-10",
                "IAB3-11",
                "IAB3-12",
                "IAB4",
                "IAB4-1",
                "IAB4-2",
                "IAB4-3",
                "IAB4-4",
                "IAB4-5",
                "IAB4-6",
                "IAB4-7",
                "IAB4-8",
                "IAB4-9",
                "IAB4-10",
                "IAB4-11",
                "IAB5",
                "IAB5-1",
                "IAB5-2",
                "IAB5-3",
                "IAB5-4",
                "IAB5-5",
                "IAB5-6",
                "IAB5-7",
                "IAB5-8",
                "IAB5-9",
                "IAB5-10",
                "IAB5-11",
                "IAB5-12",
                "IAB5-13",
                "IAB5-14",
                "IAB5-15",
                "IAB6",
                "IAB6-1",
                "IAB6-2",
                "IAB6-3",
                "IAB6-4",
                "IAB6-5",
                "IAB6-6",
                "IAB6-7",
                "IAB6-8",
                "IAB6-9",
                "IAB7",
                "IAB7-1",
                "IAB7-2",
                "IAB7-3",
                "IAB7-4",
                "IAB7-5",
                "IAB7-6",
                "IAB7-7",
                "IAB7-8",
                "IAB7-9",
                "IAB7-10",
                "IAB7-11",
                "IAB7-12",
                "IAB7-13",
                "IAB7-14",
                "IAB7-15",
                "IAB7-16",
                "IAB7-17",
                "IAB7-18",
                "IAB7-19",
                "IAB7-20",
                "IAB7-21",
                "IAB7-22",
                "IAB7-23",
                "IAB7-24",
                "IAB7-25",
                "IAB7-26",
                "IAB7-27",
                "IAB7-28",
                "IAB7-29",
                "IAB7-30",
                "IAB7-31",
                "IAB7-32",
                "IAB7-33",
                "IAB7-34",
                "IAB7-35",
                "IAB7-36",
                "IAB7-37",
                "IAB7-38",
                "IAB7-39",
                "IAB7-40",
                "IAB7-41",
                "IAB7-42",
                "IAB7-43",
                "IAB7-44",
                "IAB7-45",
                "IAB8",
                "IAB8-1",
                "IAB8-2",
                "IAB8-3",
                "IAB8-4",
                "IAB8-5",
                "IAB8-6",
                "IAB8-7",
                "IAB8-8",
                "IAB8-9",
                "IAB8-10",
                "IAB8-11",
                "IAB8-12",
                "IAB8-13",
                "IAB8-14",
                "IAB8-15",
                "IAB8-16",
                "IAB8-17",
                "IAB8-18",
                "IAB9",
                "IAB9-1",
                "IAB9-2",
                "IAB9-3",
                "IAB9-4",
                "IAB9-5",
                "IAB9-6",
                "IAB9-7",
                "IAB9-8",
                "IAB9-9",
                "IAB9-10",
                "IAB9-11",
                "IAB9-12",
                "IAB9-13",
                "IAB9-14",
                "IAB9-15",
                "IAB9-16",
                "IAB9-17",
                "IAB9-18",
                "IAB9-19",
                "IAB9-20",
                "IAB9-21",
                "IAB9-22",
                "IAB9-23",
                "IAB9-24",
                "IAB9-25",
                "IAB9-26",
                "IAB9-27",
                "IAB9-28",
                "IAB9-29",
                "IAB9-30",
                "IAB9-31",
                "IAB10",
                "IAB10-1",
                "IAB10-2",
                "IAB10-3",
                "IAB10-4",
                "IAB10-5",
                "IAB10-6",
                "IAB10-7",
                "IAB10-8",
                "IAB10-9",
                "IAB11",
                "IAB11-1",
                "IAB11-2",
                "IAB11-3",
                "IAB11-4",
                "IAB11-5",
                "IAB12",
                "IAB12-1",
                "IAB12-2",
                "IAB12-3",
                "IAB13",
                "IAB13-1",
                "IAB13-2",
                "IAB13-3",
                "IAB13-4",
                "IAB13-5",
                "IAB13-6",
                "IAB13-7",
                "IAB13-8",
                "IAB13-9",
                "IAB13-10",
                "IAB13-11",
                "IAB13-12",
                "IAB14",
                "IAB14-1",
                "IAB14-2",
                "IAB14-3",
                "IAB14-4",
                "IAB14-5",
                "IAB14-6",
                "IAB14-7",
                "IAB14-8",
                "IAB15",
                "IAB15-1",
                "IAB15-2",
                "IAB15-3",
                "IAB15-4",
                "IAB15-5",
                "IAB15-6",
                "IAB15-7",
                "IAB15-8",
                "IAB15-9",
                "IAB15-10",
                "IAB16",
                "IAB16-1",
                "IAB16-2",
                "IAB16-3",
                "IAB16-4",
                "IAB16-5",
                "IAB16-6",
                "IAB16-7",
                "IAB17",
                "IAB17-1",
                "IAB17-2",
                "IAB17-3",
                "IAB17-4",
                "IAB17-5",
                "IAB17-6",
                "IAB17-7",
                "IAB17-8",
                "IAB17-9",
                "IAB17-10",
                "IAB17-11",
                "IAB17-12",
                "IAB17-13",
                "IAB17-14",
                "IAB17-15",
                "IAB17-16",
                "IAB17-17",
                "IAB17-18",
                "IAB17-19",
                "IAB17-20",
                "IAB17-21",
                "IAB17-22",
                "IAB17-23",
                "IAB17-24",
                "IAB17-25",
                "IAB17-26",
                "IAB17-27",
                "IAB17-28",
                "IAB17-29",
                "IAB17-30",
                "IAB17-31",
                "IAB17-32",
                "IAB17-33",
                "IAB17-34",
                "IAB17-35",
                "IAB17-36",
                "IAB17-37",
                "IAB17-38",
                "IAB17-39",
                "IAB17-40",
                "IAB17-41",
                "IAB17-42",
                "IAB17-43",
                "IAB17-44",
                "IAB18",
                "IAB18-1",
                "IAB18-2",
                "IAB18-3",
                "IAB18-4",
                "IAB18-5",
                "IAB18-6",
                "IAB19",
                "IAB19-1",
                "IAB19-2",
                "IAB19-3",
                "IAB19-4",
                "IAB19-5",
                "IAB19-6",
                "IAB19-7",
                "IAB19-8",
                "IAB19-9",
                "IAB19-10",
                "IAB19-11",
                "IAB19-12",
                "IAB19-13",
                "IAB19-14",
                "IAB19-15",
                "IAB19-16",
                "IAB19-17",
                "IAB19-18",
                "IAB19-19",
                "IAB19-20",
                "IAB19-21",
                "IAB19-22",
                "IAB19-23",
                "IAB19-24",
                "IAB19-25",
                "IAB19-26",
                "IAB19-27",
                "IAB19-28",
                "IAB19-29",
                "IAB19-30",
                "IAB19-31",
                "IAB19-32",
                "IAB19-33",
                "IAB19-34",
                "IAB19-35",
                "IAB19-36",
                "IAB20",
                "IAB20-1",
                "IAB20-2",
                "IAB20-3",
                "IAB20-4",
                "IAB20-5",
                "IAB20-6",
                "IAB20-7",
                "IAB20-8",
                "IAB20-9",
                "IAB20-10",
                "IAB20-11",
                "IAB20-12",
                "IAB20-13",
                "IAB20-14",
                "IAB20-15",
                "IAB20-16",
                "IAB20-17",
                "IAB20-18",
                "IAB20-19",
                "IAB20-20",
                "IAB20-21",
                "IAB20-22",
                "IAB20-23",
                "IAB20-24",
                "IAB20-25",
                "IAB20-26",
                "IAB20-27",
                "IAB21",
                "IAB21-1",
                "IAB21-2",
                "IAB21-3",
                "IAB22",
                "IAB22-1",
                "IAB22-2",
                "IAB22-3",
                "IAB22-4",
                "IAB23",
                "IAB23-1",
                "IAB23-2",
                "IAB23-3",
                "IAB23-4",
                "IAB23-5",
                "IAB23-6",
                "IAB23-7",
                "IAB23-8",
                "IAB23-9",
                "IAB23-10",
                "IAB24",
                "IAB25",
                "IAB25-1",
                "IAB25-2",
                "IAB25-3",
                "IAB25-4",
                "IAB25-5",
                "IAB25-6",
                "IAB25-7",
                "IAB26",
                "IAB26-1",
                "IAB26-2",
                "IAB26-3",
                "IAB26-4"
            ]
        },
        "banner_ad_type": {
            "type": "integer",
            "minimum": 1,
            "maximum": 4
        },
        "creative_attribute": {
            "type": "integer",
            "minimum": 1,
            "maximum": 16
        },
        "api_framework": {
            "type": "integer",
            "minimum": 1,
            "maximum": 4
        },
        "ad_position": {
            "type": "integer",
            "minimum": 0,
            "maximum": 7
        },
        "video_linearity": {
            "type": "integer",
            "minimum": 1,
            "maximum": 2
        },
        "video_bid_response_protocol": {
            "type": "integer",
            "minimum": 1,
            "maximum": 6
        },
        "video_playback_method": {
            "type": "integer",
            "minimum": 1,
            "maximum": 4
        },
        "video_start_delay": {
            "type": "integer",
            "minimum": -2,
            "maximum": 0
        },
        "connection_type": {
            "type": "integer",
            "minimum": 0,
            "maximum": 6
        },
        "expandable_direction": {
            "type": "integer",
            "minimum": 1,
            "maximum": 5
        },
        "content_delivery_method": {
            "type": "integer",
            "minimum": 1,
            "maximum": 2
        },
        "content_context": {
            "type": "string",
            "enum": [
                "1",
                "2",
                "3",
                "4",
                "5",
                "6",
                "7"
            ]
        },
        "video_quality": {
            "type": "integer",
            "minimum": 0,
            "maximum": 3
        },
        "location_type": {
            "type": "integer",
            "minimum": 1,
            "maximum": 3
        },
        "device_type": {
            "type": "integer",
            "minimum": 1,
            "maximum": 3
        },
        "vast_companion_type": {
            "type": "integer",
            "minimum": 1,
            "maximum": 3
        },
        "qag_media_rating": {
            "type": "integer",
            "minimum": 1,
            "maximum": 3
        },
        "boolean_int": {
            "type": "integer",
            "minimum": 0,
            "maximum": 1
        },
        "positive_int": {
            "type": "integer",
            "minimum": 0
        },
        "currency": {
            "type": "string",
            "minLength": 3,
            "maxLength": 3,
            "pattern": "[a-zA-Z]{3}"
        },
        "language": {
            "type": "string",
            "minLength": 2,
            "maxLength": 2
        }
    }
}