Bid Responses
The OpenRTB bid response fields CloudX reads, creative markup rules, and win/loss notification URLs with macros.
Return a standard OpenRTB bid response to bid on an impression. This page covers the fields CloudX reads, the markup rules for CloudX-rendered creatives, and the notification URLs you use to track outcomes.
No-bid responses
To pass on an impression, return HTTP 204 with an empty body, or HTTP 200 with an empty seatbid array. Use the 200 form when you want to report a reason in nbr (OpenRTB List 5.24) — a 204 cannot carry a body.
Response object
| Field | Type | Requirement | Notes |
|---|---|---|---|
id | string | required | The id of the bid request you are responding to. |
seatbid | object array | required | Send one seat with one bid per response. |
seatbid[].seat | string | optional | Your seat ID in the response. Notification delivery identifies the seat from CloudX’s configured bidder or adapter identity, not directly from this field. |
cur | string | optional | "USD", or omit (USD is the default). Any other currency is rejected. |
bidid | string | optional | Your response ID for reconciliation. ${AUCTION_BID_ID} uses it on paths that preserve response-level context and otherwise falls back to bid.id. |
nbr | integer | optional | OpenRTB no-bid reason (List 5.24). Use with an empty seatbid array in an HTTP 200 response. |
Bid object
| Field | Type | Requirement | Notes |
|---|---|---|---|
id | string | required | Your unique ID for this bid. |
impid | string | required | The id of the imp you are bidding on. |
price | float | required | Your positive USD CPM bid. First-price: if you win, you pay this amount. Your price must meet the imp.bidfloor sent in the request; submit it on the bidder CPM basis without applying CloudX’s configured adjustments yourself. CloudX keeps those adjustments and its internal auction floor on equivalent bases for floor enforcement and ranking. |
adm | string | required | The creative markup — an HTML/MRAID snippet or a VAST XML document. CloudX renders it directly; see the markup rules below and the Creative Specification. |
crid | string | required | Stable creative ID. Use the same value every time you return the same creative so CloudX can investigate and block it consistently. |
adid | string | optional | ID for the ad markup to be served. Some notification paths preserve it for ${AUCTION_AD_ID}; impression-event paths use the creative ID instead. |
adomain | string array | required | At least one non-empty advertiser domain, without a scheme or path. CloudX compares registrable domains against the request’s badv blocklist. |
cat | string array | recommended | IAB content categories of the creative. |
nurl | string | recommended | Win notice URL. See Win and loss notifications. |
burl | string | recommended | Billing notice URL. Track impressions and spend here. |
lurl | string | recommended | Loss notice URL. Carries the loss reason code. |
ext.crtype | string | conditionally required | Creative type label. CloudX canonicalizes it case-insensitively: html, mraid, and static map to html; vast and video map to vast. It may be omitted only when the media type is unambiguous. For VAST returned to a banner-shaped App Open or interstitial request, set "vast"; on OpenRTB 2.6 also set mtype: 2. |
Creative markup rules
- Return the full markup in
adm. CloudX does not fetch markup fromnurl. - Use HTTPS URLs everywhere. HTTP references violate the partner contract and may be rejected.
- HTML/MRAID markup is a snippet the CloudX SDK renders in a WebView. VAST markup is the complete XML document. See the Creative Specification for formats, sizes, and rendering behavior.
Win and loss notifications
CloudX calls the notification URLs on your bid as the auction and on-device outcomes become known:
| Field | Fired when |
|---|---|
nurl | A win notice. For legacy SDK traffic, ad load triggers it; for current impression-based traffic, the rendered impression triggers it. |
burl | The winning ad renders and becomes billable. Track impressions and spend here. |
lurl | Your bid loses or is rejected — including a winning bid whose ad fails to load or render. |
Notification delivery is asynchronous and best-effort, not exactly once. Notices may be delayed, retried, duplicated, delivered out of order, or dropped. Make handlers idempotent: deduplicate by URL type plus ${AUCTION_ID}, ${AUCTION_IMP_ID}, and ${AUCTION_BID_ID}, and return 2xx only after durably recording the event.
Macros
Embed macros in notification URLs and CloudX substitutes values before calling them. Macros are case-sensitive; always use the ${...} form.
| Macro | Substituted value |
|---|---|
${AUCTION_PRICE} | An outcome-dependent price in the same currency, units, and bidder CPM basis as your bid. See the table below. |
${AUCTION_MIN_TO_WIN} | An outcome-dependent minimum or floor. See the table below. ${AUCTION_MINIMUM_BID_TO_WIN} and ${AUCTION_BID_TO_WIN} are accepted aliases. |
${AUCTION_LOSS} | The OpenRTB loss reason code. lurl only; see the table below. |
${AUCTION_ID} | The bid request id. |
${AUCTION_BID_ID} | Response bidid when the notification path preserved it; otherwise bid.id. |
${AUCTION_IMP_ID} | The impression id. |
${AUCTION_SEAT_ID} | CloudX’s configured bidder or adapter seat for the bid. |
${AUCTION_AD_ID} | bid.adid when the path preserves it; otherwise the creative ID on impression-event paths. It can be empty when neither value is available. |
${AUCTION_CURRENCY} | The bid currency (USD). |
${AUCTION_MBR} | ${AUCTION_PRICE} divided by the notified bid’s price when both values are available. |
A macro stays literal when that notification path does not supply its context, such as ${AUCTION_LOSS} in an nurl. When the path does supply context, an empty optional source field can instead yield an empty replacement. Build handlers that tolerate both literal macros and empty values.
Price macro behavior
| Notice outcome | ${AUCTION_PRICE} | ${AUCTION_MIN_TO_WIN} |
|---|---|---|
Winning nurl or burl | The winning bid’s CPM; CloudX runs a first-price auction. | The greater of the winner’s floor or the next-ranked bid plus USD 0.01, with a USD 0.01 minimum. |
lurl, code 1 | 0 | 0 |
lurl, code 2 or 3 | 0 when that loss path supplies price context. | Not supplied; the macro remains literal. |
lurl, code 100 or 101 | The floor that rejected the bid. | The same floor. |
lurl, code 102 | The winning auction price on the notified bidder’s CPM basis for current impression-event paths. Legacy notification paths without a fee basis can report the notified bid’s own CPM. | The same value as ${AUCTION_PRICE}. |
Loss reason codes
${AUCTION_LOSS} carries one of these OpenRTB codes:
Late responses are discarded. Do not rely on the lurl in a late response receiving code 2; server-generated timeout notices are available only through endpoint adapters that implement them.
| Code | Meaning | Common causes |
|---|---|---|
1 | Internal error | An unexpected CloudX-side failure processing your bid, or your winning bid’s ad failed to load or render on-device. |
2 | Expired | An endpoint-adapter-specific server timeout notice. |
3 | Invalid bid response | A field enforced by runtime validation is missing or malformed, or markup fails validation. |
100 | Below auction floor | price below imp.bidfloor. |
101 | Below deal floor | price below the floor of the deal you bid on. |
102 | Lost to higher bid | A valid bid that was outbid in its round. |
Example response
{
"id": "7f3d9a1c2e4b48f0a6d5c8b2e1f40937",
"cur": "USD",
"bidid": "b-92f4ac",
"seatbid": [
{
"seat": "your-seat-id",
"bid": [
{
"id": "bid-0001",
"impid": "1",
"price": 6.25,
"crid": "creative-48291",
"adid": "ad-48291",
"adomain": ["advertiser.example"],
"cat": ["IAB1-1"],
"adm": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><VAST version=\"3.0\">...</VAST>",
"nurl": "https://events.bidder.example/win?price=${AUCTION_PRICE}",
"burl": "https://events.bidder.example/bill?price=${AUCTION_PRICE}",
"lurl": "https://events.bidder.example/loss?reason=${AUCTION_LOSS}&price=${AUCTION_PRICE}",
"ext": { "crtype": "vast" }
}
]
}
]
}Next: Creative Specification
Creative types, sizes, and rendering behavior for CloudX-rendered demand.