Changelog
New updates and improvements
All notable changes to the Admoai Decision Engine API will be documented in this file. The format is based on Keep a Changelog
v2025-11-01
Destination Targeting Support
Added a Ad new segmentation filter, allowing to filter ads based on the destination of the user.
Three delivery modes for video ads:
json: Full creative content including video URL and tracking beacons (custom players)vast_tag: Signed URL to fetch VAST 4.2 XML from renderer service (standard players)vast_xml: Inline base64-encoded VAST 4.2 XML document (offline/air-gapped)
Six video milestone tracking events:
start: Video playback beginsfirst_quartile: 25% of duration reachedmidpoint: 50% of duration reachedthird_quartile: 75% of duration reachedcomplete: Video playback completesskip: User skips the video
Video metadata in response:
duration: Video duration in secondsaspect_ratio: Video aspect ratio (e.g., "16:9")is_skippable: Whether the video can be skippedskip_offset_seconds: When skip button becomes available
VAST 4.2 compliance:
IAB-compliant VAST XML generation
Support for Linear video ads
VideoClicks with ClickTracking and ClickThrough
Companion ads support
Admoai-specific extensions (metadata, advertiser info)
Skip button configuration:
HH:MM:SS format (e.g., "00:00:05")
Percentage format (e.g., "25%")
VAST tag URL signing:
HMAC-SHA256 signature for security
TTL-based expiration
Tamper-proof payload encoding
New Request Parameters
placements[].format: Ad format filter ("native","video")
New Response Fields (Video Ads Only)
delivery: Video delivery mode ("json","vast_tag","vast_xml")vast: VAST delivery objectvast.tagUrl: VAST tag URL (vast_tag mode)vast.xmlBase64: Base64-encoded VAST XML (vast_xml mode)tracking.videoEvents: Array of video milestone tracking URLsmetadata.format: Ad format ("video")metadata.duration: Video duration (seconds)metadata.aspect_ratio: Video aspect ratiometadata.is_skippable: Skip availabilitymetadata.skip_offset_seconds: Skip offset (seconds)
Open Measurement (OMID) Support
Third-party Verification: Added support for Open Measurement SDK (OMID) to enable viewability and measurement verification via external providers (e.g., IAS, DoubleVerify, Moat).
Standardized Signal Delivery: Support for OMID verification resources across both Native and Video formats.
New Response Fields
verificationScriptResources: Array of verification objects includingvendorKey,scriptUrl, andverificationParameters. (Included in JSON for Native ads and Video JSON mode; for other video modes, resources are embedded within the VAST XML).
Tracking Behavior (Video Ads)
VAST Tag/XML delivery modes: Tracking beacons (
impressions,clicks,videoEvents) are empty arrays in JSON response; tracking lives in VAST XML insteadPlayer click event: Excluded from JSON
tracking.clicksfor VAST modes (included in VAST XML<VideoClicks>)
Response Structure
Video ads always include
deliveryfieldVideo ads always include
vastfield (empty object for JSON delivery)Native ads omit
deliveryandvastfields (backward compatible)
Security
VAST tag URL signing: HMAC-SHA256 signature prevents tampering
Timestamp validation: VAST tag URLs expire after configurable TTL
Tracking token encryption: Prevents tracking URL manipulation
Fixed
Improved timezone inference from IP geolocation
Enhanced error messages for invalid geo-targeting
Fixed edge case in custom targeting CEL expression evaluation
Performance
Optimized video metadata extraction
Reduced VAST XML generation overhead with pre-computed templates
Improved tracking URL generation performance (batch processing)
Documentation
Complete API reference for v2025-11-01
Video ads implementation guide with code examples (JavaScript, Swift, Kotlin)
VAST 4.2 compliance documentation
v2025-01-01
Core Features
Native ad support: Text, image, and rich media creatives
Template system: Flexible ad template configuration
Content localization: Language-aware content delivery via
Accept-LanguageheaderClick and impression tracking: Encrypted tracking tokens with expiration
Targeting Capabilities
Geo-targeting: Country, city, region targeting using GeoNames database
Location targeting: GPS coordinate-based targeting with radius matching
Custom targeting: CEL expression-based custom attribute targeting
Dayparting: Time-of-day and day-of-week ad scheduling
Ad Selection
Priority-based selection: Multi-tier ad prioritization by weight
Weighted random selection: Probabilistic ad rotation based on weights
Frequency capping: Per-user impression limits
GDPR compliance: EU user detection and consent-based frequency capping
API Endpoints
POST /v1/decision: Request ad decision for placementsGET /v1/tracking: Track ad events (impression, click, custom)
Request Parameters
placements[]: Array of placement requestskey: Placement identifier (required)count: Number of ads to return (1-10, default: 1)advertiserId: Filter by advertiser public IDtemplateId: Filter by template public IDtargeting: Targeting parametersgeo: GeoName IDs arraylocation: Latitude/longitude pairs with radiuscustom: Custom attribute key-value pairsuser: User contextid: User identifier (for frequency capping)ip: IP address (for geo-inference)timezone: IANA timezoneconsent.gdpr: GDPR consent statusdevice: Device context (OS, model, manufacturer, etc.)app: Application context (name, version, bundle ID)
Response Structure
success: Boolean success indicatordata: Array of placement decisionsplacement: Placement keycreatives: Array of creative objectscontents: Creative content fieldsadvertiser: Advertiser informationtemplate: Template configurationtracking: Tracking URLsmetadata: Ad metadata
errors: Array of error objectswarnings: Array of warning objects
Error Handling
Validation errors: 422 Unprocessable Entity with detailed error codes
Structured error responses: Error code, message, and contextual details
Warning system: Non-fatal warnings for degraded experience (e.g., missing language)
Version System
Header-based versioning:
X-Decision-Versionheader for API version selectionDefault version: Falls back to 2025-01-01 if no version header provided
Security
Tracking token encryption: AES-256-GCM encryption for tracking payloads
Token expiration: Configurable TTL (default: 3600 seconds)
Last updated

