Update a tour
/tours/{id}Needscontent.editSaves changes to the working draft. Fields you leave out keep their value; null clears a nullable field. If it's live, visitors keep seeing the published version until you publish again. PUT is accepted as an alias.
Authorization
secretKeyAuthorizationBearer <sk_…>A secret API key from Settings → API keys. It acts with its creator's role.
Path Parameters
id*integerThe tour's id.
1 <= valueRequest Body
application/json- body
name?stringName. Default: "New Tour".
length <= 255urlPattern?stringPages it appears on: a full URL or path with * wildcards, e.g. https://app.acme.com/billing*, */settings/*, or * for every page.
length <= 500isActive?booleantrue also publishes the item to production in the same request (needs content.publish; refused with approval_required when the workspace requires review). Omit it to keep a draft.
cardBgColor?stringBackground Color. Hex color like #4f46e5. Default: "#ffffff".
^#[0-9a-fA-F]{6}$cardTextColor?stringText Color. Hex color like #4f46e5. Default: "#1f2937".
^#[0-9a-fA-F]{6}$cardBorderRadius?integerBorder Radius. Corner radius in pixels. Default: 12.
0 <= value <= 50cardPadding?integerPadding. Internal padding in pixels. Default: 20.
0 <= value <= 100cardShadow?stringShadow. One of: "none" (None), "0 2px 8px rgba(0,0,0,0.1)" (Small), "0 4px 20px rgba(0,0,0,0.15)" (Medium), "0 8px 30px rgba(0,0,0,0.2)" (Large), "0 12px 40px rgba(0,0,0,0.25)" (Extra Large). Default: "0 4px 20px rgba(0,0,0,0.15)".
"none""0 2px 8px rgba(0,0,0,0.1)""0 4px 20px rgba(0,0,0,0.15)""0 8px 30px rgba(0,0,0,0.2)""0 12px 40px rgba(0,0,0,0.25)"cardWidth?integerWidth. Tour card width in pixels. Default: 320.
200 <= value <= 800textAlign?stringText Alignment. One of: "left" (Left), "center" (Center), "right" (Right). Default: "left".
"left""center""right"cardBlurIntensity?integerBlur Intensity. Background blur intensity. Default: 0.
0 <= value <= 20cardBgOpacity?integerBackground Opacity. Background opacity percentage. Default: 100.
0 <= value <= 100showBorder?booleanShow Border. Default: false.
borderColor?stringBorder Color. Hex color like #4f46e5. Default: "#e5e7eb".
^#[0-9a-fA-F]{6}$borderThickness?integerBorder Thickness. Border thickness in pixels. Default: 1.
0 <= value <= 10titleSize?integerTitle Size. Title font size in pixels. Default: 16.
10 <= value <= 32bodySize?integerBody Size. Body font size in pixels. Default: 14.
10 <= value <= 24bodyLineHeight?numberBody Line Height. Line height multiplier. Default: 1.5.
1 <= value <= 3buttonColor?stringButton Color. Hex color like #4f46e5. Default: "#2563eb".
^#[0-9a-fA-F]{6}$buttonTextColor?stringButton Text Color. Hex color like #4f46e5. Default: "#ffffff".
^#[0-9a-fA-F]{6}$buttonBorderRadius?integerButton Border Radius. Button corner radius in pixels. Default: 8.
0 <= value <= 50buttonSize?stringButton Size. One of: "xxs" (Extra Extra Small), "xs" (Extra Small), "s" (Small), "m" (Medium), "l" (Large), "xl" (Extra Large). Default: "m".
"xxs""xs""s""m""l""xl"zIndex?integerZ-Index. Stacking order. Default: 10000.
0 <= value <= 99999scheduleType?stringSchedule Type. One of: "immediate" (Immediate), "scheduled" (Scheduled). Default: "immediate".
"immediate""scheduled"scheduleDate?|Schedule Date.
scheduleTime?|Schedule Time.
timezone?stringTimezone. Default: "UTC".
length <= 100forceTimezone?booleanForce Timezone. Force this timezone instead of user's local timezone. Default: false.
frequencyType?stringFrequency Type. How often to show this tour. One of: "once" (Show Once), "always" (Always Show), "every_visit" (Every Visit), "every_n_visits" (Every N Visits), "every_n_days" (Every N Days). Default: "once".
"once""always""every_visit""every_n_visits""every_n_days"frequencyCount?integerFrequency Count. Number of visits/days between displays. Default: 1.
1 <= value <= 100frequencyDays?integerFrequency Days. Days between displays (for every_n_days). Default: 7.
1 <= value <= 365audienceRules?|Audience Rules. Advanced audience targeting rules.
priority?integerPriority. When several pop-ups qualify on the same page, the highest priority shows first. Default: 50.
0 <= value <= 100goal?|Goal. What counts as success: an event, a page visit or completing other content, within N days.
holdoutPercent?integerControl group. Share of eligible visitors who don't see this, to measure its effect on the goal. Default: 0.
0 <= value <= 50steps?array<>The full ordered list of steps. Steps with an id are kept (and updated); others are created; missing ones are deleted.
items <= 50Response Body
OK
application/json- response
tour*A tour with its working draft. What visitors see is the version in publication.
curl -X PATCH 'https://app.cueston.com/api/tours/1' \
-H 'Content-Type: application/json' \
-d '{}'{
"tour": {
"id": 42,
"name": "Onboarding tour",
"urlPattern": "https://app.acme.com/*",
"isActive": true,
"cardBgColor": "string",
"cardTextColor": "string",
"cardBorderRadius": 0,
"cardPadding": 0,
"cardShadow": "none",
"cardWidth": 200,
"textAlign": "left",
"cardBlurIntensity": 0,
"cardBgOpacity": 0,
"showBorder": true,
"borderColor": "string",
"borderThickness": 0,
"titleSize": 10,
"bodySize": 10,
"bodyLineHeight": 1,
"buttonColor": "string",
"buttonTextColor": "string",
"buttonBorderRadius": 0,
"buttonSize": "xxs",
"zIndex": 0,
"scheduleType": "immediate",
"scheduleDate": "string",
"scheduleTime": "string",
"timezone": "string",
"forceTimezone": true,
"frequencyType": "once",
"frequencyCount": 1,
"frequencyDays": 1,
"audienceRules": {
"enabled": false,
"matchType": "all",
"rules": [
{
"id": "string",
"attribute": "string",
"operator": "equals",
"value": "string",
"key": "string"
}
]
},
"priority": 0,
"goal": {
"type": "event",
"event": "string",
"urlPattern": "https://app.acme.com/*",
"contentRef": "string",
"withinDays": 7
},
"holdoutPercent": 0,
"steps": [
{
"id": 42,
"stepOrder": 0,
"selector": "#export-button",
"title": "Welcome to Acme",
"content": "Export any report as CSV from here.",
"imageUrl": null,
"buttonText": "Next",
"placement": "auto",
"pulseEnabled": true,
"zIndex": 0
}
],
"createdAt": "2026-10-26T09:30:00Z",
"updatedAt": "2026-10-26T09:30:00Z",
"publication": {
"production": {
"versionId": 7,
"version": 3,
"publishedAt": "2026-10-26T09:30:00Z"
},
"staging": {
"versionId": 7,
"version": 3,
"publishedAt": "2026-10-26T09:30:00Z"
}
},
"hasUnpublishedChanges": true
}
}