Skip to content
Bright Face AdsBright Face Ads
API & OpenRTB

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
POST/openrtb/2.6/bid200 OK · 78ms

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

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.

terminal
bash
curl https://rtb.brightfaceads.com/openrtb/2.6/bid \
  -H "Authorization: Bearer $BFA_KEY" \
  -H "Content-Type: application/json" \
  -d @bid-request.json
Endpoints

Endpoints

A small, predictable surface. Everything speaks JSON over HTTPS.

POST
/openrtb/2.6/bid

Run an auction and return the winning bid.

POST
/openrtb/2.6/win

Notify a win and confirm billing via the win URL.

GET
/v1/reports

Pull impression, spend and fill metrics.

GET
/v1/status

Service health, region and current version.

Request & response

Request & response

The exact shapes in and out, copy them straight into your integration.

POSTBid request
bid-request
http
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
}
200Bid response
bid-response
json
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

Key fields

The bid-request fields you'll touch most often.

FieldTypeDescription
idstringUnique identifier for the bid request.
imp[]object[]The impressions offered for auction.
imp.bidfloorfloatMinimum acceptable bid, in CPM.
tmaxintegerMaximum auction time in ms (capped at 90).
atintegerAuction type, 2 means second-price.
device.geoobjectCountry and city of the impression.
Status codes

Status codes

Predictable responses your integration can branch on.

200OK

A bid was returned in the response body.

204No Content

No bid, no demand cleared the floor.

400Bad Request

The bid request was malformed or incomplete.

401Unauthorized

Missing or invalid API key.

429Too Many Requests

Rate limit exceeded, back off and retry.

503Unavailable

Temporary outage, retry with exponential backoff.

API explorer

Try a live request in the browser.

Fire a bid request and watch the auction resolve, without writing any code.

Prefer an SDK?

Skip the HTTP and use a typed client.

Six first-class SDKs wrap this API for you.

Explore the SDK

Let's put your brand on the brightest screens.

Launch a campaign in days, not weeks.

Talk to our team