Scheduled Content
What is Scheduled Content?
Scheduled content is a content unit (image, HTML, or React Native component) that is shown only during specified date ranges. Scheduling controls when content goes live, when it expires, and how multiple scheduled content items compete for the same display space.
Core Requirements for Visibility
Scheduled content is shown to users only when all of these are true:
- Published –
published === true - Has schedules – At least one schedule exists
- Current date in range – At least one schedule has
startDate ≤ now ≤ endDate - Platform match – Scheduled content targets the requesting platform (web or app device)
- Placement match – Scheduled content is assigned to the right slot/location for the current page or specification
Schedule Structure
Each scheduled content item has a schedules array. Each schedule entry defines a time window and ordering:
interface ScheduleType {
startDate: number | string // Unix timestamp or ISO string
endDate: number | string // Unix timestamp or ISO string
slot: number // Ordering priority (1-100)
}
| Field | Description |
|---|---|
| startDate | When the scheduled content becomes visible |
| endDate | When the scheduled content stops being visible |
| slot | Numeric order when multiple scheduled content items could show in the same space (lower = higher priority) |
Multiple Schedules
A scheduled content item can have multiple schedules. It is shown if any schedule includes the current date. Examples:
- Jan 1–7 and Jan 15–22 (two campaigns)
- Different slots for different weeks
- Recurring or one-off campaigns
Time Zone
Schedule dates are stored as Unix timestamps. The Visual Experience Engine uses a configurable time zone (e.g. ianaTimezone) for display and editing. The web script and app resolve "current date" using the configured time zone for correct schedule matching.
Scheduled Content State
From the client's perspective, scheduled content can be in one of these states:
| State | Meaning |
|---|---|
| live | Currently visible (now within a schedule) |
| scheduled | Future visibility (startDate > now) |
| expired | Past visibility (endDate < now) |
| unpublished | No schedules or not published |
| draft | Confirmation received but not published or saved for other users to see |
Web vs App: Differences
1. Placement & Targeting
| Aspect | Web | App |
|---|---|---|
| Placement IDs | webSlots: string IDs (e.g. "home-slot-1") | location: specification/slot identifier (e.g. "Shop") |
| Device targeting | devices.web | devices: iphone, ipad, android |
| Where it shows | <SlotPlaceholder> slots whose slotId matches webSlots | Specifications matching location |
2. URL / Location Matching
Web
locations: URL patterns (e.g./shop,/home, regex-like)- Current page URL is checked against
locationsand variant-levellocations - Optional
categoryandcustomerGroupfor further targeting
App
location: single specification/slot ID- App passes
locationin the API request to get scheduled content for that specification - No URL concept; placement is specification-based
3. Ordering
Web
bannerSortOrder:Record<slotId, number>per slot- Order is per slot ID (e.g.
{ "home-slot-1": 0, "header-slot": 1 })
App
slotin the active schedule (the one that includes the current date)- Scheduled content returned by the API is sorted by
slot(ascending) - Typically 1–100; lower = higher priority
4. Fetch APIs
| Web | App | |
|---|---|---|
| Endpoint | remote-webbanners | remote-banners |
| Key params | key, since, location, category, customerGroup, date | key, device, location, date, toDate, tomorrow |
| Filter by | URL/location, category, customerGroup | Device, optional location |
5. Schedule Logic (Shared)
Both web and app use the same schedule logic:
- Current time must fall within at least one
[startDate, endDate]range - Expired scheduled content (endDate < now) is not returned
- Optional preview mode can override the "current" date for scheduling
- Order is the order the Scheduled Content will appear in within a web slot (web only)
- Slot is the slot number that Scheduled Content will appear within the mobile app (app only)
Summary Table
| Concept | Web | App |
|---|---|---|
| Placement | webSlots (string IDs) | slot (specification ID) |
| Device filter | devices.web | devices: iphone/ipad/android |
| Location match | URL patterns | Specification ID in request |
| Ordering | bannerSortOrder per slot | schedule.slot (numeric) |
| Assets | HTML, responsive images | HTML for Web View with Deep Links |
| API | remote-webbanners | remote-banners |
Related Documentation
- Web: Basic Scheduling and Advanced Scheduling for how to create and manage schedules in the Visual Experience Engine.
- Mobile: Mobile basic scheduling for app scheduled content.
- Auto-archiving: Scheduled Content Auto-Archiver for how expired scheduled content is archived.
Key Takeaway
Scheduled content is visible only when:
- It is published
- The current date is within at least one schedule
- It targets the correct platform (web or app)
- It is placed in the right slot/location for the current page or specification
Web uses URL-based placement via webSlots and slots; apps use specification-based placement via location and devices. Both share the same schedule model (startDate, endDate, slot) for controlling when and in what order scheduled content appears.