Skip to content
Developer Platform

Build on the platform

A clean REST surface, native OpenRTB bidding, and a conformance sandbox Everything a DSP or SSP engineering team needs to integrate in days

Reference

A small, predictable API surface

Every route is versioned, HTTPS-only, and returns strict JSON. Bidding follows the OpenRTB spec exactly — no proprietary envelope

POST/v1/auth/token
POST/v1/bid
GET/v1/reporting/delivery
GET/v1/inventory/sellers.json

Authentication

request
http
POST /v1/auth/token HTTP/1.1
Host: rtb.adspiro.io
Content-Type: application/json

{
  "client_id": "sp_9f2c1a4e",
  "client_secret": "••••••••••••••••",
  "grant_type": "client_credentials"
}
200 OK
json
{
  "access_token": "axm_live_7b1d…",
  "token_type": "Bearer",
  "expires_in": 3600,
  "scope": "bid:read bid:write reporting:read"
}

Tokens are OAuth 2.0 bearer credentials, valid for one hour. Pass them in the Authorization header on every subsequent request

OpenRTB

Bid request & response, exactly as specified

Here is a complete banner auction round-trip, including SupplyChain and privacy signals. Video, native, and CTV follow the same envelope with their respective objects

Bid Request

POST /v1/bid
json
{
  "id": "8f4b2c1e-6a9d-4f21-9c33-7e0a1b2d3c4e",
  "at": 1,
  "tmax": 120,
  "cur": ["USD"],
  "imp": [
    {
      "id": "1",
      "tagid": "slot-atf-970x250",
      "bidfloor": 1.75,
      "bidfloorcur": "USD",
      "secure": 1,
      "banner": { "w": 970, "h": 250, "pos": 1 }
    }
  ],
  "site": {
    "id": "pub-40219",
    "domain": "example-news.com",
    "cat": ["IAB12"],
    "publisher": { "id": "sp_9f2c1a4e", "name": "Example Media" }
  },
  "device": {
    "ua": "Mozilla/5.0 …",
    "ip": "203.0.113.7",
    "geo": { "country": "USA" },
    "devicetype": 2
  },
  "user": { "id": "u-6c2f…" },
  "source": {
    "fd": 1,
    "ext": {
      "schain": {
        "complete": 1,
        "ver": "1.0",
        "nodes": [
          { "asi": "adspiro.io", "sid": "sp_9f2c1a4e", "hp": 1 }
        ]
      }
    }
  },
  "regs": { "ext": { "gdpr": 0, "us_privacy": "1YNN" } }
}

Bid Response

200 OK
json
{
  "id": "8f4b2c1e-6a9d-4f21-9c33-7e0a1b2d3c4e",
  "cur": "USD",
  "seatbid": [
    {
      "seat": "dsp-seat-118",
      "bid": [
        {
          "id": "bid-1",
          "impid": "1",
          "price": 2.41,
          "adm": "<div>…creative markup…</div>",
          "adomain": ["brand.com"],
          "crid": "creative-55210",
          "w": 970,
          "h": 250,
          "nurl": "https://dsp.example/win?px=${AUCTION_PRICE}",
          "burl": "https://dsp.example/bill?imp=1"
        }
      ]
    }
  ]
}

Example call

terminal
bash
curl -X POST https://rtb.adspiro.io/v1/bid \
  -H "Authorization: Bearer axm_live_7b1d…" \
  -H "Content-Type: application/json" \
  -H "x-openrtb-version: 2.6" \
  --data-binary @bid-request.json
Integration Guide

From credentials to live traffic in five steps

01

Provision credentials

Receive your client_id / client_secret and sandbox seat from your onboarding engineer

02

Authenticate

Request a short-lived bearer token via OAuth 2.0 client-credentials. Rotate as needed

03

Integrate endpoints

Point your RTB stack at our regional bidder endpoints and negotiate OpenRTB version

04

Certify in sandbox

Validate bid shaping, schain, and privacy signals against our conformance suite

05

Go live

Ramp traffic gradually with real-time reconciliation and dedicated support on call. Every unfilled bid comes back with one of 18 OpenRTB loss codes on your lurl, so you can tell a floor miss from a creative rejection

Need a sandbox seat?

Our solutions engineers will provision credentials and walk your team through conformance testing

Request access