Convert Experience Variations API
Each **Experience** has one or more **Variations** which are presented to different groups of visitor in order to monitor the results of different changes or to personalize visitor's experience
Each **Experience** has one or more **Variations** which are presented to different groups of visitor in order to monitor the results of different changes or to personalize visitor's experience
openapi: 3.1.0
info:
title: Convert Accounts Experience Variations API
description: 'Move your app forward with the Convert API. The Convert API allows
you to manage your Convert Experiences projects using code. The REST API is
an interface for managing and extending functionality of Convert. For
example, instead of creating and maintaining projects using the Convert
Experiences web dashboard you can create an experiment programmatically.
Additionally, if you prefer to run custom analysis on experiment results you
can leverage the API to pull data from Convert Experiences into your own
workflow. If you do not have a Convert account already, sign up for a free
developer account at https://www.convert.com/api/.
*[Convert API V1](/doc/v1) is still available and documentation can be found [here](/doc/v1) but using it is highly discouraged
as it will be phased out in the future*
'
version: 2.0.0
servers:
- url: https://api.convert.com/api/v2
description: Live API server
- url: https://apidev.convert.com/api/v2
description: DEV API server
- url: http://apidev.convert.com:5000/api/v2
description: DEV mocked API server
tags:
- name: Experience Variations
description: 'Each **Experience** has one or more **Variations** which are presented to different groups of visitor
in order to monitor the results of different changes or to personalize visitor''s experience
'
paths:
/accounts/{account_id}/projects/{project_id}/experiences/{experience_id}/variations/{variation_id}/update:
put:
operationId: updateExperienceVariation
summary: Update an experience variation
description: 'Modifies an existing variation within an experience.
This can include changing its name, description, traffic distribution, status (running/stopped), or the actual changes (CSS, JS, HTML modifications) it applies.
The Knowledge Base article "How do I edit my variations?" covers the UI aspect.
'
tags:
- Experience Variations
parameters:
- name: account_id
in: path
required: true
description: ID of the account that owns the retrieved/saved data
schema:
type: integer
- name: project_id
description: ID of the project to which save/retrieved data is connected
in: path
required: true
schema:
type: integer
- name: experience_id
description: The ID of the updated experience
in: path
required: true
schema:
type: integer
- name: variation_id
description: The ID of the variation to be updated
in: path
required: true
schema:
type: integer
requestBody:
$ref: '#/components/requestBodies/UpdateExperienceVariationRequest'
responses:
'200':
$ref: '#/components/responses/ExperienceVariationResponse'
default:
$ref: '#/components/responses/ErrorResponse'
/accounts/{account_id}/projects/{project_id}/experiences/{experience_id}/variations/{variation_id}/delete:
delete:
operationId: deleteExperienceVariation
summary: Delete an experience variation
description: 'Permanently removes a variation from an experience.
Note: Deleting variations from an active or previously active experiment can impact statistical validity and is generally discouraged.
It''s often better to stop traffic to a variation.
The Knowledge Base article "The Visual Editor in Convert Experiences" (Variations section) mentions: "You cannot delete a variation from an experience that is active or has been previously started and then paused."
'
tags:
- Experience Variations
parameters:
- name: account_id
in: path
required: true
description: ID of the account that owns the retrieved/saved data
schema:
type: integer
- name: project_id
description: ID of the project to which save/retrieved data is connected
in: path
required: true
schema:
type: integer
- name: experience_id
description: The ID of the experience to which the variation belongs
in: path
required: true
schema:
type: integer
- name: variation_id
description: The ID of the variation to be deleted
in: path
required: true
schema:
type: integer
responses:
'200':
$ref: '#/components/responses/SuccessResponse'
default:
$ref: '#/components/responses/ErrorResponse'
/accounts/{account_id}/projects/{project_id}/experiences/{experience_id}/variations/{variation_id}/screenshot:
get:
operationId: getExperienceVariationScreenshot
summary: Get screenshot for an experience variation
description: 'Retrieves the screenshot image for a specific variation, base64 encoded.
Screenshots help visualize the changes applied by a variation and are shown in the Convert UI.
Can request a full-size image or a thumbnail.
The Knowledge Base article "Whitelist IPs for Screenshot Previews" is related.
'
tags:
- Experience Variations
parameters:
- name: account_id
in: path
required: true
description: ID of the account that owns the retrieved/saved data
schema:
type: integer
- name: project_id
description: ID of the project to which save/retrieved data is connected
in: path
required: true
schema:
type: integer
- name: experience_id
description: The ID of the experience to which the variation belongs
in: path
required: true
schema:
type: integer
- name: variation_id
description: The ID of the variation to be deleted
in: path
required: true
schema:
type: integer
- name: size
description: The size of the returned image, if omitted will return full size
in: query
schema:
type: string
enum:
- thumb
- name: force_download
description: Flag used to force download instead of inline response
in: query
schema:
type: boolean
responses:
'200':
$ref: '#/components/responses/ImageResponseBase64'
default:
$ref: '#/components/responses/ErrorResponse'
post:
operationId: uploadExperienceVariationScreenshot
summary: Upload a screenshot for an experience variation
description: 'Allows uploading a custom screenshot image for a specific variation.
This can be useful if automatic screenshot generation fails or if a specific view needs to be captured.
The uploaded image will be displayed in the Convert UI for this variation.
'
tags:
- Experience Variations
parameters:
- name: account_id
in: path
required: true
description: ID of the account that owns the retrieved/saved data
schema:
type: integer
- name: project_id
description: ID of the project to which save/retrieved data is connected
in: path
required: true
schema:
type: integer
- name: experience_id
description: The ID of the experience to which the variation belongs
in: path
required: true
schema:
type: integer
- name: variation_id
description: The ID of the variation to be deleted
in: path
required: true
schema:
type: integer
- name: size
description: The size of the returned image, if omitted will return full size
in: query
schema:
type: string
enum:
- thumb
- name: force_download
description: Flag used to force download instead of inline response
in: query
schema:
type: boolean
requestBody:
$ref: '#/components/requestBodies/UploadImageNoNameRequest'
responses:
'200':
$ref: '#/components/responses/ImageResponseBase64'
default:
$ref: '#/components/responses/ErrorResponse'
/accounts/{account_id}/projects/{project_id}/experiences/{experience_id}/variations/{variation_id}/convert:
post:
operationId: convertExperienceVariation
summary: Convert a winning variation into a new experience (Deploy or A/B)
description: 'Takes a variation (often a winning one from an A/B test) and creates a new, separate experience from it.
This new experience can be a ''Deploy'' (to roll out the change to a specific audience) or another ''A/B'' test (to further iterate).
This is a common step after an A/B test concludes with a winner.
The Knowledge Base article "What about Deployments?" mentions: "Create a new Deploy from a Variation or Winning Variation from another Experiment".
'
tags:
- Experience Variations
parameters:
- name: account_id
in: path
required: true
description: ID of the account that owns the retrieved/saved data
schema:
type: integer
- name: project_id
description: ID of the project to which save/retrieved data is connected
in: path
required: true
schema:
type: integer
- name: experience_id
description: The ID of the experience to which the variation belongs
in: path
required: true
schema:
type: integer
- name: variation_id
description: The ID of the variation to be converted
in: path
required: true
schema:
type: integer
requestBody:
$ref: '#/components/requestBodies/ConvertExperienceVariationRequest'
responses:
'200':
$ref: '#/components/responses/ExperienceResponse'
default:
$ref: '#/components/responses/ErrorResponse'
components:
schemas:
RuleObjectNoUrl:
type: object
nullable: true
description: 'Similar to `RuleObject`, but the individual `RuleElementNoUrl` conditions within `OR_WHEN` arrays cannot include URL-based matching types.
Used for ''permanent'' or ''transient'' audiences where URL context is not persistently evaluated or relevant for the audience type.
'
properties:
OR:
description: An array of AND-blocks.
type: array
items:
type: object
properties:
AND:
description: An array of OR_WHEN-blocks.
type: array
items:
type: object
properties:
OR_WHEN:
description: An array of individual rule elements that do not involve URL matching.
type: array
items:
$ref: '#/components/schemas/RuleElementNoUrl'
TrackingScriptReleaseScheduled:
allOf:
- $ref: '#/components/schemas/TrackingScriptReleaseBase'
- type: object
additionalProperties: false
properties:
type:
enum:
- scheduled
automatic_apply_on:
$ref: '#/components/schemas/TrackingScriptReleaseAutomaticApplyOn'
ExperienceChangeDefaultCodeDataAdd:
type: object
description: Data for creating a new 'defaultCode' type change.
allOf:
- $ref: '#/components/schemas/ExperienceChangeIdReadOnly'
- $ref: '#/components/schemas/ExperienceChangeDefaultCodeDataBase'
- properties:
data:
required:
- js
- css
- custom_js
required:
- type
- data
GA_SettingsBase:
type: object
properties:
enabled:
type: boolean
description: If true, integration with Google Analytics is enabled for this project or experience, allowing experiment data to be sent to GA.
MinuteOfHourMatchRulesTypes:
type: string
enum:
- local_time_minute_of_hour
- project_time_minute_of_hour
CustomDomainOwnershipVerificationItem:
type: object
properties:
name:
type: string
description: The name of the DNS record.
type:
$ref: '#/components/schemas/DNSRecordTypes'
value:
type: string
description: The value of the DNS record.
SE_ProcTypes:
type: string
description: 'The statistical methodology used for analyzing experiment results and determining winners.
- `frequentist`: Traditional hypothesis testing approach using p-values and confidence intervals (e.g., T-tests). KB: "Statistical Methods Used".
- `bayesian`: Bayesian statistical approach providing probabilities of one variation being better than another (e.g., Chance to Win). KB: "Statistical Models in Convert.com''s A/B Testing Platform".
'
enum:
- frequentist
- bayesian
SimpleGoal:
type: object
properties:
id:
description: The unique numerical identifier of the goal.
type: integer
name:
description: The user-defined, friendly name of the goal.
type: string
SimpleLocationExpandable:
anyOf:
- type: integer
description: Location ID
- $ref: '#/components/schemas/SimpleLocation'
LocationTriggerManual:
allOf:
- $ref: '#/components/schemas/LocationTriggerBase'
- type: object
properties:
type:
type: string
enum:
- manual
additionalProperties: false
ExperienceIntegrationSitecatalyst:
allOf:
- $ref: '#/components/schemas/ExperienceIntegrationBase'
- type: object
properties:
evar:
type: string
description: Custom dimension where experience data should be sent to.
required:
- evar
ExperienceIntegrationGoogleAnalytics:
oneOf:
- $ref: '#/components/schemas/ExperienceIntegrationGA3'
- $ref: '#/components/schemas/ExperienceIntegrationGA4'
discriminator:
propertyName: type
mapping:
ga3: '#/components/schemas/ExperienceIntegrationGA3'
ga4: '#/components/schemas/ExperienceIntegrationGA4'
LocationTrigger:
description: 'Defines how and when an experience associated with this location should be activated for a visitor who matches the location''s rules.
The `type` determines the activation mechanism.
Knowledge Base: "Locations" - "Dynamic Website Triggers".
'
oneOf:
- $ref: '#/components/schemas/LocationTriggerDomElement'
- $ref: '#/components/schemas/LocationTriggerCallback'
- $ref: '#/components/schemas/LocationTriggerManual'
- $ref: '#/components/schemas/LocationTriggerUponRun'
discriminator:
propertyName: type
mapping:
dom_element: '#/components/schemas/LocationTriggerDomElement'
callback: '#/components/schemas/LocationTriggerCallback'
manual: '#/components/schemas/LocationTriggerManual'
upon_run: '#/components/schemas/LocationTriggerUponRun'
LanguageMatchRulesTypes:
type: string
enum:
- language
LocationStatuses:
type: string
description: 'The current status of a location:
- `active`: The location is active and can be used for targeting experiences.
- `archived`: The location is archived and no longer available for new experiences, but its definition is preserved. Archived locations can often be cloned.
Knowledge Base: "Benefits of Archiving Unused Goals, Locations, and Audiences."
'
enum:
- active
- archived
default: active
UpdateExperienceVariationRequestData:
allOf:
- $ref: '#/components/schemas/ExperienceVariationBaseExtended'
- type: object
properties:
changes:
description: 'An array of changes that this variation would apply. Empty array will remove changes.
'
type: array
items:
anyOf:
- $ref: '#/components/schemas/ExperienceChangeId'
- $ref: '#/components/schemas/ExperienceChangeAdd'
- $ref: '#/components/schemas/ExperienceChangeUpdate'
RuleObject:
type: object
nullable: true
description: 'Defines the logical structure for combining multiple rule conditions. It uses a nested OR -> AND -> OR_WHEN structure.
- The top-level `OR` array means if *any* of its contained AND blocks evaluate to true, the entire rule set is true.
- Each object within the `OR` array has an `AND` array. For this AND block to be true, *all* of its contained OR_WHEN blocks must evaluate to true.
- Each object within the `AND` array has an `OR_WHEN` array. For this OR_WHEN block to be true, *any* of its individual `RuleElement` conditions must evaluate to true.
This structure allows for complex logical expressions like `(CondA AND CondB) OR (CondC AND CondD)`.
'
properties:
OR:
description: An array of AND-blocks. The overall rule matches if any of these AND-blocks match.
type: array
items:
type: object
properties:
AND:
description: An array of OR_WHEN-blocks. This AND-block matches if all its OR_WHEN-blocks match.
type: array
items:
type: object
properties:
OR_WHEN:
description: An array of individual rule elements. This OR_WHEN-block matches if any of its rule elements match.
type: array
items:
$ref: '#/components/schemas/RuleElement'
ScrollPercentageGoal:
allOf:
- $ref: '#/components/schemas/GoalBase'
- type: object
properties:
type:
enum:
- scroll_percentage
settings:
$ref: '#/components/schemas/ScrollPercentageGoalSettings'
ExperienceChangeFullStackFeatureBase:
type: object
description: Defines a change for a Full Stack experiment that involves enabling or configuring a specific 'Feature' and its variables for this variation.
allOf:
- $ref: '#/components/schemas/ExperienceChangeBase'
- type: object
properties:
type:
enum:
- fullStackFeature
data:
type: object
description: Describes structure for "fullStackFeature" type of experience change
properties:
feature_id:
description: The **id** of the feature connected to this change
type: integer
variables_data:
type: object
description: A key-value object defined by user which describes the variables values. Where the key is variable name defined in connected feature and value is a variable's value with corresponding type
WeatherConditionMatchRule:
allOf:
- $ref: '#/components/schemas/BaseRuleWithWeatherConditionValue'
- type: object
required:
- rule_type
properties:
rule_type:
$ref: '#/components/schemas/WeatherConditionMatchRulesTypes'
matching:
allOf:
- $ref: '#/components/schemas/BaseMatch'
- type: object
properties:
match_type:
$ref: '#/components/schemas/TextMatchingOptions'
SE_ProcSettings:
description: Overall settings for the statistical engine processing results for this experience.
oneOf:
- $ref: '#/components/schemas/SE_ProcSettingsFrequentist'
- $ref: '#/components/schemas/SE_ProcSettingsBayesian'
discriminator:
propertyName: stats_type
mapping:
frequentist: '#/components/schemas/SE_ProcSettingsFrequentist'
bayesian: '#/components/schemas/SE_ProcSettingsBayesian'
SubmitsFormGoal:
allOf:
- $ref: '#/components/schemas/GoalBase'
- type: object
properties:
type:
enum:
- submits_form
settings:
$ref: '#/components/schemas/SubmitsFormGoalSettings'
RuleElement:
oneOf:
- $ref: '#/components/schemas/GenericTextMatchRule'
- $ref: '#/components/schemas/GenericNumericMatchRule'
- $ref: '#/components/schemas/GenericBoolMatchRule'
- $ref: '#/components/schemas/GenericTextKeyValueMatchRule'
- $ref: '#/components/schemas/GenericNumericKeyValueMatchRule'
- $ref: '#/components/schemas/GenericBoolKeyValueMatchRule'
- $ref: '#/components/schemas/CookieMatchRule'
- $ref: '#/components/schemas/CountryMatchRule'
- $ref: '#/components/schemas/LanguageMatchRule'
- $ref: '#/components/schemas/GoalTriggeredMatchRule'
- $ref: '#/components/schemas/SegmentBucketedMatchRule'
- $ref: '#/components/schemas/DayOfWeekMatchRule'
- $ref: '#/components/schemas/HourOfDayMatchRule'
- $ref: '#/components/schemas/MinuteOfHourMatchRule'
- $ref: '#/components/schemas/BrowserNameMatchRule'
- $ref: '#/components/schemas/OsMatchRule'
- $ref: '#/components/schemas/WeatherConditionMatchRule'
- $ref: '#/components/schemas/VisitorTypeMatchRule'
- $ref: '#/components/schemas/JsConditionMatchRule'
discriminator:
propertyName: rule_type
mapping:
url: '#/components/schemas/GenericTextMatchRule'
url_with_query: '#/components/schemas/GenericTextMatchRule'
query_string: '#/components/schemas/GenericTextMatchRule'
campaign: '#/components/schemas/GenericTextMatchRule'
keyword: '#/components/schemas/GenericTextMatchRule'
medium: '#/components/schemas/GenericTextMatchRule'
source_name: '#/components/schemas/GenericTextMatchRule'
avg_time_page: '#/components/schemas/GenericNumericMatchRule'
city: '#/components/schemas/GenericTextMatchRule'
country: '#/components/schemas/CountryMatchRule'
region: '#/components/schemas/GenericTextMatchRule'
days_since_last_visit: '#/components/schemas/GenericNumericMatchRule'
language: '#/components/schemas/LanguageMatchRule'
pages_visited_count: '#/components/schemas/GenericNumericMatchRule'
goal_triggered: '#/components/schemas/GoalTriggeredMatchRule'
visit_duration: '#/components/schemas/GenericNumericMatchRule'
cookie: '#/components/schemas/CookieMatchRule'
visitor_type: '#/components/schemas/VisitorTypeMatchRule'
visits_count: '#/components/schemas/GenericNumericMatchRule'
bucketed_into_experience: '#/components/schemas/GenericBoolMatchRule'
bucketed_into_segment: '#/components/schemas/SegmentBucketedMatchRule'
local_time_day_of_week: '#/components/schemas/DayOfWeekMatchRule'
local_time_hour_of_day: '#/components/schemas/HourOfDayMatchRule'
local_time_minute_of_hour: '#/components/schemas/MinuteOfHourMatchRule'
project_time_day_of_week: '#/components/schemas/DayOfWeekMatchRule'
project_time_hour_of_day: '#/components/schemas/HourOfDayMatchRule'
project_time_minute_of_hour: '#/components/schemas/MinuteOfHourMatchRule'
browser_name: '#/components/schemas/BrowserNameMatchRule'
browser_version: '#/components/schemas/GenericTextMatchRule'
os: '#/components/schemas/OsMatchRule'
user_agent: '#/components/schemas/GenericTextMatchRule'
is_desktop: '#/components/schemas/GenericBoolMatchRule'
is_mobile: '#/components/schemas/GenericBoolMatchRule'
is_tablet: '#/components/schemas/GenericBoolMatchRule'
js_condition: '#/components/schemas/JsConditionMatchRule'
page_tag_page_type: '#/components/schemas/GenericTextMatchRule'
page_tag_category_id: '#/components/schemas/GenericTextMatchRule'
page_tag_category_name: '#/components/schemas/GenericTextMatchRule'
page_tag_product_sku: '#/components/schemas/GenericTextMatchRule'
page_tag_product_name: '#/components/schemas/GenericTextMatchRule'
page_tag_product_price: '#/components/schemas/GenericNumericMatchRule'
page_tag_customer_id: '#/components/schemas/GenericTextMatchRule'
page_tag_custom_1: '#/components/schemas/GenericTextMatchRule'
page_tag_custom_2: '#/components/schemas/GenericTextMatchRule'
page_tag_custom_3: '#/components/schemas/GenericTextMatchRule'
page_tag_custom_4: '#/components/schemas/GenericTextMatchRule'
weather_condition: '#/components/schemas/WeatherConditionMatchRule'
generic_text_key_value: '#/components/schemas/GenericTextKeyValueMatchRule'
generic_numeric_key_value: '#/components/schemas/GenericNumericKeyValueMatchRule'
generic_bool_key_value: '#/components/schemas/GenericBoolKeyValueMatchRule'
NumericOutlierMinMax:
allOf:
- $ref: '#/components/schemas/NumericOutlierBase'
- type: object
additionalProperties: false
properties:
detection_type:
enum:
- min_max
min:
type: number
description: Minimum value for the outlier detection, under which, the value is considered an outlier
max:
type: number
description: Maximum value for the outlier detection, over which, the value is considered an outlier
Experience:
allOf:
- type: object
properties:
id:
type: integer
description: Experience's ID which identify an experience in the system
project:
$ref: '#/components/schemas/ProjectExpandable'
alerts:
type: array
items:
$ref: '#/components/schemas/ExperienceAlert'
collaborators:
type: array
items:
$ref: '#/components/schemas/ExperienceCollaborator'
audiences:
type: array
description: The list of audiences for which this experience is supposed to run
items:
$ref: '#/components/schemas/AudienceExpandable'
locations:
type: array
description: The list of locations on which this experience is supposed to run
items:
$ref: '#/components/schemas/LocationExpandable'
goals:
type: array
description: The list of goals connected to this experience; experience of type deploy does not have goals attached;
items:
$ref: '#/components/schemas/GoalExpandable'
tags:
type: array
description: The list of tags connected to this experience
items:
$ref: '#/components/schemas/TagExpandable'
multipage_pages:
type: array
description: Only for multipage experience type
items:
$ref: '#/components/schemas/MultipageExperiencePage'
customizations:
$ref: '#/components/schemas/ExperienceUserCustomizations'
stats:
description: Experience's condensed statistics(only for experiences that get access to a report)
type: object
properties:
goal_id:
description: 'ID of the goal used to calculate the stats. It can be provided in the request or otherwise it defaults to experience''s Primary Goal
'
type: integer
conversions:
description: Number of conversions recorded for after this experience was presented, for the primary goal or the goal given inside the request(if any)
type: integer
variations_observed_results:
description: Results observed for each experience's variation
type: array
items:
type: object
properties:
variation_id:
description: Variation id
type: integer
improvement:
description: Improvement observed over Baseline, as percentage
type: number
probability_beat_control:
description: Calculated probability to beat control. Will be 0 if cannot be calculated yet
type: number
test_result:
description: Result of the statistical test for this variation, compared to the baseline
type: string
enum:
- winner
- losing
- notConcluded
- noChange
revenue_per_visitor:
description: Calculated revenue per visitor. Applicable for revenue goals, otherwise null.
type: number
default: null
mab_allocation:
description: Calculated mab allocation. Applicable for experiences with enabled mab_allocation.
type: number
default: null
visitors:
description: Number of unique visitors tracked for this experience
type: integer
variations:
type: array
description: 'The list of variations of this experience.
**Note:** This is the final list of variations so any variation not provided, which was previously connected, would get deleted.
'
items:
$ref: '#/components/schemas/ExperienceVariation'
status:
$ref: '#/components/schemas/ExperienceStatuses'
- $ref: '#/components/schemas/ExperienceBase'
GoalTriggeredMatchRule:
allOf:
- $ref: '#/components/schemas/BaseRuleWithGoalTriggeredValue'
- type: object
required:
- rule_type
properties:
rule_type:
$ref: '#/components/schemas/GoalTriggeredMatchRulesTypes'
matching:
allOf:
- $ref: '#/components/schemas/BaseMatch'
- type: object
properties:
match_type:
$ref: '#/components/schemas/ChoiceMatchingOptions'
CookieMatchRule:
allOf:
- $ref: '#/components/schemas/BaseRuleWithStringValue'
- type: object
required:
- rule_type
properties:
rule_type:
$ref: '#/components/schemas/CookieMatchRulesTypes'
matching:
allOf:
- $ref: '#/components/schemas/BaseMatch'
- type: object
properties:
match_type:
$ref: '#/components/schemas/CookieMatchingOptions'
key:
description: The name of the cookie which value is compared to the given rule value
type: string
ExperienceIntegrationMixpanel:
allOf:
- $ref: '#/components/schemas/ExperienceIntegrationBase'
NumericOutlierNone:
allOf:
- $ref: '#/components/schemas/NumericOutlierBase'
- type: object
additionalProperties: false
properties:
detection_type:
enum:
- none
SimpleGoalExpandable:
oneOf:
- type: integer
description: Goal ID
- $ref: '#/components/schemas/SimpleGoal'
JsConditionMatchRulesTypes:
type: string
enum:
- js_condition
IntegrationGA3:
type: object
properties:
type:
enum:
- ga3
property_UA:
type: string
maxLength: 150
nullable: true
description: The Universal Analytics Property ID (e.g., "UA-XXXXXXXX-Y") to which Convert experiment data will be sent.
VisitorTypeMatchRulesTypes:
type: string
enum:
- visitor_type
LocationTriggerTypes:
type: string
default: upon_run
description:
# --- truncated at 32 KB (188 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/convert/refs/heads/main/openapi/convert-experience-variations-api-openapi.yml