Developer GuideQuick StartsRTB Integration in 5 min

RTB Integration in 5 Minutes

Send OpenRTB 2.5 bid requests to Praevis and receive winning VAST URLs.


Add a supply source

Go to exchange.praevis.com → Supply → Add Supply Source.

Set Integration type to RTB. Copy your Supply Source ID and API Key.

Send a bid request

Endpoint: POST https://rtb.praevis.com/rtb

Authenticate with either an X-API-Key header or an api_key field in the request body.

Option A — API key in header (preferred):

curl -X POST https://rtb.praevis.com/rtb \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -d '{
    "id": "test-req-001",
    "imp": [{
      "id": "1",
      "video": {
        "mimes": ["video/mp4"],
        "minduration": 6,
        "maxduration": 30,
        "protocols": [2, 3],
        "w": 1920,
        "h": 1080,
        "placement": 1
      },
      "bidfloor": 0.5,
      "bidfloorcur": "USD"
    }],
    "app": {
      "bundle": "com.example.app",
      "name": "Example CTV App",
      "publisher": { "id": "YOUR_PUBLISHER_ID" }
    },
    "device": {
      "ua": "Mozilla/5.0 (SMART-TV; Linux)",
      "ip": "1.2.3.4",
      "devicetype": 3
    }
  }'

Option B — API key in body (for platforms that can’t set custom headers):

curl -X POST https://rtb.praevis.com/rtb \
  -H "Content-Type: application/json" \
  -d '{
    "id": "test-req-001",
    "imp": [{
      "id": "1",
      "video": {
        "mimes": ["video/mp4"],
        "minduration": 6,
        "maxduration": 30,
        "protocols": [2, 3],
        "w": 1920,
        "h": 1080,
        "placement": 1
      },
      "bidfloor": 0.5,
      "bidfloorcur": "USD"
    }],
    "app": {
      "bundle": "com.example.app",
      "name": "Example CTV App",
      "publisher": {
        "id": "YOUR_PUBLISHER_ID",
        "ext": {
          "api_key": "YOUR_API_KEY"
        }
      }
    },
    "device": {
      "ua": "Mozilla/5.0 (SMART-TV; Linux)",
      "ip": "1.2.3.4",
      "devicetype": 3
    }
  }'

Interpret the response

Win (HTTP 200):

{
  "id": "test-req-001",
  "seatbid": [{
    "bid": [{
      "id": "bid-abc123",
      "impid": "1",
      "price": 3.50,
      "adm": "<VAST version=\"3.0\">...</VAST>",
      "crid": "creative-uuid"
    }]
  }],
  "cur": "USD"
}

No bid (HTTP 204): No body. No demand source (DSP) bid above the floor. Try lowering bidfloor.

Geo not served (HTTP 403): Request from a country with no active demand. Treat same as 204.

The adm field contains a complete VAST XML string. Pass it to your video player directly.

Check your dashboard

Auctions appear in Supply → your supply source → Performance within 60 seconds.


What’s next?