Creative Specs
Praevis accepts video (VAST), banner, and native ad formats. All creatives must be served over HTTPS and comply with the quality requirements below.
Multiple Creatives per Campaign
Upload multiple creatives per campaign with weighted rotation for A/B/C testing. Test different creative variants within a single campaign without managing separate campaigns.
Campaign Setup
Campaigns support both single creative and multiple creative configurations. Use the Campaign API to configure creative rotation:
Single Creative
{
"campaign_id": "summer-promo-2026",
"campaign_name": "Summer Promo",
"targeting": {
"countries": ["ARE", "SAU"],
"devices": ["ctv"]
},
"bidding": {
"base_cpm": 2.50,
"max_cpm": 5.00
},
"budget": {
"daily_cents": 50000,
"total_cents": 1500000
},
"creative": {
"vast_url": "https://cdn.example.com/hero.xml",
"impression_trackers": ["https://tracker.example.com/imp?creative=hero"],
"creative_id": "hero-1"
}
}Multiple Creatives with Weighted Rotation
{
"campaign_id": "summer-promo-abc-test",
"campaign_name": "Summer Promo - A/B/C Test",
"targeting": {
"countries": ["ARE", "SAU"],
"devices": ["ctv"]
},
"bidding": {
"base_cpm": 2.50,
"max_cpm": 5.00
},
"budget": {
"daily_cents": 50000,
"total_cents": 1500000
},
"creatives": [
{
"creative_id": "hero-variant",
"vast_url": "https://cdn.example.com/hero.xml",
"impression_trackers": ["https://tracker.example.com/imp?creative=hero"],
"weight": 50
},
{
"creative_id": "family-variant",
"vast_url": "https://cdn.example.com/family.xml",
"impression_trackers": ["https://tracker.example.com/imp?creative=family"],
"weight": 30
},
{
"creative_id": "adventure-variant",
"vast_url": "https://cdn.example.com/adventure.xml",
"impression_trackers": ["https://tracker.example.com/imp?creative=adventure"],
"weight": 20
}
],
"rotation_strategy": "weighted"
}Rotation Strategies
| Strategy | Behavior |
|---|---|
weighted (default) | Distributes impressions based on weight values (50%, 30%, 20% in example above) |
round_robin | Equal rotation across all creatives (ignores weights) |
random | Uniform random selection (ignores weights) |
Weight Distribution
- Weights are relative values (don’t need to sum to 100)
- If no weights provided, creatives are distributed equally
- Weights are auto-normalized internally
Examples:
// 50%, 30%, 20% distribution
"weights": [50, 30, 20]
// Same as above - auto-normalized
"weights": [5, 3, 2]
// Equal distribution - weights ignored
"rotation_strategy": "round_robin"Validation Rules
XOR Validation: Campaign must use either creative (single) OR creatives (array) — not both, not neither.
// ❌ INVALID - Both fields provided
{
"creative": {...},
"creatives": [...]
}
// ❌ INVALID - Neither field provided
{
"targeting": {...}
}
// ✅ VALID - Single creative
{
"creative": {...}
}
// ✅ VALID - Multiple creatives
{
"creatives": [...]
}Testing Your Creatives
Use impression_trackers to monitor which creative variant is served:
{
"creative_id": "hero-variant",
"impression_trackers": [
"https://tracker.example.com/imp?campaign=summer&creative=hero"
]
}Praevis fires impression trackers when the creative is served, allowing you to track performance per variant.
Creative Performance
Track creative rotation distribution via your impression trackers. Compare:
- Win rate per creative_id
- Click-through rate per creative_id
- Conversion rate per creative_id
Adjust weights based on performance data to optimize campaign results.
Tip: Start with equal weights (33%, 33%, 34%) for true A/B/C testing, then shift traffic toward better performers.
Video / VAST
VAST versions
| Version | Support |
|---|---|
| VAST 2.0 | ✓ |
| VAST 2.0 Wrapper | ✓ |
| VAST 3.0 | ✓ |
| VAST 3.0 Wrapper | ✓ |
| VAST 4.0 | ✓ |
| VAST 4.2 | ✓ |
| VPAID | ❌ Not supported |
Video specs
| Parameter | Requirement |
|---|---|
| Container | MP4 |
| Codec | H.264 (AVC) — H.265 accepted on CTV |
| Audio codec | AAC |
| Bitrate | 500–8,000 kbps (2,000+ recommended for CTV) |
| Resolution | 1920×1080 (CTV), 1280×720, 640×480 |
| Frame rate | 24, 25, or 30 fps |
| Ad duration | 15s, 30s, 60s |
| Max file size | 50MB |
| HTTPS | ✓ Required |
These specs are recommendations for best compatibility across publishers. Praevis does not hard-reject creatives outside these ranges — but publishers’ video players may. MP4 container and H.264 codec are strongly recommended. Other resolutions and durations will work but may have lower fill rates.
CTV-specific requirements
- Min bitrate: 2,000 kbps (< 2,000 kbps may be rejected by CTV players)
- Skip: Praevis publishers control skip settings — respect
imp.video.skipin the bid request - MRAID: Not applicable on CTV
- VPAID: Not supported — use VAST 4.x with
<Verification>for viewability instead
Wrapper depth
Maximum VAST wrapper depth: 3 levels. Deeper chains may time out or be rejected by players.
Banner
Supported sizes
| Size | Format | Common use |
|---|---|---|
| 320×50 | Mobile banner | Mobile web / app |
| 300×250 | Medium rectangle | Web + mobile |
| 728×90 | Leaderboard | Desktop web |
| 970×250 | Billboard | Desktop web, high impact |
| 160×600 | Wide skyscraper | Desktop web sidebar |
| 300×600 | Half page | Desktop web sidebar |
| 320×480 | Mobile interstitial | Mobile app |
Banner specs
| Parameter | Requirement |
|---|---|
| Format | GIF, JPEG, PNG, HTML5 |
| Animation | Max 15s, max 3 loops |
| File size | Max 150KB initial load |
| HTTPS | ✓ Required |
| Click tracking | Praevis wraps click URLs |
Native (OpenRTB Native 1.2)
Required assets
| Asset | Spec |
|---|---|
| Title | Max 90 characters |
| Main image | Min 1200×627px, JPEG/PNG, <500KB |
| Icon image | Min 80×80px |
| Body text | Max 90 characters |
| CTA text | Max 15 characters |
| Sponsored label | ”Sponsored” or brand name |
Optional assets
- Rating (1–5 stars)
- Price
- Downloads count
MRAID
MRAID 3.0 is supported for mobile interstitials and rich media. Use only in imp.banner context where imp.banner.api includes 5 (MRAID 3.0).
Not applicable on CTV.
Blocked ad categories
The following categories are not accepted on the Praevis network:
| Category | Status |
|---|---|
| Adult / explicit content | ❌ Blocked |
| Gambling (unlicensed) | ❌ Blocked |
| Malware / deceptive installs | ❌ Blocked |
| Auto-play audio | ❌ Blocked |
| Firearms (direct sale) | ❌ Blocked |
| Counterfeit goods | ❌ Blocked |
| Political ads (without disclosure) | ❌ Blocked |
| Crypto / NFT (unregulated) | ❌ Blocked |
Publishers may also have category block lists — these are applied per publisher before the auction.
Audio
Audio specs
| Parameter | Requirement |
|---|---|
| Format | MP3, AAC, OGG, M4A |
| Bitrate | 128 kbps minimum |
| Sample rate | 44.1 kHz or 48 kHz |
| Duration | 15s, 30s, 60s |
| Max file size | 5 MB |
| HTTPS | ✓ Required |
Audio companion
Audio campaigns can include a companion banner (300x250 recommended) displayed alongside the audio player.
Automated Creative Validation
Praevis automatically validates all creatives when you create or update a campaign. Validation is non-blocking — warnings are returned in the API response but creatives still serve.
What we check
| Format | Checks | Warning codes |
|---|---|---|
| Video | MP4 container, H.264/H.265 codec, AAC audio required, file size | unsupported_container, unsupported_video_codec, no_audio_track, unsupported_audio_codec, large_file |
| Banner | File size (max 150 KB), dimensions match IAB standard sizes | banner_oversized, non_standard_size:WxH |
| Audio | File size (max 5 MB), codec detection, reject uncompressed | audio_oversized, unsupported_audio_format, uncompressed_audio |
| HTML5 | File size (max 2 MB) | html5_oversized |
Example API response with warnings
{
"id": "campaign-123",
"status": "active",
"creative_warnings": [
{ "creative_id": "hero-1", "warning": "no_audio_track" },
{ "creative_id": "banner-1", "warning": "non_standard_size:300x251" }
]
}SSAI note: For CTV/SSAI delivery via Broadpeak, video creatives must have an AAC audio track — even if silent. Creatives without audio will show the no_audio_track warning and may fail transcoding.
Creative CDN
All creatives are automatically cached to the Praevis CDN (courier.praevis.com) at 330+ edge locations. DSP origin URLs are never exposed to SSAI platforms or publishers.
- VAST wrappers are unwrapped and the underlying media file is cached
- Cached creatives serve from the nearest edge location
- CDN URLs are stable (content-addressed hashing)
Creative quality standards
Creatives must:
- Load within 1.5s on a standard connection
- Not redirect through more than 3 domains
- Not auto-play audio without user interaction (web)
- Not expand beyond declared dimensions
- Not trigger unexpected downloads
- Not use deceptive click patterns
Creatives that fail quality checks are blocked platform-wide. Demand sources (DSPs) with repeated violations may have their account reviewed.
Reporting creative performance
View creative-level stats via the API:
GET /api/demand/sources/{DSP_ID}/stats?period=7d&breakdown=creativeReturns win rate, impressions, and eCPM per creative ID (crid from your bid response).