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

OpenAPI Specification

convert-experience-variations-api-openapi.yml Raw ↑
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