Trillboards
Back to Developers

DSP API

Programmatic buying for DOOH inventory. Discover screens, upload creatives, and serve ads β€” all via REST. Real-time audience signals no other SSP can match.

Quick Start

From zero to serving ads on screens in 7 API calls.

1. Register your DSP
curl -X POST https://api.trillboards.com/openrtb/v2/onboard \
  -H "Content-Type: application/json" \
  -d '{
    "company_name": "Acme Advertising",
    "seat_id": "acme_ads",
    "contact_email": "buyer@acme-ads.com"
  }'

# Response includes your API key (shown once):
# { "data": { "api_key": { "key": "tb_dsp_a1b2c3..." } } }
2. Browse available screens
curl https://api.trillboards.com/openrtb/v2/adslots?country=US&venue_type=retail \
  -H "x-api-key: tb_dsp_YOUR_KEY"

# Each screen includes live FEIN signals:
# ext.trb.fein.live_face_count, attention_score, dominant_emotion, vas_7d
3. Upload a creative
curl -X POST https://api.trillboards.com/openrtb/v2/creatives \
  -H "x-api-key: tb_dsp_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Summer Sale 15s",
    "content_type": "video/mp4",
    "creative_url": "https://cdn.example.com/ads/summer-sale.mp4"
  }'

# AI moderation runs automatically (~30 seconds)
# Poll GET /openrtb/v2/creatives/:id for status
4. Create campaign + assign to screens
# Create campaign
curl -X POST https://api.trillboards.com/openrtb/v2/campaigns \
  -H "x-api-key: tb_dsp_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "creative_id": "CREATIVE_ID",
    "name": "Summer Retail Push",
    "targeting": { "country": "US", "venue_type": "retail" }
  }'

# Assign to specific screens
curl -X POST https://api.trillboards.com/openrtb/v2/campaigns/assign \
  -H "x-api-key: tb_dsp_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "creative_id": "CREATIVE_ID",
    "screen_ids": ["SCREEN_1", "SCREEN_2", "SCREEN_3"]
  }'

# Screens pick up the creative within 30-60 seconds

Why Trillboards

Real-time audience signals

FEIN edge AI provides live face count, emotion, attention, and purchase intent on every screen. No other SSP has this.

Cryptographic proof-of-play

Every impression is Ed25519-signed and third-party verifiable. No trust required.

AI-moderated creatives

Gemini AI automatically classifies content (IAB categories, age rating, brand safety) in ~30 seconds.

Full reporting pipeline

Per-screen breakdown, time-series trends, fill rate, and CPM analytics via API.

Authentication

All endpoints except /onboard require an API key. Include it as a header:

Authentication
# Option 1: x-api-key header
curl -H "x-api-key: tb_dsp_YOUR_KEY" ...

# Option 2: Bearer token
curl -H "Authorization: Bearer tb_dsp_YOUR_KEY" ...

New DSPs start in sandbox mode (100 req/min). Sandbox bids are validated but don't enter the live auction. Contact support@trillboards.com to upgrade to production (1,000 req/min).

API Endpoints

MethodEndpointDescription
POST/openrtb/v2/onboardSelf-register, get API key
GET/openrtb/v2/adslotsBrowse screens + FEIN signals
POST/openrtb/v2/forecastEstimate delivery for budget
POST/openrtb/v2/discoverSemantic inventory search
POST/openrtb/v2/bidSubmit OpenRTB 2.6 bids
POST/openrtb/v2/creativesUpload creative (URL or S3)
GET/openrtb/v2/creatives/:idModeration status + IAB codes
POST/openrtb/v2/campaignsCreate campaign
POST/openrtb/v2/campaigns/assignPlace on screens
GET/openrtb/v2/dealsBrowse PMP deals
GET/openrtb/v2/reports/summaryPerformance summary
GET/openrtb/v2/reports/timeseriesHourly/daily trends

FEIN Audience Signals

Trillboards screens run edge AI (FEIN) that provides real-time audience data no other SSP can match. These signals are included in the /adslots response under ext.trb.fein.

SignalTypeFreshness
live_face_countinteger10 seconds
attention_score0-110 seconds
dominant_emotionstring10 seconds
vas_7dnumberHourly
crowd_densityinteger10 seconds
purchase_intentstring30 seconds
income_levelenum10 seconds
ad_receptivity0-110 seconds

Rate Limits

GroupSandboxProduction
Bidding100/min1,000/min
Inventory100/min200/min
Campaigns100/min100/min
Onboarding5/hr5/hr

Rate limit headers are included in every response: RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset.

Need help integrating? Contact developers@trillboards.com