Programmatic broadsheet · Set in real time
adon3
The Real-Time Bidding Exchange
Integration Docs
Supply side · XML feed · OpenRTB 2.6 / 2.5

Bid Endpoint

One GET per impression opportunity. We answer with the ad that won the auction, or with 204 when nothing bid.

HTTP
GET /v1/feed/{feed_key} HTTP/1.1
Host: dsp.xml.adon3.com
Accept: application/json
Accept-Encoding: gzip

{feed_key} identifies your supply endpoint and its supply type. POST is not supported. Every parameter below is a query parameter and must be URL-encoded.

Parameter names and enumerated values on this page are provisional while version 1.0 is finalised. Confirm anything you are about to hard-code with the adon3 integration office.

Required parameters

FieldTypeReq.Notes
ipstringyesVisitor IPv4 or IPv6. Must be the visitor's address, not your server's.
uastringyesFull, unmodified user agent, URL-encoded.

We reject a call with 400 when either is missing. A truncated or synthesised user agent is worse than useless, because it passes validation and then loses you the targeting that pays best.

Identification

FieldTypeReq.Notes
subidstringnoYour placement, zone or publisher token. Up to 64 characters, [A-Za-z0-9_.-].
ridstringnoYour request id. Used for deduplication and for support lookups.
uidstringnoStable visitor identifier, hashed on your side. Improves frequency capping.
referrerstringnoPage or app referrer URL. ref is accepted as an alias.
langstringnoBCP-47 language tag, for example en-GB. Falls back to what we infer.

subid is the dimension every report breaks down by, so a scheme you can still read six months from now is worth ten minutes today. Sending one subid for all traffic works, and tells you nothing.

Accepted aliases

Two fields have a second spelling, and both have been accepted since this endpoint launched. If you are already integrated on the short form, keep it — it is not deprecated and nothing about it will change.

DocumentedAlso accepted
referrerref
keywordkw
riduniqueid
catcategory
formatencoding
img_sizeimage_size
ch_uasec-ch-ua
ch_mobilesec-ch-ua-mobile
ch_modelsec-ch-ua-model
ch_platformsec-ch-ua-platform
ch_platform_versec-ch-ua-platform-version

Endpoints we issued before September 2026 carry ref and kw; newer ones carry referrer and keyword. They behave identically — we simply publish the longer names now because they are the ones documented here.

subscription_age is also read, and takes precedence over sub_age when you send both. Send one.

Parameter names are case-sensitive and lower case. Referrer or KW are read as unknown parameters and ignored, which looks exactly like sending nothing.

Context and targeting

FieldTypeReq.Notes
catstringnoIAB content categories, comma-separated, for example IAB13,IAB19.
keywordstringnoContext keywords, comma-separated. Up to 20. kw is accepted as an alias.
nintnoAds requested, 1 to 5. Default 1. We may return fewer.
min_pricefloatnoFloor in USD CPC. Bids below it are dropped rather than returned.
testintno1 runs the auction without billing and without counting. Default 0.

Setting n above 1 is only useful when you have somewhere to show the extras. Requesting five ads and showing one depresses your fill quality score.

Pop parameters

Accepted only on feed keys whose supply type is pop.

FieldTypeReq.Notes
pop_typestringnounder or over. Default under.

Push parameters

Accepted only on feed keys whose supply type is push. On any other key they return 403.

FieldTypeReq.Notes
img_sizestringnoHero image size as WxH, for example 492x328. Default 360x240.
icon_sizestringnoIcon size as WxH, for example 192x192. Default 192x192.
sub_ageintnoDays since the visitor subscribed. Older lists price differently.

If you cannot render an image at the size you asked for, ask for the size you can render. We select creatives against these values, and a mismatch shows up as a low click-through rate rather than as an error.

Accepted only on feed keys whose supply type is direct link. On any other key they return 403.

FieldTypeReq.Notes
redirectintno1 answers with a 302 to the creative instead of a body. Default 0.
redirect_urlstringnoYour own URL. Forwarded to demand, and where we send the visitor when nothing fills. Absolute http(s) only.

redirect_url does two jobs. It is forwarded to the buyer unchanged — several direct link buyers require it and will not bid without one, so sending it raises your fill rate on this supply type. And in redirect mode it is where we send the visitor when the auction returns nothing, so a no fill lands them somewhere of your choosing rather than on a blank tab.

Both appear pre-filled on the endpoint we issue you, redirect set to 1 and redirect_url left as a macro. Substitute it, or delete the parameter if you have nothing to send — an unsubstituted {redirect_url} is treated as absent rather than rejected, so a partly filled URL still works.

Redirect mode

A direct link is the navigation itself: somebody pressed something and is waiting on a blank tab while you decide where to send them. redirect=1 lets you put this endpoint in front of them directly, with nothing to parse and no code on your side.

Shell
curl -sSi -G 'https://dsp.xml.adon3.com/v1/feed/{feed_key}' \
  --data-urlencode 'ip=203.0.113.44' \
  --data-urlencode 'ua=Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36' \
  --data-urlencode 'subid=zone-4471' \
  --data-urlencode 'redirect=1' \
  --data-urlencode 'redirect_url=https://your-site.example/backfill'
HTTP
HTTP/1.1 302 Found
Location: https://dsp.xml.adon3.com/track/click/...
Cache-Control: no-store, no-cache, must-revalidate
Referrer-Policy: no-referrer

Three things follow from there being no body:

  • The impression is counted for you. Normally you fire imp_url yourself; a 302 has nowhere to carry it, so we fire it server-side before redirecting. Your counts match either way.
  • format cannot be set. There is no body to encode, so redirect=1 with format=xml returns 403 rather than quietly ignoring one of them.
  • A no fill sends them to your redirect_url. There is a person waiting on a blank tab, so a 204 would be the right answer to a parser and the wrong one to them. Send no redirect_url and a no fill is a 204 as usual — we will not invent a destination. Outside redirect mode nothing changes: you get the 204 and run your own fallback, which stays your decision.
  • Coded errors are never redirected. A 400, 401 or 403 is an integration mistake, and hiding it behind a redirect is how a partner spends a week sending traffic that never had a chance of filling.

The redirect is 302, never 301. The destination is decided per visit, and a permanent redirect would be cached by the browser and by every proxy in between, so the first creative a visitor saw would become the only one that link ever went to.

Client hints

Modern browsers reduce the user agent, so send the hints when you have them. Each maps to the header of the same name.

FieldTypeReq.Notes
ch_uastringnoSec-CH-UA value.
ch_platformstringnoSec-CH-UA-Platform, for example Android.
ch_platform_verstringnoSec-CH-UA-Platform-Version.
ch_mobileintnoSec-CH-UA-Mobile, 1 or 0.
ch_modelstringnoSec-CH-UA-Model.

Response control

FieldTypeReq.Notes
formatstringnojson (default) or xml.

A complete request

Shell
curl -sS -G 'https://dsp.xml.adon3.com/v1/feed/9862b397ba3320149b94a05079597eb3' \
  --compressed \
  --data-urlencode 'ip=203.0.113.44' \
  --data-urlencode 'ua=Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36' \
  --data-urlencode 'subid=zone-4471' \
  --data-urlencode 'rid=8f2a1c30-6b4e-4d9a-9f11-2c7e3b5a8d40' \
  --data-urlencode 'uid=3d9f7a2b6c1e' \
  --data-urlencode 'referrer=https://gazette.example.com/markets/open-exchange' \
  --data-urlencode 'lang=en-US' \
  --data-urlencode 'cat=IAB13' \
  --data-urlencode 'ch_platform=Android' \
  --data-urlencode 'ch_mobile=1' \
  --data-urlencode 'n=1'

Status codes

StatusMeaning
200A fill. Body carries one or more ads.
204No fill. Empty body. Normal and expected.
302A fill in redirect mode. Location is the creative. Direct link only.
400A required parameter is missing or malformed.
401Unknown or revoked feed key.
403Parameters do not match the key's supply type, or the account is suspended.
429Above the provisioned request rate for this key.
503Shedding load. Treat as a no-fill and move on.

Full bodies and error codes are on Status & Errors.

Next: Response Formats.

sellers.json · schain enforced · OpenRTB 2.5 / 2.6 / 3.0 · XML
Printed on the Open Exchange
—  Integration Docs  —