Convert Experiences API

Convert Experiences provides a couple different experiences types. A/B, Split URL, Multivariate (MVT), Deploys, A/A and Multi-page (funnel) testing. To learn more, see Six experience types in Convert Experiences.

OpenAPI Specification

convert-experiences-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Convert Accounts Experiences 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: Experiences
  description: Convert Experiences provides a couple different experiences types. A/B, Split URL, Multivariate (MVT), Deploys, A/A and Multi-page (funnel) testing. To learn more, see <a href="https://support.convert.com/hc/en-us/articles/204494049">Six experience types in Convert Experiences.</a>
paths:
  /accounts/{account_id}/projects/{project_id}/experiences:
    post:
      operationId: getExperiencesList
      summary: List experiences within a project
      description: 'Retrieves a list of all experiences (A/B tests, MVT, Split URL, Deployments, etc.) within a specific project.

        Supports filtering by status, type, tags, and other criteria. Pagination is also supported.

        The `include` parameter can fetch related data like `variations` or `goals`. The `expand` parameter can provide full objects for linked entities.

        The Knowledge Base article "The Experience Overview Screen" describes the UI equivalent.

        '
      tags:
      - Experiences
      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
      requestBody:
        $ref: '#/components/requestBodies/GetExperiencesListRequest'
      responses:
        '200':
          $ref: '#/components/responses/ExperiencesListResponse'
        default:
          $ref: '#/components/responses/ErrorResponse'
  /accounts/{account_id}/projects/{project_id}/experiences/{experience_id}:
    get:
      operationId: getExperience
      summary: Get details for a specific experience
      description: 'Retrieves comprehensive details for a single experience, identified by its `experience_id`.

        This includes its configuration (name, type, URL, status), associated audiences, locations, goals, variations, and integration settings.

        The `include` and `expand` parameters allow fetching more detailed related data.

        The Knowledge Base article "Experience Summary" describes the UI equivalent of this data.

        '
      tags:
      - Experiences
      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 be retrieved
        in: path
        required: true
        schema:
          type: integer
      - name: report_token
        in: header
        required: false
        description: Token to access the experience report in read-only mode.
        schema:
          type: string
      - name: include
        description: 'Array parameter that would mention extra fields to be included into the response; otherwise those fields would be excluded by default


          Read more in the section related to [Optional Fields](#tag/Optional-Fields)

          '
        in: query
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/ExperienceIncludeFields'
      - name: expand
        description: 'Specifies the list of objects which would be expanded in the response. Otherwise, only their id would be returned.


          Read more in the section related to [Expanding Fields](#tag/Expandable-Fields)

          '
        in: query
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/ExperienceExpandFields'
      responses:
        '200':
          $ref: '#/components/responses/ExperienceResponse'
        default:
          $ref: '#/components/responses/ErrorResponse'
  /accounts/{account_id}/projects/{project_id}/experiences/{experience_key}:
    get:
      operationId: getExperienceByKey
      summary: Get experience details by its unique key
      description: 'Retrieves comprehensive details for a single experience, identified by its user-defined `experience_key` instead of its numerical ID.

        This is useful when you have a human-readable key for an experience.

        Functionality and parameters are otherwise similar to getting an experience by ID.

        '
      tags:
      - Experiences
      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_key
        description: The key of the experience to be retrieved
        in: path
        required: true
        schema:
          type: string
      - name: include
        description: 'Array parameter that would mention extra fields to be included into the response; otherwise those fields would be excluded by default


          Read more in the section related to [Optional Fields](#tag/Optional-Fields)

          '
        in: query
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/ExperienceIncludeFields'
      - name: expand
        description: 'Specifies the list of objects which would be expanded in the response. Otherwise, only their id would be returned.


          Read more in the section related to [Expanding Fields](#tag/Expandable-Fields)

          '
        in: query
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/ExperienceExpandFields'
      responses:
        '200':
          $ref: '#/components/responses/ExperienceResponse'
        default:
          $ref: '#/components/responses/ErrorResponse'
  /accounts/{account_id}/projects/{project_id}/experiences/add:
    post:
      operationId: createExperience
      summary: Create a new experience
      description: 'Creates a new experience (e.g., A/B test, Split URL test, MVT, Deploy, A/A test, Multi-page Funnel) within a project.

        Requires defining the experience name, type, status (usually ''draft''), and the URL for the Visual Editor or original page.

        Variations, audiences, locations, goals, and other settings can be specified during creation.

        The Knowledge Base article "Create a New Experience" outlines the UI process.

        '
      tags:
      - Experiences
      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: include
        description: 'Specifies the list of optional objects which would be included in the response.


          Read more in the section related to [Expanding Fields](#tag/Optional-Fields)

          '
        in: query
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/ExperienceIncludeFields'
      - name: expand
        description: 'Specifies the list of objects which would be expanded in the response. Otherwise, only their id would be returned.


          Read more in the section related to [Expanding Fields](#tag/Expandable-Fields)

          '
        in: query
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/ExperienceExpandFields'
      requestBody:
        $ref: '#/components/requestBodies/CreateExperienceRequest'
      responses:
        '201':
          $ref: '#/components/responses/ExperienceResponse'
        default:
          $ref: '#/components/responses/ErrorResponse'
  /accounts/{account_id}/projects/{project_id}/experiences/{experience_id}/clone:
    post:
      operationId: cloneExperience
      summary: Clone an existing experience
      description: 'Creates a new experience as an identical copy of an existing one (specified by `experience_id`).

        This is useful for iterating on a previous test or using an existing experience as a template.

        The cloned experience starts in ''draft'' status and does not copy historical report data.

        The Knowledge Base article "How to Clone an Experiment?" describes this.

        '
      tags:
      - Experiences
      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 be cloned
        in: path
        required: true
        schema:
          type: integer
      - name: include
        description: 'Specifies the list of optional objects which would be included in the response.


          Read more in the section related to [Expanding Fields](#tag/Optional-Fields)

          '
        in: query
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/ExperienceIncludeFields'
      - name: expand
        description: 'Specifies the list of objects which would be expanded in the response. Otherwise, only their id would be returned.


          Read more in the section related to [Expanding Fields](#tag/Expandable-Fields)

          '
        in: query
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/ExperienceExpandFields'
      requestBody:
        $ref: '#/components/requestBodies/CloneExperienceRequest'
      responses:
        '201':
          $ref: '#/components/responses/ExperienceResponse'
        default:
          $ref: '#/components/responses/ErrorResponse'
  /accounts/{account_id}/projects/{project_id}/experiences/{experience_id}/update:
    post:
      operationId: updateExperience
      summary: Update an existing experience
      description: 'Modifies the configuration of an existing experience.

        This can include changing its name, description, status (e.g., from ''draft'' to ''active'', or ''active'' to ''paused''), URL, traffic distribution, audiences, locations, goals, variations, and integration settings.

        The Knowledge Base article "How Can I Change Variations After Experiment Started?" notes that variations cannot be added/removed after start, but other settings can be updated.

        '
      tags:
      - Experiences
      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: include
        description: 'Specifies the list of optional objects which would be included in the response.


          Read more in the section related to [Expanding Fields](#tag/Optional-Fields)

          '
        in: query
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/ExperienceIncludeFields'
      - name: expand
        description: 'Specifies the list of objects which would be expanded in the response. Otherwise, only their id would be returned.


          Read more in the section related to [Expanding Fields](#tag/Expandable-Fields)

          '
        in: query
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/ExperienceExpandFields'
      requestBody:
        $ref: '#/components/requestBodies/UpdateExperienceRequest'
      responses:
        '200':
          $ref: '#/components/responses/ExperienceResponse'
        default:
          $ref: '#/components/responses/ErrorResponse'
  /accounts/{account_id}/projects/{project_id}/experiences/{experience_id}/delete:
    delete:
      operationId: deleteExperience
      summary: Delete an experience
      description: 'Permanently removes an existing experience and all its associated data from the project.

        This action is irreversible. It''s generally recommended to archive experiences instead of deleting them to preserve historical data.

        The Knowledge Base article "How Do I Archive / Delete an Experience?" highlights this.

        '
      tags:
      - Experiences
      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
        in: path
        required: true
        description: ID of the experience to be delete
        schema:
          type: integer
      responses:
        '200':
          $ref: '#/components/responses/SuccessResponse'
        default:
          $ref: '#/components/responses/ErrorResponse'
  /accounts/{account_id}/projects/{project_id}/experiences/{experience_id}/report_token:
    post:
      operationId: getReportToken
      summary: Manage report access token for an experience
      description: 'Generates, regenerates, or deletes a unique token that allows read-only access to an experience''s report.

        This is useful for sharing report data with stakeholders who do not have a Convert account or full project access.

        The token has an expiration time.

        '
      tags:
      - Experiences
      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: ID of the Experience
        in: path
        required: true
        schema:
          type: integer
      requestBody:
        $ref: '#/components/requestBodies/ExperienceReportTokenRequest'
      responses:
        '200':
          $ref: '#/components/responses/ExperienceReportTokenResponse'
        default:
          $ref: '#/components/responses/ErrorResponse'
  /accounts/{account_id}/projects/{project_id}/experiences/{experience_id}/livedata:
    post:
      operationId: getExperienceLiveData
      summary: Get live tracking events for a specific experience
      description: 'Retrieves the last 100 tracking events (views, conversions, revenue) specifically for the given experience.

        Useful for real-time monitoring and QA of a single active experience. Supports filtering by event type and goals.

        The Knowledge Base article "Live Logs for Projects and Experiments in Convert" describes this feature.

        '
      tags:
      - Experiences
      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
        in: path
        required: true
        description: ID of the project into which the experience is stored
        schema:
          type: integer
      - name: experience_id
        in: path
        required: true
        description: ID of the Experience
        schema:
          type: integer
      requestBody:
        $ref: '#/components/requestBodies/GetExperienceLiveDataRequest'
      responses:
        '200':
          $ref: '#/components/responses/LiveDataEventsListResponse'
        default:
          $ref: '#/components/responses/ErrorResponse'
  /accounts/{account_id}/projects/{project_id}/experiences/{experience_id}/change-history:
    post:
      operationId: getExperienceHistory
      summary: Get change history for a specific experience
      description: 'Retrieves a historical log of all changes made to a specific experience.

        This includes modifications to its settings, variations, audiences, goals, status, etc.

        Provides an audit trail for the lifecycle of an experience, filterable by date and user.

        The Knowledge Base article "Track User Changes with Change History" details this.

        '
      tags:
      - Experiences
      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
        in: path
        required: true
        description: ID of the project to which save/retrieved data is connected
        schema:
          type: integer
      - name: experience_id
        in: path
        required: true
        description: ID of the Experience
        schema:
          type: integer
      requestBody:
        $ref: '#/components/requestBodies/GetExperienceHistoryRequest'
      responses:
        '200':
          $ref: '#/components/responses/ChangeHistoryListResponse'
        default:
          $ref: '#/components/responses/ErrorResponse'
  /accounts/{account_id}/projects/{project_id}/experiences/{experience_id}/trigger-screenshots:
    post:
      operationId: triggerExperienceScreenshots
      summary: Trigger screenshot generation for experience variations
      description: 'Initiates the process of generating or regenerating screenshots for the variations of a specified experience.

        These screenshots are displayed in the Convert UI to help visualize the changes made in each variation.

        The Knowledge Base article "Whitelist IPs for Screenshot Previews" is related as it lists IPs our service uses.

        '
      tags:
      - Experiences
      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
        in: path
        required: true
        description: ID of the project to which save/retrieved data is connected
        schema:
          type: integer
      - name: experience_id
        in: path
        required: true
        description: ID of the Experience
        schema:
          type: integer
      requestBody:
        $ref: '#/components/requestBodies/TriggerExperienceScreenshotsRequest'
      responses:
        '200':
          $ref: '#/components/responses/SuccessResponse'
        default:
          $ref: '#/components/responses/ErrorResponse'
  /accounts/{account_id}/projects/{project_id}/experiences/bulk-update:
    post:
      operationId: bulkExperiencesUpdate
      summary: Update multiple experiences at once
      description: 'Allows for changing the status (e.g., activate, pause, archive) of multiple experiences within a project simultaneously.

        Requires a list of experience IDs and the target status.

        The Knowledge Base article "Bulk Actions on Experiences" describes this UI feature.

        '
      tags:
      - Experiences
      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
      requestBody:
        $ref: '#/components/requestBodies/BulkUpdateExperiencesRequest'
      responses:
        '200':
          $ref: '#/components/responses/BulkSuccessResponse'
        default:
          $ref: '#/components/responses/ErrorResponse'
  /accounts/{account_id}/projects/{project_id}/experiences/bulk-delete:
    post:
      operationId: bulkExperiencesDelete
      summary: Delete multiple experiences at once
      description: 'Permanently removes multiple experiences from a project in a single operation.

        Requires a list of experience IDs. This action is irreversible.

        The Knowledge Base article "Bulk Actions on Experiences" describes this UI feature.

        '
      tags:
      - Experiences
      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
      requestBody:
        $ref: '#/components/requestBodies/BulkDeleteExperiencesRequest'
      responses:
        '200':
          $ref: '#/components/responses/BulkSuccessResponse'
        default:
          $ref: '#/components/responses/ErrorResponse'
components:
  schemas:
    ReportingSegmentsCountry:
      type: string
      description: 'The two-letter ISO 3166-1 alpha-2 country code of the visitor, determined by IP geolocation.

        Used for segmenting reports by country to analyze geographical performance.

        Knowledge Base: "How Do I Target by Geographic Location Like City, Region or Country?".

        '
      maxLength: 2
      minLength: 2
    ExperienceCreateUpdateLocations:
      type: array
      description: A list of Location IDs to associate with the experience. The experience will run on pages/conditions defined by these locations (according to `settings.matching_options.locations`).
      items:
        type: integer
    SimpleLocationExpandable:
      anyOf:
      - type: integer
        description: Location ID
      - $ref: '#/components/schemas/SimpleLocation'
    ReportingSegmentsSource:
      type: string
      description: 'The traffic source that brought the visitor to the site (e.g., ''google'', ''facebook.com'', ''direct'', ''newsletter'').

        Derived from `utm_source` URL parameters or the HTTP referrer. Enables report segmentation by traffic source.

        Knowledge Base: "How Do You Fill Medium, Keyword and Source Name?".

        '
      enum:
      - campaign
      - search
      - referral
      - direct
      - ai_tool
    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'
    ReportingSegmentsFilters:
      type: object
      description: 'A collection of filters used to segment experience report data based on various visitor attributes and traffic sources.

        Applying these filters allows for deeper analysis of how different user groups interact with experience variations.

        Knowledge Base: "Using Basic and Advanced Post segmentation".

        '
      properties:
        devices:
          type: array
          items:
            $ref: '#/components/schemas/ReportingSegmentsDeviceCategories'
          nullable: true
        browsers:
          description: Filter report data for visitors using one or more specified web browsers.
          type: array
          items:
            $ref: '#/components/schemas/ReportingSegmentsBrowser'
          nullable: true
        countries:
          description: Filter report data for visitors from one or more specified countries (using 2-letter ISO codes).
          type: array
          items:
            $ref: '#/components/schemas/ReportingSegmentsCountry'
          nullable: true
        visitor_types:
          description: Filter report data for 'new' or 'returning' visitors.
          type: array
          items:
            $ref: '#/components/schemas/ReportingSegmentsVisitorType'
          nullable: true
        campaigns:
          description: Filter report data for visitors attributed to one or more specified marketing campaign names (from `utm_campaign`).
          type: array
          items:
            $ref: '#/components/schemas/ReportingSegmentsCampaign'
          nullable: true
        custom_segments:
          description: Filter report data for visitors belonging to one or more specified custom Convert Audience segments (by segment ID).
          type: array
          items:
            $ref: '#/components/schemas/ReportingSegmentsCustomSegment'
          nullable: true
        sources:
          description: Filter report data for visitors from one or more specified traffic sources (e.g., 'direct', 'search', 'referral').
          type: array
          items:
            $ref: '#/components/schemas/ReportingSegmentsSource'
          nullable: true
    VisitorTypeMatchRulesTypes:
      type: string
      enum:
      - visitor_type
    LocationTriggerTypes:
      type: string
      default: upon_run
      description: 'Specifies the mechanism that activates an experience when its location rules are met:

        - `upon_run`: (Default) The experience activates as soon as the Convert tracking script loads and evaluates that the visitor matches the location''s rules (e.g., URL match). This is the standard behavior for most A/B tests.

        - `manual`: The experience only activates when explicitly triggered by a JavaScript call (`window._conv_q.push({ what: ''triggerLocation'', params: { locationId: ''...'' } })`). Gives precise programmatic control over activation.

        - `dom_element`: The experience activates upon a specific user interaction (e.g., ''click'', ''hover'', ''in_view'', ''change'') with a defined DOM element (identified by a CSS `selector`). Useful for testing changes related to interactive elements.

        - `callback`: The experience activates when a custom JavaScript `callback` function (provided in `js`) calls the `activate()` function passed to it. Allows for complex asynchronous activation logic, e.g., after an API response or a specific SPA state change.

        Note: For

# --- truncated at 32 KB (240 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/convert/refs/heads/main/openapi/convert-experiences-api-openapi.yml