Developer GuideCookbookVAST: SpringServe Integration

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 parameterSpringServe macroNotes
site_idYour 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

  1. In SpringServe: Demand → Add Demand Tag
  2. Tag Type: VAST URL
  3. Tag URL: Paste your completed Praevis VAST URL
  4. Timeout: Set to 150 ms (matches Praevis auction timeout)
  5. Priority: Set appropriately relative to other demand sources
  6. Active: Toggle on

Step 4: Test in SpringServe

  1. SpringServe: Demand → your Praevis tag → Test Tag
  2. SpringServe fires a test request to Praevis
  3. Expected response: filled VAST XML or empty VAST
  4. 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.