Receiving G24ad requests
Agree the explicit openrtb-json-v1 protocol, OpenRTB 2.5 or 2.6, and authentication mode. Live outbound requests use HTTPS POST only, with certificate-chain and hostname verification. Provide an accessible HTTPS endpoint; URL user information and fragments are rejected. Special network access must be agreed separately.
| Header | Behavior |
|---|---|
Content-Type |
application/json |
Accept |
application/json |
Accept-Encoding |
identity |
x-openrtb-version |
2.5 or 2.6, according to that DSP’s configuration |
| Authentication | Only that DSP’s explicitly configured authentication headers |
| Authentication mode | Outbound value |
|---|---|
none |
No authentication header; explicitly selected, not inferred from an empty credential |
bearer |
Authorization: Bearer <secret> |
header |
An agreed valid custom header name containing the agreed secret |
An authentication secret is 1–512 bytes of visible ASCII, without surrounding whitespace or CR / LF / NUL. Custom header names must pass onboarding validation and cannot override protocol or sensitive forwarding headers. An old token is not inferred to mean Bearer. The SSP’s Authorization and X-G24-* authentication headers are not forwarded to the DSP.
The client does not follow redirects, retry automatically, or decompress responses. Return uncompressed bodies; omit Content-Encoding or use the lowercase value identity. Do not rely on 301 / 302 to reach the real bidding endpoint.
Request fields and budget
Each request contains one impression, one Banner / Video / Native object, and one App / Site source. Only USD and explicit first-price at: 1 are supported. PMP / Deals, PODs, and multiple-impression auctions are not supported. See the field reference.
G24ad preserves request context and unknown extensions while setting at: 1, cur: ["USD"], remaining tmax, the gross imp.bidfloor, and bidfloorcur: "USD". Respond within the received tmax, which is the remaining downstream budget and can be lower than the original SSP budget. A slow or failing DSP does not extend the SSP’s overall deadline.
Response contract
- Return HTTP
200with JSON for bids;204is recommended for no-bid. Non-200responses do not participate in the auction and are not directly propagated as the same SSP status. - The complete response is limited to 512 KiB (524288 bytes), checking both declared Content-Length and bytes read in chunks. Compression is not supported.
response.idmust equal requestid;bid.impidmust equal the singleimp.id.- Omitted
curmeans USD; explicit non-USD currency is rejected. Optional bid-levelcurmust also be USD. - At most 64 seatbid objects and 64 bids in total. Each bid requires nonempty inline
adm, at most 256 KiB and without NUL. A notification URL alone is insufficient. - Invalid response identity, currency, or overall structure rejects the whole DSP response. An invalid individual bid is dropped independently. Required creative or seat identity cannot be omitted to bypass an upstream block restriction.
Download the DSP Banner bid example. G24ad returns only one winning seat and bid to the SSP. Unknown bid fields are preserved, but unknown response-level and seatbid-level fields are not guaranteed to survive reconstruction. 200 is a winning bid, not proof of an impression, billing, or settlement.
Gross, net, and precision
JSON prices are in USD CPM. Calculations use integer micro-units: 1 USD CPM = 1000000 micro-units, up to 1000000000000 micro-units (1000000 USD CPM). SSP floors round up to a micro-unit; DSP bids round down, without a binary floating-point conversion. Original prices above the limit remain invalid.
net = floor(gross × (10000 - margin_bps) / 10000)
outbound_floor = max(configured_gross_floor,
ceil(ssp_floor × 10000 / (10000 - margin_bps)))
All monetary terms in these formulas are integer micro-units; 10000 bps is 100%. A 100% margin or a derived floor above the limit makes that candidate ineligible. Gross must reach the outbound gross floor; net must be positive and reach the SSP floor. Highest net wins, with stable DSP ID then bid ID tie-breaking, not response arrival order.
For example, SSP floor 1.5 and margin 10% imply a DSP floor of at least 1.666667. A DSP gross bid of 3.0 yields SSP bid.price of 2.700000.
Notifications and macros
ADX does not call nurl, burl, or lurl. Notification fields in the winning bid are left to the SSP to execute against actual events. Returning a bid does not automatically fire win or bill callbacks.
${AUCTION_PRICE} in adm, nurl, burl, and lurl is replaced with that DSP’s gross price as a six-decimal USD CPM string. For gross 3.0, the replacement is 3.000000, not integer micro-units 3000000 and not outer net 2.700000. Other macros are not replaced here and must be agreed separately. Only the winning bid is returned; there is no list of every losing DSP’s notifications.
This convention covers the current first-price bidding flow, not a separate impression-billing or settlement ledger. Complete the launch checklist before going live.
Protocol and implementation checked: 2026-09-19.