Content schema reference¶
Generated from packages/schema/json/*.schema.json by site/scripts/gen_schema_ref.py on every build.
Do not edit by hand. The JSON files themselves come from pnpm schema:export and are committed in the repo.
Paths use [] for array items, {key} for map entries and {kind=value} where a union is split by a literal field.
The Zod source in packages/schema/src is the authority; this page is a flat view of its exported JSON Schema.
ContentItem¶
Every authored item. A union of nine kinds, discriminated by kind.
ContentItem: process¶
| Path | Type | Required | Constraints |
|---|---|---|---|
id |
string | yes | min length 1 |
appKey |
string | yes | |
name |
string | yes | |
description |
string | ||
status |
draft | published | archived |
yes | |
version |
integer | yes | min 0 |
schemaVersion |
2 |
yes | |
match |
object | yes | |
match.pathPatterns |
array of string | yes | |
match.form |
Locator (see below) | ||
match.conditions |
array of object | ||
match.conditions[]{kind=element-exists}.kind |
"element-exists" |
yes | |
match.conditions[]{kind=element-exists}.locator |
Locator (see below) | yes | |
match.conditions[]{kind=element-exists}.negate |
boolean | ||
match.conditions[]{kind=element-text}.kind |
"element-text" |
yes | |
match.conditions[]{kind=element-text}.locator |
Locator (see below) | yes | |
match.conditions[]{kind=element-text}.op |
equals | contains | matches |
yes | |
match.conditions[]{kind=element-text}.value |
string | yes | |
match.conditions[]{kind=field-value}.kind |
"field-value" |
yes | |
match.conditions[]{kind=field-value}.locator |
Locator (see below) | yes | |
match.conditions[]{kind=field-value}.op |
equals | in | empty | not-empty |
yes | |
match.conditions[]{kind=field-value}.value |
string or array of string | ||
match.conditions[]{kind=url}.kind |
"url" |
yes | |
match.conditions[]{kind=url}.pathPattern |
string | yes | |
match.conditions[]{kind=segment}.kind |
"segment" |
yes | |
match.conditions[]{kind=segment}.segmentId |
string | yes | min length 1 |
match.conditions[]{kind=content-completed}.kind |
"content-completed" |
yes | |
match.conditions[]{kind=content-completed}.contentId |
string | yes | min length 1 |
match.conditions[].kind |
all | any |
yes | |
match.conditions[].of |
array of object | yes | |
match.conditions[].of[]{kind=element-exists}.kind |
"element-exists" |
yes | |
match.conditions[].of[]{kind=element-exists}.locator |
Locator (see below) | yes | |
match.conditions[].of[]{kind=element-exists}.negate |
boolean | ||
match.conditions[].of[]{kind=element-text}.kind |
"element-text" |
yes | |
match.conditions[].of[]{kind=element-text}.locator |
Locator (see below) | yes | |
match.conditions[].of[]{kind=element-text}.op |
equals | contains | matches |
yes | |
match.conditions[].of[]{kind=element-text}.value |
string | yes | |
match.conditions[].of[]{kind=field-value}.kind |
"field-value" |
yes | |
match.conditions[].of[]{kind=field-value}.locator |
Locator (see below) | yes | |
match.conditions[].of[]{kind=field-value}.op |
equals | in | empty | not-empty |
yes | |
match.conditions[].of[]{kind=field-value}.value |
string or array of string | ||
match.conditions[].of[]{kind=url}.kind |
"url" |
yes | |
match.conditions[].of[]{kind=url}.pathPattern |
string | yes | |
match.conditions[].of[]{kind=segment}.kind |
"segment" |
yes | |
match.conditions[].of[]{kind=segment}.segmentId |
string | yes | min length 1 |
match.conditions[].of[]{kind=content-completed}.kind |
"content-completed" |
yes | |
match.conditions[].of[]{kind=content-completed}.contentId |
string | yes | min length 1 |
match.conditions[].of[].kind |
all | any |
yes | |
match.conditions[].of[].of |
array of object | yes | |
segments |
array of string | yes | |
schedule |
object | ||
schedule.from |
string | ||
schedule.to |
string | ||
tags |
array of string | yes | |
locale |
string | yes | |
translations |
map of map of string | ||
restricted |
boolean | ||
createdBy |
string | yes | |
updatedBy |
string | yes | |
createdAt |
string | yes | |
updatedAt |
string | yes | |
publishedAt |
string | ||
kind |
"process" |
yes | |
trigger |
object | yes | |
trigger{type=page-load}.type |
"page-load" |
yes | |
trigger{type=page-load}.delayMs |
integer | min 0 |
|
trigger{type=element-visible}.type |
"element-visible" |
yes | |
trigger{type=element-visible}.locator |
Locator (see below) | yes | |
trigger{type=element-click}.type |
"element-click" |
yes | |
trigger{type=element-click}.locator |
Locator (see below) | yes | |
trigger{type=launcher}.type |
"launcher" |
yes | |
trigger{type=resource-center}.type |
"resource-center" |
yes | |
trigger{type=url-param}.type |
"url-param" |
yes | |
trigger{type=url-param}.name |
string | yes | |
trigger{type=url-param}.value |
string | ||
trigger{type=idle}.type |
"idle" |
yes | |
trigger{type=idle}.seconds |
number | yes | |
trigger{type=manual}.type |
"manual" |
yes | |
frequency |
once | once-per-version | every-visit | until-completed | manual-only |
yes | |
stages |
array of object | yes | |
stages[].id |
string | yes | min length 1 |
stages[].label |
string | yes | |
stages[].walkthroughId |
string | yes | min length 1 |
stages[].enterWhen |
object | yes | |
stages[].enterWhen.pathPatterns |
array of string | yes | |
stages[].enterWhen.form |
Locator (see below) | ||
stages[].enterWhen.conditions |
array of object | ||
stages[].enterWhen.conditions[]{kind=element-exists}.kind |
"element-exists" |
yes | |
stages[].enterWhen.conditions[]{kind=element-exists}.locator |
Locator (see below) | yes | |
stages[].enterWhen.conditions[]{kind=element-exists}.negate |
boolean | ||
stages[].enterWhen.conditions[]{kind=element-text}.kind |
"element-text" |
yes | |
stages[].enterWhen.conditions[]{kind=element-text}.locator |
Locator (see below) | yes | |
stages[].enterWhen.conditions[]{kind=element-text}.op |
equals | contains | matches |
yes | |
stages[].enterWhen.conditions[]{kind=element-text}.value |
string | yes | |
stages[].enterWhen.conditions[]{kind=field-value}.kind |
"field-value" |
yes | |
stages[].enterWhen.conditions[]{kind=field-value}.locator |
Locator (see below) | yes | |
stages[].enterWhen.conditions[]{kind=field-value}.op |
equals | in | empty | not-empty |
yes | |
stages[].enterWhen.conditions[]{kind=field-value}.value |
string or array of string | ||
stages[].enterWhen.conditions[]{kind=url}.kind |
"url" |
yes | |
stages[].enterWhen.conditions[]{kind=url}.pathPattern |
string | yes | |
stages[].enterWhen.conditions[]{kind=segment}.kind |
"segment" |
yes | |
stages[].enterWhen.conditions[]{kind=segment}.segmentId |
string | yes | min length 1 |
stages[].enterWhen.conditions[]{kind=content-completed}.kind |
"content-completed" |
yes | |
stages[].enterWhen.conditions[]{kind=content-completed}.contentId |
string | yes | min length 1 |
stages[].enterWhen.conditions[].kind |
all | any |
yes | |
stages[].enterWhen.conditions[].of |
array of object | yes | |
stages[].enterWhen.conditions[].of[]{kind=element-exists}.kind |
"element-exists" |
yes | |
stages[].enterWhen.conditions[].of[]{kind=element-exists}.locator |
Locator (see below) | yes | |
stages[].enterWhen.conditions[].of[]{kind=element-exists}.negate |
boolean | ||
stages[].enterWhen.conditions[].of[]{kind=element-text}.kind |
"element-text" |
yes | |
stages[].enterWhen.conditions[].of[]{kind=element-text}.locator |
Locator (see below) | yes | |
stages[].enterWhen.conditions[].of[]{kind=element-text}.op |
equals | contains | matches |
yes | |
stages[].enterWhen.conditions[].of[]{kind=element-text}.value |
string | yes | |
stages[].enterWhen.conditions[].of[]{kind=field-value}.kind |
"field-value" |
yes | |
stages[].enterWhen.conditions[].of[]{kind=field-value}.locator |
Locator (see below) | yes | |
stages[].enterWhen.conditions[].of[]{kind=field-value}.op |
equals | in | empty | not-empty |
yes | |
stages[].enterWhen.conditions[].of[]{kind=field-value}.value |
string or array of string | ||
stages[].enterWhen.conditions[].of[]{kind=url}.kind |
"url" |
yes | |
stages[].enterWhen.conditions[].of[]{kind=url}.pathPattern |
string | yes | |
stages[].enterWhen.conditions[].of[]{kind=segment}.kind |
"segment" |
yes | |
stages[].enterWhen.conditions[].of[]{kind=segment}.segmentId |
string | yes | min length 1 |
stages[].enterWhen.conditions[].of[]{kind=content-completed}.kind |
"content-completed" |
yes | |
stages[].enterWhen.conditions[].of[]{kind=content-completed}.contentId |
string | yes | min length 1 |
stages[].enterWhen.conditions[].of[].kind |
all | any |
yes | |
stages[].enterWhen.conditions[].of[].of |
array of object | yes | |
stages[].next |
object | yes | |
stages[].next{kind=sequential}.kind |
"sequential" |
yes | |
stages[].next{kind=branch}.kind |
"branch" |
yes | |
stages[].next{kind=branch}.cases |
array of object | yes | |
stages[].next{kind=branch}.cases[].when |
object | yes | |
stages[].next{kind=branch}.cases[].when{kind=element-exists}.kind |
"element-exists" |
yes | |
stages[].next{kind=branch}.cases[].when{kind=element-exists}.locator |
Locator (see below) | yes | |
stages[].next{kind=branch}.cases[].when{kind=element-exists}.negate |
boolean | ||
stages[].next{kind=branch}.cases[].when{kind=element-text}.kind |
"element-text" |
yes | |
stages[].next{kind=branch}.cases[].when{kind=element-text}.locator |
Locator (see below) | yes | |
stages[].next{kind=branch}.cases[].when{kind=element-text}.op |
equals | contains | matches |
yes | |
stages[].next{kind=branch}.cases[].when{kind=element-text}.value |
string | yes | |
stages[].next{kind=branch}.cases[].when{kind=field-value}.kind |
"field-value" |
yes | |
stages[].next{kind=branch}.cases[].when{kind=field-value}.locator |
Locator (see below) | yes | |
stages[].next{kind=branch}.cases[].when{kind=field-value}.op |
equals | in | empty | not-empty |
yes | |
stages[].next{kind=branch}.cases[].when{kind=field-value}.value |
string or array of string | ||
stages[].next{kind=branch}.cases[].when{kind=url}.kind |
"url" |
yes | |
stages[].next{kind=branch}.cases[].when{kind=url}.pathPattern |
string | yes | |
stages[].next{kind=branch}.cases[].when{kind=segment}.kind |
"segment" |
yes | |
stages[].next{kind=branch}.cases[].when{kind=segment}.segmentId |
string | yes | min length 1 |
stages[].next{kind=branch}.cases[].when{kind=content-completed}.kind |
"content-completed" |
yes | |
stages[].next{kind=branch}.cases[].when{kind=content-completed}.contentId |
string | yes | min length 1 |
stages[].next{kind=branch}.cases[].when.kind |
all | any |
yes | |
stages[].next{kind=branch}.cases[].when.of |
array of object | yes | |
stages[].next{kind=branch}.cases[].goTo |
string | yes | min length 1 |
stages[].next{kind=branch}.otherwise |
string | min length 1 |
|
stages[].next{kind=go-to}.kind |
"go-to" |
yes | |
stages[].next{kind=go-to}.target |
string | yes | min length 1 |
stages[].next{kind=end}.kind |
"end" |
yes | |
stages[].optional |
boolean | ||
keywords |
array of string | ||
startStageId |
string | yes | |
goal |
object | yes | |
goal{kind=element-appears}.kind |
"element-appears" |
yes | |
goal{kind=element-appears}.locator |
Locator (see below) | yes | |
goal{kind=url-matches}.kind |
"url-matches" |
yes | |
goal{kind=url-matches}.pathPattern |
string | yes | |
goal{kind=last-step-completed}.kind |
"last-step-completed" |
yes | |
showStepper |
boolean | yes | |
resumeDays |
integer | yes |
ContentItem: walkthrough¶
| Path | Type | Required | Constraints |
|---|---|---|---|
id |
string | yes | min length 1 |
appKey |
string | yes | |
name |
string | yes | |
description |
string | ||
status |
draft | published | archived |
yes | |
version |
integer | yes | min 0 |
schemaVersion |
2 |
yes | |
match |
object | yes | |
match.pathPatterns |
array of string | yes | |
match.form |
Locator (see below) | ||
match.conditions |
array of object | ||
match.conditions[]{kind=element-exists}.kind |
"element-exists" |
yes | |
match.conditions[]{kind=element-exists}.locator |
Locator (see below) | yes | |
match.conditions[]{kind=element-exists}.negate |
boolean | ||
match.conditions[]{kind=element-text}.kind |
"element-text" |
yes | |
match.conditions[]{kind=element-text}.locator |
Locator (see below) | yes | |
match.conditions[]{kind=element-text}.op |
equals | contains | matches |
yes | |
match.conditions[]{kind=element-text}.value |
string | yes | |
match.conditions[]{kind=field-value}.kind |
"field-value" |
yes | |
match.conditions[]{kind=field-value}.locator |
Locator (see below) | yes | |
match.conditions[]{kind=field-value}.op |
equals | in | empty | not-empty |
yes | |
match.conditions[]{kind=field-value}.value |
string or array of string | ||
match.conditions[]{kind=url}.kind |
"url" |
yes | |
match.conditions[]{kind=url}.pathPattern |
string | yes | |
match.conditions[]{kind=segment}.kind |
"segment" |
yes | |
match.conditions[]{kind=segment}.segmentId |
string | yes | min length 1 |
match.conditions[]{kind=content-completed}.kind |
"content-completed" |
yes | |
match.conditions[]{kind=content-completed}.contentId |
string | yes | min length 1 |
match.conditions[].kind |
all | any |
yes | |
match.conditions[].of |
array of object | yes | |
match.conditions[].of[]{kind=element-exists}.kind |
"element-exists" |
yes | |
match.conditions[].of[]{kind=element-exists}.locator |
Locator (see below) | yes | |
match.conditions[].of[]{kind=element-exists}.negate |
boolean | ||
match.conditions[].of[]{kind=element-text}.kind |
"element-text" |
yes | |
match.conditions[].of[]{kind=element-text}.locator |
Locator (see below) | yes | |
match.conditions[].of[]{kind=element-text}.op |
equals | contains | matches |
yes | |
match.conditions[].of[]{kind=element-text}.value |
string | yes | |
match.conditions[].of[]{kind=field-value}.kind |
"field-value" |
yes | |
match.conditions[].of[]{kind=field-value}.locator |
Locator (see below) | yes | |
match.conditions[].of[]{kind=field-value}.op |
equals | in | empty | not-empty |
yes | |
match.conditions[].of[]{kind=field-value}.value |
string or array of string | ||
match.conditions[].of[]{kind=url}.kind |
"url" |
yes | |
match.conditions[].of[]{kind=url}.pathPattern |
string | yes | |
match.conditions[].of[]{kind=segment}.kind |
"segment" |
yes | |
match.conditions[].of[]{kind=segment}.segmentId |
string | yes | min length 1 |
match.conditions[].of[]{kind=content-completed}.kind |
"content-completed" |
yes | |
match.conditions[].of[]{kind=content-completed}.contentId |
string | yes | min length 1 |
match.conditions[].of[].kind |
all | any |
yes | |
match.conditions[].of[].of |
array of object | yes | |
segments |
array of string | yes | |
schedule |
object | ||
schedule.from |
string | ||
schedule.to |
string | ||
tags |
array of string | yes | |
locale |
string | yes | |
translations |
map of map of string | ||
restricted |
boolean | ||
createdBy |
string | yes | |
updatedBy |
string | yes | |
createdAt |
string | yes | |
updatedAt |
string | yes | |
publishedAt |
string | ||
kind |
"walkthrough" |
yes | |
trigger |
object | yes | |
trigger{type=page-load}.type |
"page-load" |
yes | |
trigger{type=page-load}.delayMs |
integer | min 0 |
|
trigger{type=element-visible}.type |
"element-visible" |
yes | |
trigger{type=element-visible}.locator |
Locator (see below) | yes | |
trigger{type=element-click}.type |
"element-click" |
yes | |
trigger{type=element-click}.locator |
Locator (see below) | yes | |
trigger{type=launcher}.type |
"launcher" |
yes | |
trigger{type=resource-center}.type |
"resource-center" |
yes | |
trigger{type=url-param}.type |
"url-param" |
yes | |
trigger{type=url-param}.name |
string | yes | |
trigger{type=url-param}.value |
string | ||
trigger{type=idle}.type |
"idle" |
yes | |
trigger{type=idle}.seconds |
number | yes | |
trigger{type=manual}.type |
"manual" |
yes | |
frequency |
once | once-per-version | every-visit | until-completed | manual-only |
yes | |
steps |
array of object | yes | |
steps[].id |
string | yes | min length 1 |
steps[].anchor |
Locator (see below) or null | yes | |
steps[].page |
object | ||
steps[].page.pathPatterns |
array of string | yes | |
steps[].page.form |
Locator (see below) | ||
steps[].page.conditions |
array of object | ||
steps[].page.conditions[]{kind=element-exists}.kind |
"element-exists" |
yes | |
steps[].page.conditions[]{kind=element-exists}.locator |
Locator (see below) | yes | |
steps[].page.conditions[]{kind=element-exists}.negate |
boolean | ||
steps[].page.conditions[]{kind=element-text}.kind |
"element-text" |
yes | |
steps[].page.conditions[]{kind=element-text}.locator |
Locator (see below) | yes | |
steps[].page.conditions[]{kind=element-text}.op |
equals | contains | matches |
yes | |
steps[].page.conditions[]{kind=element-text}.value |
string | yes | |
steps[].page.conditions[]{kind=field-value}.kind |
"field-value" |
yes | |
steps[].page.conditions[]{kind=field-value}.locator |
Locator (see below) | yes | |
steps[].page.conditions[]{kind=field-value}.op |
equals | in | empty | not-empty |
yes | |
steps[].page.conditions[]{kind=field-value}.value |
string or array of string | ||
steps[].page.conditions[]{kind=url}.kind |
"url" |
yes | |
steps[].page.conditions[]{kind=url}.pathPattern |
string | yes | |
steps[].page.conditions[]{kind=segment}.kind |
"segment" |
yes | |
steps[].page.conditions[]{kind=segment}.segmentId |
string | yes | min length 1 |
steps[].page.conditions[]{kind=content-completed}.kind |
"content-completed" |
yes | |
steps[].page.conditions[]{kind=content-completed}.contentId |
string | yes | min length 1 |
steps[].page.conditions[].kind |
all | any |
yes | |
steps[].page.conditions[].of |
array of object | yes | |
steps[].page.conditions[].of[]{kind=element-exists}.kind |
"element-exists" |
yes | |
steps[].page.conditions[].of[]{kind=element-exists}.locator |
Locator (see below) | yes | |
steps[].page.conditions[].of[]{kind=element-exists}.negate |
boolean | ||
steps[].page.conditions[].of[]{kind=element-text}.kind |
"element-text" |
yes | |
steps[].page.conditions[].of[]{kind=element-text}.locator |
Locator (see below) | yes | |
steps[].page.conditions[].of[]{kind=element-text}.op |
equals | contains | matches |
yes | |
steps[].page.conditions[].of[]{kind=element-text}.value |
string | yes | |
steps[].page.conditions[].of[]{kind=field-value}.kind |
"field-value" |
yes | |
steps[].page.conditions[].of[]{kind=field-value}.locator |
Locator (see below) | yes | |
steps[].page.conditions[].of[]{kind=field-value}.op |
equals | in | empty | not-empty |
yes | |
steps[].page.conditions[].of[]{kind=field-value}.value |
string or array of string | ||
steps[].page.conditions[].of[]{kind=url}.kind |
"url" |
yes | |
steps[].page.conditions[].of[]{kind=url}.pathPattern |
string | yes | |
steps[].page.conditions[].of[]{kind=segment}.kind |
"segment" |
yes | |
steps[].page.conditions[].of[]{kind=segment}.segmentId |
string | yes | min length 1 |
steps[].page.conditions[].of[]{kind=content-completed}.kind |
"content-completed" |
yes | |
steps[].page.conditions[].of[]{kind=content-completed}.contentId |
string | yes | min length 1 |
steps[].page.conditions[].of[].kind |
all | any |
yes | |
steps[].page.conditions[].of[].of |
array of object | yes | |
steps[].display |
object | yes | |
steps[].display{type=tooltip}.type |
"tooltip" |
yes | |
steps[].display{type=tooltip}.placement |
auto | top | bottom | left | right | top-start | top-end | bottom-start | bottom-end |
yes | |
steps[].display{type=hotspot}.type |
"hotspot" |
yes | |
steps[].display{type=hotspot}.placement |
auto | top | bottom | left | right | top-start | top-end | bottom-start | bottom-end |
yes | |
steps[].display{type=inline-hint}.type |
"inline-hint" |
yes | |
steps[].display{type=inline-hint}.position |
auto | below | above | after-end | before-start |
default auto |
|
steps[].display{type=modal}.type |
"modal" |
yes | |
steps[].display{type=modal}.size |
sm | md | lg |
yes | |
steps[].display{type=slideout}.type |
"slideout" |
yes | |
steps[].display{type=slideout}.side |
right | left |
yes | |
steps[].focus |
none | spotlight | block-outside | modal |
yes | |
steps[].content |
object | yes | |
steps[].content.title |
string | ||
steps[].content.bodyMarkdown |
string | yes | |
steps[].content.media |
object | ||
steps[].content.media{kind=image}.kind |
"image" |
yes | |
steps[].content.media{kind=image}.asset |
object | yes | |
steps[].content.media{kind=image}.asset.sha256 |
string | yes | pattern ^[0-9a-f]{64}$ |
steps[].content.media{kind=image}.asset.mime |
string | yes | |
steps[].content.media{kind=image}.asset.bytes |
integer | yes | min 0 |
steps[].content.media{kind=image}.alt |
string | yes | |
steps[].content.media{kind=video}.kind |
"video" |
yes | |
steps[].content.media{kind=video}.url |
string | yes | |
steps[].content.media{kind=video}.provider |
stream | youtube | vimeo | mp4 |
yes | |
steps[].content.learnMore |
array of string | ||
steps[].buttons |
array of object | yes | max items 3 |
steps[].buttons[].label |
string | yes | |
steps[].buttons[].style |
primary | secondary | link |
yes | |
steps[].buttons[].action |
object | yes | |
steps[].buttons[].action{do=next}.do |
"next" |
yes | |
steps[].buttons[].action{do=back}.do |
"back" |
yes | |
steps[].buttons[].action{do=dismiss}.do |
"dismiss" |
yes | |
steps[].buttons[].action{do=acknowledge}.do |
"acknowledge" |
yes | |
steps[].buttons[].action{do=snooze}.do |
"snooze" |
yes | |
steps[].buttons[].action{do=snooze}.minutes |
number | yes | |
steps[].buttons[].action{do=go-to-step}.do |
"go-to-step" |
yes | |
steps[].buttons[].action{do=go-to-step}.stepId |
string | yes | min length 1 |
steps[].buttons[].action{do=start-content}.do |
"start-content" |
yes | |
steps[].buttons[].action{do=start-content}.contentId |
string | yes | min length 1 |
steps[].buttons[].action{do=open-resource}.do |
"open-resource" |
yes | |
steps[].buttons[].action{do=open-resource}.resourceId |
string | yes | min length 1 |
steps[].buttons[].action{do=open-url}.do |
"open-url" |
yes | |
steps[].buttons[].action{do=open-url}.url |
string | yes | |
steps[].buttons[].action{do=open-url}.openIn |
new-tab | same-tab | panel | modal |
yes | |
steps[].buttons[].action{do=open-resource-center}.do |
"open-resource-center" |
yes | |
steps[].buttons[].action{do=open-resource-center}.tab |
help | tasks | search |
||
steps[].advance |
object | yes | |
steps[].advance{on=next-button}.on |
"next-button" |
yes | |
steps[].advance{on=click-anchor}.on |
"click-anchor" |
yes | |
steps[].advance{on=input-anchor}.on |
"input-anchor" |
yes | |
steps[].advance{on=input-anchor}.minLength |
integer | ||
steps[].advance{on=element-appears}.on |
"element-appears" |
yes | |
steps[].advance{on=element-appears}.locator |
Locator (see below) | yes | |
steps[].advance{on=element-disappears}.on |
"element-disappears" |
yes | |
steps[].advance{on=element-disappears}.locator |
Locator (see below) | yes | |
steps[].advance{on=page-matches}.on |
"page-matches" |
yes | |
steps[].advance{on=page-matches}.page |
object | yes | |
steps[].advance{on=page-matches}.page.pathPatterns |
array of string | yes | |
steps[].advance{on=page-matches}.page.form |
Locator (see below) | ||
steps[].advance{on=page-matches}.page.conditions |
array of object | ||
steps[].advance{on=page-matches}.page.conditions[]{kind=element-exists}.kind |
"element-exists" |
yes | |
steps[].advance{on=page-matches}.page.conditions[]{kind=element-exists}.locator |
Locator (see below) | yes | |
steps[].advance{on=page-matches}.page.conditions[]{kind=element-exists}.negate |
boolean | ||
steps[].advance{on=page-matches}.page.conditions[]{kind=element-text}.kind |
"element-text" |
yes | |
steps[].advance{on=page-matches}.page.conditions[]{kind=element-text}.locator |
Locator (see below) | yes | |
steps[].advance{on=page-matches}.page.conditions[]{kind=element-text}.op |
equals | contains | matches |
yes | |
steps[].advance{on=page-matches}.page.conditions[]{kind=element-text}.value |
string | yes | |
steps[].advance{on=page-matches}.page.conditions[]{kind=field-value}.kind |
"field-value" |
yes | |
steps[].advance{on=page-matches}.page.conditions[]{kind=field-value}.locator |
Locator (see below) | yes | |
steps[].advance{on=page-matches}.page.conditions[]{kind=field-value}.op |
equals | in | empty | not-empty |
yes | |
steps[].advance{on=page-matches}.page.conditions[]{kind=field-value}.value |
string or array of string | ||
steps[].advance{on=page-matches}.page.conditions[]{kind=url}.kind |
"url" |
yes | |
steps[].advance{on=page-matches}.page.conditions[]{kind=url}.pathPattern |
string | yes | |
steps[].advance{on=page-matches}.page.conditions[]{kind=segment}.kind |
"segment" |
yes | |
steps[].advance{on=page-matches}.page.conditions[]{kind=segment}.segmentId |
string | yes | min length 1 |
steps[].advance{on=page-matches}.page.conditions[]{kind=content-completed}.kind |
"content-completed" |
yes | |
steps[].advance{on=page-matches}.page.conditions[]{kind=content-completed}.contentId |
string | yes | min length 1 |
steps[].advance{on=page-matches}.page.conditions[].kind |
all | any |
yes | |
steps[].advance{on=page-matches}.page.conditions[].of |
array of object | yes | |
steps[].advance{on=page-matches}.page.conditions[].of[]{kind=element-exists}.kind |
"element-exists" |
yes | |
steps[].advance{on=page-matches}.page.conditions[].of[]{kind=element-exists}.locator |
Locator (see below) | yes | |
steps[].advance{on=page-matches}.page.conditions[].of[]{kind=element-exists}.negate |
boolean | ||
steps[].advance{on=page-matches}.page.conditions[].of[]{kind=element-text}.kind |
"element-text" |
yes | |
steps[].advance{on=page-matches}.page.conditions[].of[]{kind=element-text}.locator |
Locator (see below) | yes | |
steps[].advance{on=page-matches}.page.conditions[].of[]{kind=element-text}.op |
equals | contains | matches |
yes | |
steps[].advance{on=page-matches}.page.conditions[].of[]{kind=element-text}.value |
string | yes | |
steps[].advance{on=page-matches}.page.conditions[].of[]{kind=field-value}.kind |
"field-value" |
yes | |
steps[].advance{on=page-matches}.page.conditions[].of[]{kind=field-value}.locator |
Locator (see below) | yes | |
steps[].advance{on=page-matches}.page.conditions[].of[]{kind=field-value}.op |
equals | in | empty | not-empty |
yes | |
steps[].advance{on=page-matches}.page.conditions[].of[]{kind=field-value}.value |
string or array of string | ||
steps[].advance{on=page-matches}.page.conditions[].of[]{kind=url}.kind |
"url" |
yes | |
steps[].advance{on=page-matches}.page.conditions[].of[]{kind=url}.pathPattern |
string | yes | |
steps[].advance{on=page-matches}.page.conditions[].of[]{kind=segment}.kind |
"segment" |
yes | |
steps[].advance{on=page-matches}.page.conditions[].of[]{kind=segment}.segmentId |
string | yes | min length 1 |
steps[].advance{on=page-matches}.page.conditions[].of[]{kind=content-completed}.kind |
"content-completed" |
yes | |
steps[].advance{on=page-matches}.page.conditions[].of[]{kind=content-completed}.contentId |
string | yes | min length 1 |
steps[].advance{on=page-matches}.page.conditions[].of[].kind |
all | any |
yes | |
steps[].advance{on=page-matches}.page.conditions[].of[].of |
array of object | yes | |
steps[].advance{on=form-submitted}.on |
"form-submitted" |
yes | |
steps[].advance{on=form-submitted}.form |
Locator (see below) | yes | |
steps[].advance{on=any}.on |
"any" |
yes | |
steps[].advance{on=any}.of |
array of object | yes | |
steps[].advance{on=any}.of[]{on=next-button}.on |
"next-button" |
yes | |
steps[].advance{on=any}.of[]{on=click-anchor}.on |
"click-anchor" |
yes | |
steps[].advance{on=any}.of[]{on=input-anchor}.on |
"input-anchor" |
yes | |
steps[].advance{on=any}.of[]{on=input-anchor}.minLength |
integer | ||
steps[].advance{on=any}.of[]{on=element-appears}.on |
"element-appears" |
yes | |
steps[].advance{on=any}.of[]{on=element-appears}.locator |
Locator (see below) | yes | |
steps[].advance{on=any}.of[]{on=element-disappears}.on |
"element-disappears" |
yes | |
steps[].advance{on=any}.of[]{on=element-disappears}.locator |
Locator (see below) | yes | |
steps[].advance{on=any}.of[]{on=page-matches}.on |
"page-matches" |
yes | |
steps[].advance{on=any}.of[]{on=page-matches}.page |
object | yes | |
steps[].advance{on=any}.of[]{on=page-matches}.page.pathPatterns |
array of string | yes | |
steps[].advance{on=any}.of[]{on=page-matches}.page.form |
Locator (see below) | ||
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions |
array of object | ||
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[]{kind=element-exists}.kind |
"element-exists" |
yes | |
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[]{kind=element-exists}.locator |
Locator (see below) | yes | |
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[]{kind=element-exists}.negate |
boolean | ||
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[]{kind=element-text}.kind |
"element-text" |
yes | |
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[]{kind=element-text}.locator |
Locator (see below) | yes | |
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[]{kind=element-text}.op |
equals | contains | matches |
yes | |
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[]{kind=element-text}.value |
string | yes | |
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[]{kind=field-value}.kind |
"field-value" |
yes | |
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[]{kind=field-value}.locator |
Locator (see below) | yes | |
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[]{kind=field-value}.op |
equals | in | empty | not-empty |
yes | |
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[]{kind=field-value}.value |
string or array of string | ||
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[]{kind=url}.kind |
"url" |
yes | |
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[]{kind=url}.pathPattern |
string | yes | |
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[]{kind=segment}.kind |
"segment" |
yes | |
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[]{kind=segment}.segmentId |
string | yes | min length 1 |
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[]{kind=content-completed}.kind |
"content-completed" |
yes | |
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[]{kind=content-completed}.contentId |
string | yes | min length 1 |
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[].kind |
all | any |
yes | |
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[].of |
array of object | yes | |
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[].of[]{kind=element-exists}.kind |
"element-exists" |
yes | |
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[].of[]{kind=element-exists}.locator |
Locator (see below) | yes | |
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[].of[]{kind=element-exists}.negate |
boolean | ||
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[].of[]{kind=element-text}.kind |
"element-text" |
yes | |
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[].of[]{kind=element-text}.locator |
Locator (see below) | yes | |
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[].of[]{kind=element-text}.op |
equals | contains | matches |
yes | |
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[].of[]{kind=element-text}.value |
string | yes | |
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[].of[]{kind=field-value}.kind |
"field-value" |
yes | |
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[].of[]{kind=field-value}.locator |
Locator (see below) | yes | |
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[].of[]{kind=field-value}.op |
equals | in | empty | not-empty |
yes | |
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[].of[]{kind=field-value}.value |
string or array of string | ||
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[].of[]{kind=url}.kind |
"url" |
yes | |
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[].of[]{kind=url}.pathPattern |
string | yes | |
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[].of[]{kind=segment}.kind |
"segment" |
yes | |
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[].of[]{kind=segment}.segmentId |
string | yes | min length 1 |
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[].of[]{kind=content-completed}.kind |
"content-completed" |
yes | |
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[].of[]{kind=content-completed}.contentId |
string | yes | min length 1 |
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[].of[].kind |
all | any |
yes | |
steps[].advance{on=any}.of[]{on=page-matches}.page.conditions[].of[].of |
array of object | yes | |
steps[].advance{on=any}.of[]{on=form-submitted}.on |
"form-submitted" |
yes | |
steps[].advance{on=any}.of[]{on=form-submitted}.form |
Locator (see below) | yes | |
steps[].advance{on=any}.of[]{on=any}.on |
"any" |
yes | |
steps[].advance{on=any}.of[]{on=any}.of |
array of object | yes | |
steps[].next |
object | yes | |
steps[].next{kind=sequential}.kind |
"sequential" |
yes | |
steps[].next{kind=branch}.kind |
"branch" |
yes | |
steps[].next{kind=branch}.cases |
array of object | yes | |
steps[].next{kind=branch}.cases[].when |
object | yes | |
steps[].next{kind=branch}.cases[].when{kind=element-exists}.kind |
"element-exists" |
yes | |
steps[].next{kind=branch}.cases[].when{kind=element-exists}.locator |
Locator (see below) | yes | |
steps[].next{kind=branch}.cases[].when{kind=element-exists}.negate |
boolean | ||
steps[].next{kind=branch}.cases[].when{kind=element-text}.kind |
"element-text" |
yes | |
steps[].next{kind=branch}.cases[].when{kind=element-text}.locator |
Locator (see below) | yes | |
steps[].next{kind=branch}.cases[].when{kind=element-text}.op |
equals | contains | matches |
yes | |
steps[].next{kind=branch}.cases[].when{kind=element-text}.value |
string | yes | |
steps[].next{kind=branch}.cases[].when{kind=field-value}.kind |
"field-value" |
yes | |
steps[].next{kind=branch}.cases[].when{kind=field-value}.locator |
Locator (see below) | yes | |
steps[].next{kind=branch}.cases[].when{kind=field-value}.op |
equals | in | empty | not-empty |
yes | |
steps[].next{kind=branch}.cases[].when{kind=field-value}.value |
string or array of string | ||
steps[].next{kind=branch}.cases[].when{kind=url}.kind |
"url" |
yes | |
steps[].next{kind=branch}.cases[].when{kind=url}.pathPattern |
string | yes | |
steps[].next{kind=branch}.cases[].when{kind=segment}.kind |
"segment" |
yes | |
steps[].next{kind=branch}.cases[].when{kind=segment}.segmentId |
string | yes | min length 1 |
steps[].next{kind=branch}.cases[].when{kind=content-completed}.kind |
"content-completed" |
yes | |
steps[].next{kind=branch}.cases[].when{kind=content-completed}.contentId |
string | yes | min length 1 |
steps[].next{kind=branch}.cases[].when.kind |
all | any |
yes | |
steps[].next{kind=branch}.cases[].when.of |
array of object | yes | |
steps[].next{kind=branch}.cases[].goTo |
string | yes | min length 1 |
steps[].next{kind=branch}.otherwise |
string | min length 1 |
|
steps[].next{kind=go-to}.kind |
"go-to" |
yes | |
steps[].next{kind=go-to}.target |
string | yes | min length 1 |
steps[].next{kind=end}.kind |
"end" |
yes | |
steps[].waitForMs |
integer | yes | min 0 |
steps[].onMissing |
skip | end | show-unanchored | pause |
yes | |
steps[].tooltipWidth |
integer | min 160, max 640 |
|
steps[].cutoutPadding |
integer | min 0, max 64 |
|
steps[].cutoutRadius |
integer | min 0, max 64 |
|
steps[].overlayClick |
none | dismiss | shake |
||
keywords |
array of string | ||
startStepId |
string | yes | |
goal |
object | yes | |
goal{kind=element-appears}.kind |
"element-appears" |
yes | |
goal{kind=element-appears}.locator |
Locator (see below) | yes | |
goal{kind=url-matches}.kind |
"url-matches" |
yes | |
goal{kind=url-matches}.pathPattern |
string | yes | |
goal{kind=last-step-completed}.kind |
"last-step-completed" |
yes | |
showProgress |
boolean | yes | |
progressStyle |
counter | bullets | bar |
||
allowSkip |
boolean | yes |
ContentItem: tipSet¶
| Path | Type | Required | Constraints |
|---|---|---|---|
id |
string | yes | min length 1 |
appKey |
string | yes | |
name |
string | yes | |
description |
string | ||
status |
draft | published | archived |
yes | |
version |
integer | yes | min 0 |
schemaVersion |
2 |
yes | |
match |
object | yes | |
match.pathPatterns |
array of string | yes | |
match.form |
Locator (see below) | ||
match.conditions |
array of object | ||
match.conditions[]{kind=element-exists}.kind |
"element-exists" |
yes | |
match.conditions[]{kind=element-exists}.locator |
Locator (see below) | yes | |
match.conditions[]{kind=element-exists}.negate |
boolean | ||
match.conditions[]{kind=element-text}.kind |
"element-text" |
yes | |
match.conditions[]{kind=element-text}.locator |
Locator (see below) | yes | |
match.conditions[]{kind=element-text}.op |
equals | contains | matches |
yes | |
match.conditions[]{kind=element-text}.value |
string | yes | |
match.conditions[]{kind=field-value}.kind |
"field-value" |
yes | |
match.conditions[]{kind=field-value}.locator |
Locator (see below) | yes | |
match.conditions[]{kind=field-value}.op |
equals | in | empty | not-empty |
yes | |
match.conditions[]{kind=field-value}.value |
string or array of string | ||
match.conditions[]{kind=url}.kind |
"url" |
yes | |
match.conditions[]{kind=url}.pathPattern |
string | yes | |
match.conditions[]{kind=segment}.kind |
"segment" |
yes | |
match.conditions[]{kind=segment}.segmentId |
string | yes | min length 1 |
match.conditions[]{kind=content-completed}.kind |
"content-completed" |
yes | |
match.conditions[]{kind=content-completed}.contentId |
string | yes | min length 1 |
match.conditions[].kind |
all | any |
yes | |
match.conditions[].of |
array of object | yes | |
match.conditions[].of[]{kind=element-exists}.kind |
"element-exists" |
yes | |
match.conditions[].of[]{kind=element-exists}.locator |
Locator (see below) | yes | |
match.conditions[].of[]{kind=element-exists}.negate |
boolean | ||
match.conditions[].of[]{kind=element-text}.kind |
"element-text" |
yes | |
match.conditions[].of[]{kind=element-text}.locator |
Locator (see below) | yes | |
match.conditions[].of[]{kind=element-text}.op |
equals | contains | matches |
yes | |
match.conditions[].of[]{kind=element-text}.value |
string | yes | |
match.conditions[].of[]{kind=field-value}.kind |
"field-value" |
yes | |
match.conditions[].of[]{kind=field-value}.locator |
Locator (see below) | yes | |
match.conditions[].of[]{kind=field-value}.op |
equals | in | empty | not-empty |
yes | |
match.conditions[].of[]{kind=field-value}.value |
string or array of string | ||
match.conditions[].of[]{kind=url}.kind |
"url" |
yes | |
match.conditions[].of[]{kind=url}.pathPattern |
string | yes | |
match.conditions[].of[]{kind=segment}.kind |
"segment" |
yes | |
match.conditions[].of[]{kind=segment}.segmentId |
string | yes | min length 1 |
match.conditions[].of[]{kind=content-completed}.kind |
"content-completed" |
yes | |
match.conditions[].of[]{kind=content-completed}.contentId |
string | yes | min length 1 |
match.conditions[].of[].kind |
all | any |
yes | |
match.conditions[].of[].of |
array of object | yes | |
segments |
array of string | yes | |
schedule |
object | ||
schedule.from |
string | ||
schedule.to |
string | ||
tags |
array of string | yes | |
locale |
string | yes | |
translations |
map of map of string | ||
restricted |
boolean | ||
createdBy |
string | yes | |
updatedBy |
string | yes | |
createdAt |
string | yes | |
updatedAt |
string | yes | |
publishedAt |
string | ||
kind |
"tipSet" |
yes | |
defaultTrigger |
icon | focus | hover |
yes | |
tips |
array of object | yes | |
tips[].id |
string | yes | min length 1 |
tips[].anchor |
Locator (see below) | yes | |
tips[].tipKind |
guidance | validation |
yes | |
tips[].trigger |
icon | focus | hover |
||
tips[].iconPosition |
after-label | inside-end | after-field |
yes | |
tips[].hintPosition |
auto | below | above | after-end | before-start |
default auto |
|
tips[].content |
object | yes | |
tips[].content.title |
string | ||
tips[].content.bodyMarkdown |
string | yes | |
tips[].content.media |
object | ||
tips[].content.media{kind=image}.kind |
"image" |
yes | |
tips[].content.media{kind=image}.asset |
object | yes | |
tips[].content.media{kind=image}.asset.sha256 |
string | yes | pattern ^[0-9a-f]{64}$ |
tips[].content.media{kind=image}.asset.mime |
string | yes | |
tips[].content.media{kind=image}.asset.bytes |
integer | yes | min 0 |
tips[].content.media{kind=image}.alt |
string | yes | |
tips[].content.media{kind=video}.kind |
"video" |
yes | |
tips[].content.media{kind=video}.url |
string | yes | |
tips[].content.media{kind=video}.provider |
stream | youtube | vimeo | mp4 |
yes | |
tips[].content.learnMore |
array of string | ||
tips[].validation |
object | ||
tips[].validation.rule |
object | yes | |
tips[].validation.rule{kind=required}.kind |
"required" |
yes | |
tips[].validation.rule{kind=regex}.kind |
"regex" |
yes | |
tips[].validation.rule{kind=regex}.pattern |
string | yes | |
tips[].validation.rule{kind=length}.kind |
"length" |
yes | |
tips[].validation.rule{kind=length}.min |
number | ||
tips[].validation.rule{kind=length}.max |
number | ||
tips[].validation.rule{kind=date-not-future}.kind |
"date-not-future" |
yes | |
tips[].validation.rule{kind=date-within-days}.kind |
"date-within-days" |
yes | |
tips[].validation.rule{kind=date-within-days}.days |
number | yes | |
tips[].validation.message |
string | yes | |
tips[].validation.severity |
info | warning |
yes | |
tips[].validation.hintPosition |
auto | below | above | after-end | before-start |
default auto |
|
tips[].validation.extraRules |
array of object | ||
tips[].validation.extraRules[].rule |
object | yes | |
tips[].validation.extraRules[].rule{kind=required}.kind |
"required" |
yes | |
tips[].validation.extraRules[].rule{kind=regex}.kind |
"regex" |
yes | |
tips[].validation.extraRules[].rule{kind=regex}.pattern |
string | yes | |
tips[].validation.extraRules[].rule{kind=length}.kind |
"length" |
yes | |
tips[].validation.extraRules[].rule{kind=length}.min |
number | ||
tips[].validation.extraRules[].rule{kind=length}.max |
number | ||
tips[].validation.extraRules[].rule{kind=date-not-future}.kind |
"date-not-future" |
yes | |
tips[].validation.extraRules[].rule{kind=date-within-days}.kind |
"date-within-days" |
yes | |
tips[].validation.extraRules[].rule{kind=date-within-days}.days |
number | yes | |
tips[].validation.extraRules[].message |
string | yes | |
tips[].validation.combine |
all | any |
ContentItem: launcher¶
| Path | Type | Required | Constraints |
|---|---|---|---|
id |
string | yes | min length 1 |
appKey |
string | yes | |
name |
string | yes | |
description |
string | ||
status |
draft | published | archived |
yes | |
version |
integer | yes | min 0 |
schemaVersion |
2 |
yes | |
match |
object | yes | |
match.pathPatterns |
array of string | yes | |
match.form |
Locator (see below) | ||
match.conditions |
array of object | ||
match.conditions[]{kind=element-exists}.kind |
"element-exists" |
yes | |
match.conditions[]{kind=element-exists}.locator |
Locator (see below) | yes | |
match.conditions[]{kind=element-exists}.negate |
boolean | ||
match.conditions[]{kind=element-text}.kind |
"element-text" |
yes | |
match.conditions[]{kind=element-text}.locator |
Locator (see below) | yes | |
match.conditions[]{kind=element-text}.op |
equals | contains | matches |
yes | |
match.conditions[]{kind=element-text}.value |
string | yes | |
match.conditions[]{kind=field-value}.kind |
"field-value" |
yes | |
match.conditions[]{kind=field-value}.locator |
Locator (see below) | yes | |
match.conditions[]{kind=field-value}.op |
equals | in | empty | not-empty |
yes | |
match.conditions[]{kind=field-value}.value |
string or array of string | ||
match.conditions[]{kind=url}.kind |
"url" |
yes | |
match.conditions[]{kind=url}.pathPattern |
string | yes | |
match.conditions[]{kind=segment}.kind |
"segment" |
yes | |
match.conditions[]{kind=segment}.segmentId |
string | yes | min length 1 |
match.conditions[]{kind=content-completed}.kind |
"content-completed" |
yes | |
match.conditions[]{kind=content-completed}.contentId |
string | yes | min length 1 |
match.conditions[].kind |
all | any |
yes | |
match.conditions[].of |
array of object | yes | |
match.conditions[].of[]{kind=element-exists}.kind |
"element-exists" |
yes | |
match.conditions[].of[]{kind=element-exists}.locator |
Locator (see below) | yes | |
match.conditions[].of[]{kind=element-exists}.negate |
boolean | ||
match.conditions[].of[]{kind=element-text}.kind |
"element-text" |
yes | |
match.conditions[].of[]{kind=element-text}.locator |
Locator (see below) | yes | |
match.conditions[].of[]{kind=element-text}.op |
equals | contains | matches |
yes | |
match.conditions[].of[]{kind=element-text}.value |
string | yes | |
match.conditions[].of[]{kind=field-value}.kind |
"field-value" |
yes | |
match.conditions[].of[]{kind=field-value}.locator |
Locator (see below) | yes | |
match.conditions[].of[]{kind=field-value}.op |
equals | in | empty | not-empty |
yes | |
match.conditions[].of[]{kind=field-value}.value |
string or array of string | ||
match.conditions[].of[]{kind=url}.kind |
"url" |
yes | |
match.conditions[].of[]{kind=url}.pathPattern |
string | yes | |
match.conditions[].of[]{kind=segment}.kind |
"segment" |
yes | |
match.conditions[].of[]{kind=segment}.segmentId |
string | yes | min length 1 |
match.conditions[].of[]{kind=content-completed}.kind |
"content-completed" |
yes | |
match.conditions[].of[]{kind=content-completed}.contentId |
string | yes | min length 1 |
match.conditions[].of[].kind |
all | any |
yes | |
match.conditions[].of[].of |
array of object | yes | |
segments |
array of string | yes | |
schedule |
object | ||
schedule.from |
string | ||
schedule.to |
string | ||
tags |
array of string | yes | |
locale |
string | yes | |
translations |
map of map of string | ||
restricted |
boolean | ||
createdBy |
string | yes | |
updatedBy |
string | yes | |
createdAt |
string | yes | |
updatedAt |
string | yes | |
publishedAt |
string | ||
kind |
"launcher" |
yes | |
anchor |
Locator (see below) | yes | |
style |
icon | button | link |
yes | |
icon |
help | info | play | document | new |
||
label |
string | ||
placement |
auto | top | bottom | left | right | top-start | top-end | bottom-start | bottom-end |
yes | |
offset |
object | ||
offset.x |
number | yes | |
offset.y |
number | yes | |
tooltip |
string | ||
action |
object | yes | |
action{do=next}.do |
"next" |
yes | |
action{do=back}.do |
"back" |
yes | |
action{do=dismiss}.do |
"dismiss" |
yes | |
action{do=acknowledge}.do |
"acknowledge" |
yes | |
action{do=snooze}.do |
"snooze" |
yes | |
action{do=snooze}.minutes |
number | yes | |
action{do=go-to-step}.do |
"go-to-step" |
yes | |
action{do=go-to-step}.stepId |
string | yes | min length 1 |
action{do=start-content}.do |
"start-content" |
yes | |
action{do=start-content}.contentId |
string | yes | min length 1 |
action{do=open-resource}.do |
"open-resource" |
yes | |
action{do=open-resource}.resourceId |
string | yes | min length 1 |
action{do=open-url}.do |
"open-url" |
yes | |
action{do=open-url}.url |
string | yes | |
action{do=open-url}.openIn |
new-tab | same-tab | panel | modal |
yes | |
action{do=open-resource-center}.do |
"open-resource-center" |
yes | |
action{do=open-resource-center}.tab |
help | tasks | search |
ContentItem: hotspot¶
| Path | Type | Required | Constraints |
|---|---|---|---|
id |
string | yes | min length 1 |
appKey |
string | yes | |
name |
string | yes | |
description |
string | ||
status |
draft | published | archived |
yes | |
version |
integer | yes | min 0 |
schemaVersion |
2 |
yes | |
match |
object | yes | |
match.pathPatterns |
array of string | yes | |
match.form |
Locator (see below) | ||
match.conditions |
array of object | ||
match.conditions[]{kind=element-exists}.kind |
"element-exists" |
yes | |
match.conditions[]{kind=element-exists}.locator |
Locator (see below) | yes | |
match.conditions[]{kind=element-exists}.negate |
boolean | ||
match.conditions[]{kind=element-text}.kind |
"element-text" |
yes | |
match.conditions[]{kind=element-text}.locator |
Locator (see below) | yes | |
match.conditions[]{kind=element-text}.op |
equals | contains | matches |
yes | |
match.conditions[]{kind=element-text}.value |
string | yes | |
match.conditions[]{kind=field-value}.kind |
"field-value" |
yes | |
match.conditions[]{kind=field-value}.locator |
Locator (see below) | yes | |
match.conditions[]{kind=field-value}.op |
equals | in | empty | not-empty |
yes | |
match.conditions[]{kind=field-value}.value |
string or array of string | ||
match.conditions[]{kind=url}.kind |
"url" |
yes | |
match.conditions[]{kind=url}.pathPattern |
string | yes | |
match.conditions[]{kind=segment}.kind |
"segment" |
yes | |
match.conditions[]{kind=segment}.segmentId |
string | yes | min length 1 |
match.conditions[]{kind=content-completed}.kind |
"content-completed" |
yes | |
match.conditions[]{kind=content-completed}.contentId |
string | yes | min length 1 |
match.conditions[].kind |
all | any |
yes | |
match.conditions[].of |
array of object | yes | |
match.conditions[].of[]{kind=element-exists}.kind |
"element-exists" |
yes | |
match.conditions[].of[]{kind=element-exists}.locator |
Locator (see below) | yes | |
match.conditions[].of[]{kind=element-exists}.negate |
boolean | ||
match.conditions[].of[]{kind=element-text}.kind |
"element-text" |
yes | |
match.conditions[].of[]{kind=element-text}.locator |
Locator (see below) | yes | |
match.conditions[].of[]{kind=element-text}.op |
equals | contains | matches |
yes | |
match.conditions[].of[]{kind=element-text}.value |
string | yes | |
match.conditions[].of[]{kind=field-value}.kind |
"field-value" |
yes | |
match.conditions[].of[]{kind=field-value}.locator |
Locator (see below) | yes | |
match.conditions[].of[]{kind=field-value}.op |
equals | in | empty | not-empty |
yes | |
match.conditions[].of[]{kind=field-value}.value |
string or array of string | ||
match.conditions[].of[]{kind=url}.kind |
"url" |
yes | |
match.conditions[].of[]{kind=url}.pathPattern |
string | yes | |
match.conditions[].of[]{kind=segment}.kind |
"segment" |
yes | |
match.conditions[].of[]{kind=segment}.segmentId |
string | yes | min length 1 |
match.conditions[].of[]{kind=content-completed}.kind |
"content-completed" |
yes | |
match.conditions[].of[]{kind=content-completed}.contentId |
string | yes | min length 1 |
match.conditions[].of[].kind |
all | any |
yes | |
match.conditions[].of[].of |
array of object | yes | |
segments |
array of string | yes | |
schedule |
object | ||
schedule.from |
string | ||
schedule.to |
string | ||
tags |
array of string | yes | |
locale |
string | yes | |
translations |
map of map of string | ||
restricted |
boolean | ||
createdBy |
string | yes | |
updatedBy |
string | yes | |
createdAt |
string | yes | |
updatedAt |
string | yes | |
publishedAt |
string | ||
kind |
"hotspot" |
yes | |
anchor |
Locator (see below) | yes | |
placement |
auto | top | bottom | left | right | top-start | top-end | bottom-start | bottom-end |
yes | |
content |
object | yes | |
content.title |
string | ||
content.bodyMarkdown |
string | yes | |
content.media |
object | ||
content.media{kind=image}.kind |
"image" |
yes | |
content.media{kind=image}.asset |
object | yes | |
content.media{kind=image}.asset.sha256 |
string | yes | pattern ^[0-9a-f]{64}$ |
content.media{kind=image}.asset.mime |
string | yes | |
content.media{kind=image}.asset.bytes |
integer | yes | min 0 |
content.media{kind=image}.alt |
string | yes | |
content.media{kind=video}.kind |
"video" |
yes | |
content.media{kind=video}.url |
string | yes | |
content.media{kind=video}.provider |
stream | youtube | vimeo | mp4 |
yes | |
content.learnMore |
array of string | ||
buttons |
array of object | yes | |
buttons[].label |
string | yes | |
buttons[].style |
primary | secondary | link |
yes | |
buttons[].action |
object | yes | |
buttons[].action{do=next}.do |
"next" |
yes | |
buttons[].action{do=back}.do |
"back" |
yes | |
buttons[].action{do=dismiss}.do |
"dismiss" |
yes | |
buttons[].action{do=acknowledge}.do |
"acknowledge" |
yes | |
buttons[].action{do=snooze}.do |
"snooze" |
yes | |
buttons[].action{do=snooze}.minutes |
number | yes | |
buttons[].action{do=go-to-step}.do |
"go-to-step" |
yes | |
buttons[].action{do=go-to-step}.stepId |
string | yes | min length 1 |
buttons[].action{do=start-content}.do |
"start-content" |
yes | |
buttons[].action{do=start-content}.contentId |
string | yes | min length 1 |
buttons[].action{do=open-resource}.do |
"open-resource" |
yes | |
buttons[].action{do=open-resource}.resourceId |
string | yes | min length 1 |
buttons[].action{do=open-url}.do |
"open-url" |
yes | |
buttons[].action{do=open-url}.url |
string | yes | |
buttons[].action{do=open-url}.openIn |
new-tab | same-tab | panel | modal |
yes | |
buttons[].action{do=open-resource-center}.do |
"open-resource-center" |
yes | |
buttons[].action{do=open-resource-center}.tab |
help | tasks | search |
||
frequency |
once | once-per-version | every-visit | until-completed | manual-only |
yes |
ContentItem: announcement¶
| Path | Type | Required | Constraints |
|---|---|---|---|
id |
string | yes | min length 1 |
appKey |
string | yes | |
name |
string | yes | |
description |
string | ||
status |
draft | published | archived |
yes | |
version |
integer | yes | min 0 |
schemaVersion |
2 |
yes | |
match |
object | yes | |
match.pathPatterns |
array of string | yes | |
match.form |
Locator (see below) | ||
match.conditions |
array of object | ||
match.conditions[]{kind=element-exists}.kind |
"element-exists" |
yes | |
match.conditions[]{kind=element-exists}.locator |
Locator (see below) | yes | |
match.conditions[]{kind=element-exists}.negate |
boolean | ||
match.conditions[]{kind=element-text}.kind |
"element-text" |
yes | |
match.conditions[]{kind=element-text}.locator |
Locator (see below) | yes | |
match.conditions[]{kind=element-text}.op |
equals | contains | matches |
yes | |
match.conditions[]{kind=element-text}.value |
string | yes | |
match.conditions[]{kind=field-value}.kind |
"field-value" |
yes | |
match.conditions[]{kind=field-value}.locator |
Locator (see below) | yes | |
match.conditions[]{kind=field-value}.op |
equals | in | empty | not-empty |
yes | |
match.conditions[]{kind=field-value}.value |
string or array of string | ||
match.conditions[]{kind=url}.kind |
"url" |
yes | |
match.conditions[]{kind=url}.pathPattern |
string | yes | |
match.conditions[]{kind=segment}.kind |
"segment" |
yes | |
match.conditions[]{kind=segment}.segmentId |
string | yes | min length 1 |
match.conditions[]{kind=content-completed}.kind |
"content-completed" |
yes | |
match.conditions[]{kind=content-completed}.contentId |
string | yes | min length 1 |
match.conditions[].kind |
all | any |
yes | |
match.conditions[].of |
array of object | yes | |
match.conditions[].of[]{kind=element-exists}.kind |
"element-exists" |
yes | |
match.conditions[].of[]{kind=element-exists}.locator |
Locator (see below) | yes | |
match.conditions[].of[]{kind=element-exists}.negate |
boolean | ||
match.conditions[].of[]{kind=element-text}.kind |
"element-text" |
yes | |
match.conditions[].of[]{kind=element-text}.locator |
Locator (see below) | yes | |
match.conditions[].of[]{kind=element-text}.op |
equals | contains | matches |
yes | |
match.conditions[].of[]{kind=element-text}.value |
string | yes | |
match.conditions[].of[]{kind=field-value}.kind |
"field-value" |
yes | |
match.conditions[].of[]{kind=field-value}.locator |
Locator (see below) | yes | |
match.conditions[].of[]{kind=field-value}.op |
equals | in | empty | not-empty |
yes | |
match.conditions[].of[]{kind=field-value}.value |
string or array of string | ||
match.conditions[].of[]{kind=url}.kind |
"url" |
yes | |
match.conditions[].of[]{kind=url}.pathPattern |
string | yes | |
match.conditions[].of[]{kind=segment}.kind |
"segment" |
yes | |
match.conditions[].of[]{kind=segment}.segmentId |
string | yes | min length 1 |
match.conditions[].of[]{kind=content-completed}.kind |
"content-completed" |
yes | |
match.conditions[].of[]{kind=content-completed}.contentId |
string | yes | min length 1 |
match.conditions[].of[].kind |
all | any |
yes | |
match.conditions[].of[].of |
array of object | yes | |
segments |
array of string | yes | |
schedule |
object | ||
schedule.from |
string | ||
schedule.to |
string | ||
tags |
array of string | yes | |
locale |
string | yes | |
translations |
map of map of string | ||
restricted |
boolean | ||
createdBy |
string | yes | |
updatedBy |
string | yes | |
createdAt |
string | yes | |
updatedAt |
string | yes | |
publishedAt |
string | ||
kind |
"announcement" |
yes | |
display |
modal | banner-top | banner-bottom | toast | slideout |
yes | |
content |
object | yes | |
content.title |
string | ||
content.bodyMarkdown |
string | yes | |
content.media |
object | ||
content.media{kind=image}.kind |
"image" |
yes | |
content.media{kind=image}.asset |
object | yes | |
content.media{kind=image}.asset.sha256 |
string | yes | pattern ^[0-9a-f]{64}$ |
content.media{kind=image}.asset.mime |
string | yes | |
content.media{kind=image}.asset.bytes |
integer | yes | min 0 |
content.media{kind=image}.alt |
string | yes | |
content.media{kind=video}.kind |
"video" |
yes | |
content.media{kind=video}.url |
string | yes | |
content.media{kind=video}.provider |
stream | youtube | vimeo | mp4 |
yes | |
content.learnMore |
array of string | ||
buttons |
array of object | yes | |
buttons[].label |
string | yes | |
buttons[].style |
primary | secondary | link |
yes | |
buttons[].action |
object | yes | |
buttons[].action{do=next}.do |
"next" |
yes | |
buttons[].action{do=back}.do |
"back" |
yes | |
buttons[].action{do=dismiss}.do |
"dismiss" |
yes | |
buttons[].action{do=acknowledge}.do |
"acknowledge" |
yes | |
buttons[].action{do=snooze}.do |
"snooze" |
yes | |
buttons[].action{do=snooze}.minutes |
number | yes | |
buttons[].action{do=go-to-step}.do |
"go-to-step" |
yes | |
buttons[].action{do=go-to-step}.stepId |
string | yes | min length 1 |
buttons[].action{do=start-content}.do |
"start-content" |
yes | |
buttons[].action{do=start-content}.contentId |
string | yes | min length 1 |
buttons[].action{do=open-resource}.do |
"open-resource" |
yes | |
buttons[].action{do=open-resource}.resourceId |
string | yes | min length 1 |
buttons[].action{do=open-url}.do |
"open-url" |
yes | |
buttons[].action{do=open-url}.url |
string | yes | |
buttons[].action{do=open-url}.openIn |
new-tab | same-tab | panel | modal |
yes | |
buttons[].action{do=open-resource-center}.do |
"open-resource-center" |
yes | |
buttons[].action{do=open-resource-center}.tab |
help | tasks | search |
||
trigger |
object | yes | |
trigger{type=page-load}.type |
"page-load" |
yes | |
trigger{type=page-load}.delayMs |
integer | min 0 |
|
trigger{type=element-visible}.type |
"element-visible" |
yes | |
trigger{type=element-visible}.locator |
Locator (see below) | yes | |
trigger{type=element-click}.type |
"element-click" |
yes | |
trigger{type=element-click}.locator |
Locator (see below) | yes | |
trigger{type=launcher}.type |
"launcher" |
yes | |
trigger{type=resource-center}.type |
"resource-center" |
yes | |
trigger{type=url-param}.type |
"url-param" |
yes | |
trigger{type=url-param}.name |
string | yes | |
trigger{type=url-param}.value |
string | ||
trigger{type=idle}.type |
"idle" |
yes | |
trigger{type=idle}.seconds |
number | yes | |
trigger{type=manual}.type |
"manual" |
yes | |
frequency |
once | once-per-version | every-visit | until-completed | manual-only |
yes | |
dismissible |
boolean | yes | |
requireAcknowledge |
boolean | ||
size |
sm | md | lg |
||
side |
right | left |
||
inline |
boolean |
ContentItem: resource¶
| Path | Type | Required | Constraints |
|---|---|---|---|
id |
string | yes | min length 1 |
appKey |
string | yes | |
name |
string | yes | |
description |
string | ||
status |
draft | published | archived |
yes | |
version |
integer | yes | min 0 |
schemaVersion |
2 |
yes | |
match |
object | yes | |
match.pathPatterns |
array of string | yes | |
match.form |
Locator (see below) | ||
match.conditions |
array of object | ||
match.conditions[]{kind=element-exists}.kind |
"element-exists" |
yes | |
match.conditions[]{kind=element-exists}.locator |
Locator (see below) | yes | |
match.conditions[]{kind=element-exists}.negate |
boolean | ||
match.conditions[]{kind=element-text}.kind |
"element-text" |
yes | |
match.conditions[]{kind=element-text}.locator |
Locator (see below) | yes | |
match.conditions[]{kind=element-text}.op |
equals | contains | matches |
yes | |
match.conditions[]{kind=element-text}.value |
string | yes | |
match.conditions[]{kind=field-value}.kind |
"field-value" |
yes | |
match.conditions[]{kind=field-value}.locator |
Locator (see below) | yes | |
match.conditions[]{kind=field-value}.op |
equals | in | empty | not-empty |
yes | |
match.conditions[]{kind=field-value}.value |
string or array of string | ||
match.conditions[]{kind=url}.kind |
"url" |
yes | |
match.conditions[]{kind=url}.pathPattern |
string | yes | |
match.conditions[]{kind=segment}.kind |
"segment" |
yes | |
match.conditions[]{kind=segment}.segmentId |
string | yes | min length 1 |
match.conditions[]{kind=content-completed}.kind |
"content-completed" |
yes | |
match.conditions[]{kind=content-completed}.contentId |
string | yes | min length 1 |
match.conditions[].kind |
all | any |
yes | |
match.conditions[].of |
array of object | yes | |
match.conditions[].of[]{kind=element-exists}.kind |
"element-exists" |
yes | |
match.conditions[].of[]{kind=element-exists}.locator |
Locator (see below) | yes | |
match.conditions[].of[]{kind=element-exists}.negate |
boolean | ||
match.conditions[].of[]{kind=element-text}.kind |
"element-text" |
yes | |
match.conditions[].of[]{kind=element-text}.locator |
Locator (see below) | yes | |
match.conditions[].of[]{kind=element-text}.op |
equals | contains | matches |
yes | |
match.conditions[].of[]{kind=element-text}.value |
string | yes | |
match.conditions[].of[]{kind=field-value}.kind |
"field-value" |
yes | |
match.conditions[].of[]{kind=field-value}.locator |
Locator (see below) | yes | |
match.conditions[].of[]{kind=field-value}.op |
equals | in | empty | not-empty |
yes | |
match.conditions[].of[]{kind=field-value}.value |
string or array of string | ||
match.conditions[].of[]{kind=url}.kind |
"url" |
yes | |
match.conditions[].of[]{kind=url}.pathPattern |
string | yes | |
match.conditions[].of[]{kind=segment}.kind |
"segment" |
yes | |
match.conditions[].of[]{kind=segment}.segmentId |
string | yes | min length 1 |
match.conditions[].of[]{kind=content-completed}.kind |
"content-completed" |
yes | |
match.conditions[].of[]{kind=content-completed}.contentId |
string | yes | min length 1 |
match.conditions[].of[].kind |
all | any |
yes | |
match.conditions[].of[].of |
array of object | yes | |
segments |
array of string | yes | |
schedule |
object | ||
schedule.from |
string | ||
schedule.to |
string | ||
tags |
array of string | yes | |
locale |
string | yes | |
translations |
map of map of string | ||
restricted |
boolean | ||
createdBy |
string | yes | |
updatedBy |
string | yes | |
createdAt |
string | yes | |
updatedAt |
string | yes | |
publishedAt |
string | ||
kind |
"resource" |
yes | |
resourceType |
document | link | video | faq | contact |
yes | |
url |
string | ||
asset |
object | ||
asset.sha256 |
string | yes | pattern ^[0-9a-f]{64}$ |
asset.mime |
string | yes | |
asset.bytes |
integer | yes | min 0 |
openIn |
new-tab | same-tab | panel | modal |
yes | |
summary |
string | ||
keywords |
array of string | yes |
ContentItem: checklist¶
| Path | Type | Required | Constraints |
|---|---|---|---|
id |
string | yes | min length 1 |
appKey |
string | yes | |
name |
string | yes | |
description |
string | ||
status |
draft | published | archived |
yes | |
version |
integer | yes | min 0 |
schemaVersion |
2 |
yes | |
match |
object | yes | |
match.pathPatterns |
array of string | yes | |
match.form |
Locator (see below) | ||
match.conditions |
array of object | ||
match.conditions[]{kind=element-exists}.kind |
"element-exists" |
yes | |
match.conditions[]{kind=element-exists}.locator |
Locator (see below) | yes | |
match.conditions[]{kind=element-exists}.negate |
boolean | ||
match.conditions[]{kind=element-text}.kind |
"element-text" |
yes | |
match.conditions[]{kind=element-text}.locator |
Locator (see below) | yes | |
match.conditions[]{kind=element-text}.op |
equals | contains | matches |
yes | |
match.conditions[]{kind=element-text}.value |
string | yes | |
match.conditions[]{kind=field-value}.kind |
"field-value" |
yes | |
match.conditions[]{kind=field-value}.locator |
Locator (see below) | yes | |
match.conditions[]{kind=field-value}.op |
equals | in | empty | not-empty |
yes | |
match.conditions[]{kind=field-value}.value |
string or array of string | ||
match.conditions[]{kind=url}.kind |
"url" |
yes | |
match.conditions[]{kind=url}.pathPattern |
string | yes | |
match.conditions[]{kind=segment}.kind |
"segment" |
yes | |
match.conditions[]{kind=segment}.segmentId |
string | yes | min length 1 |
match.conditions[]{kind=content-completed}.kind |
"content-completed" |
yes | |
match.conditions[]{kind=content-completed}.contentId |
string | yes | min length 1 |
match.conditions[].kind |
all | any |
yes | |
match.conditions[].of |
array of object | yes | |
match.conditions[].of[]{kind=element-exists}.kind |
"element-exists" |
yes | |
match.conditions[].of[]{kind=element-exists}.locator |
Locator (see below) | yes | |
match.conditions[].of[]{kind=element-exists}.negate |
boolean | ||
match.conditions[].of[]{kind=element-text}.kind |
"element-text" |
yes | |
match.conditions[].of[]{kind=element-text}.locator |
Locator (see below) | yes | |
match.conditions[].of[]{kind=element-text}.op |
equals | contains | matches |
yes | |
match.conditions[].of[]{kind=element-text}.value |
string | yes | |
match.conditions[].of[]{kind=field-value}.kind |
"field-value" |
yes | |
match.conditions[].of[]{kind=field-value}.locator |
Locator (see below) | yes | |
match.conditions[].of[]{kind=field-value}.op |
equals | in | empty | not-empty |
yes | |
match.conditions[].of[]{kind=field-value}.value |
string or array of string | ||
match.conditions[].of[]{kind=url}.kind |
"url" |
yes | |
match.conditions[].of[]{kind=url}.pathPattern |
string | yes | |
match.conditions[].of[]{kind=segment}.kind |
"segment" |
yes | |
match.conditions[].of[]{kind=segment}.segmentId |
string | yes | min length 1 |
match.conditions[].of[]{kind=content-completed}.kind |
"content-completed" |
yes | |
match.conditions[].of[]{kind=content-completed}.contentId |
string | yes | min length 1 |
match.conditions[].of[].kind |
all | any |
yes | |
match.conditions[].of[].of |
array of object | yes | |
segments |
array of string | yes | |
schedule |
object | ||
schedule.from |
string | ||
schedule.to |
string | ||
tags |
array of string | yes | |
locale |
string | yes | |
translations |
map of map of string | ||
restricted |
boolean | ||
createdBy |
string | yes | |
updatedBy |
string | yes | |
createdAt |
string | yes | |
updatedAt |
string | yes | |
publishedAt |
string | ||
kind |
"checklist" |
yes | |
title |
string | yes | |
items |
array of object | yes | |
items[].id |
string | yes | min length 1 |
items[].label |
string | yes | |
items[].description |
string | ||
items[].contentId |
string | min length 1 |
|
items[].completedWhen |
object | yes | |
items[].completedWhen{kind=element-appears}.kind |
"element-appears" |
yes | |
items[].completedWhen{kind=element-appears}.locator |
Locator (see below) | yes | |
items[].completedWhen{kind=url-matches}.kind |
"url-matches" |
yes | |
items[].completedWhen{kind=url-matches}.pathPattern |
string | yes | |
items[].completedWhen{kind=last-step-completed}.kind |
"last-step-completed" |
yes | |
items[].completedWhen{kind=element-clicked}.kind |
"element-clicked" |
yes | |
items[].completedWhen{kind=element-clicked}.locator |
Locator (see below) | yes | |
items[].completedWhen{kind=field-filled}.kind |
"field-filled" |
yes | |
items[].completedWhen{kind=field-filled}.locator |
Locator (see below) | yes | |
items[].completedWhen{kind=content-completed}.kind |
"content-completed" |
yes | |
items[].completedWhen{kind=content-completed}.contentId |
string | yes | min length 1 |
items[].completedWhen{kind=manual}.kind |
"manual" |
yes | |
display |
resource-center | launcher |
||
hideCompleted |
boolean | ||
resetOnPublish |
boolean |
ContentItem: resourceCenter¶
| Path | Type | Required | Constraints |
|---|---|---|---|
id |
string | yes | min length 1 |
appKey |
string | yes | |
name |
string | yes | |
description |
string | ||
status |
draft | published | archived |
yes | |
version |
integer | yes | min 0 |
schemaVersion |
2 |
yes | |
match |
object | yes | |
match.pathPatterns |
array of string | yes | |
match.form |
Locator (see below) | ||
match.conditions |
array of object | ||
match.conditions[]{kind=element-exists}.kind |
"element-exists" |
yes | |
match.conditions[]{kind=element-exists}.locator |
Locator (see below) | yes | |
match.conditions[]{kind=element-exists}.negate |
boolean | ||
match.conditions[]{kind=element-text}.kind |
"element-text" |
yes | |
match.conditions[]{kind=element-text}.locator |
Locator (see below) | yes | |
match.conditions[]{kind=element-text}.op |
equals | contains | matches |
yes | |
match.conditions[]{kind=element-text}.value |
string | yes | |
match.conditions[]{kind=field-value}.kind |
"field-value" |
yes | |
match.conditions[]{kind=field-value}.locator |
Locator (see below) | yes | |
match.conditions[]{kind=field-value}.op |
equals | in | empty | not-empty |
yes | |
match.conditions[]{kind=field-value}.value |
string or array of string | ||
match.conditions[]{kind=url}.kind |
"url" |
yes | |
match.conditions[]{kind=url}.pathPattern |
string | yes | |
match.conditions[]{kind=segment}.kind |
"segment" |
yes | |
match.conditions[]{kind=segment}.segmentId |
string | yes | min length 1 |
match.conditions[]{kind=content-completed}.kind |
"content-completed" |
yes | |
match.conditions[]{kind=content-completed}.contentId |
string | yes | min length 1 |
match.conditions[].kind |
all | any |
yes | |
match.conditions[].of |
array of object | yes | |
match.conditions[].of[]{kind=element-exists}.kind |
"element-exists" |
yes | |
match.conditions[].of[]{kind=element-exists}.locator |
Locator (see below) | yes | |
match.conditions[].of[]{kind=element-exists}.negate |
boolean | ||
match.conditions[].of[]{kind=element-text}.kind |
"element-text" |
yes | |
match.conditions[].of[]{kind=element-text}.locator |
Locator (see below) | yes | |
match.conditions[].of[]{kind=element-text}.op |
equals | contains | matches |
yes | |
match.conditions[].of[]{kind=element-text}.value |
string | yes | |
match.conditions[].of[]{kind=field-value}.kind |
"field-value" |
yes | |
match.conditions[].of[]{kind=field-value}.locator |
Locator (see below) | yes | |
match.conditions[].of[]{kind=field-value}.op |
equals | in | empty | not-empty |
yes | |
match.conditions[].of[]{kind=field-value}.value |
string or array of string | ||
match.conditions[].of[]{kind=url}.kind |
"url" |
yes | |
match.conditions[].of[]{kind=url}.pathPattern |
string | yes | |
match.conditions[].of[]{kind=segment}.kind |
"segment" |
yes | |
match.conditions[].of[]{kind=segment}.segmentId |
string | yes | min length 1 |
match.conditions[].of[]{kind=content-completed}.kind |
"content-completed" |
yes | |
match.conditions[].of[]{kind=content-completed}.contentId |
string | yes | min length 1 |
match.conditions[].of[].kind |
all | any |
yes | |
match.conditions[].of[].of |
array of object | yes | |
segments |
array of string | yes | |
schedule |
object | ||
schedule.from |
string | ||
schedule.to |
string | ||
tags |
array of string | yes | |
locale |
string | yes | |
translations |
map of map of string | ||
restricted |
boolean | ||
createdBy |
string | yes | |
updatedBy |
string | yes | |
createdAt |
string | yes | |
updatedAt |
string | yes | |
publishedAt |
string | ||
kind |
"resourceCenter" |
yes | |
title |
string | yes | |
tabs |
array of object | yes | |
tabs[].id |
help | tasks | search |
yes | |
tabs[].label |
string | yes | |
tabs[].enabled |
boolean | yes | |
sections |
array of object | yes | |
sections[].id |
string | yes | min length 1 |
sections[].title |
string | yes | |
sections[].items |
array of string | yes | |
sections[].showWhen |
object | ||
sections[].showWhen.pathPatterns |
array of string | yes | |
sections[].showWhen.form |
Locator (see below) | ||
sections[].showWhen.conditions |
array of object | ||
sections[].showWhen.conditions[]{kind=element-exists}.kind |
"element-exists" |
yes | |
sections[].showWhen.conditions[]{kind=element-exists}.locator |
Locator (see below) | yes | |
sections[].showWhen.conditions[]{kind=element-exists}.negate |
boolean | ||
sections[].showWhen.conditions[]{kind=element-text}.kind |
"element-text" |
yes | |
sections[].showWhen.conditions[]{kind=element-text}.locator |
Locator (see below) | yes | |
sections[].showWhen.conditions[]{kind=element-text}.op |
equals | contains | matches |
yes | |
sections[].showWhen.conditions[]{kind=element-text}.value |
string | yes | |
sections[].showWhen.conditions[]{kind=field-value}.kind |
"field-value" |
yes | |
sections[].showWhen.conditions[]{kind=field-value}.locator |
Locator (see below) | yes | |
sections[].showWhen.conditions[]{kind=field-value}.op |
equals | in | empty | not-empty |
yes | |
sections[].showWhen.conditions[]{kind=field-value}.value |
string or array of string | ||
sections[].showWhen.conditions[]{kind=url}.kind |
"url" |
yes | |
sections[].showWhen.conditions[]{kind=url}.pathPattern |
string | yes | |
sections[].showWhen.conditions[]{kind=segment}.kind |
"segment" |
yes | |
sections[].showWhen.conditions[]{kind=segment}.segmentId |
string | yes | min length 1 |
sections[].showWhen.conditions[]{kind=content-completed}.kind |
"content-completed" |
yes | |
sections[].showWhen.conditions[]{kind=content-completed}.contentId |
string | yes | min length 1 |
sections[].showWhen.conditions[].kind |
all | any |
yes | |
sections[].showWhen.conditions[].of |
array of object | yes | |
sections[].showWhen.conditions[].of[]{kind=element-exists}.kind |
"element-exists" |
yes | |
sections[].showWhen.conditions[].of[]{kind=element-exists}.locator |
Locator (see below) | yes | |
sections[].showWhen.conditions[].of[]{kind=element-exists}.negate |
boolean | ||
sections[].showWhen.conditions[].of[]{kind=element-text}.kind |
"element-text" |
yes | |
sections[].showWhen.conditions[].of[]{kind=element-text}.locator |
Locator (see below) | yes | |
sections[].showWhen.conditions[].of[]{kind=element-text}.op |
equals | contains | matches |
yes | |
sections[].showWhen.conditions[].of[]{kind=element-text}.value |
string | yes | |
sections[].showWhen.conditions[].of[]{kind=field-value}.kind |
"field-value" |
yes | |
sections[].showWhen.conditions[].of[]{kind=field-value}.locator |
Locator (see below) | yes | |
sections[].showWhen.conditions[].of[]{kind=field-value}.op |
equals | in | empty | not-empty |
yes | |
sections[].showWhen.conditions[].of[]{kind=field-value}.value |
string or array of string | ||
sections[].showWhen.conditions[].of[]{kind=url}.kind |
"url" |
yes | |
sections[].showWhen.conditions[].of[]{kind=url}.pathPattern |
string | yes | |
sections[].showWhen.conditions[].of[]{kind=segment}.kind |
"segment" |
yes | |
sections[].showWhen.conditions[].of[]{kind=segment}.segmentId |
string | yes | min length 1 |
sections[].showWhen.conditions[].of[]{kind=content-completed}.kind |
"content-completed" |
yes | |
sections[].showWhen.conditions[].of[]{kind=content-completed}.contentId |
string | yes | min length 1 |
sections[].showWhen.conditions[].of[].kind |
all | any |
yes | |
sections[].showWhen.conditions[].of[].of |
array of object | yes | |
sections[].tab |
help | search |
||
tasks |
object | ||
tasks.checklistIds |
array of string | yes | |
tasks.showWhen |
object | ||
tasks.showWhen.pathPatterns |
array of string | yes | |
tasks.showWhen.form |
Locator (see below) | ||
tasks.showWhen.conditions |
array of object | ||
tasks.showWhen.conditions[]{kind=element-exists}.kind |
"element-exists" |
yes | |
tasks.showWhen.conditions[]{kind=element-exists}.locator |
Locator (see below) | yes | |
tasks.showWhen.conditions[]{kind=element-exists}.negate |
boolean | ||
tasks.showWhen.conditions[]{kind=element-text}.kind |
"element-text" |
yes | |
tasks.showWhen.conditions[]{kind=element-text}.locator |
Locator (see below) | yes | |
tasks.showWhen.conditions[]{kind=element-text}.op |
equals | contains | matches |
yes | |
tasks.showWhen.conditions[]{kind=element-text}.value |
string | yes | |
tasks.showWhen.conditions[]{kind=field-value}.kind |
"field-value" |
yes | |
tasks.showWhen.conditions[]{kind=field-value}.locator |
Locator (see below) | yes | |
tasks.showWhen.conditions[]{kind=field-value}.op |
equals | in | empty | not-empty |
yes | |
tasks.showWhen.conditions[]{kind=field-value}.value |
string or array of string | ||
tasks.showWhen.conditions[]{kind=url}.kind |
"url" |
yes | |
tasks.showWhen.conditions[]{kind=url}.pathPattern |
string | yes | |
tasks.showWhen.conditions[]{kind=segment}.kind |
"segment" |
yes | |
tasks.showWhen.conditions[]{kind=segment}.segmentId |
string | yes | min length 1 |
tasks.showWhen.conditions[]{kind=content-completed}.kind |
"content-completed" |
yes | |
tasks.showWhen.conditions[]{kind=content-completed}.contentId |
string | yes | min length 1 |
tasks.showWhen.conditions[].kind |
all | any |
yes | |
tasks.showWhen.conditions[].of |
array of object | yes | |
tasks.showWhen.conditions[].of[]{kind=element-exists}.kind |
"element-exists" |
yes | |
tasks.showWhen.conditions[].of[]{kind=element-exists}.locator |
Locator (see below) | yes | |
tasks.showWhen.conditions[].of[]{kind=element-exists}.negate |
boolean | ||
tasks.showWhen.conditions[].of[]{kind=element-text}.kind |
"element-text" |
yes | |
tasks.showWhen.conditions[].of[]{kind=element-text}.locator |
Locator (see below) | yes | |
tasks.showWhen.conditions[].of[]{kind=element-text}.op |
equals | contains | matches |
yes | |
tasks.showWhen.conditions[].of[]{kind=element-text}.value |
string | yes | |
tasks.showWhen.conditions[].of[]{kind=field-value}.kind |
"field-value" |
yes | |
tasks.showWhen.conditions[].of[]{kind=field-value}.locator |
Locator (see below) | yes | |
tasks.showWhen.conditions[].of[]{kind=field-value}.op |
equals | in | empty | not-empty |
yes | |
tasks.showWhen.conditions[].of[]{kind=field-value}.value |
string or array of string | ||
tasks.showWhen.conditions[].of[]{kind=url}.kind |
"url" |
yes | |
tasks.showWhen.conditions[].of[]{kind=url}.pathPattern |
string | yes | |
tasks.showWhen.conditions[].of[]{kind=segment}.kind |
"segment" |
yes | |
tasks.showWhen.conditions[].of[]{kind=segment}.segmentId |
string | yes | min length 1 |
tasks.showWhen.conditions[].of[]{kind=content-completed}.kind |
"content-completed" |
yes | |
tasks.showWhen.conditions[].of[]{kind=content-completed}.contentId |
string | yes | min length 1 |
tasks.showWhen.conditions[].of[].kind |
all | any |
yes | |
tasks.showWhen.conditions[].of[].of |
array of object | yes | |
tasks.badge |
boolean | ||
autoSuggest |
boolean | yes | |
search |
object | ||
search.synonyms |
array of array of string | ||
search.exclude |
array of string | ||
search.popular |
array of string | ||
search.noResults |
object | ||
search.noResults.text |
string | yes | |
search.noResults.url |
string |
App¶
Per-application settings: environments, test id attributes, theme, help bubble, CSS variables.
| Path | Type | Required | Constraints |
|---|---|---|---|
appKey |
string | yes | |
name |
string | yes | |
environments |
array of object | yes | |
environments[].name |
string | yes | |
environments[].origins |
array of string | yes | |
testIdAttributes |
array of string | yes | |
themeOverride |
object | ||
themeOverride.fontFamily |
string | ||
themeOverride.fontSize |
string | ||
themeOverride.textColor |
string | ||
themeOverride.mutedColor |
string | ||
themeOverride.surfaceColor |
string | ||
themeOverride.borderColor |
string | ||
themeOverride.primaryColor |
string | ||
themeOverride.onPrimaryColor |
string | ||
themeOverride.warningColor |
string | ||
themeOverride.successColor |
string | ||
themeOverride.radius |
string | ||
themeOverride.shadow |
string | ||
themeOverride.colorScheme |
light | dark |
||
textCapture |
boolean | yes | |
helpBubble |
object | yes | |
helpBubble.enabled |
boolean | yes | |
helpBubble.position |
bottom-right | bottom-left | top-right | top-left |
yes | |
helpBubble.offset |
object | ||
helpBubble.offset.x |
number | ||
helpBubble.offset.y |
number | ||
conditionSourceFields |
array of Locator (see below) | yes | |
cssVars |
map of string | ||
maxAnnouncements |
integer | min 1 |
Locator¶
How a step finds its element: frame hops, shadow path, strategies and a fingerprint.
| Path | Type | Required | Constraints |
|---|---|---|---|
version |
1 |
yes | |
frame |
array of object | yes | |
frame[].selector |
string | yes | |
frame[].src |
string | ||
shadowPath |
array of string | yes | |
strategies |
array of object | yes | |
strategies[]{kind=testid}.kind |
"testid" |
yes | |
strategies[]{kind=testid}.attr |
string | yes | |
strategies[]{kind=testid}.value |
string | yes | |
strategies[]{kind=id}.kind |
"id" |
yes | |
strategies[]{kind=id}.value |
string | yes | |
strategies[]{kind=aria}.kind |
"aria" |
yes | |
strategies[]{kind=aria}.role |
string | yes | |
strategies[]{kind=aria}.name |
string | yes | |
strategies[]{kind=label}.kind |
"label" |
yes | |
strategies[]{kind=label}.text |
string | yes | |
strategies[]{kind=text}.kind |
"text" |
yes | |
strategies[]{kind=text}.tag |
string | yes | |
strategies[]{kind=text}.text |
string | yes | |
strategies[]{kind=text}.exact |
boolean | yes | |
strategies[]{kind=css}.kind |
"css" |
yes | |
strategies[]{kind=css}.selector |
string | yes | |
strategies[]{kind=xpath}.kind |
"xpath" |
yes | |
strategies[]{kind=xpath}.expr |
string | yes | |
fingerprint |
object | yes | |
fingerprint.tag |
string | yes | |
fingerprint.role |
string | ||
fingerprint.text |
string | max length 80 |
|
fingerprint.attrs |
map of string | yes | |
fingerprint.ancestorTexts |
array of string | yes | max items 3 |
fingerprint.siblingIndex |
integer | yes | min 0 |
fingerprint.rect |
object | yes | |
fingerprint.rect.x |
number | yes | |
fingerprint.rect.y |
number | yes | |
fingerprint.rect.w |
number | yes | |
fingerprint.rect.h |
number | yes | |
fingerprint.rect.vw |
number | yes | |
fingerprint.rect.vh |
number | yes |
Manifest¶
What the content script gate reads to decide whether to inject the player.
| Path | Type | Required | Constraints |
|---|---|---|---|
appKey |
string | yes | |
env |
string | yes | |
generatedAt |
string | yes | |
disabled |
boolean | yes | |
items |
array of object | yes | |
items[].id |
string | yes | min length 1 |
items[].version |
integer | yes | |
items[].kind |
process | walkthrough | tipSet | launcher | hotspot | announcement | resource | checklist | resourceCenter |
yes | |
items[].match |
object | yes | |
items[].match.pathPatterns |
array of string | yes | |
items[].match.form |
Locator (see below) | ||
items[].match.conditions |
array of object | ||
items[].match.conditions[]{kind=element-exists}.kind |
"element-exists" |
yes | |
items[].match.conditions[]{kind=element-exists}.locator |
Locator (see below) | yes | |
items[].match.conditions[]{kind=element-exists}.negate |
boolean | ||
items[].match.conditions[]{kind=element-text}.kind |
"element-text" |
yes | |
items[].match.conditions[]{kind=element-text}.locator |
Locator (see below) | yes | |
items[].match.conditions[]{kind=element-text}.op |
equals | contains | matches |
yes | |
items[].match.conditions[]{kind=element-text}.value |
string | yes | |
items[].match.conditions[]{kind=field-value}.kind |
"field-value" |
yes | |
items[].match.conditions[]{kind=field-value}.locator |
Locator (see below) | yes | |
items[].match.conditions[]{kind=field-value}.op |
equals | in | empty | not-empty |
yes | |
items[].match.conditions[]{kind=field-value}.value |
string or array of string | ||
items[].match.conditions[]{kind=url}.kind |
"url" |
yes | |
items[].match.conditions[]{kind=url}.pathPattern |
string | yes | |
items[].match.conditions[]{kind=segment}.kind |
"segment" |
yes | |
items[].match.conditions[]{kind=segment}.segmentId |
string | yes | min length 1 |
items[].match.conditions[]{kind=content-completed}.kind |
"content-completed" |
yes | |
items[].match.conditions[]{kind=content-completed}.contentId |
string | yes | min length 1 |
items[].match.conditions[].kind |
all | any |
yes | |
items[].match.conditions[].of |
array of object | yes | |
items[].match.conditions[].of[]{kind=element-exists}.kind |
"element-exists" |
yes | |
items[].match.conditions[].of[]{kind=element-exists}.locator |
Locator (see below) | yes | |
items[].match.conditions[].of[]{kind=element-exists}.negate |
boolean | ||
items[].match.conditions[].of[]{kind=element-text}.kind |
"element-text" |
yes | |
items[].match.conditions[].of[]{kind=element-text}.locator |
Locator (see below) | yes | |
items[].match.conditions[].of[]{kind=element-text}.op |
equals | contains | matches |
yes | |
items[].match.conditions[].of[]{kind=element-text}.value |
string | yes | |
items[].match.conditions[].of[]{kind=field-value}.kind |
"field-value" |
yes | |
items[].match.conditions[].of[]{kind=field-value}.locator |
Locator (see below) | yes | |
items[].match.conditions[].of[]{kind=field-value}.op |
equals | in | empty | not-empty |
yes | |
items[].match.conditions[].of[]{kind=field-value}.value |
string or array of string | ||
items[].match.conditions[].of[]{kind=url}.kind |
"url" |
yes | |
items[].match.conditions[].of[]{kind=url}.pathPattern |
string | yes | |
items[].match.conditions[].of[]{kind=segment}.kind |
"segment" |
yes | |
items[].match.conditions[].of[]{kind=segment}.segmentId |
string | yes | min length 1 |
items[].match.conditions[].of[]{kind=content-completed}.kind |
"content-completed" |
yes | |
items[].match.conditions[].of[]{kind=content-completed}.contentId |
string | yes | min length 1 |
items[].match.conditions[].of[].kind |
all | any |
yes | |
items[].match.conditions[].of[].of |
array of object | yes | |
items[].segments |
array of string | yes | |
items[].trigger |
object | ||
items[].trigger{type=page-load}.type |
"page-load" |
yes | |
items[].trigger{type=page-load}.delayMs |
integer | min 0 |
|
items[].trigger{type=element-visible}.type |
"element-visible" |
yes | |
items[].trigger{type=element-visible}.locator |
Locator (see below) | yes | |
items[].trigger{type=element-click}.type |
"element-click" |
yes | |
items[].trigger{type=element-click}.locator |
Locator (see below) | yes | |
items[].trigger{type=launcher}.type |
"launcher" |
yes | |
items[].trigger{type=resource-center}.type |
"resource-center" |
yes | |
items[].trigger{type=url-param}.type |
"url-param" |
yes | |
items[].trigger{type=url-param}.name |
string | yes | |
items[].trigger{type=url-param}.value |
string | ||
items[].trigger{type=idle}.type |
"idle" |
yes | |
items[].trigger{type=idle}.seconds |
number | yes | |
items[].trigger{type=manual}.type |
"manual" |
yes | |
items[].frequency |
once | once-per-version | every-visit | until-completed | manual-only |
||
items[].restricted |
boolean | ||
items[].disabled |
boolean | ||
items[].schedule |
object | ||
items[].schedule.from |
string | ||
items[].schedule.to |
string |
Progress¶
Per-user state for one item.
| Path | Type | Required | Constraints |
|---|---|---|---|
userId |
string | yes | |
contentId |
string | yes | min length 1 |
version |
integer | yes | |
state |
active | paused | completed | dismissed | abandoned | snoozed |
yes | |
stageId |
string | min length 1 |
|
stepId |
string | min length 1 |
|
path |
array of string | yes | |
snoozedUntil |
string | ||
updatedAt |
string | yes |
GuidanceEvent¶
An analytics event. The service worker discards these today.
| Path | Type | Required | Constraints |
|---|---|---|---|
contentId |
string | yes | min length 1 |
version |
integer | yes | |
kind |
process | walkthrough | tipSet | launcher | hotspot | announcement | resource | checklist | resourceCenter |
yes | |
event |
shown | advanced | back | dismissed | snoozed | completed | goal-reached | abandoned | stage-entered | stage-skipped | anchor-missing | anchor-resolved-by | tip-opened | validation-shown | ... |
yes | |
stageId |
string | min length 1 |
|
stepId |
string | min length 1 |
|
strategyKind |
string | ||
durationMs |
number | ||
appKey |
string | yes | |
env |
string | yes | |
pathTemplate |
string | yes | |
at |
string | yes |
Segment¶
Audience segment. Stored, not evaluated in the MVP (decision 10).
| Path | Type | Required | Constraints |
|---|---|---|---|
id |
string | yes | min length 1 |
name |
string | yes | |
entraGroupIds |
array of string | ||
roles |
array of string | ||
locales |
array of string |
Bundle¶
The bundle.json inside a .guidepost.zip. Items are not expanded here; see ContentItem.
| Path | Type | Required | Constraints |
|---|---|---|---|
schemaVersion |
2 |
yes | |
exportedAt |
string | yes | |
sourceMode |
local | remote |
yes | |
apps |
array of object | yes | |
segments |
array of object | yes | |
items |
array of object | yes |