Attribute Reference

Every request and response attribute across the REST and GraphQL surfaces, grouped by where it appears — including the shape of each floor/row and its nested media, overlays, and banner items.

Headers

Sent on every REST request.

AttributeTypePurpose / utilization
X-Tenant-Key*stringIdentifies which tenant/workspace to read content from. Also accepted as the tenantKey query param.
X-Api-Key*stringAuthorizes the request and determines the environment (dev_ / preprod_ / production prefix). Also accepted as the apiKey query param.
X-Geo-ZonestringCoarse geo zone used for zone-level content targeting on the page endpoint. Defaults to GLOBAL.

Get a page by slug — request params

AttributeTypePurpose / utilization
platformstringWhich platform variant of the page to resolve (desktop / mweb / app). Defaults to desktop.
limitintegerMax number of floors (content blocks) to return, for floor-level pagination. Max 50.
offsetintegerFloor index to start from when limit is set.
countrystringISO country code used for geo-targeted content variants.
regionstringSub-country region code, refines country-level targeting.
cohortstringAudience cohort id used to serve cohort-targeted floor variants.
tagsstring (csv)Comma-separated tag filter — only floors matching one of these tags are included.
previewAtISO-8601 datetimeTime-travel preview — resolves the page as it will look at a given past or future instant, honoring scheduled publishes.

Get a page by slug — response (top level)

AttributeTypePurpose / utilization
slugstringThe page's unique slug within the tenant/environment/platform.
titlestringHuman-readable page title, as set in the CMS.
statusstringLifecycle status of the resolved page, e.g. PUBLISHED.
updatedAtdatetimeLast time this page (or any of its floors) was modified.
contentarrayThe resolved floors (rows) for this page, in display order. See "Floor / row" below for the shape of each entry.
pagination.totalintegerTotal number of floors on the page, regardless of the requested limit.
pagination.limitintegerThe effective limit applied to this response.
pagination.offsetintegerThe effective offset applied to this response.
pagination.hasMorebooleanWhether more floors exist beyond this page's offset+limit window.

Floor / row — content[]

One entry per floor/row on the page.

AttributeTypePurpose / utilization
idstringUnique id of the resolved floor entry (the specific banner/widget instance active right now for this slot).
typestringFloor/component type — one of hero, announcement, slider, alternating-slider, paragraph, image-links, grid, scroller, timer. See "Floor type reference" below for what each one renders and which properties fields it uses.
statusstringStatus of the active entry occupying this floor, e.g. Active.
orderintegerVisual sort order of this floor on the page — lower renders first.
widthstringLayout width for this floor: full or contained.
paddingstringVertical padding preset for this floor: sm, md, lg, or xl.
widgetIdstringPresent only when the floor is backed by a reusable Widget catalog item (kind: widget) rather than an inline row — id of that widget. See "Widget-catalog properties" below for that alternate shape.
propertiesobjectThe floor's content payload, taken directly from what was authored in the page editor for this row. See "Floor properties" below.

Floor type reference — every type value

The row editor's actual type picker — this is the exhaustive list, including the HTML/rich-text type (paragraph).

AttributeTypePurpose / utilization
heroHero BannerSingle large banner with a CTA. Uses: title, subtitle, cta, mediaUrl, mediaType, styling (alignment, bgGradient, padding, height, bgPosition, backgroundEffect).
announcementAnnouncement BarSlim top-of-page message strip. Uses: title (or subtitle as fallback) as the message text, styling.announcementBg, styling.textColor.
sliderSliderAuto-rotating carousel of banners. Uses: banners[] (each item's headline/description/ctaLabel/url/image), styling (showArrows, showDots, autoplay, delayMs, animationEffect, backgroundEffect, height, bgPosition).
alternating-sliderAlternating SliderSplit-column slider alternating up/down per item. Uses: banners[], styling (columns, showDots, showArrows, autoplay, delayMs, height, bgPosition).
paragraphParagraph (Editor)Free-form rich-text/HTML block. Uses: title, which holds the sanitized HTML markup (also mirrored onto htmlContent). No media/banners.
image-linksImage w/ Multiple LinksImage(s) with clickable hotspot regions. Uses: banners[] the same as grid, but the point of this type is each banner's own imageMap (see "Banner item" below).
gridGrid BannerFixed-column grid of cards. Uses: banners[] (title/image per card, via name or headline fallback), styling (height, bgPosition).
scrollerRow ScrollerHorizontally scrollable row of cards. Uses: title (row heading), banners[].
timerCountdown TimerCountdown to a target date. Uses: title, targetDate, mediaUrl (backdrop image), styling.height.

Floor properties — content[].properties

This is the CMS row editor's saved config, copied through verbatim — field names match the page builder 1:1. Which fields are populated depends on the floor's type; unused fields are simply absent.

AttributeTypePurpose / utilization
titlestringRow heading text. On hero/timer/scroller this is a plain heading; on paragraph floors this instead holds the row's full sanitized HTML content.
subtitlestringRow subheading/supporting text, shown under title (hero, announcement fallback).
ctastringCall-to-action button label — hero floors only.
mediaUrlstringBackground/primary media URL — hero and timer (backdrop) floors.
mediaTypestringMedia kind for mediaUrl: Image, Video, or GIF — hero floors.
htmlContentstringMirror of title's HTML markup on paragraph floors (both are set to the same value by the editor).
targetDatestringCountdown target timestamp — timer floors only.
bannersarrayPresent on multi-item floor types (slider, alternating-slider, image-links, grid, scroller). One entry per card/slide — see "Banner item" below. Sliced to limitBanners.
limitBannersintegerMax number of items returned in banners[] for this floor (configured per-floor in the CMS, default 10).
stylingobjectVisual/behavior config for this floor — alignment, colors, autoplay, etc. Which fields apply depends on type — see "Styling object" below.
itemsarrayReserved/legacy field carried through from the editor; not actively populated by the current page builder.

Styling object — properties.styling

Per-floor visual/behavior config. Which fields apply depends on floor type — e.g. animationEffect only affects sliding-banner, columns only affects grid-banner/alternating-slider.

AttributeTypePurpose / utilization
alignmentstringText alignment for title/subtitle/cta: left, center, or right.
bgGradientstringCSS background gradient/color behind the floor.
paddingstringVertical padding preset: sm, md, lg, or xl (mirrors the floor-level padding field).
heightstringFixed CSS height for the floor (e.g. "480px").
bgPositionstringCSS background-position for the floor's media.
backgroundEffectstringAnimated backdrop effect: none, particles, or waves.
announcementBgstringBackground color — only relevant to announcement-bar floors.
textColorstringText color — only relevant to announcement-bar floors.
columnsintegerNumber of columns — only relevant to grid-banner / alternating-slider floors.
animationEffectstringSlide transition style for sliding-banner floors: slide, fade, zoom, flip, etc.
autoplaybooleanWhether the slider/row auto-advances.
delayMsintegerAutoplay delay between slides, in milliseconds.
showArrowsbooleanWhether prev/next arrow controls are shown.
showDotsbooleanWhether dot pagination indicators are shown.

Banner item — properties.banners[]

One entry per card/slide on multi-item floor types (grid-banner, row-scrollable, alternating-slider, media-grid). List is sliced to limitBanners. Each banner carries its own imageMap — hotspots are per-item, not floor-wide.

AttributeTypePurpose / utilization
idstringUnique id of this banner/card item within the floor.
namestringInternal name set in the CMS; used as a display fallback for grid/scrollable card titles when headline is empty.
headlinestringPrimary heading text for this item.
descriptionstringSupporting body text for this item.
ctaLabelstringCall-to-action button label for this item.
ctaStylestringVisual style preset for the CTA button, e.g. "Solid Primary".
urlstringDestination URL the item links to.
imagestringImage URL for this item.
sizestringDisplay-only file size label for the source asset (e.g. "240 KB"), set when the image was picked from the media library.
altTextstringAccessibility alt text for the item image.
statusstringItem status, e.g. draft or Active.
visibilitystringVisibility mode: One-time, Recurring, or Rules.
startDatestringWhen this item becomes visible, if visibility is Rules.
endDatestringWhen this item stops being visible, if visibility is Rules.
recurrenceobjectRecurring visibility schedule ({ days[], startTime, endTime }), present when visibility is Recurring.
imageMapobjectClickable hotspot regions over this item's own image — { enabled, hotspots[] }. See "Image map hotspot" below. Configured per-banner via the "Design Hotspots" tool.

Image map hotspot — banners[].imageMap.hotspots[]

Clickable regions overlaid on a single banner item's image, configured via the "Design Hotspots" tool in the page editor. Only present when that banner's imageMap.enabled is true.

AttributeTypePurpose / utilization
idstringUnique id of this hotspot.
altTextstringAccessibility label for the hotspot region.
shapestringHotspot shape: rect, oval, or polygon.
coords.xnumberLeft offset of the hotspot's bounding box, as a percentage (0–100) of the image width.
coords.ynumberTop offset of the hotspot's bounding box, as a percentage (0–100) of the image height.
coords.widthnumberHotspot bounding-box width as a percentage (0–100) of the image width.
coords.heightnumberHotspot bounding-box height as a percentage (0–100) of the image height.
pointsarrayPolygon vertex points ({x, y} percentages), only present when shape is polygon.
action.typestringWhat tapping the hotspot does: link (open a URL) or deeplink (open an in-app route).
action.urlstringTarget URL when action.type is link.
action.deeplinkstringTarget deeplink when action.type is deeplink.

Widget-catalog properties — alternate shape

Only relevant when a floor's widgetId is set (kind: widget) — the floor references a reusable Widget catalog entry instead of an inline row, and properties takes this shape instead of the inline one above.

AttributeTypePurpose / utilization
mediaobjectPrimary media object: { type, url, posterUrl, altText, videoOptions }.
media.typestringMedia kind: image, video, or gif.
media.urlstringDirect URL to the media asset.
media.posterUrlstringPoster/thumbnail image shown before video playback starts.
media.altTextstringAccessibility alt text for the media.
media.videoOptions.*booleanautoplay / loop / muted / controls / playsinline — only present when media.type is video.
textOverlaysarrayText/CTA layers positioned over the media — { id, text, type, position: {x,y}, style }. Omitted if none are configured.
imageMaparrayHotspot list directly on the widget's media (same shape as "Image map hotspot" above). Omitted if disabled.

List pages

Request params

AttributeTypePurpose / utilization
platformstringFilter the list down to a single platform variant. Omit to return all platforms.
pageintegerZero-based page index. Defaults to 0.
sizeintegerPage size. Defaults to 20, max 100.

Response fields

AttributeTypePurpose / utilization
dataarrayPage summaries matching the list query.
data[].slugstringSlug of the listed page — pass to the page-by-slug endpoint to fetch full content.
data[].titlestringPage title.
data[].platformstringPlatform variant this list entry belongs to.
data[].updatedAtdatetimeLast modification time of this page.
totalCountintegerTotal number of pages matching the filter, across all result pages.
pageintegerThe page index this response represents.
sizeintegerThe page size used for this response.

GraphQL — /graphql

Arguments and top-level result fields for the page/pages queries. contentJson decodes to the same floor shape documented above.

page — arguments

AttributeTypePurpose / utilization
slug*String!Slug of the page to resolve.
tenantKey*String!Tenant/workspace identifier — GraphQL passes this as a query argument, not a header.
apiKey*String!API key authorizing the request; its prefix also selects the environment.
platformStringPlatform variant to resolve. Defaults to desktop.
geoZoneStringGeo zone for zone-level targeting. Defaults to GLOBAL.
limitIntMax number of floors to return (floor-level pagination).
offsetIntFloor index to start from when limit is set.

page — result fields

AttributeTypePurpose / utilization
slugStringResolved page's slug.
titleStringPage title.
statusStringLifecycle status, e.g. PUBLISHED.
updatedAtStringLast-modified timestamp.
contentJsonStringResolved floor content, JSON-encoded as a string since floor shape varies per block type — decode client-side.
totalIntTotal floor count on the page.
limitIntEffective limit applied.
offsetIntEffective offset applied.
hasMoreBooleanWhether more floors exist beyond this window.

pages — arguments

AttributeTypePurpose / utilization
tenantKey*String!Tenant/workspace identifier.
apiKey*String!API key authorizing the request and selecting the environment.
platformStringFilter to a single platform variant. Omit for all platforms.
pageIntZero-based page index. Defaults to 0.
sizeIntPage size. Defaults to 20, max 100.

pages — result fields

AttributeTypePurpose / utilization
data[PublicPageListItem]Page summaries matching the query.
data[].slugStringSlug of the listed page.
data[].titleStringPage title.
data[].platformStringPlatform variant.
data[].updatedAtStringLast-modified timestamp.
totalCountIntTotal number of matching pages across all result pages.
pageIntThe page index this response represents.
sizeIntThe page size used for this response.