---
title: "List experiences"
method: GET
path: "/v25-10-beta/experiences-list"
tags: ["Fetch Experience List"]
---

# List experiences

`GET /v25-10-beta/experiences-list`

## Request

- Base URL: `https://api.intelligems.io`
- URL: `https://api.intelligems.io/v25-10-beta/experiences-list`
- Auth: API key in header `intelligems-access-token`
- TypeScript: <https://skmtc.dev/intelligems/apis/intelligems-external-api-v25-10-beta/docs/v25-10-beta/experiences-list/get.ts> (a function with typed inputs; its response is checked against the schema)

Retrieve a paginated list of experiences.

The response includes `experiencesList` plus the pagination fields `page`, `limit`, `total`, and `totalPages`.

### Query Parameters

All query parameters are optional.

- `limit` — integer, defaults to `20`
- `page` — integer (minimum `1`), defaults to `1`
- `status` — one of `started`, `paused`, `ended`, `pending`
- `category` — one of `experiment`, `personalization`
- `module` — filter by modification type, one of `content`, `checkout`, `postPurchase`, `pricing`, `merchandising`, `shipping`. Category-agnostic; omit to return all modules.

`offset` is not supported for this endpoint. Pagination is page-based (`page` + `limit`).

Each list item includes `history` — raw user-action records with broad action types (`saveExperience`, `duplicateExperience`, `archiveCampaign`, etc.) and full user objects.

List items also include `experienceActions` for lifecycle-only events (`start`, `pause`, `end`, `delete`, `reset`), but on this endpoint each entry carries only `id`, `experienceId`, `action`, and `actionTs` — **the `performedBy` email is not resolved here**. To get the performing user's email, call `GET /experiences/{experienceId}`, whose `experienceActions` entries include `performedBy`. For config-deploy diffs, see `?includeChangeLog=true` on `GET /experiences/{experienceId}`.

### Field differences vs `GET /experiences/{experienceId}`

List items **omit**: `experienceCustomMetrics`, `experienceIntegrations`, `experienceKeyMetrics`, `shippingTestMethodDefinitions`, and `shippingCarrierProvider`.

List items **additionally include**: `hasSchedule` and `history`, neither of which appears on the single-experience response. `hasSchedule` is a boolean flag only — the external API never returns the schedules themselves, and `includeSchedules` is not an accepted query parameter here (it is ignored if sent).

`variations` is present on both, but list items carry a reduced variation shape.

`experienceAnalysis` is nullable on list items — an experience with no analysis record returns `null` here, whereas `GET /experiences/{experienceId}` always returns the object.

**Rate Limit:** 50 requests per 30s window, refilling 25 tokens every 30s.

## Query parameters

- `category` 'experiment' | 'personalization': Filter by experience category. Omit to return all categories.
- `module` 'content' | 'checkout' | 'postPurchase' | 'pricing' | 'merchandising' | 'shipping': Filter by modification type / module (content, checkout, postPurchase, pricing, merchandising, shipping). Category-agnostic. Omit to return all modules.
- `status` 'pending' | 'started' | 'ended' | 'paused': Filter by lifecycle status. Omit to return all statuses.
- `limit` integer: Maximum number of experiences per page.
- `page` integer: 1-based page number for paginated results.

## Response `200`

OK

- object
  - `experiencesList` object[], required: Paginated array of experience summary items.
    - `archivedAtTs` number, nullable: Server-generated. Read-only. Unix timestamp in milliseconds. Null if not archived.
    - `audience` object, nullable: Visitor segmentation rules. Null means all visitors are eligible.
      - `id` string, uuid, required: Server-generated. Read-only.
      - `experienceId` string, uuid, required: References the parent experience.
      - `enabled` boolean, required: When false, audience rules are ignored and all visitors are eligible.
      - `excludeCurrency` object, required: Currency and geo-based visitor exclusion configuration.
        - `exclude` boolean, required: Whether currency/geo-based exclusion is active.
        - `currency` string, nullable, required: ISO 4217 currency code to include. Null disables currency-based exclusion.
        - `country` string: ISO country code to include visitors from.
        - `region` string: Region or state code to include visitors from.
        - `city` string: City name to include visitors from.
      - `wholesale` boolean, required: Controls whether wholesale (B2B) customers are included in or excluded from the experience.
      - `audienceType` 'common' | 'custom' | 'advanced': Complexity level of the targeting rules: common (prebuilt), custom (simple), or advanced (full expression trees).
      - `elseAction` 'experienceInclude' | 'experienceExclude' | 'experienceUnassigned' | 'assignVariation' | 'randomVariation' | 'leaveUnassigned', nullable, required: Fallback for visitors matching no filter: 'randomVariation' assigns randomly across variations (most common), 'assignVariation' forces a specific variation (set elseVariationId), 'experienceExclude' removes them from the experience entirely, 'experienceUnassigned' leaves them unassigned for now ('leaveUnassigned' is the older spelling and is stored as experienceUnassigned).
      - `elseVariationId` string, uuid, nullable: Variation to force-assign when elseAction is 'assignVariation'. Typically set to the control variation to default non-targeted visitors to baseline.
      - `elseExcludeFromAnalytics` boolean, required: When true, visitors who match no filter are tracked but excluded from analytics calculations.
      - `filters` object[], required: Ordered filter rules evaluated from lowest priority value first (0-indexed). First matching filter determines visitor treatment.
        - `id` string, uuid, required: Server-generated. Read-only.
        - `priority` integer, required: Evaluation order. 0-indexed. Filters with lower values are evaluated first.
        - `action` 'experienceInclude' | 'experienceExclude' | 'experienceUnassigned' | 'assignVariation' | 'randomVariation' | 'leaveUnassigned', nullable, required: What happens when a visitor matches this filter: 'assignVariation' forces a specific variation (set variationId), 'experienceExclude' removes from the experience, 'randomVariation' assigns randomly. 'experienceInclude' shows a personalization to the visitor and is valid only on personalizations, whose filters use experienceInclude, experienceExclude or experienceUnassigned and never a traffic split.
        - `filterType` 'utm' | 'url' | 'urlPath' | 'device' | 'visitor' | 'purchaseLikelihood' | 'jsExpression' | 'trafficSource' | 'country' | 'referrer' | 'cookie' | 'klaviyo' | 'landingPage', required: Category of targeting rule (e.g., UTM parameters, device type, visitor type).
        - `expression` object[], nullable: Boolean expression tree. Each node has either a 'query' (leaf condition) or 'operator' (logical combinator), not both.
          - `query` object
            - `key` string, required: Visitor attribute or parameter name to match (e.g., 'utm_source', 'device_type').
            - `value` string, required: Expected value to compare against the visitor's actual value for this key. Constrained by `type`: when type is 'device' this must be exactly 'any', 'mobile', or 'desktop'.
            - `filter` 'equals' | 'contains' | 'startsWith' | 'endsWith' | 'doesNotEqual' | 'doesNotContain' | 'doesNotStartWith' | 'doesNotEndWith' | 'isNull' | 'isNotNull' | 'regex', nullable: Comparison operator (e.g., equals, contains, startsWith).
            - `type` 'utm' | 'url' | 'urlPath' | 'device' | 'visitor' | 'purchaseLikelihood' | 'jsExpression' | 'trafficSource' | 'country' | 'referrer' | 'cookie' | 'klaviyo' | 'landingPage', required: Category of the parameter being matched. Determines which keys are valid. Use 'device' for device targeting (pair with key 'device', filter 'equals', and value 'any' | 'mobile' | 'desktop'); 'utm'/'url' for query params; 'urlPath' for the path; and 'country', 'visitor', 'trafficSource', 'referrer', 'cookie', 'landingPage', 'klaviyo', or 'jsExpression' for the rest.
          - `operator` 'and' | 'or' | 'start_paren' | 'end_paren'
        - `expressionType` 'common' | 'custom', nullable: Whether this uses prebuilt common rules or custom expression logic.
        - `variationId` string, uuid, nullable: Variation to assign when action is 'assignVariation'. References a variation in the parent experience.
        - `excludeFromAnalytics` boolean, required: When true, visitors matching this filter are excluded from analytics even if included in the experience.
      - `evaluationFrequency` number, nullable: How often (in seconds) to re-evaluate audience rules for a returning visitor. Controls targeting freshness.
    - `category` 'experiment' | 'personalization', required: Distinguishes A/B experiments (statistical testing) from personalization rules (deterministic targeting).
    - `createdAtTs` number, required: Server-generated. Read-only. Unix timestamp in milliseconds.
    - `currency` object, nullable: Currency settings for price display and analytics calculations. Null inherits store default.
      - `code` string, required: ISO 4217 currency code used for analytics and price calculations.
      - `country` string: ISO country code for locale-specific formatting.
      - `options` unknown
      - `symbol` string, required: Display symbol prepended to amounts (e.g., '$', '€').
      - `suffix` string: Text appended after amounts for postfix currencies (e.g., 'kr' in '100 kr').
    - `description` string, nullable: Internal note explaining what this experience tests.
    - `devicePreview` object, nullable: Device and path configuration for previewing the experience.
      - `device` 'any' | 'mobile' | 'desktop', required: Viewport to simulate when rendering the preview.
      - `path` string, required: Storefront URL path to load in the preview (e.g., '/products/example').
    - `endedAtTs` number, nullable, required: Server-generated. Read-only. Unix timestamp in milliseconds. Null if still active.
    - `experienceActions` object[], required: Server-generated. Read-only. Lifecycle state transitions (start, pause, end, delete, reset) recorded for this experience. On GET /experiences/{experienceId}, each entry includes a `performedBy` field with the triggering user's email, resolved from History records (may be null if unresolvable). Distinct from the list endpoint's raw `history` field, which contains broader user-action records.
      - `id` string, uuid, required
      - `experienceId` string, uuid, required
      - `action` 'start' | 'pause' | 'end' | 'delete' | 'reset', required
      - `actionTs` number, required
      - `performedBy` string, nullable: Email of the user who triggered this lifecycle event. Resolved from History records by matching action type and timestamp within a 5-minute window. Null if no matching History record is found, or if the record has no associated user. Currently only populated by GET /experiences/{experienceId}; list endpoints return null.
    - `experiencePageTargeting` object[], required: Rules controlling where this experience activates. Primarily URL/path rules, but the same expression format also supports 'device', 'country', 'visitor', 'trafficSource', 'referrer', and 'cookie'. Empty means all pages. To target the whole experience at a device (e.g. desktop only), prefer an `audience` filter over a page-targeting rule.
      - `id` string, uuid, required
      - `filter` 'equals' | 'contains' | 'startsWith' | 'endsWith' | 'doesNotEqual' | 'doesNotContain' | 'doesNotStartWith' | 'doesNotEndWith' | 'isNull' | 'isNotNull' | 'regex', nullable
      - `filterType` 'utm' | 'url' | 'device' | 'visitor' | 'jsExpression' | 'trafficSource' | 'country' | 'referrer' | 'cookie', required
      - `value` string, required
      - `order` number, required
      - `expression` object[], nullable
        - `query` object
          - `key` string, required: Visitor attribute or parameter name to match (e.g., 'utm_source', 'device_type').
          - `value` string, required: Expected value to compare against the visitor's actual value for this key. Constrained by `type`: when type is 'device' this must be exactly 'any', 'mobile', or 'desktop'.
          - `filter` 'equals' | 'contains' | 'startsWith' | 'endsWith' | 'doesNotEqual' | 'doesNotContain' | 'doesNotStartWith' | 'doesNotEndWith' | 'isNull' | 'isNotNull' | 'regex', nullable: Comparison operator (e.g., equals, contains, startsWith).
          - `type` 'utm' | 'url' | 'urlPath' | 'device' | 'visitor' | 'purchaseLikelihood' | 'jsExpression' | 'trafficSource' | 'country' | 'referrer' | 'cookie' | 'klaviyo' | 'landingPage', required: Category of the parameter being matched. Determines which keys are valid. Use 'device' for device targeting (pair with key 'device', filter 'equals', and value 'any' | 'mobile' | 'desktop'); 'utm'/'url' for query params; 'urlPath' for the path; and 'country', 'visitor', 'trafficSource', 'referrer', 'cookie', 'landingPage', 'klaviyo', or 'jsExpression' for the rest.
        - `operator` 'and' | 'or' | 'start_paren' | 'end_paren'
      - `experienceId` string, uuid
    - `experienceProductTargeting` object[], required: Product attribute rules controlling which products this experience applies to. Empty means all products.
      - `id` string, uuid, required: Server-generated. Read-only.
      - `experienceId` string, uuid, required: References the parent experience.
      - `target` 'productPage' | 'productCard', required: Storefront context where targeting rules are evaluated (product detail pages vs collection/search listings).
      - `expression` object[], nullable: Boolean expression tree of product attribute conditions. Each node has either a 'query' (leaf) or 'operator' (combinator).
        - `query` object
          - `key` 'productId' | 'collection' | 'tag' | 'price' | 'inventory', required: Product attribute to filter on. Determines which product property is evaluated.
          - `value` union, required: Expected value. String for text attributes (productId, collection, tag); number for numeric attributes (price, inventory).
            - string
            - number
          - `filter` 'includes' | 'doesNotInclude' | 'greaterThan' | 'lessThan', required: Comparison operator for evaluating the product attribute against the value.
          - `type` 'productId' | 'collection' | 'tag' | 'price' | 'inventory', required: Mirrors the key field. Determines attribute category for validation.
        - `operator` 'and' | 'or' | 'start_paren' | 'end_paren'
    - `id` string, uuid, required: Server-generated. Read-only.
    - `isDeleted` boolean: Whether this experience has been soft-deleted and hidden from default listings.
    - `isExternal` boolean, nullable: True if this experience was created and is managed via the external API rather than the dashboard.
    - `isPreview` boolean, required: True while in draft mode. Must be set to false before the experience can be started.
    - `lastUpdateTs` number, required: Server-generated. Read-only. Unix timestamp in milliseconds of the most recent modification.
    - `linkBaseUrl` string, nullable, required: Base URL for generating access links. Only populated when requiresLink is true.
    - `name` string, required: Display name shown in dashboards and reports.
    - `organizationId` string, uuid, required: Server-generated. Read-only. The Shopify store that owns this experience.
    - `pausedAtTs` number, nullable, required: Server-generated. Read-only. Unix timestamp in milliseconds. Null if not currently paused.
    - `productVariantCount` number, required: Server-generated. Read-only. Total product variants currently included in this experience.
    - `requiresLink` boolean, required: When true, visitors must use a special link to enter the experience instead of being auto-assigned.
    - `sourceAction` 'duplicate' | 'rollout', nullable: How this experience was derived from sourceExperienceId. Only present when sourceExperienceId is set.
    - `sourceExperienceId` string, uuid, nullable: Present when this experience was duplicated or rolled out from another. References the original.
    - `startedAtTs` number, nullable, required: Server-generated. Read-only. Unix timestamp in milliseconds. Null if never started.
    - `status` 'pending' | 'started' | 'ended' | 'paused', required: Server-managed lifecycle state. Transitions via start/pause/end actions: pending -> started -> paused/ended.
    - `testTypes` object, required: Server-generated. Read-only. Flags derived from 'type' indicating which variation capabilities are active.
      - `hasTestPricing` boolean, required: Server-generated. Read-only. True when price testing is active.
      - `hasTestShipping` boolean, required: Server-generated. Read-only. True when shipping rate testing is active.
      - `hasTestCampaign` boolean, required: Server-generated. Read-only. True when campaign/offer testing is active.
      - `hasTestContent` boolean, required: Server-generated. Read-only. True when any content variation type is enabled.
      - `hasTestContentUrl` boolean, required: Server-generated. Read-only. True when URL redirect variations are in use.
      - `hasTestContentAdvanced` boolean, required: Server-generated. Read-only. True when custom JS/CSS variations are in use.
      - `hasTestContentOnsite` boolean, required: Server-generated. Read-only. True when visual onsite edit variations are in use.
      - `hasTestContentTemplate` boolean, required: Server-generated. Read-only. True when Shopify template variations are in use.
      - `hasTestContentTheme` boolean, required: Server-generated. Read-only. True when Shopify theme variations are in use.
      - `hasTestOnsiteInjections` boolean, required: Server-generated. Read-only. True when CSS/JS injection variations are in use.
      - `hasTestCheckoutBlocks` boolean, required: Server-generated. Read-only. True when checkout block variations are in use.
      - `hasTestPostPurchase` boolean, required: Server-generated. Read-only. True when post-purchase upsell variations are in use.
      - `hasTestOnsiteUpsell` boolean, required: Server-generated. Read-only. True when onsite upsell components are in use.
    - `type` 'content/advanced' | 'content/onsiteEdits' | 'content/url' | 'content/theme' | 'content/template' | 'personalization' | 'personalization/offer' | 'pricing' | 'checkoutBlock' | 'postPurchase' | 'onsiteUpsell' | 'shipping' | 'sitewide', required: Determines which variation fields are relevant: content/onsiteEdits for DOM edits, content/advanced for CSS/JS injection, content/url for redirect split tests, content/theme for theme tests, content/template for template tests.
    - `hasSchedule` boolean, required
    - `history` object[], required
      - `id` string, uuid, required
      - `userId` string, uuid, nullable
      - `user` object, nullable
        - `id` string, uuid, required
        - `firstName` string, nullable
        - `lastName` string, nullable
        - `email` string, email, required
        - `organizationId` string, uuid, required
        - `isBlocked` boolean, required
        - `passwordResetRequired` boolean, required
        - `showInfoPopup` boolean, required
        - `userAlerts` object, nullable
          - `showAnalyticsReleaseDialog` boolean
          - `showPersonalizationsDialog` boolean
          - `showPersonalizationMigrateBanner` boolean
          - `showWrappedDialog` boolean
          - `showOpportunityAuditWelcome` boolean
          - `showSavedRecommendationNotice` boolean
          - `unseenOnDashboard` boolean
        - `showWelcome` boolean, required
        - `preferredName` string, nullable
        - `preferredEmail` string, nullable
        - `installer` boolean, required
        - `companyRole` string, nullable
        - `previousExperience` string, nullable
      - `experienceId` string, uuid, nullable
      - `action` 'startExperience' | 'pauseExperience' | 'endExperience' | 'saveExperience' | 'deleteExperience' | 'enableCampaign' | 'disableCampaign' | 'saveCampaign' | 'archiveCampaign' | 'confirmIntegration' | 'duplicateExperience' | 'rolloutExperience' | 'archiveExperience' | 'unArchiveExperience' | 'resetExperience', required
      - `source` 'internal' | 'external' | 'mcp' | 'shared_link', nullable
      - `lastUpdateTs` number, required
      - `createdAtTs` number, required
    - `previewPath` string, required
    - `variations` object[], required
      - `id` string, uuid, required: Server-generated. Read-only.
      - `experienceId` string, uuid, required: References the parent experience.
      - `name` string, required: Display name (e.g., 'Control', 'Variant A'). Unique within the experience.
      - `percentage` number, required: Traffic allocation weight. All percentages across sibling variations must sum to 100.
      - `isControl` boolean, required: The baseline variation all others are measured against. Exactly one per experience.
      - `order` integer, required: Display order in the analytics dashboard. 0-indexed.
      - `functionSyncError` boolean, required: Server-generated. Read-only. Indicates a sync failure with Shopify Functions for this variation's discount.
      - `testExperienceId` string, nullable: Links to another experience for advanced multi-experience configurations.
      - `offerId` string, uuid, nullable: Server-generated. Read-only. References the associated offer. Populated when offer is set.
      - `redirects` object[]: URL redirect rules for content/url experiences.
        - `id` string, uuid, required: Server-generated. Read-only.
        - `group` number, required: Numeric group for organizing related redirects. Redirects sharing an originUrl should share a group number.
        - `variationId` string, uuid, required: References the parent variation.
        - `originUrl` string, required: URL pattern matched against visitor page URLs. Matching behavior depends on the 'filter' field.
        - `destinationUrl` string, nullable: Target URL visitors are sent to. Used when redirectType is 'fullReplacement'.
        - `queryParams` object[], required: Key-value pairs appended to the destination URL as query parameters.
          - `key` string, required: Query parameter name appended to the destination URL.
          - `value` string, required: Query parameter value.
        - `skip` boolean, required: When true, this redirect is temporarily disabled.
        - `isThemeTest` boolean, required: True when this redirect tests alternate Shopify themes. Used with content/theme experiences.
        - `isTemplateTest` boolean, required: True when this redirect tests alternate Shopify templates. Used with content/template experiences.
        - `templateType` '404' | '' | 'article' | 'blog' | 'cart' | 'collection' | 'index' | 'list-collections' | 'page' | 'password' | 'product' | 'search', nullable: Shopify template type being tested (e.g., product, collection).
        - `templateSuffixes` string[], nullable, required: Alternate Shopify template suffixes being tested (e.g., 'alternate', 'new-layout').
        - `redirectOnce` boolean, required: When true, the redirect fires only once per visitor session to avoid redirect loops.
        - `filter` 'matchesExactly' | 'contains' | 'endsWith' | 'matchesRegex' | 'none', required: Matching strategy for originUrl (e.g., exact match, contains, endsWith, regex).
        - `find` string, nullable: Pattern to locate within the URL for partial replacement. Only used when redirectType is 'partialReplacement'.
        - `redirectType` 'fullReplacement' | 'partialReplacement', required: fullReplacement navigates to destinationUrl; partialReplacement swaps only the 'find' match within the current URL.
      - `checkoutBlockTypes` string[]
      - `offerDiscountApplicationType` 'tieredDiscount' | 'cartDiscount' | 'freeGift' | 'freeShipping' | 'buyXGetY' | '', nullable
      - `offerDiscountApplicationMethod` 'perItem' | 'perOrder', nullable
      - `offerShippingUnitDiscount` number, nullable
    - `experienceAnalysis` object, nullable, required
      - `analyticsViewType` 'test_orders_only' | 'sitewide_orders' | 'none', required: Scope of orders included in analytics results. Determines whether only tested products or all store orders are counted.
  - `page` number, required: 1-based page number returned for this result set.
  - `limit` number, required: Maximum number of experiences requested per page.
  - `total` number, required: Total number of matching experiences across all pages.
  - `totalPages` number, required: Total number of pages available for the current limit.

## Other responses

- `429`: Too Many Requests

## Changes

- **2026-11-06** `7b769b2f90b1`: 23 breaking, 11 warning, 41 info
  - `query` request parameter `limit` list-of-types was narrowed by removing types `number and string`
  - `query` request parameter `page` list-of-types was narrowed by removing types `number and string`
  - for the `query` request parameter `limit`, the type changed from no type to `integer`
  - for the `query` request parameter `page`, the type changed from no type to `integer`
  - …71 more

[Operation history](https://skmtc.dev/intelligems/apis/intelligems-external-api-v25-10-beta/changes/v25-10-beta/experiences-list/get.md)

---

[API](https://skmtc.dev/intelligems/apis/intelligems-external-api-v25-10-beta.md) - [All operations](https://skmtc.dev/intelligems/apis/intelligems-external-api-v25-10-beta/llms.txt) - [OpenAPI document](https://skmtc.dev/intelligems/apis/intelligems-external-api-v25-10-beta/revisions/7b769b2f90b1?raw)
