Test Data & Scenarios
Use these pre-built scenarios to test specific integration paths without setting up your own supply sources (Publishers) or demand sources (DSPs).
Pre-built sandbox supply sources
These supply sources are available in every sandbox environment — no setup required.
| Supply Source | ID | Inventory | Geo | Genre | Floor |
|---|---|---|---|---|---|
| Sandbox CTV UAE | sandbox-pub-ctv-uae | CTV video 1920×1080 | AE | drama | $3.00 CPM |
| Sandbox Mobile UK | sandbox-pub-mobile-uk | Mobile video 640×480 | GB | sport | $1.50 CPM |
| Sandbox Web US | sandbox-pub-web-us | Web banner 300×250 | US | news | $0.50 CPM |
| Sandbox CTV Global | sandbox-pub-ctv-global | CTV video 1920×1080 | Multiple | mixed | $2.00 CPM |
Use these Supply Source IDs in your VAST tags or RTB requests to generate realistic auction scenarios.
Pre-built test scenarios
Retrieve any scenario via:
GET /api/sandbox/test-bid?scenario={SCENARIO_NAME}ctv-uae-drama — CTV, Dubai, drama genre, prime time
{
"id": "sandbox-auction-001",
"at": 1,
"tmax": 150,
"app": {
"id": "sandbox-app-ctv-uae",
"name": "Sandbox Streaming (UAE)",
"bundle": "com.praevis.sandbox.ctv",
"content": { "genre": "drama", "title": "Test Drama Series" },
"publisher": { "id": "sandbox-pub-ctv-uae" }
},
"imp": [{
"id": "imp-001",
"video": { "mimes": ["video/mp4"], "minduration": 15, "maxduration": 30, "w": 1920, "h": 1080, "startdelay": 0, "skip": 0 },
"bidfloor": 3.00, "bidfloorcur": "USD", "secure": 1
}],
"device": {
"ip": "203.0.113.42",
"ua": "Mozilla/5.0 (SMART-TV; Tizen 6.0)",
"devicetype": 3,
"geo": { "country": "AE", "region": "AE-DU", "city": "Dubai" }
}
}mobile-uk-sport — Mobile, UK, sport genre, weekend afternoon
{
"id": "sandbox-auction-002",
"at": 1,
"tmax": 150,
"app": {
"id": "sandbox-app-mobile-uk",
"bundle": "com.praevis.sandbox.sport",
"content": { "genre": "sport", "title": "Premier League Highlights" },
"publisher": { "id": "sandbox-pub-mobile-uk" }
},
"imp": [{
"id": "imp-001",
"video": { "mimes": ["video/mp4"], "minduration": 15, "maxduration": 30, "w": 640, "h": 480, "startdelay": 0, "skip": 1 },
"bidfloor": 1.50, "bidfloorcur": "USD", "secure": 1
}],
"device": {
"ip": "198.51.100.15",
"ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0)",
"devicetype": 1,
"os": "iOS",
"geo": { "country": "GB", "region": "GB-ENG", "city": "London" }
}
}web-us-news — Desktop web, US, news, morning
{
"id": "sandbox-auction-003",
"at": 1,
"tmax": 150,
"site": {
"id": "sandbox-site-web-us",
"domain": "sandbox-news.example.com",
"cat": ["IAB12"],
"publisher": { "id": "sandbox-pub-web-us" }
},
"imp": [{
"id": "imp-001",
"banner": { "w": 300, "h": 250, "mimes": ["image/jpeg", "image/png"] },
"bidfloor": 0.50, "bidfloorcur": "USD", "secure": 1
}],
"device": {
"ip": "192.0.2.100",
"ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120",
"devicetype": 2,
"geo": { "country": "US", "region": "US-NY", "city": "New York" }
}
}ctv-timeout — Circuit breaker test
Same as ctv-uae-drama but routed to TimeoutDSP (a synthetic demand source). Your endpoint will receive the request and Praevis will wait 150ms before timing out. Use this to test your endpoint’s timeout handling and circuit breaker behaviour.
Expected VAST responses
Filled — 15s pre-roll
<?xml version="1.0" encoding="UTF-8"?>
<VAST version="4.0">
<Ad id="sandbox-ad-001">
<InLine>
<AdSystem>Praevis Sandbox</AdSystem>
<AdTitle>Sandbox Creative — 15s</AdTitle>
<Impression id="imp"><![CDATA[https://rtb.praevis.com/track/impression?id=sandbox-001]]></Impression>
<Creatives>
<Creative>
<Linear>
<Duration>00:00:15</Duration>
<MediaFiles>
<MediaFile type="video/mp4" width="1920" height="1080" bitrate="2000" delivery="progressive">
https://sandbox.praevis.com/creatives/test-15s.mp4
</MediaFile>
</MediaFiles>
</Linear>
</Creative>
</Creatives>
</InLine>
</Ad>
</VAST>Empty — no winner
<?xml version="1.0" encoding="UTF-8"?>
<VAST version="4.0"/>Your ad server or player must handle the empty VAST gracefully — fire your passback tag or show a house ad.
Expected bid request for RTB validation
If you’re building a new bidder, use the ctv-uae-drama scenario above as your canonical test input. Verify your bidder:
- Parses
app.content.genrecorrectly (string"drama") - Reads
imp[0].bidfloor(float3.00) - Reads
device.devicetype(int3) - Returns HTTP 200 with
price> 3.00 within 150ms OR HTTP 204
Resetting between test runs
POST /api/sandbox/reset
X-API-Key: {YOUR_KEY}Clears all sandbox metrics and auction logs for a clean baseline. Takes effect immediately.
The pre-built sandbox supply sources are always available and are not affected by the reset — only your metrics and logs are cleared.