VAST: SpringServe Integration
Context: Supply source (Publisher) using SpringServe as their ad server. Add Praevis Exchange as a demand source alongside existing demand.
Step 1: Get your Supply Source ID
In the Praevis dashboard: Supply → click your supply source → Settings → copy Supply Source ID (UUID format).
Step 2: Build your VAST tag URL
Praevis VAST endpoint with SpringServe macros:
https://rtb.praevis.com/vast?site_id={PUBLISHER_ID}&w={{WIDTH}}&h={{HEIGHT}}&ip={{IP}}&ua={{USER_AGENT}}&did={{IFA}}&content_genre={{CONTENT_GENRE}}Replace {PUBLISHER_ID} with your UUID. SpringServe macros are in {{DOUBLE_CURLY_BRACES}} — SpringServe fills them at request time.
SpringServe macro mapping
| Praevis parameter | SpringServe macro | Notes |
|---|---|---|
site_id | Your Supply Source UUID (static) | Hard-code — doesn’t change |
w | {{WIDTH}} | Player width in pixels |
h | {{HEIGHT}} | Player height in pixels |
ip | {{IP}} | Viewer IP — required for geo targeting |
ua | {{USER_AGENT}} | URL-encoded user agent |
did | {{IFA}} | Device advertising ID (IDFA / GAID) |
content_genre | {{CONTENT_GENRE}} | Content genre if your integration passes it |
floor | {{FLOOR_PRICE}} | Dynamic floor from SpringServe (optional) |
cb | {{CACHEBUSTER}} | Cache-busting random number |
pod_duration | {{POD_MAX_DUR}} | Maximum pod duration in seconds |
app_bundle | {{APP_BUNDLE}} | App bundle ID (mobile/CTV) |
app_name | {{APP_NAME}} | App name (mobile/CTV) |
app_store_url | {{APP_STORE_URL}} | App store URL |
inv_partner_domain | {{INV_PARTNER_DOMAIN}} | Inventory partner domain |
content_id | {{CONTENT_ID}} | Content ID |
content_episode | {{CONTENT_EPISODE}} | Episode number |
content_title | {{CONTENT_TITLE}} | Content title |
content_series | {{CONTENT_SERIES}} | Series name |
ip and ua are required for geo-targeting and IVT detection. If SpringServe doesn’t pass them, geo-targeted demand sources won’t bid and fill rate will be lower.
Step 3: Add Praevis as a demand tag in SpringServe
- In SpringServe: Demand → Add Demand Tag
- Tag Type: VAST URL
- Tag URL: Paste your completed Praevis VAST URL
- Timeout: Set to
150ms (matches Praevis auction timeout) - Priority: Set appropriately relative to other demand sources
- Active: Toggle on
Step 4: Test in SpringServe
- SpringServe: Demand → your Praevis tag → Test Tag
- SpringServe fires a test request to Praevis
- Expected response: filled VAST XML or empty VAST
- Check the Praevis sandbox dashboard (if supply source is in sandbox mode) for the incoming request
Step 5: Validate before enabling live traffic
- Test tag returns a filled VAST response
-
<MediaFile>URL resolves and plays in SpringServe’s VAST tester - IP and UA macros are being passed correctly (check your Praevis dashboard — geo should show correctly)
- Supply source is switched from sandbox to live mode
Common SpringServe-specific issues
Fill rate is 0%
Check that ip and ua macros are correctly mapped. SpringServe uses {{IP}} and {{USER_AGENT}} (double curly braces, not square brackets). Confirm with a test request that geo appears in your Praevis dashboard.
VAST validation error in SpringServe
Praevis returns VAST 4.0 by default. If SpringServe requires VAST 2.0, add &vast_version=2 to your tag URL.
Timeout errors SpringServe’s tag timeout must be at least 150ms. If your SpringServe account has a lower global timeout, increase it for the Praevis tag specifically under Advanced Settings → Tag Timeout.
Impression discrepancy between SpringServe and Praevis
SpringServe counts a SpringServe impression when the tag is fired. Praevis counts an impression when the <Impression> tracking pixel in the VAST fires (after creative starts playing). These differ by player startup time (~200–500ms). A 2–5% discrepancy is normal. Larger discrepancies indicate player configuration issues.