An OpenRTB API, documented the way you'd want it.
One bearer token, one endpoint, the schemas your DSP already speaks. Send a bid request, get a winning bid back, in under 90 milliseconds.
- <90ms
- p95 latency
- 99.9%
- Uptime
- 2.6
- OpenRTB version
request
{
"id": "8f2a…e91",
"tmax": 90,
"at": 2,
"imp": [{
"id": "1",
"bidfloor": 4.50,
"video": {
"w": 1920, "h": 1080
}
}]
}response
{
"seatbid": [{
"seat": "google-ads",
"bid": [{
"impid": "1",
"price": 5.91,
"crid": "vast-2291"
}]
}]
}Authentication
All requests are authenticated with a bearer API key over HTTPS.
Keys are scoped per environment. Never ship a secret key in client code, call the API from your server.
curl https://rtb.brightfaceads.com/openrtb/2.6/bid \
-H "Authorization: Bearer $BFA_KEY" \
-H "Content-Type: application/json" \
-d @bid-request.jsonEndpoints
A small, predictable surface. Everything speaks JSON over HTTPS.
/openrtb/2.6/bidRun an auction and return the winning bid.
/openrtb/2.6/winNotify a win and confirm billing via the win URL.
/v1/reportsPull impression, spend and fill metrics.
/v1/statusService health, region and current version.
Request & response
The exact shapes in and out, copy them straight into your integration.
POST /openrtb/v2/bid HTTP/1.1
Host: rtb.brightfaceads.com
Authorization: Bearer $BFA_KEY
Content-Type: application/json
{
"id": "8f2a1c9e-...",
"imp": [{
"id": "1",
"video": { "mimes": ["video/mp4"], "w": 1280, "h": 720 },
"bidfloor": 4.5,
"bidfloorcur": "USD"
}],
"device": { "geo": { "country": "CMR", "city": "Douala" } },
"at": 2,
"tmax": 90
}HTTP/1.1 200 OK
Content-Type: application/json
{
"id": "8f2a1c9e-...",
"seatbid": [{
"bid": [{
"id": "bid-1",
"impid": "1",
"price": 6.71,
"adm": "<VAST ...>",
"crid": "creative-2291",
"w": 1280, "h": 720
}],
"seat": "meta"
}],
"cur": "USD"
}Key fields
The bid-request fields you'll touch most often.
| Field | Type | Description |
|---|---|---|
id | string | Unique identifier for the bid request. |
imp[] | object[] | The impressions offered for auction. |
imp.bidfloor | float | Minimum acceptable bid, in CPM. |
tmax | integer | Maximum auction time in ms (capped at 90). |
at | integer | Auction type, 2 means second-price. |
device.geo | object | Country and city of the impression. |
Status codes
Predictable responses your integration can branch on.
A bid was returned in the response body.
No bid, no demand cleared the floor.
The bid request was malformed or incomplete.
Missing or invalid API key.
Rate limit exceeded, back off and retry.
Temporary outage, retry with exponential backoff.
Try a live request in the browser.
Fire a bid request and watch the auction resolve, without writing any code.
Skip the HTTP and use a typed client.
Six first-class SDKs wrap this API for you.

