GuidesAd ServingVMAP Ad Pods

VMAP Ad Pods

The /vmap endpoint returns multiple ads in a single response for CTV and SSAI (Server-Side Ad Insertion) environments. Use it when your player supports multi-ad breaks.

Request

GET https://rtb.praevis.com/vmap?site_id={id}&pod_max_dur=90&pod_ad_slots=3

Parameters

ParameterDescriptionExample
site_idPublisher or site IDpub_abc123
pod_max_durMax pod duration in seconds90
pod_ad_slotsNumber of ad slots in the pod3
min_durMinimum ad duration in seconds6
max_durMaximum ad duration in seconds30
ipUser IP (for server-side)Detected from request
uaUser agent (for server-side)Detected from request

Response

The endpoint returns a VMAP XML document with one <vmap:AdBreak> containing multiple VAST ads.

<vmap:VMAP version="1.0">
  <vmap:AdBreak timeOffset="start" breakType="linear">
    <vmap:AdSource>
      <vmap:VASTAdData>
        <VAST version="4.2">
          <!-- Ad 1: 15s creative -->
          <!-- Ad 2: 30s creative -->
          <!-- Ad 3: 15s creative -->
        </VAST>
      </vmap:VASTAdData>
    </vmap:AdSource>
  </vmap:AdBreak>
</vmap:VMAP>

How Pod Filling Works

  1. The exchange runs separate auctions for each slot in the pod
  2. Duration matching — ad durations are selected to fit within pod_max_dur
  3. Competitive exclusion — the same advertiser does not appear twice in one pod
  4. Slots that do not fill are omitted (the pod may be shorter than pod_max_dur)

SSAI Integration

For SSAI environments (common SSAI platforms), the response uses Wrapper + InLine format. This allows the SSAI server to cache creatives while still firing Praevis tracking pixels.

VAST Wrapper (Praevis tracking) → InLine (creative media file)

The Wrapper contains impression and event tracking URLs. The InLine contains the actual media file URL for the SSAI server to fetch and stitch.

Example

curl "https://rtb.praevis.com/vmap?site_id=pub_abc123&pod_max_dur=90&pod_ad_slots=3&min_dur=6&max_dur=30"

Tips

  • Set pod_max_dur to match your content break length. A 90-second break can fit three 30-second ads or six 15-second ads.
  • Use min_dur and max_dur to control individual ad lengths.
  • The endpoint returns as many ads as fit. If only 2 of 3 slots fill, you get a 2-ad pod.