Skip to main content

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:

  1. Publishedpublished === true
  2. Has schedules – At least one schedule exists
  3. Current date in range – At least one schedule has startDate ≤ now ≤ endDate
  4. Platform match – Scheduled content targets the requesting platform (web or app device)
  5. 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)
}
FieldDescription
startDateWhen the scheduled content becomes visible
endDateWhen the scheduled content stops being visible
slotNumeric 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:

StateMeaning
liveCurrently visible (now within a schedule)
scheduledFuture visibility (startDate > now)
expiredPast visibility (endDate < now)
unpublishedNo schedules or not published
draftConfirmation received but not published or saved for other users to see

Web vs App: Differences

1. Placement & Targeting

AspectWebApp
Placement IDswebSlots: string IDs (e.g. "home-slot-1")location: specification/slot identifier (e.g. "Shop")
Device targetingdevices.webdevices: iphone, ipad, android
Where it shows<SlotPlaceholder> slots whose slotId matches webSlotsSpecifications matching location

2. URL / Location Matching

Web

  • locations: URL patterns (e.g. /shop, /home, regex-like)
  • Current page URL is checked against locations and variant-level locations
  • Optional category and customerGroup for further targeting

App

  • location: single specification/slot ID
  • App passes location in 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

  • slot in 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

WebApp
Endpointremote-webbannersremote-banners
Key paramskey, since, location, category, customerGroup, datekey, device, location, date, toDate, tomorrow
Filter byURL/location, category, customerGroupDevice, 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

ConceptWebApp
PlacementwebSlots (string IDs)slot (specification ID)
Device filterdevices.webdevices: iphone/ipad/android
Location matchURL patternsSpecification ID in request
OrderingbannerSortOrder per slotschedule.slot (numeric)
AssetsHTML, responsive imagesHTML for Web View with Deep Links
APIremote-webbannersremote-banners


Key Takeaway

Scheduled content is visible only when:

  1. It is published
  2. The current date is within at least one schedule
  3. It targets the correct platform (web or app)
  4. 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.